]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
Merge remote-tracking branch 'mfischer/tar' into next
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 2 Dec 2014 22:36:04 +0000 (23:36 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 2 Dec 2014 22:36:04 +0000 (23:36 +0100)
510 files changed:
config/cfgroot/header.pl
config/cfgroot/lang.pl
config/dracut/dracut.conf [new file with mode: 0644]
config/etc/fstab [deleted file]
config/firewall/rules.pl
config/grub/grub.conf [deleted file]
config/grub/ipfire.xpm.gz [deleted file]
config/grub2/default [new file with mode: 0644]
config/grub2/splash.png [new file with mode: 0644]
config/install/fstab [deleted file]
config/install/group [deleted file]
config/install/halt [deleted file]
config/install/hosts [deleted file]
config/install/nsswitch.conf [deleted file]
config/install/passwd [deleted file]
config/install/profile [deleted file]
config/install/rc_installer [deleted file]
config/install/shells [deleted file]
config/kernel/kernel.config.armv5tel-ipfire-kirkwood
config/kernel/kernel.config.armv5tel-ipfire-multi
config/kernel/kernel.config.armv5tel-ipfire-rpi
config/kernel/kernel.config.i586-ipfire
config/kernel/kernel.config.i586-ipfire-pae
config/rootfiles/common/armv5tel/dracut [deleted file]
config/rootfiles/common/armv5tel/glibc
config/rootfiles/common/armv5tel/initscripts
config/rootfiles/common/armv5tel/linux-headers
config/rootfiles/common/armv5tel/linux-initrd-kirkwood [new file with mode: 0644]
config/rootfiles/common/armv5tel/linux-initrd-multi [new file with mode: 0644]
config/rootfiles/common/armv5tel/linux-initrd-rpi [new file with mode: 0644]
config/rootfiles/common/armv5tel/linux-kirkwood
config/rootfiles/common/armv5tel/linux-multi
config/rootfiles/common/armv5tel/linux-rpi
config/rootfiles/common/armv5tel/util-linux
config/rootfiles/common/bash
config/rootfiles/common/cmake
config/rootfiles/common/configroot
config/rootfiles/common/coreutils
config/rootfiles/common/dracut [new file with mode: 0644]
config/rootfiles/common/fcron
config/rootfiles/common/hostname
config/rootfiles/common/i586/dracut [deleted file]
config/rootfiles/common/i586/glibc
config/rootfiles/common/i586/grub
config/rootfiles/common/i586/initscripts
config/rootfiles/common/i586/linux
config/rootfiles/common/i586/linux-headers
config/rootfiles/common/i586/linux-initrd [new file with mode: 0644]
config/rootfiles/common/i586/linux-initrd-pae [new file with mode: 0644]
config/rootfiles/common/i586/util-linux
config/rootfiles/common/installer [new file with mode: 0644]
config/rootfiles/common/libcap
config/rootfiles/common/libsmooth [new file with mode: 0644]
config/rootfiles/common/lvm2 [new file with mode: 0644]
config/rootfiles/common/mdadm [moved from config/rootfiles/packages/mdadm with 55% similarity]
config/rootfiles/common/mktemp [deleted file]
config/rootfiles/common/multipath-tools [new file with mode: 0644]
config/rootfiles/common/newt
config/rootfiles/common/parted [moved from config/rootfiles/packages/parted with 100% similarity]
config/rootfiles/common/patch
config/rootfiles/common/pigz [new file with mode: 0644]
config/rootfiles/common/screen
config/rootfiles/common/setup
config/rootfiles/common/slang
config/rootfiles/common/tzdata
config/rootfiles/common/xfsprogs [moved from config/rootfiles/packages/xfsprogs with 98% similarity]
config/rootfiles/core/86/exclude [new file with mode: 0644]
config/rootfiles/core/86/filelists/armv5tel/initscripts [new symlink]
config/rootfiles/core/86/filelists/armv5tel/linux-kirkwood [new symlink]
config/rootfiles/core/86/filelists/armv5tel/linux-multi [new symlink]
config/rootfiles/core/86/filelists/armv5tel/linux-rpi [new symlink]
config/rootfiles/core/86/filelists/coreutils [new symlink]
config/rootfiles/core/86/filelists/dracut [new symlink]
config/rootfiles/core/86/filelists/files [new file with mode: 0644]
config/rootfiles/core/86/filelists/i586/glibc [new symlink]
config/rootfiles/core/86/filelists/i586/grub [new symlink]
config/rootfiles/core/86/filelists/i586/initscripts [new symlink]
config/rootfiles/core/86/filelists/i586/linux [new symlink]
config/rootfiles/core/86/filelists/i586/linux-initrd [new symlink]
config/rootfiles/core/86/filelists/libcap [new symlink]
config/rootfiles/core/86/filelists/libsmooth [new symlink]
config/rootfiles/core/86/filelists/lvm2 [new symlink]
config/rootfiles/core/86/filelists/mdadm [new symlink]
config/rootfiles/core/86/filelists/misc-progs [new symlink]
config/rootfiles/core/86/filelists/multipath-tools [new symlink]
config/rootfiles/core/86/filelists/newt [new symlink]
config/rootfiles/core/86/filelists/openvpn [new symlink]
config/rootfiles/core/86/filelists/parted [new symlink]
config/rootfiles/core/86/filelists/patch [new symlink]
config/rootfiles/core/86/filelists/pigz [new symlink]
config/rootfiles/core/86/filelists/setup [new symlink]
config/rootfiles/core/86/filelists/slang [new symlink]
config/rootfiles/core/86/filelists/strongswan [new symlink]
config/rootfiles/core/86/filelists/tzdata [new symlink]
config/rootfiles/core/86/filelists/xfsprogs [new symlink]
config/rootfiles/core/86/meta [new file with mode: 0644]
config/rootfiles/core/86/update.sh [new file with mode: 0644]
config/rootfiles/core/87/exclude [new file with mode: 0644]
config/rootfiles/core/87/filelists/fcron [new symlink]
config/rootfiles/core/87/filelists/file [new symlink]
config/rootfiles/core/87/filelists/files [new file with mode: 0644]
config/rootfiles/core/87/filelists/gnupg [new symlink]
config/rootfiles/core/87/filelists/grep [new symlink]
config/rootfiles/core/87/filelists/hdparm [new symlink]
config/rootfiles/core/87/filelists/screen [new symlink]
config/rootfiles/core/87/meta [new file with mode: 0644]
config/rootfiles/core/87/update.sh [new file with mode: 0644]
config/rootfiles/installer/coreutils [deleted symlink]
config/rootfiles/installer/dhcpcd [deleted symlink]
config/rootfiles/installer/e2fsprogs [deleted symlink]
config/rootfiles/installer/files [deleted file]
config/rootfiles/installer/findutils [deleted symlink]
config/rootfiles/installer/gawk [deleted symlink]
config/rootfiles/installer/glibc [deleted symlink]
config/rootfiles/installer/grep [deleted symlink]
config/rootfiles/installer/gzip [deleted symlink]
config/rootfiles/installer/hwdata [deleted symlink]
config/rootfiles/installer/iproute2 [deleted symlink]
config/rootfiles/installer/kbd [deleted symlink]
config/rootfiles/installer/libidn [deleted symlink]
config/rootfiles/installer/libusb [deleted symlink]
config/rootfiles/installer/misc-progs [deleted file]
config/rootfiles/installer/ncurses [deleted symlink]
config/rootfiles/installer/newt [deleted symlink]
config/rootfiles/installer/openssl [deleted symlink]
config/rootfiles/installer/parted [deleted symlink]
config/rootfiles/installer/pciutils [deleted symlink]
config/rootfiles/installer/pcmciautils [deleted symlink]
config/rootfiles/installer/pcre [deleted symlink]
config/rootfiles/installer/popt [deleted symlink]
config/rootfiles/installer/reboot [deleted file]
config/rootfiles/installer/reiserfsprogs [deleted symlink]
config/rootfiles/installer/sed [deleted symlink]
config/rootfiles/installer/slang [deleted symlink]
config/rootfiles/installer/sysfsutils [deleted symlink]
config/rootfiles/installer/tar [deleted symlink]
config/rootfiles/installer/usbutils [deleted symlink]
config/rootfiles/installer/util-linux [deleted symlink]
config/rootfiles/installer/vim [deleted symlink]
config/rootfiles/installer/wget [deleted symlink]
config/rootfiles/installer/xz [deleted symlink]
config/rootfiles/installer/zlib [deleted symlink]
config/rootfiles/packages/linux-pae
config/rootfiles/packages/tmux [new file with mode: 0644]
config/syslinux/syslinux.cfg
config/syslinux/unattended.conf [deleted file]
config/u-boot/boot.scr
config/u-boot/boot.script
config/xen-image/README
doc/language_missings
langs/de/install/lang_de.c [deleted file]
langs/en/install/lang_en.c [deleted file]
langs/es/install/lang_es.c [deleted file]
langs/fr/install/lang_fr.c [deleted file]
langs/it/cgi-bin/it.pl [new file with mode: 0644]
langs/list
langs/nl/install/lang_nl.c [deleted file]
langs/pl/install/lang_pl.c [deleted file]
langs/ru/install/lang_ru.c [deleted file]
langs/tr/install/lang_tr.c [deleted file]
lfs/bash
lfs/cdrom
lfs/compat-drivers [deleted file]
lfs/coreutils
lfs/cryptodev
lfs/cyrus-imapd
lfs/dracut
lfs/e1000e
lfs/fcron
lfs/file
lfs/fireinfo
lfs/flash-images
lfs/gcc
lfs/glibc
lfs/gnupg
lfs/grep
lfs/grub
lfs/hdparm
lfs/icinga
lfs/igb
lfs/initrd [deleted file]
lfs/initscripts
lfs/installer
lfs/ixgbe [moved from lfs/e1000 with 85% similarity]
lfs/libsmooth [new file with mode: 0644]
lfs/linux
lfs/linux-initrd [new file with mode: 0644]
lfs/lvm2 [moved from lfs/mktemp with 88% similarity]
lfs/mISDN [deleted file]
lfs/mdadm
lfs/misc-progs
lfs/multipath-tools [moved from lfs/r8168 with 78% similarity]
lfs/nagios
lfs/newt
lfs/openvpn
lfs/patch
lfs/pigz [new file with mode: 0644]
lfs/r8101 [deleted file]
lfs/r8169 [deleted file]
lfs/samba
lfs/screen
lfs/setup
lfs/slang
lfs/squid-accounting
lfs/squidclamav
lfs/stage2
lfs/strongswan
lfs/tmux [moved from lfs/kvm-kmod with 81% similarity]
lfs/tzdata
lfs/udev
lfs/v4l-dvb [deleted file]
lfs/xfsprogs
make.sh
src/dracut/dracut.conf [deleted file]
src/dracut/switch_root.c [deleted file]
src/initscripts/init.d/console
src/initscripts/init.d/dhcrelay [changed mode: 0755->0644]
src/initscripts/init.d/firewall
src/initscripts/init.d/firstsetup
src/initscripts/init.d/fsresize
src/initscripts/init.d/mdadm [deleted file]
src/initscripts/init.d/mounttmpfs [new file with mode: 0644]
src/initscripts/init.d/partresize
src/initscripts/init.d/tmpfs
src/install+setup/install/config.c [deleted file]
src/install+setup/install/install.h [deleted file]
src/install+setup/install/main.c [deleted file]
src/install+setup/install/mountsource.sh [deleted file]
src/install+setup/install/unattended.c [deleted file]
src/install+setup/libsmooth/langs.h.temp [deleted file]
src/install+setup/libsmooth/libsmooth.h [deleted file]
src/install+setup/setup/setup.h [deleted file]
src/installer/.tx/config [new file with mode: 0644]
src/installer/Makefile.am [new file with mode: 0644]
src/installer/autogen.sh [new file with mode: 0755]
src/installer/configure.ac [new file with mode: 0644]
src/installer/downloadsource.sh [moved from src/install+setup/install/downloadsource.sh with 60% similarity]
src/installer/dracut-module/70-dhcpcd.exe [new file with mode: 0755]
src/installer/dracut-module/fake-root.sh [new file with mode: 0644]
src/installer/dracut-module/module-setup.sh [new file with mode: 0755]
src/installer/dracut-module/run-installer.sh [new file with mode: 0644]
src/installer/execute-postinstall.sh [moved from src/install+setup/libsmooth/makelangs.pl with 57% similarity]
src/installer/hw.c [new file with mode: 0644]
src/installer/hw.h [new file with mode: 0644]
src/installer/m4/attributes.m4 [new file with mode: 0644]
src/installer/main.c [new file with mode: 0644]
src/installer/mountdest.sh [moved from src/install+setup/install/mountdest.sh with 100% similarity]
src/installer/po/LINGUAS [new file with mode: 0644]
src/installer/po/Makevars [new file with mode: 0644]
src/installer/po/POTFILES.in [new file with mode: 0644]
src/installer/po/ar.po [new file with mode: 0644]
src/installer/po/ca.po [new file with mode: 0644]
src/installer/po/cs_CZ.po [new file with mode: 0644]
src/installer/po/da.po [new file with mode: 0644]
src/installer/po/de.po [new file with mode: 0644]
src/installer/po/el_GR.po [new file with mode: 0644]
src/installer/po/es.po [new file with mode: 0644]
src/installer/po/fa.po [new file with mode: 0644]
src/installer/po/fr.po [new file with mode: 0644]
src/installer/po/hu.po [new file with mode: 0644]
src/installer/po/id.po [new file with mode: 0644]
src/installer/po/it.po [new file with mode: 0644]
src/installer/po/ja.po [new file with mode: 0644]
src/installer/po/km_KH.po [new file with mode: 0644]
src/installer/po/nl.po [new file with mode: 0644]
src/installer/po/pl.po [new file with mode: 0644]
src/installer/po/pt_BR.po [new file with mode: 0644]
src/installer/po/pt_PT.po [new file with mode: 0644]
src/installer/po/ro_RO.po [new file with mode: 0644]
src/installer/po/ru.po [new file with mode: 0644]
src/installer/po/sk.po [new file with mode: 0644]
src/installer/po/sq.po [new file with mode: 0644]
src/installer/po/sv.po [new file with mode: 0644]
src/installer/po/th.po [new file with mode: 0644]
src/installer/po/tk.po [new file with mode: 0644]
src/installer/po/tr.po [new file with mode: 0644]
src/installer/po/uk.po [new file with mode: 0644]
src/installer/po/uz@Latn.po [new file with mode: 0644]
src/installer/po/vi.po [new file with mode: 0644]
src/installer/po/zh.po [new file with mode: 0644]
src/installer/start-networking.sh [moved from src/install+setup/install/Makefile with 62% similarity]
src/libsmooth/Makefile [moved from src/install+setup/libsmooth/Makefile with 100% similarity]
src/libsmooth/Makefile.am [new file with mode: 0644]
src/libsmooth/autogen.sh [new file with mode: 0755]
src/libsmooth/configure.ac [new file with mode: 0644]
src/libsmooth/libsmooth.h [new file with mode: 0644]
src/libsmooth/libsmooth.pc.in [new file with mode: 0644]
src/libsmooth/m4/attributes.m4 [new file with mode: 0644]
src/libsmooth/main.c [moved from src/install+setup/libsmooth/main.c with 58% similarity]
src/libsmooth/varval.c [moved from src/install+setup/libsmooth/varval.c with 100% similarity]
src/misc-progs/Makefile
src/paks/linux-pae/install.sh
src/paks/linux-pae/uninstall.sh
src/paks/linux-pae/update.sh
src/patches/Pound-2.6-reneg-ciphers-altnames-nosslv2.patch [deleted file]
src/patches/compat-drivers-3.8-1-u-kref_get_unless_zero.patch [deleted file]
src/patches/compat-wireless-2.6.34-usbnet_compile.patch [deleted file]
src/patches/compat-wireless-2.6.39_kfifo_module_info.patch [deleted file]
src/patches/compat-wireless-3.5-build_ath5k_only_with_pci.patch [deleted file]
src/patches/compat-wireless-3.5-libertas_uap.patch [deleted file]
src/patches/compat-wireless_codel-avoid-a-nul-rec_inv_sqrt.patch [deleted file]
src/patches/coreutils-5.96-futimes.patch [deleted file]
src/patches/coreutils-5.96-i18n-1.patch [deleted file]
src/patches/coreutils-5.96-rename-tee.patch [deleted file]
src/patches/coreutils-5.96-suppress_uptime_kill_su-1.patch [deleted file]
src/patches/coreutils-5.96-uname-1.patch [deleted file]
src/patches/dhcp-3.1_linux3.patch [deleted file]
src/patches/dracut-006_add_run_dir.patch [deleted file]
src/patches/dracut-006_lzma.patch [deleted file]
src/patches/dracut-006_remove_cdrom_wait.patch [deleted file]
src/patches/dracut-006_remove_scsi_wait.patch [deleted file]
src/patches/dracut-038-always-enable-mdraid.patch [new file with mode: 0644]
src/patches/dracut-init_start_ipfireinstaller.patch [deleted file]
src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch [new file with mode: 0644]
src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch [new file with mode: 0644]
src/patches/glibc-arm-dont-use-swp.patch [deleted file]
src/patches/grub-2.00_disable_vga_fallback.patch [new file with mode: 0644]
src/patches/grub-gentoo-14.patch [deleted file]
src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch [deleted file]
src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch [deleted file]
src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch [deleted file]
src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch [deleted file]
src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch [deleted file]
src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch [deleted file]
src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch [deleted file]
src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch [deleted file]
src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch [deleted file]
src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch [deleted file]
src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch [deleted file]
src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch [deleted file]
src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch [deleted file]
src/patches/kernel/omap/beagle/expansion/0011-WIP-Beagle-expansion-extend-spidev-to-uart2.patch [deleted file]
src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch [deleted file]
src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch [deleted file]
src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch [deleted file]
src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch [deleted file]
src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch [deleted file]
src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch [deleted file]
src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch [deleted file]
src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch [deleted file]
src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch [deleted file]
src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch [deleted file]
src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch [deleted file]
src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch [deleted file]
src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch [deleted file]
src/patches/kernel/wandboard/dts/0001-imx6qdl-wandboard-dts-backport.patch [deleted file]
src/patches/kernel/wandboard/dts/0002-ARM-dts-imx6qdl-wandboard-add-gpio-lines-to-wandboar.patch [deleted file]
src/patches/kernel/wandboard/dts/0003-ARM-dts-imx6qdl-wandboard-Add-support-for-i2c1.patch [deleted file]
src/patches/kernel/wandboard/dts/0004-ARM-dts-wandboard-add-binding-for-wand-rfkill-driver.patch [deleted file]
src/patches/kernel/wandboard/dts/0005-ARM-dts-imx6qdl-add-pcie-device-node.patch [deleted file]
src/patches/kernel/wandboard/imx/0001-i2c-imx-retry-on-NAK.patch [deleted file]
src/patches/kernel/wandboard/imx/0002-i.MX6-Wandboard-add-CKO1-clock-output.patch [deleted file]
src/patches/kernel/wandboard/imx/0003-thermal-add-imx-thermal-driver-support.patch [deleted file]
src/patches/kernel/wandboard/imx/0004-ARM-i.MX6-Wandboard-add-wifi-bt-rfkill-driver.patch [deleted file]
src/patches/kernel/wandboard/imx/0005-Add-IMX6Q-AHCI-support.patch [deleted file]
src/patches/kernel/wandboard/imx/0006-imx-Add-IMX53-AHCI-support.patch [deleted file]
src/patches/kernel/wandboard/imx/0007-imx6-enable-sata-clk-if-SATA_AHCI_PLATFORM.patch [deleted file]
src/patches/kernel/wandboard/imx/0008-ARM-imx6q-update-the-sata-bits-definitions-of-gpr13.patch [deleted file]
src/patches/kernel/wandboard/imx/0009-ahci_imx-add-ahci-sata-support-on-imx-platforms.patch [deleted file]
src/patches/kernel/wandboard/imx/0010-ahci_imx-depend-on-CONFIG_MFD_SYSCON.patch [deleted file]
src/patches/kernel/wandboard/imx/0011-add-pcie-designware.patch [deleted file]
src/patches/kernel/wandboard/imx/0012-pcie-backport-fixes.patch [deleted file]
src/patches/kernel/wandboard/imx/0013-of-pci-Provide-support-for-parsing-PCI-DT-ranges-pro.patch [deleted file]
src/patches/kernel/wandboard/imx/0014-ARM-imx6q-Add-PCIe-bits-to-GPR-syscon-definition.patch [deleted file]
src/patches/kernel/wandboard/imx/0015-PCI-imx6-Add-support-for-i.MX6-PCIe-controller.patch [deleted file]
src/patches/kernel/wandboard/imx/0016-imx6-pci-tweaks.patch [deleted file]
src/patches/kernel/wandboard/imx/0017-ARM-imx-Add-LVDS-general-purpose-clocks-to-i.MX6Q.patch [deleted file]
src/patches/kernel/wandboard/imx/0018-ARM-imx6q-clock-and-Kconfig-update-for-PCIe-support.patch [deleted file]
src/patches/lcd4linux-scaletext-dpf.patch [deleted file]
src/patches/libcap-1.10-shared.patch [deleted file]
src/patches/libcap-1.10-syscall.patch [deleted file]
src/patches/libnl-1.1-ULONG_MAX.patch [deleted file]
src/patches/libsigc++-gcc43.patch [deleted file]
src/patches/linux-2.6-arm-asm-constraint.patch [deleted file]
src/patches/linux-2.6-silence-acpi-blacklist.patch [deleted file]
src/patches/linux-2.6-vmscan_remove_wait_on_page_writeback.patch [deleted file]
src/patches/linux-2.6.32-crypto-mv_cesa.patch [deleted file]
src/patches/linux-2.6.32-imq-test2.patch [deleted file]
src/patches/linux-2.6.32.11-netdev-1.patch [deleted file]
src/patches/linux-2.6.32.15-option_add_huawei_android.patch [deleted file]
src/patches/linux-2.6.32.27_ipg-fix-driver-name.patch [deleted file]
src/patches/linux-2.6.32.45_align_ssb_modtable_32bit_boundary.patch [deleted file]
src/patches/linux-2.6.32.8-ipp2p-0.8.2-pomng.patch [deleted file]
src/patches/linux-2.6.32.8-xen-imq-test2.patch [deleted file]
src/patches/linux-2.x-smsc95xx-add_mac_addr_param.patch [deleted file]
src/patches/linux-3.0-ipp2p-0.8.2-ipfire.patch [deleted file]
src/patches/linux-3.1-imq.patch [deleted file]
src/patches/linux-3.10.10-arm_kirkwood_setups.patch [deleted file]
src/patches/linux-3.10.27-fs-exec-atomic64-operand-requires-impossible-reload.patch [deleted file]
src/patches/linux-3.10.30-imq.patch [deleted file]
src/patches/linux-3.10.39-pie_packet_sch.patch [deleted file]
src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch [new file with mode: 0644]
src/patches/linux-3.10.y-usbnet_mcs7830_rework_link_detect.patch [deleted file]
src/patches/linux-3.14-layer7-filter.patch [moved from src/patches/linux-3.10-layer7-filter.patch with 94% similarity]
src/patches/linux-3.14.22-dvbsky.patch [moved from src/patches/linux-3.9-dvbsky-wot2.patch with 84% similarity]
src/patches/linux-3.14.22-imq.patch [moved from src/patches/linux-3.2-imq.patch with 71% similarity]
src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch [moved from src/patches/linux-3.10.34-iwlwifi-noibss_only_on_radar_chan.patch with 51% similarity]
src/patches/linux-3.14.22-kirkwood_legacy_boot.patch [new file with mode: 0644]
src/patches/linux-3.14.22-ledtrig_netdev.patch [moved from src/patches/linux-3.10.9-ledtrig-netdev-1.patch with 87% similarity]
src/patches/linux-3.2-0001-panda-wlan-fix.patch [deleted file]
src/patches/linux-3.2-0002-panda-i2c.patch [deleted file]
src/patches/linux-3.2-panda-reboot.patch [deleted file]
src/patches/linux-3.2.25-arm_kirkwood_setups.patch [deleted file]
src/patches/linux-3.2.27-rpi_fix_dwc_common_build.patch [deleted file]
src/patches/linux-3.2.33-ledtrig-netdev-1.patch [deleted file]
src/patches/lzo-2.06-CVE-2014-4607.patch [changed mode: 0755->0644]
src/patches/mktemp-1.5-add_tempfile-3.patch [deleted file]
src/patches/nasm-0.98.39-security_fix-1.patch [deleted file]
src/patches/net-tools-1.60-kernel_headers-2.patch [deleted file]
src/patches/netfilter_layer7_2.22_kernel3.0.patch [deleted file]
src/patches/newt-0.51.6-if1close.patch [deleted file]
src/patches/openssl-0.9.8n-cryptodev.diff [deleted file]
src/patches/pciutils-2.1.10-scan.patch [deleted file]
src/patches/pciutils-2.1.99-gcc4.patch [deleted file]
src/patches/pciutils-2.2.1-idpath.patch [deleted file]
src/patches/pciutils-2.2.3-multilib.patch [deleted file]
src/patches/pciutils-2.2.3-sata.patch [deleted file]
src/patches/pciutils-devicetype.patch [deleted file]
src/patches/pciutils-havepread.patch [deleted file]
src/patches/pciutils-strip.patch [deleted file]
src/patches/pound-2.6.patch [deleted file]
src/patches/python-satsolver-only-python-bindings.patch [deleted file]
src/patches/python-satsover-fix-building-without-rpm.patch [deleted file]
src/patches/qemu-0.14.1_missing_ATFCWD_hack.patch [deleted file]
src/patches/r8101_add_missing_pciids.patch [deleted file]
src/patches/r8169_add_missing_pciids.patch [deleted file]
src/patches/screen-4.0.3-stropts.patch [deleted file]
src/patches/screen-4.2.1-altscreen.patch [new file with mode: 0644]
src/patches/screen-4.2.1-cpation-hardstatus.patch [new file with mode: 0644]
src/patches/slang-1.4.5-utf8-segv.patch [deleted file]
src/patches/slang-debian-utf8.patch [deleted file]
src/patches/slang-utf8-acs.patch [deleted file]
src/patches/slang-utf8-fix.patch [deleted file]
src/patches/squidclamav-5.11-source-address-parsing-issue.patch [new file with mode: 0644]
src/patches/sudo-1.6.8p12-envvar_fix-1.patch [deleted file]
src/patches/udev-125-ext4_wo_journal.patch [deleted file]
src/patches/udev-141_no_netif_rename.patch [deleted file]
src/patches/v4l-dvb_bestunar_us638x.patch [deleted file]
src/patches/v4l-dvb_rtl28xx_add_usb_ids.patch [deleted file]
src/patches/v4l-dvb_rtl28xx_commented_usb_clear_halt.patch [deleted file]
src/patches/v4l-dvb_usbv2_dont_report_pidfilter_fail.patch [deleted file]
src/patches/vdr-1.6.0-gcc44-fixes.patch [deleted file]
src/patches/vdr-plugin-epgsearch-gcc44.patch [deleted file]
src/scripts/backupiso
src/scripts/httpscert
src/setup/.tx/config [new file with mode: 0644]
src/setup/Makefile [moved from src/install+setup/setup/Makefile with 96% similarity]
src/setup/Makefile.am [new file with mode: 0644]
src/setup/autogen.sh [new file with mode: 0755]
src/setup/configure.ac [new file with mode: 0644]
src/setup/dhcp.c [moved from src/install+setup/setup/dhcp.c with 78% similarity]
src/setup/domainname.c [moved from src/install+setup/setup/domainname.c with 73% similarity]
src/setup/hostname.c [moved from src/install+setup/setup/hostname.c with 76% similarity]
src/setup/keymap.c [moved from src/install+setup/setup/keymap.c with 90% similarity]
src/setup/m4/attributes.m4 [new file with mode: 0644]
src/setup/main.c [moved from src/install+setup/setup/main.c with 61% similarity]
src/setup/misc.c [moved from src/install+setup/setup/misc.c with 81% similarity]
src/setup/netstuff.c [moved from src/install+setup/libsmooth/netstuff.c with 88% similarity]
src/setup/networking.c [moved from src/install+setup/setup/networking.c with 71% similarity]
src/setup/passwords.c [moved from src/install+setup/setup/passwords.c with 65% similarity]
src/setup/po/LINGUAS [new file with mode: 0644]
src/setup/po/Makevars [new file with mode: 0644]
src/setup/po/POTFILES.in [new file with mode: 0644]
src/setup/po/ar.po [new file with mode: 0644]
src/setup/po/ca.po [new file with mode: 0644]
src/setup/po/cs_CZ.po [new file with mode: 0644]
src/setup/po/da.po [new file with mode: 0644]
src/setup/po/de.po [new file with mode: 0644]
src/setup/po/el_GR.po [new file with mode: 0644]
src/setup/po/es.po [new file with mode: 0644]
src/setup/po/fa.po [new file with mode: 0644]
src/setup/po/fr.po [new file with mode: 0644]
src/setup/po/hu.po [new file with mode: 0644]
src/setup/po/id.po [new file with mode: 0644]
src/setup/po/it.po [new file with mode: 0644]
src/setup/po/ja.po [new file with mode: 0644]
src/setup/po/km_KH.po [new file with mode: 0644]
src/setup/po/nl.po [new file with mode: 0644]
src/setup/po/pl.po [new file with mode: 0644]
src/setup/po/pt_BR.po [new file with mode: 0644]
src/setup/po/pt_PT.po [new file with mode: 0644]
src/setup/po/ro_RO.po [new file with mode: 0644]
src/setup/po/ru.po [new file with mode: 0644]
src/setup/po/sk.po [new file with mode: 0644]
src/setup/po/sq.po [new file with mode: 0644]
src/setup/po/sv.po [new file with mode: 0644]
src/setup/po/th.po [new file with mode: 0644]
src/setup/po/tk.po [new file with mode: 0644]
src/setup/po/tr.po [new file with mode: 0644]
src/setup/po/uk.po [new file with mode: 0644]
src/setup/po/uz@Latn.po [new file with mode: 0644]
src/setup/po/vi.po [new file with mode: 0644]
src/setup/po/zh.po [new file with mode: 0644]
src/setup/probenic.sh [moved from src/install+setup/install/probenic.sh with 100% similarity]
src/setup/setup.h [new file with mode: 0644]
src/setup/timezone.c [moved from src/install+setup/setup/timezone.c with 90% similarity]
src/squid-accounting/acct-lib.pl
tools/check_langs.sh
tools/make-functions

index acccfc834756baad04abc0c1b430a28b73d2047a..cf895bf246a01946ab4930b62bc329719d36bc0e 100644 (file)
@@ -59,12 +59,12 @@ if ($ENV{'SERVER_ADDR'} && $ENV{'HTTPS'} ne 'on') {
 &General::readhash("${swroot}/main/settings", \%settings);
 &General::readhash("${swroot}/ethernet/settings", \%ethsettings);
 &General::readhash("${swroot}/ppp/settings", \%pppsettings);
-$language = $settings{'LANGUAGE'};
 $hostname = $settings{'HOSTNAME'};
 $hostnameintitle = 0;
 
 ### Initialize language
-if ($language =~ /^(\w+)$/) {$language = $1;}
+require "${swroot}/lang.pl";
+$language = &Lang::FindWebLanguage($settings{"LANGUAGE"});
 
 ### Read English Files
 if ( -d "/var/ipfire/langs/en/" ) {
index 707b28d11e2b3c237c5c9cad072b20a705b50f34..3b001ad9d433ad2fe354e29369f017294dcd5137 100644 (file)
@@ -50,8 +50,8 @@ $language = $settings{'LANGUAGE'};
 # (it is a developper options)
 #
 sub reload {
+    my $LG = &FindWebLanguage(shift);
 
-    my ($LG) = @_;
     %Lang::tr = ();    # start with a clean array
 
     # Use CacheLang if present & not empty.
@@ -157,4 +157,23 @@ sub BuildCacheLang {
     &General::log ("WARNING: cannot build cachelang file for [$missed].") if ($error);
     return $error;
 }
+
+sub FindWebLanguage() {
+       my $lang = shift;
+
+       my @options = ($lang);
+
+       my ($shortlang, $encoding) = split(/\./, $lang);
+       push(@options, $shortlang);
+
+       my ($language, $country) = split(/_/, $shortlang);
+       push(@options, $language);
+
+       foreach my $option (@options) {
+               return $option if (-e "${General::swroot}/langs/$option.pl");
+       }
+
+       return undef;
+}
+
 1;
diff --git a/config/dracut/dracut.conf b/config/dracut/dracut.conf
new file mode 100644 (file)
index 0000000..34e6a66
--- /dev/null
@@ -0,0 +1,51 @@
+# PUT YOUR CONFIG HERE OR IN separate files named *.conf
+# in /etc/dracut.conf.d
+# SEE man dracut.conf(5)
+
+# Sample dracut config file
+
+#logfile=/var/log/dracut.log
+#fileloglvl=6
+
+# Exact list of dracut modules to use.  Modules not listed here are not going
+# to be included.  If you only want to add some optional modules use
+# add_dracutmodules option instead.
+#dracutmodules+=""
+
+# dracut modules to omit
+#omit_dracutmodules+=""
+
+# dracut modules to add to the default
+#add_dracutmodules+=""
+
+# additional kernel modules to the default
+#add_drivers+=""
+
+# list of kernel filesystem modules to be included in the generic initramfs
+filesystems+="reiserfs vfat xfs"
+
+# build initrd only to boot current hardware
+#hostonly="yes"
+#
+
+# install local /etc/mdadm.conf
+#mdadmconf="no"
+
+# install local /etc/lvm/lvm.conf
+#lvmconf="no"
+
+# A list of fsck tools to install. If it's not specified, module's hardcoded
+# default is used, currently: "umount mount /sbin/fsck* xfs_db xfs_check
+# xfs_repair e2fsck jfs_fsck reiserfsck btrfsck". The installation is
+# opportunistic, so non-existing tools are just ignored.
+#fscks=""
+
+# inhibit installation of any fsck tools
+#nofscks="yes"
+
+# mount / and /usr read-only by default
+#ro_mnt="no"
+
+# set the directory for temporary files
+# default: /var/tmp
+#tmpdir=/tmp
diff --git a/config/etc/fstab b/config/etc/fstab
deleted file mode 100644 (file)
index 0cd30eb..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# file system  mount-point  type     options         dump  fsck
-#                                                        order
-DEVICE1        /boot   ext2    defaults        1       2
-DEVICE2         swap   swap    pri=1   0       0
-DEVICE3        /       FSTYPE  defaults        1       1
-DEVICE4        /var    FSTYPE  defaults        1       1
-none   /var/log/rrd    tmpfs   defaults,size=64M       0       0
-none   /var/lock       tmpfs   defaults,size=8M        0       0
index 4d703825d170b588fecb61043e424d57904de2ce..75a9357f64bc6047a47f81ad56f9c9e46301489f 100755 (executable)
@@ -554,29 +554,19 @@ sub time_convert_to_minutes {
 }
 
 sub p2pblock {
-       my $search_action;
-       my $target;
-
-       if ($fwdfwsettings{"POLICY"} eq "MODE1") {
-               $search_action = "on";
-               $target = "ACCEPT";
-       } else {
-               $search_action = "off";
-               $target = "DROP";
-       }
-
        open(FILE, "<$p2pfile") or die "Unable to read $p2pfile";
        my @protocols = ();
        foreach my $p2pentry (<FILE>) {
                my @p2pline = split(/\;/, $p2pentry);
-               next unless ($p2pline[2] eq $search_action);
+               next unless ($p2pline[2] eq "off");
 
                push(@protocols, "--$p2pline[1]");
        }
        close(FILE);
 
+       run("$IPTABLES -F P2PBLOCK");
        if (@protocols) {
-               run("$IPTABLES -A FORWARDFW -m ipp2p @protocols -j $target");
+               run("$IPTABLES -A P2PBLOCK -m ipp2p @protocols -j DROP");
        }
 }
 
diff --git a/config/grub/grub.conf b/config/grub/grub.conf
deleted file mode 100644 (file)
index 2199bf1..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-timeout 10
-default saved
-foreground = 6d6963
-background = ffffff
-#hiddenmenu
-# *** If you want use serial console comment next line
-splashimage (hd0,0)/grub/ipfire.xpm.gz
-# *** add "console=ttyS0,115200n8" to kernel cmdline,
-# *** uncomment following lines and check also inittab
-#serial --unit=0 --speed=115200
-#terminal --timeout=1 serial console
-title IPFire
-  root (hd0,0)
-  kernel /vmlinuz-KVER-ipfire root=ROOT panic=10 MOUNT
-  initrd /ipfirerd-KVER.img
-  savedefault 0
-title IPFire (vesafb 1024x768)
-  root (hd0,0)
-  kernel /vmlinuz-KVER-ipfire root=ROOT panic=10 vga=791 MOUNT
-  initrd /ipfirerd-KVER.img
-  savedefault 1
diff --git a/config/grub/ipfire.xpm.gz b/config/grub/ipfire.xpm.gz
deleted file mode 100644 (file)
index ff94776..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-/* XPM */
-static char * Bootsplash_xpm[] = {
-"640 480 14 1",
-".     c #030303",
-"+     c #171717",
-"@     c #272727",
-"#     c #383838",
-"$     c #4A4A4A",
-"%     c #575757",
-"&     c #6F6F6F",
-"*     c #888888",
-"=     c #989898",
-"-     c #A8A8A8",
-";     c #B8B8B8",
-">     c #C7C7C7",
-",     c #D7D7D7",
-"'     c #E7E7E7",
-">;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,,>,,>,,>,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,',,',,',',,',',,',',',',',',',',',',',',',',',','','','','','',''',''',''','",
-";>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>>;;>>>;>>;;>>>;;>;>;>;>;>;>;>;>;>>;>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>,>,>,>,>,>,>,>,>,,>,,>,,>,>>,>>,>>,>>,>,>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,,>,,>,,>,>,,>,,>,,>,,>,,,>,,,>,,,>,,,>,>,>,>,>,>,>,,>,,>,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,',,',',',',',',',',','','','',',,',,',,',,',',',,',',',',,',',',',',',',',','','','','',','','','','',''',''',''','''",
-">>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>>;;>;>>>;>>;>>>;>;>;>>>;>;>>>>>;>>>;>>>;>>>>>>>;>>>>>;>>>;>>;>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>,>,>,>>,>,>>,>>>,,>>,>>,>,,>>,>,>,>,>,>,>,>,,>,>,>,>,>,>,,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,,,>,,,,,>,,>,,,,,,,,,,,,,,,>,,>,,>,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,',,',,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,',,,',',',,',',,',,,'',,',,','',,',',',',',',','',',',',',',','',',',',',',',',',',',',',''",
-";>>;>;>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>;;>>>>>;;>>;;>;>;>>>;>>>;>>>;>;>>>;>>>;>>>;>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>,>,>,>,>,>,>>,>>>,>,>>>,>>>>,>,>>,>,>>,>,>>,,>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,,>,,,>,,,>,,,>,,,,,,,,,,,,,>,>,,,,,>,,,,,,,,>,>,,>,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,',,',',',',',',',,',,,',',,,',,,,',',,',',,',',,'',',,',,',',',',',',',',',',',',',',','',''',''',''',''''''''''''','",
-";>;>>;>>;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>;>;>;;;>;>>;>;;;>>;>;>>>;>>;>>>;;>>;>>>>;>;>>;>>>;>>>>>>;>;>>>;>;>>;>>>;>>>;>>>;>>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>,>>>>>,>>>>>,>>>>>>>>>>>>>>,>>,>>>>,>,>>,,>>,>>,>>>,>,>,>,>>,>,,>>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,,,,>,,>>,,>,>,>,,,>,>>,>,>,>>,,,,,>,>,,,>,>,,>,,,,,,,,,,,,,,,,,,>,,,,,>,,,,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,',,,,,',,,,,',,,,,,,,,,,,,,',,',,,,',',,'',,',,',,,',',',',,','',,',',',',',',',',',',''',','','',',',,'',,'',','',',',',',','''",
-";>;>;>;;>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>;>>>;>;>;>>>>>;>>;>;>>;>;>;>>>>;>;>;>>>>>>>>;>>>;>;>>>>>>>>>>>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>>>>>>>,>>,>>,>>>>>>>,>>>>>>,>>>,>,>,>,>,>,>,>>>,>,>,>>>>,>>>,>>,>>,>,>>>,>,>,>>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>>,>,>,,,>>,,,>,>,>,,,,>,>,,,,,,>,>,,,,>,,,,,,,>,,,>,>,,>,,>,,>,,,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,,,,,,,',,',,',,,,,,,',,,,,,',,,',',',',',',',,,',',',,,,',,,',,',,'',,',,,',',,',,'',',',',',',',',',',',,'',',',',','''',''',,''',','','','','','",
-";>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>;>;>>;;>;>>>;;>;;>;>;>>;>>;>>>;>;>;>>>>>;>;>;>;>>>;>>>>>;>>;>;>>;>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>>>>>>>>>>>>>>>,>>>>>>,>,>>,>,>,>,>,>,>>,>,>>,>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,>,,,,>>,,,>,,>,>,,,,>,>,>,,,,,>,,>,>,>,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,,,,,,,,,,,,,,,,,',,,,,,',',,',',',',',,,',,'',',,',',',,,',',',',',',',','','',',','',''',,'',',''','','','','','','''",
-">;>;>>;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;>;>;;>>;>;;>>;>>>;>;>>;>;>>;>;>>>;>>;>;>>;>>>>>>;>>;>>;>>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>,>>>>>>>>>,>,>,>,>,>,>,>,>>,>,>,>,>>>,>>>>,>>>,>>,>,>>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,>,>,>,,,>,>,>>,,>,>,,>,,,,>,>,>,,,,,>,>,,>,,,,,,,,>,,,,,>,,>,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,',,,',,,,,,,,,',',',',',',',',,',',',',,,',,',,,',,,',',',,,','',',',',',,',',',',',',',',',','',','',,''',','',',',''''','','',''','",
-">;>;;>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>;>>>;>>;>;>>>;>;>>;>>>>>;>>>;>;>>>>>>;>;>>;>>>>>>>;>>;>>;>>>>;>>;>>>;>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>,>,>,>>>>>>>>>>>>>>>>>>,>>>,>>>,>,>>,>,>,>,>>,>>>,>>,>,>>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,,,>,,,>,,,,>,>,,,>,,>,>,,,,,>,,,>,>,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',',',,,,,,,,,,,,,,,,,,',,,',,,',',,',,'',,'',,',,',',',,,',,',','',',',',',',','','','',',',','',,'''',','','',,''','','',''''",
-";>;>>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;;>;>;>;>;>;>;>;;>;>;>;>;;>>;;>;>;>;>>;;>;>>;>>;;>;>>;;>>>>;>;>;>>>>;>>>>;>;>>>;>>>>>;>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>>,>>,>,>,>,>,>,>,>>,>,>>,>>>>,>>,>>>,>,>>,,>,>,>>>,,>,>,>>,>>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,,>,>,,>>,,>>,>,,,,>,,,>,,,,>,>,,,>,,,,,,,>,,,,,>,,>,,,,,,,,>,,>,,,>,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,',,',,,,,,,,',,',',',',',',',,',',,',,,,',,',,,',,,,',,',',,,'',',',,',,',',',',',',',',',,',,','','',''',,',''','','''','',''''',','",
-">>;;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>>;;>;>>;;>>;>>>;>>;>>>;>;>>;>>>>;>>>>;;>>>>>>>;>;>>>;>>>>>>;>>>>;>>>>;>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>,>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>>>>,>>>>,>>,>,>>,>>,,>>>,>,>>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,>>,>,>,,,,>,,,,,>,>,,>,,,>,>,,,,,>,,,>,>,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,',,,',,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,',,,,',,',',,',,'',,'',',',,,''',,',',',',',',',',',',',',',''',''',',','',','',',,'','',','','',',,'''''",
-";>>>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>>;>;;>>;>;>>;>;>;;>;>;>;;>>;>;>>>;;>>;>;>>;>;>;>;>>>>>;>>;>>;>>>>>;>>>;>>>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>,>>>,>>,>>>,>>>>,>,>,>,>,>,>,>,>>>>,>,>>,>>>,>>,>>>,,>>,>>,>>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>>,,,,,,>,>>,,>,>,>,,,>,,>,>,,,,>,>,,,>,,,,,,>,,,>,,>,>,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,',,,',,',,,',,,',,',',',',',',',,,,',',,',,,',,',,,',,,',,,'',,,',',,,',',',',',',',',',',',',,'',,','',',',''',''',','',''',''',''''',','",
-";;;>;>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>>;>;>>>;>;>;>;;>;>>;>;>>;;>;>;>>>;>>;>>>;>;>>;;>>>;>>>;>>>>>>;>>;>;>>>;>>>>>;>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>,>>>>,>>,>>,>>,>,>>>,>>,>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,,>,>,>,>,,,>,,,>>,>>,,>,,>,,,>,,>,,,>,,,,>,>,,,,>,,,>,>,,,,,>,,,,,,,,>,,,,,,>,,>,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,',,',,',,,'',,'',,'',,,'',,','',',,,',',',',',',',','''',,'',',,''','',,'',''',','','',','',',''''''",
-">>;>>;>>;>>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;;>>;>;>;>>;;>;>;>;>;>;>;>>>;>>;>;;>>;;>>>;>;>;;>>;>>;;>>;>;>>>>;>>;;>>;>;;>>>>;>>>>;>>;>;>>>>>>>;>>;>;>>>;>>>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>,>>,>>,>>>>,>>>,>,>,>,>,>,>>>>,>,>>,>,>>,>>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>>,>,>,,>,,,>,,>,>,>,,>,>,>,,>,>,,,,,,>,,,>,,,,,,>,,,,,>,,>,,,,,,>,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,',,',',,',,',',,',',',',',',,,,',',,',,',,,',,,',,,',,,',',,',,',,',',',',',',',',',',',,','','','',,'','''',',,'''','',''''',''',',','",
-";>>;>;>;>;>;>;>>;>;>>;>>;;>;>>>;;>>;>;>;>;>>;;>>;>>;>;>>;>;>>;>>;;>;>>>;;>>;>;>;>;>>;;>>;>>;>;>>;>;>>;>>;;>;>>>;;>>;>;>;>>;;>;>>;;>;>;>>>;;>>;;;>;>>>>;>;>;>>>;>;>>;>;>>;>>>;>>>>>;>;>>>;>>;>>>>>>;>;>>>>;>>>>>>>>>;>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>>>,>,>>>,>>>>>,>>,>>,>,>>>,>,>>,>>>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,,>,>,>,,>,,>,,,>,,,,,,>,,>,,>,>,>,,,>,,,>,>,,,,>,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',',,,',,,',,',','',,'',,'',,',','',',,',',',',',',',',',','',',',',',','','',,','''',,''','',',,'',''''''''",
-">;;>;>;>;>;>;>;;>;>;;>;;>>;>;;>>;>;>;>;>;>;>>;;>>;;>;>;;>;>;;>;;>>;>;;>>;>;>;>;>;>;>>;;>>;;>;>;;>;>;;>;;>>;>;;>>;>;>;>;>;;>>;>;;>>;>;>;;>>;>;>>>;>;>;>;>>;>;>;>>;>;>>>;>>;>;>>;>;>>>>>;>>;>>>;>>;>>>>;>>>>>>>>;>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>,>>>,>>>>>>,>>>,>>>>>,>,>,>>,>>>,>,>,>,>,>,>>>>,>>,>,>,>>>>,>,>>>,>,>>>>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>>,,>,>,>,,>,,>,,>,>,>,>,>,,>,>,>,,>,,>,,,,,,,>,,,>,,,,,>,,,,,>,,>,>,,,,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,',,,',,',',',,',,,,,',',',',',,,,',,',',,',,,',,,',,,',,',',,',,,',',,',,,',',',',',',','',',',',',','',',''','',,''',,''',''''''',',',','",
-">>;>;>;>;>;>;>>;>;>>;>>>;>;>>;;>;>;>;>;>>;>;>>;;>>;>;>>;>;>>;>>>;>;>>;;>;>;>;>;>>;>;>>;;>>;>;>>;>;>>;>>>;>;>>;;>;>;>;>;>>;>;>>>;;>;>;>>;;>;>;>;>;>;>;>>;>;>>;>;>>>;>;>>;>>>>;>;>>;>;>>>>>>;>>>>>>>>>>>>;>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>,>>>,>>>>>>>>>>>>,>,>>,>>>,>>,>,>>>,>,>,>,>,,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>,>,,>,>>,,>,,>,>,,,>,,,>,,,,>,,>,,>,,>,>,>,,,>,,,>,,>,,,>,>,,,,,,,,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',,,',,,,,',,,,,,,,,,,,,',',,,,,,,,,,',',,',,,,',,',,,'',,'',,',,,',','',,',',''',',',',',',',',,',''','','',','',','',''','''',',',',',,'''''''''",
-";;>>;>>;>;>>;>;>>;>;>;;;>>;>;>>;>;>;>;>;>;>;>;>>;;>>;>;>>;>;>;;;>>;>;>>;>;>;>;>;>;>;>;>>;;>>;>;>>;>;>;;;>>;>;>>;>;>;>;>;;>;>;>;>>;>>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>>;>>;>>>;;>>>>>>>;>>;>;>>>;>;>;>;>>>;>>>>>>>>>>>>>>>;>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>,>,>,>,>>,>>>>,>>>,>>>,>>>,>,>,>>>,>>>,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,>>,,,,>,>,>,,,>,>,,>,,>,>,,>,,>,,>,,,,,,,>,,,>,,,,,,,,,,,,>,,>,,,,>,,,,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,,',,',,,,,',',',',,,,,',,',',,',',',,,',,,',,'',,',',,',',',,,,',',',',',',','',',',',',',','',',','',,',',',''''',''''',',',','",
-">>;;>;>;>;;>;>;;>;>;>>>;;>;>;>;>>;>;>;>;>;>;>;>;>>;;>>;;>;>;>>>;;>;>;>;>>;>;>;>;>;>;>;>;>>;;>>;;>;>;>>>;;>;>;>;>>;>>;>>>;>;>;>;;>;;>;>;;>;>;>;>;>;>>>;>;>>;;>>;>;>>;>>;;>>>;>;>;>>>>;>>>;>>>>>>>>>;>>>>;>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>>>>,>,>>>,>,>>,>,>>>>>>>>>,>>>,>>,>,>>,>,>>,>,>>>,>,>>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,,,>>>,,,>,,>>,,>,>,>,,,>,>,,,,>,,,>,>,>,,,>,,,>,>,,,>,,,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,',,,,,,,,,',,,,,,',',,,,,,,,',',,',,,,',,,,,,',',,',,',,,',',,',',',','',',',',',',','',','',',','',''',',''',',''','''',',''',',''''''''''",
-";;>>;>;>;>>;>;>>;>;>;>;>>;>;>;>;;>>>;>;>>;>;>;>;>;>>;;>>;>;>;>;>>;>;>;>;;>>>;>;>>;>;>;>;>;>>;;>>;>;>;>;>>;>;>;>;;>;>;>;;>>;>;>>;>>;>;>>;>>;>;>;>>;>;;>>>;>>>;>;>>;>>;>>>;>;>;>>>;>;>>>;>>;>;>>;>>>>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>,>,>,>>>>,>>,>>,>>,>>>>,>>>,>,>>,>,>>>>,>>>,>,>>,>>>,>,>,>,>,>,>,>,,>,>,>,,,>>>,,,>>,,>,,,>,,,,>,,>,,,,>,>,,,>,,,,,,,>,,,>,,,,,>,,,>,,>,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,',,',',,,',,',,,,,,',',',,,,',,',',',,',',',,',',',',',',',',',,',,',,',',',',',',',','',,',',',',,','',','','',''',',''',',''',',',',','",
-">;>;>>;>;>;>>;>;>>;>;>;;>;>;>;>>>;;>;>;;>;>;>;>;>;;>>;>;>>;>;>;;>;>;>;>>>;;>;>;;>;>;>;>;>;;>>;>;>>;>;>;;>;>;>;>>;>;>;>>;;>;>;>;>;>;>;>;>;>;>;>;>;>>>>;;>>;;>;>>;>>;>>;>>;>>>>;>>>>;>;>>>>>>>;>>>;>;>>;>>;>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>,>>>,>>>>>>>>>>>,>,>>>>,>>>,>>,>,>>,,>,>>,>>>,>,,>,>,>,>,>,>,,>,>,>,>,>,>,>,>>,>,>,,>>,,,,>>,,,>,>,>,,>>,,>,,>,>,,,>,>,,>,>,>,,,,>,,,>,,>,,,>,,,,,,,,>,,,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,',',',,,,,,',',,,,,,',,',',,,',',,',,',,',,,',',',',',',',',',',',',',,',',''','',''',',''',','',',','',','','',''''''''''''",
-";>;>;;>>;>;>;>;>;;>;>;>>;>;>;>;;;>>;>;>>;>;>;>>;>>;>;>;>;;>;>;>>;>;>;>;;;>>;>;>>;>;>;>>;>>;>;>;>;;>;>;>>;>;>>;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>>;>;>;;>>;>;>>>>;>>;>>;>>;>>;>;>>;>;>>>>;>;>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>,>>>>,>>>>>,>>>,>>,>,>,>,>>>>,>,>>>,>>>,>>>,>>>>,>,>,>,>,>>>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,,>,>>,,>>>,,,>>,,>,,>,>,,>,,>,,>,,>,,,,>,,,,,,>,>,,,>,,,,,,,,,,>,,,>,,,,>,,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,',',,,',,',',,,,,,,,,',',,,,,'',',,',,,,',',,,',,',,',,',',,,',',',',',',',',',',','',',',,',',',',''',,'',','',''','''','','',',',',',','",
-";>;>>;>;>>;>;>;>>;>;>>;>;>>>;>>>;;>>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>>>;>>>;;>>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>>;;>;>;>;>>;>;>;>>>;>;>;>;>>;>;>;>>;>>;>;>;;>;>>>;>>;>>;>>>;>>>>>;>>>>>>>>;>>>>>>;>>>;>;>>;>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>,>>>>>>,>>,>>>>>>>>,>>>>>,>,>>,>,>>,>>,>,>>>,>>,>>>,>,>>,,>,>>>,>,>>,>,>,>,>,>,>,,>,>,,>,,,,>>>,,,>,,>,,>,>,,>,,>,,>,>,>,,>,,>,>,,,,>,,,>,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,,,,,',',',',,,,',',,,,,',,,',',,,',',',',',,',',',',',,,',,,',',',',',',',,','''','',',',',,''',''',',','',',''','','''''''''''''",
-">>;>;>;>;;>;>;>;>;>>;;>;>;>;>;;>>;>;>;>>;>>;>;>;>;>;>;>;>;>>;;>;>;>;>;;>>;>;>;>>;>>;>;>;>;>;>>;>;>;>;>>;>;>;>;>;;>>;>;>;>;>>;>;>;;>>;>;>;>;>;>;>>;>;>;>>>;>>>>;;>>>;>>;>>;>>>;>;>>;>;>;>;>>;>>;>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>,>,>,>>>,>,>>>,>>,>>>,>>,>>,>,>,>>,>,>,>,>,>>>,>,,>,>>,,>,>,>,>,>,>,>>,>,,>,>>>,,,,>,>,>,,>,,>,>,,>,,>,,,,,,>,,>,,,,,,>,,,>,,,,,,,>,,>,,,,,>,,,,>,,,,>,,,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,',,,,,',,',,,,,,,,,,',,,,,',',',,',,',,',,',,',,,',',,,',',',''',',',',',',',',','',',,',','',','''',',',',''',',''',','''',',',',',',','",
-";>;>;>;>>;>;>;>;>;>;>>>;>;>;>>;;>;>;>;;>;>;>;>>;>;>;>;>;>>;;>>>;>;>;>>;;>;>;>;;>;>;>;>>;>;>;;>;>;>>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>>;;>;>>>;>;>;>;>>;>>;>;;>>;;>;>>;;>>;>>;>;>;>>>>;>>>>>;>>>>>>>>;>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>,>>,>>>>>>,>>,>>,>>>>,>>>,>>>>>>>>,>>,>>>>>>>,>>>>>,>>>,>>,>>>,>>,>>>,>>,>,>>,>>,>,,>,>>>,>,>,>,>,>,>,>,>,>,,,,>>,>,,,,>>>,,,>,,>,>,,>,,>,,>,,>,>,>,,>,,,>,>,,,>,,,>,,>,,,,,,,>,,>,,,>,,,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,',,,',,,,,,,,',',',',,,',',,,,',,',,',,',,',,',,',',,',',',',,',,,',',,',',',',',',,'',',',',,','',,'',''',',','''','''',','''','''''''''''",
-">;>;>>;>;>;>;>;>;>;>;;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>;>;;>>;;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>>;>;>;;>;;>>;>;>>;>;>;>;>;>;>;;>>;>;;>>;>;>;>;>;>;>;>>;>>;>>;>>;>>>>>>;>>;>>;>>>;>;>>>>;>>>>;>>;>>>>;>;>>>>;>>;>>>;>>>>>;>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>>>,>,>,>>>,>,>>,>,>>,>,>,>>,>,>,>,>,>>>,>>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>>>,,,>,>,>>,,,>>,,>,,>,>,,>,,>,,>,,,>,,>,,,>,,,,,>,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,',,,,,,,,,,,,,,,',,',,',,,,,,,,,',,,,',',,',,',,',,',',',,',',,',',',,',',',',','',',',',',',',',''','''',','',',',',''','',','',',''',',''',',',',','",
-">;>;;>;>;>>>;>;>;>;>>;>;>;>;>;>;>;>>;>;>;>>;>;;>;>>>;>;>>;>;>>;>;>;>>;;>;>>;>;>;>;>;>;;>;>;>;>>;>>;>>>;>;>;;>;>;>;>>;>>;>>;>;>;>>;>;>;>;>;>;>;>;;>;>;>;>;>>;>;;>;>>;>>;>>;>>>>>;>;>>;>;>>;>>;>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>>>>,>,>>>>>>,>>,>>>>>>,>>>>>,>>>,>>>>>>,>>>>>,>>>>,>,>>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,,,>>,>,,>,,>,>,,,>,>,,>,,>,>,,,>,,>,,,>,,>,,,>,>,,,>,,,>,>,,,,,,>,>,,>,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,',,',,',,,,,,,,,,',',',',,,',,,,',,,',,',,',,,',,',',,',,,',,',',',,',,',,',',',',',','',',,',',,',','',''','',,'',','',','','','',''''''''''''",
-";>;>>;>;>;;;>>;>>;>;;>;>;>;>;>;>>;>;>;>;>;;>;>>;>;;;>>;>;>;>;;>;>>;;>>>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;;>;>>;>>;>;>>;>;>;;>;>;>>;>;;>>;>;>>;>;>;>>>>;>>>;>>;>;>>>>>>;>>;>>>;>>;>;>>>>;>>>>>>>>>>;>;>>>>;>>>;>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>,>,>>>,>>,>,>,>>>,>,>>,,>,>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>>,,>,>,,>,,>,,>,,>,,>>,,>,>,>,,,,,>,,,>,,,,,,,>,,,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,',',,,,,,,,,,',,,',',,',,',,',,,',',',,,',,'',,'',,',,'',',,'',',',',',',',,','',',','',','',',','',',''','''''','',''',',',',',','",
-">;>;>;>;>>>;>;>;>;>>;>;>>;>>;>;;>;>;>;>;>>;>;>;>>>>;>;>;>;>>>;>;;>>;;;>;>;;>;>;>>>;>;>;>>;>;>;>;>;>>;>;;>;>;>>;;>;>;>>;>;>;;>;>>>;>;>;;>;>;>;>;;>>;;>>;>;>>;>;>;>>;>>;;>>;>>>>;>;>>;>;>;>>>>>>>>>;>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>,>,>>>>>>>>>,>,>>>>,>>,>>>>>,>>,>>,>>>,>,>,>>,>>>,>>,>>,>>,>>,,,>,>>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,,,,,>,,,>,>,>,,>,,>,,>,,,,,,,,,,>,>,,,>,,,>,,>,>,,,>,,>,,,,,,,,,,,,,,,,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,',,,,',,,',,',,',,,,,,,,',',',',,,',,,,,',,',,,,,',',,,,',',',',,',,',',',,,',',,',',',',',','''',','','',','',',''','','',''',',','','',''''''''''''''",
-">>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>>;>;>;>>;>;>;>;>;;>;>;>;>;>;;;>>>;>;>>>;>;>>;>;>;;;>>;>;>;>;>;>;>;>;;>;>>;>>;;>>;>;>;>;>;>;>>;>;;;>;>;>>;>;>>;>>;>;>>;>>;>;>>;>>>;>>;>>>;>>;>;>>>>>;>>>>>>;>>;>>;>>;>>>>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>,>>>>>>,>>,>>,>>>>>,>,>>>>>,>,>>>,>>,>>,>,>>>>>,>>,,>>,>>,>,>,>,>>>>>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,,>,>>>,>,>,>,,,>,>,,>,,,,,>,>,>,>,>,,,,,>,,,>,,,,,,,,,,,,,,>,,,,,>,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,,,,,,,,',,,',,,,,,,,,',,,',',,',,,',',,,','',',,',,,',',',',',',',','',',',',',',',,',',',',','',','',','','',',','',''','','',',',',',',','",
-";>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>>;>;;>;>;>;>;>>;>;>;>;>;>>>>;;>;>;>;>;>;>;>>;>>>;;>;>;>;>;>;>>;>;>>;>;>;;>>;>;>>;>;>;>;>;>>;>>>;>;>;>;>>;>;>>;>>;>>;>;>>;>>;>;>>;>>;>>>;>>>>;>;>>>>;>;>>>;>>>>>>>>>;>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>>>>>>>>>>>>>>>>>,>>>>>>,>,>>>>>,>>>,>>,>>>>,>,>>,>,>>,>>,>,>>>,>,,>,,>,>,>>,>>,>,>,>,>,>,>,,>,,>,>,>,>,,,,,>,>,,>>,,,>,,>,>,>,,,>,,>,,,,>,>,,,>,,,>,,>,,>,>,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,,,,,',,',',,',,,,',,,',',',',,,',,',,',,',',,',',,,,,',',,'',,,',',,,',',',',,',',',',',','',','',','',,','',''',,'',''''',''',''',''''''''''''''''''",
-">;>>;>>;>;>;>;>;>>;>>>;>;>;>;>;>;;>>>;>>;>;>;>;;>;>;>>>;>;;;;>>;>;>;>;>;>;>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;;>;>;>>;>;>;>>;;>;>;;>;>;>;>;;>;>;>;>;>;>;>>;>;>>;>>;>>>;>>;>>>>;>>>>;>;>>>>;>>>>>>;>>;>>>>>>;>>>>>>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>,>>,>,>>>>>,>,>>>>,>,>>>>,>>,>>>,>,>>>,>>,>>>,>,>>>,,>>,>>,>>,>>,>,>,,>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,,,>,,,>,>,>,,,>,,,>,,>,,,,>,,,,,>,,,>,,,,,,,,,,>,,>,,,,,,,,,>,,,>,,>,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,',,,,,,,,,,',,,,,',,,',,,,',,,,'',',,,',,,',',',',',,',,','',',',',',',',,',','',',''',','',,''','',,','',','','',',',',',',',',','",
-">;>;>;>;>;>>>;>;>;>;;>;>;>;>;>;>>;>;>;;>>;>>;>>;>;>;>;>;>>>>;>;>;>;>>;>;>;>>;>;>;>;>>;>>;>>;>;>;>;>;>;>;>;>>;>;>;>;>;>>;;>;>;>>;>;>;>>;>>;>>;>>;>>;>>;>;>>;>>;>>;;>>;>;>;>>>;>>>>>>;>>>>>;>>;>>>>>>;>>;>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>,>>>>>>>,>>>>>,>,>>,>>,>,>>>,>>,>>,>,>>>,>,>>>,>,>,>,>,>,>,>>,>,>,>,>,>,>,,>,>,>,,,>,>,>,,,>,>,>,>,,>,,,>,,,>,>,,,>,>,,,>,>,,,>,,,>,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,',,',',,,,,,,,,',',',',,,',',,,',,,',',,',',,,','',,'',,',,',','',',',,,',',',',',','',',',,',',,','',''',',',',''','','','','''''''''''''''''''",
-";>;>;>;>;>;;>>;>;>;>>;>;>>;>>;>;>;>;>>;>;>;;>>;>;>;>;>;>;;>;>;>;>>;;>>;>>;>;>;>;>;>;;>;>>;;>;>>;>>;>;>>;>;>;>;>;>;>>;>;>>;>>;>;>>;>>;;>;>;>;>;>;>;>;>>;>;>>;>>;>>>>;>>>>>>;>>;>;>;>>;>>;>>;>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>,>>,>>>>,>,>,>>>,>,>>>>,>>,>>>,>,>>,>>,>>,>,>,>>>,>,>,>,>,>>,>>,>,>,>,>,>,>,>,>>,>,,>,>,>,>,,>,>,,>,>,>,>,,>>,,>,>,,,>>,,,,>,,,,,>,,,>,,,,,,,,>,,>,,>,>,,,>,,,,>,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,',,,,,,',,,,,,,,,,',',,',,,,,,,,,',,,,,',,',',,,',,',',',,,,',,,',,',',',,,',',''',',',',',',','',''','','','',',,'','',''','','','',''',',',',',',',',','",
-";>;>;>>>;>>;;>;>;>;;>;>;>;>;>;>;>;>;;>;>;>>;;>;>;>>;>;>>>;>;>;>>;;>>;>;>;>;>>;>;>;>>>;>;;>>>;;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;>>>;>>>;>;>;>>;>>>;>>;>;>>;>;>;>>;>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>,>>>>,>>,>>>>,>>,>,>,>>>,>,>,>,>,>>>,>>,>,>,>>,>,>,>,>,>,>,,>,,>,>,>,>,>,>,,>,>,,,,>,,>,,,>,,,,>,,,,>,>,,>,>,,,>,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,',,,,,',,,',,,,,,,,',',',',,',',',',,',,',,',,,,',,'',,',',,',',,','',',,',,',',',',',',',,',','',',',',''''','','',,'',''''','','','''''''''''''''''",
-">;>;>;>;>;;>>;>;>;>>;>;>;>;>;>;>;>;>>;>;>>;>>;>;>;;>;>;;;>;>;>;;>>;;>;>;>>;>;>;>;>;;;>;>>;>;>>;>;>;;>;>;;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>;>;>;;>>;;>>>;>>;>>;;>>>;>>>;>;>>>>;>>>>;>>>>;>;>>>;>>>;>;>>>>>;>>>>;>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>,>>,>,>>,>>,>>>>,>,>,>>,>,>>>,>,>>,>>,>,>>,>>>,>>,,>>,>,>>>,>,>,>,,>,>,>,,>,>,>,>,>,>,>>,>,>,,>,>,>,,>,>,,,>>,>,,>,,>,,>,>,,>,>,,>,,,,,,,>,,>,>,,,,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,',,,',,,',,',',,,,,,,',,,,',,,,,',,',,',,',',,',,',',,',',,',',',,,',',,',',',',',',','',',','',',',',',',','','''','',','','','''',',',',',','','",
-">;>>;;>;>>;>;>>;>;>;>>;>;>;>;>;>;>>;>;>;;>;>;>>;>>;>;>>>;>;>;>>;>;>>;>;>;>;>;>;>>;>>;>;>;;>;>;>;>>>;>;>>;>;>;>;>;>;>;>;;>;>>;>;>;>;>;>;>;>>>;>>;>;>>;>;>>>>;;>>;>>;>>;>>>>;>;>>;>;>>>>;>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>,>>>,>>>,>>>,,>>,>>>,>>>,>,>,>,>,>>>,>>,>>,>,>,>,>,>,>,,>,>,,>,>,,,>,>,,>,>,,,>,>,,>,,>,,,>,,,,>,,,,>,>,>,,,,,,,,>,>,,,,,>,>,,>,,>,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,',,,,,,,,,,,',',',,,,',,,,',',,',,',,',,',',',,,',',,,'',',',,'',',',',',',',',',',',','',',',''',',',''',,'',,''',','','','',',''''''''''''''''",
-";>;;>>;>;>;>;>;>>;>;>;>;>;>;>>>;>;;>;>;>>;>;>;>;>;>;>;>;>;>>;>;>;>;;>;>;;>;>>;>;;>>;>;>;>>;>;>;>;;;>>;>;>;>>;>>;>;>;>;>>;>;;>;>;>;>;>>>;>>;;>>;>;>;;>>>;>;>>>;>>;>>>>>;>;>>>>>;>>>>;>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>,>>>>>,>,>,>,>,>>,>,>>>,>>,>>,>,>>>,>>,,>>,,>>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,>,>,>,>,>,,>>,,,>,>,,>,,>,,>,>,,>,>,,,,,,,,>,>,>,,,,,,>,,,,,,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,,,,,,',,,,,,,,,,,,,',,',,',,,,,,,,,,',,,',',,,',,',,',,',,',,,'',,','',,,',,',',,',,',',',',',',',','',',,',',',,'',''',,''',''',,'''','','',''''',',',',',','','",
-";>>;>;>;>;>>;>;;>;>;>;>>;>>;;;>;>>;>>>;;>;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>>;>;>;>;>>;>;>;>;>;>;>>;>>>;;>;>;>;>;>;>;>>;>>;>;>;>>;>>;>;>;;;>;>;>>;>;>>>>>;;>>>;>;>>;>>;>;;>>>>;>;>>>;>;>>>;>;>>>>;>;>>>>;>>>>;>>;>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>,>>,>>>>>>,>>>>>,>>>>>>>>>>>>>>>>>,>,>,>>,>>>,>,>>,>>>,>>>,>>,,>,>>>,>,>,>>,>,>,>,>,>,>,>>>,>,,>,,>,>,,>,,,>,,,,>>,,,>,,,>,>,,,>,>,,,>,>,>,>,,,,,,,,,>,,,,,>,,,>,,,>,,>,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',',,,,,,,,,,,',',',',,,',,,,,',,',,,',,',,',,'',,,',,,,,'',',',',',',',',',',',',',',',','',','','','',,''',',','''',',''''','',','''''''''''''''''",
-";>;>;>;>;>;;>;>>;>;>;>;>;>;>>>>;>;>;>;>>;>;>;>;>;>;>;>;>;;>;>;>>;>;>>;>;>;>;>>;>;;>>;>;>;>;>;;>;>;>>;>;>;>;>;>>;>;>;;>;>;>;>;;>>;>;>>>;>>>;>;>>;;;>;>>;;>>;>>;>>;>>>>>;>>>;>>;>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>,>>>,>,>,>,>,>,>,>,>,>>>>>,>>>,>>>>,>>,>,>>,>,>,>>,>,,,>,>>,>,>,>,>,>,>,>,>,,,>,>,>,>,>,>,>,>,>,>>,,,>>,>,>,,>,,>,,,,,>,,,,,,,,>,>,>,>,,,,,>,,,>,,,>,,,,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,',',,',,,,,,,,,',,,',',,',,,',,',,,,,',,',',,'',',,,',',,',,',',',',',',',',',',',','',',',',','''',,''',',','','',','','''',',',',',',','','",
-">;>;>>;>;>>;>;>;>>;>;>;>;>;>;;>;>;>;>;;>;>;>;>>;>>;>;>;>>;>;>;;>;>;>;>;>>;>;;>;>>>;>;>;>;>;>>;>;>;>;>>;>;>;>;;>;>;>>;>;>;>;>>;>;>>;>;>;;;>>;>;>>>>;>;>>>;>>;>>;>>;;>;>>;>>>;>>>;>;>>;>>;>>>>;>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>,>>>,>>,>>>>>>>>>>>>>>>>>>>>>>,>,>>,>,>>,>,>,>,>>,>,>>>,>,>>>>>,>>,>,>,>,>,>,>,>,>,>>,,>,>,,>,,>,>,,>,,>,,,>>,,,,,,>,,,>,>,>,>,,>,>,>,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,',,,,,,,,',',',',,,',,,,',,',',,,,','',,',,,',',,','',',,',',',,',',',',',',',',''','',',','','',',,''',,''','','',','','',''''''''''''''''''''",
-">;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>>>;>>>;>;>;>;>;>>;>;>;>;>>;>;>;>;>;;>;>>;>;;>;>>;>;>>;>;>;>;>;>;;>>>;>;>>;>;>;>>;>;>>;>;>;>;>;>;>>>>;>>;>>;;>>;>>;>>;>>;>>;>>>>>>>>>;>>>;>>>>;>>>>>>;>>>;>>>>;>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>,>>,>>>,>>>>>>>,>>>,>,>,>,>,>,>,>,>,>>>,>>,>>,>>>,>>>,>>,>,,>>,>,,,,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,>>,,>,>,,>,,>,,,,>,>>,,,>,,,,>,,,>,,,,,,,>,>,>,>,,,,,,,>,,>,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,,,,,,',,,,',,',,,,,,',',,,,,,,,,,',,',',,',,,,'',',,,,',,',',,,',,',,,,'',',',',,',',',',',',',',',','','',',',',''',,''',,'','','''','','',',',',',',','','','",
-">;>;>;;>;>;;>;>;>;>;>;>;>;>;>;>>;>;>;;>;;;>;>;>;>;>;>;>;>>;>;>;>>;>;>;>>;>;>;>;>;>;;>;>>;>;>;>;>;>;>>;>;>;>;>;>>;>;;>;>>;>;>;>;>;>;>;;>;>;>>;>;>>;>;>>>;>>;>>;>>;>;>;>;>>>;>>;>;>>>>>;>>>>>;>>>>>>>>;>>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>,>,>>>>>,>>>>>>>>>>>>>>>>>>,>>>,>>,>>,,>>,,>,>,>>>>,>,>>>>>>,>,>>>,>,>,>,>,>,>,>>,>>,>,>>,,>,>,,>,>,>,>,>>,>,,,>,,>,>,,,>,,,>,>,>,,>,,,,,,,>,,>,,,,,,,,,>,,,,>,,>,,,,,,,,,>,,,,>,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,,,,',',',',,,,,,,,',,',',,,,,',',,',',',',',,,''',,',,,','',',',',',',',',',',',,',','',''',',''',','',''','',''','''''''''''''''''''','''",
-">>;>;>>;>;>>;>;>;>>>;>>;>>;>;>;;>;>;>>;>>>;>;>;>;>;>;>;>;>>;>;>;;>;>>;>;>>;>;>>;>;>>;>;;>;>;>;>;>>;>;>;;>>;>;>;;>;>>;>;;>;>;>;>;>;>;>>;>>;>;>;>>;>>>;;>>>;>>;>>;>>>>>>>;>>>;>>>>>;>;>>;>;>>>>>;>>>>>>>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>>>,>>>>>,>,>,>,>,>,>,>,>,>,>>>>>,>>>,>>>>>,>>,,>>,>,>,,>,>,>,,>>,>,>,>,>,>,>,,>,,>,,,,>,>,>,>,,,>,,>,,,,>,>,,>,,>,,>,>,>,,,,,,>,,,>,>,>,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,,,,,,,',,,,,,,,,',',',',,,',,,',',',,,',,',,',,',',',,',',',',,,,',',',',',',',',',','','',',',,'','',',''','',''','',''',',',',',',',',','''','",
-";>;>;>;>>;>;>>;>;>;>;>;>;>;>;>>;>;>;;>;>;>;>;>>;>>;>;>;>;;>;>;>>;>;>;>;>;>;>;>;>>;>;>>>;>;>;>;>>;;>>;>>;;>;>;>>;>;>>;>>;>;>;>;>;>;>;>;>;>;>>>;>;>;;>>>;>;>>;>;>>;>;>;>>>;>>>;>;>>>>>>>>>>;>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>,>>,>>,>>>,>>>,>>>,>>>>>>>>>>>>>>>>,>>>>,>,,>>>,>>,>,,,>>,>>>,>>>,>>,>,>>>>,,>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,>,>,,>>,,,,>,,>,,,>,,,,,,>,>,,,,,>,,,,,,,,>,,>,,,,,,,>,,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,',,,,',',,,,,,',',',,,,,,,,,,',,,',,,,',,'',',,',,',,',,',',,',',',''',',',',',',',',''','',',,',',''','',','',,'','',','',','',''''''''''''''''''''''",
-">;>;>;>;;>;>;;>;>;>;>;>;>;>>;>;>>>;>>;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>;>>;>;>>;>;>;;>;>;>;>;>>;>>;;>>;>;>;>>;>>;>;>>;;>;>;>;>;>;>>>;>;>>;>>;>;>;>>;>>>;>;>>>;>>;>>;>>>;>>;>>>;>>>>>>>;>>;>>>>>;>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>,>,>,>,>,>,>,>,>>,>,>>>>,>,>>,>,>>>>,>>,,>>,,,>,>,>>,,,>>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,,>,,,>,>,,>,>>,,>,,,>,,>,>,>,,,,,>,>,,,,>,>,>,,,,,,>,,>,,,,,,,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,',,,,,,,,,,,',,,,,,',,',,,,,,',',',',',',',,',',,',,,',',,',,',,,',',',,',',',,,',',',',',',',',',','',''','',',','',',''',''',''','''','''',',',',',','',','','",
-">;>;>;>>;>;>>;>>;>;>;>>;>;;>;>;;;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>;>;;>;>;>>;>;>;>;>;;>>;;>>;;>;>;>;>;;>;>;;>>;>;>;>;>;>>;;>;>;;>>;>>>;>;>>;>;>>>;>;>>;>>;>>;>>>;>>;>>>;>;>;>>>>>>>;>;>>>;>>>>>;>>>;>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>>>,>>>,>>,>>>>,>>,>>>>>>>>>>>>>>>>>,>>>,>,>>>>,>>,>>,>,>>,>>>,>>>>,>,>,>>>,,>,>,>,>,>,>,>,>>,,>,,>,,>,>,>,,>,>,,,>,,,>,,>,,>,,>,,,>,,>,>,>,,,,>,>,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,',,',,,,,,',',,,,,,,,,,,,,,',,,',,,,',,,,',',',',',',,,'',',,',',,',',',',',',',',',',,',',',','','',''',','','',','',','',','''''''''''''''''''''",
-";>;>>;>;>>;>;>;;>;>;>;>>;>>;>;>>>;>;>>;;>>;>;>;>;>>;>>;>;>;>;>;>>>;>>;>;>>>;>;>;>;>;>;>>>;;>>;>;>>;>;>;>;>>;>;>>;;>;>;>>>;>;;>>;>>>;>;>;;>>;>;>;>>;>;>>>;>>;>>;>>>;>>>;>>;>>>>>>;>;>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>,>,>,>,>,>,>>>,>,>>>,>,>>,>>,>,>>,>>,>,>,,>,>,>,>,,>>>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,>,,>>,,>>,,>,,>,,>,,,>,,>,,,,,,>,>,,,,>,,,>,>,,>,,,,,>,,>,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,,,,,,',,,,,',,,,,,,',,',,,,,',',',',',',',,',,',',,'',',,',,',',,,'',,,',',,','',',',',',',',','',''',','','','','',',','',',''''',''',''''',',',',',',','','','",
-">>;;>;>;;>;>;>>;>;>;>;;>;>;>>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;;;>;>>;>>;>;>;;>;>>;>;>;;>;>;>;>>;>;>;>;>>>;>;>;>;>>;;>;;>;>>;>>;>;>>;>>;>>>>;>;>>>>;>>;>>>;>>>;>>>;>>>>>>>>>>>>;>>;>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>,>>>>>>>,>>,>>,>,>,>>>>>>>>>>>>>>>>>,>>,>>>,>>>,>>,>,>>,>>,>,>>,>>,>,>,>>,>>,,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>,,,>,,,>,,>,,>,,>>,,>,,>,>,,,,,,>,,,,>,,,,,,,,,>,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,',,,,',,',,,,,,',',,,,,,,,',,,',,',,',,,',,,,',',,',,,',',,''',,,'',',,',',',',',',',',',',,',',,','',',',',''','','',',,'','',','''''''''''''''''''''''",
-">;>>;>;>>;>;>;>>;>;>;>>;>;>;;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>>>;>;>;>;>;>;>>;>;;>;>;>>;>;>;>;;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>>;>>;>;>;>>;;>;>>>;>;>>;>>>;>>>;>>>;>>;>;>>;>;>>;>>>>>;>>>>>>>>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>,>>>>>>>,>,>,>,>,>,>,>,>>,>>>,>>,>>,>>,>>,>,>,>>>,>>,>,>>,>,>,>,>>,>,>,>,>,>,>,>,,>,>,>,,,>,>,>,,>,,>>,,>>,,>,,>,,>,,,>,,>,,,,,>,>,,,>,>,,,,>,,,>,,,,,>,,,>,,,,,,>,,,>,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,',,,,,',,,,,,,,,',,,,,,',',',,,,',,',,',,',',,'',,',',,',',',',,,,''',,,',',',',',',',',',',','','''',',','',''',,'',''',''''',','''',',',',',',','','','','",
-";>;>;>;>;>>;>;;>;>;>;>;>;>>>;>;>;>;>;>;>;>;>>;>;>;>;>>;>>;>;>>;>;>;>;>>;;>;>;>;>;>;>;>;>>>;>;>>;>;>;>;>>;>>>;>;>;>;>;>;>;>;>;>;>;>>>;>;>;>>>;>;>>>>;>>;>>;>;>>;>>>;>>>;>>;>>>>>>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>>>>>,>>,>>>>>>>>>>>>>>>>,>>,>,>,>>,>>,>>,>>>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>>,>,,>,>>,>,,>,>,,>,,,>,,,>,,>,,>,,>,,,>,,>,>,,,,,>,,,,,,>,,,,>,,,>,,,,,>,,,>,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,',,,,',',,',,,,',',,,,,,',',,,',,',,',,,,',,,',,,',',,',,','',',,,'',',',',',',',',',''','',',',,',''','',',''',',','',',''''',','''''''''''''''''''','''",
-">;>;>>;>;>;>;>>;>;>>;>>;>;;>>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;;>;>>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>>;>;;>>;>;>;>>;>>;>>;>>;>>;>>>;>>>>>;>>;>>;>>>>;>>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>>,>,>,>,>,>,>,>>>,>>>>>,>>,>>,>>,,>>>,>>,>>,>>,>>>,>,>,>>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,>,>,,>,>,>,>,>,,,,,>,,,>,,,,,,,,>,>,,,>,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,',,',,',',,,,,,',,,,,',,',',,'',,',',,',',,',',,',',',,',',',',',',',',',',','',','''',,'','',',',''','''','',,',''''',',',',',','',','''','",
-">;>;>;>>;>;>;>;>>;;>;;>;>;>;>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>>;>;;>;>;>;>;>>;>;>>;>>;>;>;>;>;>;;>;>;>;>;>;;>;>;>;>;>;>;>>>;>;>;>;>;>;>;>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>;>;>>>;>>>>>;>>>>>;>>>>>>;>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>>>>>,>>>>,>>>>>>,>>,>>,>>>>>>>>>>>>>>,>>>,>,>>>,>>,>>,>>>,,>>,>>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,,>,,>,>,,>,,,>,>,,,>,>,>,>,>,>,,,,>,,,,,>,,,,,>,,>,,>,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,',,',',',,,,,',,,,',,',,','',,,',,,,',,,',',,',,,',',',',',,',',,,',',',',',',',',',',,','',,,''',','','',',''',','',''''',',''''''''''''''''''''''''",
-";>;>;>;;>;>>;>;>;>>;>>;>;>;;>>;>>;>>;>;>;>;>>;>;>>>;>;>;>;>;>>;>>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>>;>;>;>>;>>;>;>;>;>;>>;>>;>;>;>>;>;>>;;>>;>>;>>;;>>>>>;>>>;>>>>>;>>>>;>>>>>;>>>;>>>>>>>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>,>,>,>,>,>,>>,>,>>,>,>>,>>,>>,,>>>,>>,>>,>,>,>>,>>>,>,>,>,>,>,>,>,>,>,>,,,,>,>,>,>,,>,>,>,,,>,,>>,,>,>,>,,,,,>,,,,,,,>,,,>,>,,,,>,,,>,,>,,,,,,>,,>,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,',,,,,,,,,,,,,',,,,',,',,',,,,',',,',',,',',,',',',',,',,',,,'',',''',',',',',',',',',','',',,''',,'',','',''',',','',''',',''''',',',',',','','',','','",
-">>;>;>>;>;;>;>;>;>;>;>;>;>>>;>;>;>;>;>>>;>;>;>>;;;>;>;>>>;>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;;>;>;>;>>;>;>>;>;>;>>>;;>;>;>;;>;>;>;>;>;>>;>>>;>;>;>;>>;>>;>>;>>>;>;>>>;>>>;>;>>>;>>>>>;>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>>>,>>,>>,>,>>>>>>>>>>>>>,>>>>,>>>,>>>,>,>,>>,,>>,>,>,>>,>,>>,>,>,>>,>,>,>,>,>,>,>,,>,>>,>,,>,>,>,,,>,,>>,,>,,,>,,,,,>,>,>,,>,>,>,,,>,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',,',,,,,,,,',,',,',,',,,,',,',,,,,,',,,,,',,,,',,',',,,',,',',',',''',,',,,,,',',',',',',',''','',',''',,''',''',',',,''','','',','',',',''''''''''''''''''''''''",
-";>;>;>;>;>>;>;>;>;>;>;>;>;;;>;>;>;>;>;;;>>;>;>;>>>;>;>;>;>;>>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;;>>;>;>;>;>;>;>>;>;>;>>;>;>>;>>;>;>>;>;>>>;>;>>>>;>>;>>;>;>>>;>>;>;>>>>;>>>;>>;>>>>>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>>>>>>>>>>>>>,>>,>>>>>,>>>>>,>,>,>,>,>,>>>,>,>>,>>>,>>,>>>,>>,>,>>>,>,>>,>,,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,,>>,,>,,>,>,>,>,,>,>,,>,,,>,,,,,,,>,,,>,>,,,>,>,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,,,,,,',,',',,',,,',',',,'',,',',',,',,,',',,',,,',',,,,',',''',',',',',',',',',',',','',,''',',',',''',''','''''',''','''''',',',',','','',','','','",
-";>;>;>;>>;>;>;>;>;>>;>>;>>>;>;>;>;>;>>>;;>;>;>;>;>;>>;;>;>>;;>;>;>;>;>>;>>;>;>;>;>>>;>;>;>>;>;>>;>;>;>>;>;>;>;;>;>;>>;>;>>;>;;>;>>;>;>;>;>;>>;;>>>;>>;>>>>;>>>;>>>>;>;>>;>>>;>>>>;>;>;>>>>;>>>>;>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>>>>>>>>,>>>>>,>,>>>>>>>>>>>>,>,>>>,>>,>,>>>,>,>>>,>>,>,>>,>,>,>>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,,,>,,,>,,>,,,,>,>,,>,>,>,,,>,,,,,>,,,,,,,,,>,,,>,,>,,>,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,',,,,,,',,',,,,,,,,,,',,,',,,,,',,,,',,,',,',,'',',,',,',',,','',,',,,,',',',',',',',',',',','','',,'',''',',','',',',',','',''',','''''''''''',''''''''''''''",
-">;>;>;>;;>;>>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;;>>;>;;>;>>;>;>>;>;>;;>>>;>;>;>;>;>;>;;>>;>;>;>;>;;>>;>;>>>;>;>;;>;>;;>;>>>>;;>>>;>;>>>;>>>;;>>;>>>;>;>>;>>;>;>>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>,>>,>,>>>>>,>>>>>,>,>,>,>,>,>>>>>,>>,>>>,>,>>,>,>,>>,>,>>,>,>,>,,>,>,>>,>,>,>,>,>,>,>,,>,>,>,,>,>,,>,>,>,,>,>>,,>>,,>,,>,>,,,,>,,,,,,,>,,,>,>,,,,,>,,>,,,,,,,,,,,,,,,>,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,',,,,,',',,,,,,,',,',',',,,',,,',',,',',,,',,',,',,,',',',',,,',',,',','',',',',',',',',','','',',',','','',,''','',','''',''','',',''',',',',',','''','','','',''",
-">;>;>;>>;>>;;>;>;>;>;>;>;>;>;>>>;>;>;>;>;>>;>;>;>;>>;>;>>>;>;;>;>;>;>;>>;>;;>;>>;;>;>;>;>>>;>;>;>;>;>>;;>;>;;;>;>;>>;>;>>;>;;>;>>>;;>;>>;;>;>;>>>;>>;;>>;>>>>>>>>>;>>>>;>;>>>>>;>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>,>>>>>>>>>>>>>>>>>>,>,>>>,>>>>>>>>>>>>>>,>,,>>,>>,>>>>,>,>>,>>,>>>,>,>>,>>>>,>,>>,>,>,>,>,>,>,>,>>,>,>,>>,>,,>,>,,>,>,,>,,>,,,>,,>,,>,>,>,,>,>,>,,,>,,,,,,>,>,,,,,,>,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,,,,,,,,,,,,,,,',',',,,,,,,,,,',,,',,,,',,,',',,',,',,',,',,',,',',',',',,',,',',',',',',',',',,'',',',',',',',''',,'',''',',''',''','''','''''''''''''',''''''''',''''",
-";>;>>;>;>;;>>;>;>;>;>;>;>;>;>;;>>;>>;>;>;>;>;>;>>;>;>;>;;>>;>>;>;>;>;>;>>;>>;>;;>>;>>>;>;;;>;>;>;>>;>;>>;>;>>>;>>;>;>>;>;>;>>;>;>;>>>;>;>>>>;>>;>>;>>>;>>;>;>;>;>;>>;>>>>>;>;>>>>>>>;>>>>;>>>>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>,>>>>>>>>>,>,>,>,>,>,>>,>>>>,>>>,>>,>,>>>,>,>,>,>,>>,>,>,,,>,>>,,>,>,>,>,>,>,>,>,,,,>,,,,>,>>,>,,>,,,>,,>,,>,,>,,,>,,>,,,>,,,,>,,>,,,>,>,,,,,,>,>,,,,,>,>,>,,>,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,',',',',,,',,,,',,',',,,',,,',,',',,',,,',,',,',',',',',,,',',',',',',','',','',','','',',',''',',,'','',',','',',''',',',',',',''','',',''''',''",
-">>;;>;>;>>;;>>;>>;>;>;>;>>>;>>;;>;;>;>;>;>;>;>;>;>;>;>;>;;>;>;>>;>;>;>;;>;;>;>>;>;>;;>;>>>;>;>;>;;>;>;>;>>;>;>;;>;>;;>;>;>;>;>>;>;>;>>>;>;>>;>>>;>>;>>;>>;>>>>>>>>;>>;>>>>>>>>;>;>>>>>;>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>,>,>>,>>,>>,>>,>,>>>>,>>>,>,>,>>>>,>,>,>>,>,>,>,>,>,>,>,>>>,,>>>,,,,>,,>,,>>,,>,,>,,>,,>,,,,,,>,,,>,,,,>,,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,',,,',,,,,,,,,,,',,,',,,',,,,',,',',,',',,',',',',',',',,',',,''',',',',',',',',',',',','',',','','',,',''','',''''','''',','''''''''''','''''''','''''''",
-";>>>;>;>;>>;>;>;;>>>;>;>;>;>;;>>;>>;>;>;>;>;>;>;>>;>;>>;>>;>;>;;>;>;>;>>;>>>;>;>;>;>>;>;>;>;>;>;>>;>;>;>;;>;>;>>;>;>>;>;>;>;>;>>;>;>;>;>;>;>>;;>>;>>;>>;>>>;>;>;>>>;>>;>>;>>;>>>>;>;>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>>>>>>,>,>>>,>>>,>,>,>,>,>,>,>>,>>>>,>>,>>,>>>,>>>,,>,>,>,>>>,>,,,>>,>,>>,>,>,>,>,>,>,>,>,,,>>,,,>>,>,,>,>,,,>,>,>,>,,,>,,>>,>,,,>,,>,>,,,>,,,>,,,>,>,,>,,,,,>,,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,,',,',,,',,,',,',',',',,,',,,',,',',,',,,,,',,,',,',',,,',',',',',',',,,,',',',',',',',','',',',,'','','',''''',',''',',','',',''''''',',',','''','',''''','',''",
-";;;>;>;>;;>;>;>>;>;>;>>;;>;>>;>;>;>;>>>;>>;>>;>;;>;>;>;>;>;>;>>;>>>;>;;>;>;;>>;>;>;;>;>;>;>>;>>;>;>>;>;>>;>;>;>;>>;>;>>;>;>>>;;>>>;>;>;>>>;>>>>;>>;>>;>>;>>>>>>;>;>>;>>;>>>>>>>>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>,>>,>,>,,>>>,>>,>,>,>,>>>,,>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,>,>,,,>,,,>,>,,>,,,,>,>,,>,,,,>,,,>,,,>,,,,,,,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,',,,',',,,'',,',,,',',,,',,,',',,',''',',',',',',',',',','',''',,','',',',,'','','''','',''',',',','''''''','''''''','''''''''",
-">>>;>>;>>>;>;>;;>;>;>;>>;>;>;>;>;>;>;;;>;>;>;>;>>;>;>;>;>;>>;>;>;;>>;>>;>;>>;;>;>;>>;>;>;>;>;>;>;>;;>>;>;>;>;>;>;;>>;;>>;>;;>>>;;>>;>>;>;>>;>;>>;>>;>>;>>;>;>;>>>>>>>>>>>;>;>;>;>>;>>>>>>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>>>,>>>,>>,>,>>,>,>,>,>,>,>,>,>>>,>>,>>>,>>>>>>,,>>,>>,>>,>>,,>>>,>,,>,>,>,>,>,>,>,>,,>,>,>,>,>>,,>,,>,>,,>>,,>,>,,,>,,,>,>,,,>,,,,>,,,>,,,>,,,,,>,,>,,,,,>,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',',,',,,',,',',,',,,',',',',',,,',,,',,',,',',,','',,,',,'',,','',,''',,',',',,,',',',',',',',',',',',',,''',',''','','','',','','',',''''''',',',',''''','','''',',''''",
-";;>;>;>;;>;>;>>>;>;>;>;>;>;>;>;>;>;>>>;>;>;>;>;>;>>;>;>;>;;>;>;>>;;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>>;;>>;;>;>>;;>>>>;>;>>;>;>>>;>;>>;>>;>>;>>>>>;>;>;>;>>;>>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>,>>>>>>>>>>>>>>,>>>,>>,>>,>,,>,>>>,>,>>,>,>,>>,>,>,>>>,>>,>,>,>,>,>,>>,>,,>,,>,,,>>,>,,,>,>,,>,>,,>,,>,>,,,,>>,,>,>,,,>,,,>,,,>,>,,,,,,>,,,,,,,,,,,,>,,,,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',,,',,,,,,,,,',,,,,,,,',,'',',',',',',','','',','','',,''',','','',','','','','''',',',''''''''',',''''''','''''',''",
-">>;>;>;>;>>;>;;;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>>;>;>;>>;>;>>;>;;>;>;>;;>;>;>;>;>;>;>>;>;>>;>;>>;>>;>;>>;>;>>;>>;>>;;;>>;>;>>>;>;>>>>;>>;>>;>>>>;>>>>>>>;>>>>>>>>;>>;>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>,>>,>>,>>>>,>,>,>,>,>,>,>>,>>,>>,>>>>,>>,>,>>>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>>>,,>,>,>,,,>,,>,>,,>,,,,>,>,,,>,,,,,>,,,>,,,>,,,,,>,,>,,,,>,>,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,',,,,,,,,,,,,,',,',,,,,,,,,>,,,,,,',',,,,,,,,',,,,,,',,,,,,,,,,,',,,',,',',',',',',',',','',',',','',,'',','',,''','',''','',','''''',',',','''''',','''','''''''",
-";>;>;>>;>;>;>>>;>;>;>;>;>;>>>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>;>>;>;;>;>;;>;>>;>;>>;>>>;>;>;>;>;>;;>;>;>;>>;;>>;>;>;;>;>;>;>;>;>>>>>;>;>;>;>>>;>;;>>;>>;>>;>;>>;>;>;>>>>;>;>;>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>,>,>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>,>>,>>,>,>>,>>,>,,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>>,,,,>,,,>,>,>,,>,,,>,,>,>>,,,>,,,,>,>,,,>,,,>,,,,>,,,,,,,,>,,,,,,>,,,,,,,>,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,',,,,,,,',,,,,,,,,,,,,,,,,,,,,,>,,>,,,,,,,',',',',,,,,,,,,,,,',,,,,,,,,,',,',',',',',',',',',',,',',',','''',','',''',,'','',''','''',',','''''''','','''''','''','''''",
-">;>;>;>>;>;>;;>>;>;>;>>;>>;;;>>;>>;>;>>;>>;>;>;;>;>;>;>;>;>;;>;>>>;>>;>;>;>>;>;>;;;>>;>>;>>>;>>;>;>;>;;>>;;>;>;>>;>;>;>;>;>;;>;;>>>;>;>;>;>>>>;>>;>>;>>>>;>>>>>>;>;>>>>>>>>;>>>>>>;>>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>,>>,>>>>>,>,>,>,>,>,>>>>>,>>,>>,>>>,>,>>,>>>>,>>>,>,>>>,>,,>,>,>,>,>,>,>,>,>,>,,>,>>,,>,>>,>,>,,,>,>,,>>,,>,,,,,,>,,>,>,,,,,>,,,>,,,>,,,,,>,,>,,,,>,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,,,,>,,>,,,,,,,',,,,,,',,',,,,,,,,',,,,,,,,,,',,,',',',',',',','','''',''',',,',''',',','''',''',','',','''''''',',',''''','','''',''''',''",
-">;>;>;;>;>;>>;;>;>;>;>;>;>>>;>;>;>;>;;>>;>;>;>>;>;>;>;>;>;>>;>;>;;>;>;>;>;;>;>;>>>;>;>;>;;;>;>;>>;>;>>;>;>>;>>;>;>>;>;>;>>>>;>>>;;>>>;>>>;>;>>;>>;>>;>;>>>;>;>>>>>;>>;>>;>>>;>;>>>>>;>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>,>,>>>>>>>>>>>>,>,>>,>>>,>>,>,>>,>,>,>,>>,,>,>>,,>,>>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,,>,,>,>,,>,>,,>,,>,>,>,,>,,,>,>,>,,,>,,,>,,>,,>,,,,,>,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,',,,,,,,,,,,,,,,,',,,,,,,,>,,>>,>,,,,',,,',',,,,,,,,',,,,,,,,,,,,,,',,,',',',',',',',',',',',,',',',''',',,',''',,','','''','','',',',','''''',''''''''','''''',''''",
-";>;>;>>;>>;>;>>>;>>;>;>;>;>;>;>;>;>>>;;>;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>;>;>;>;>>>;>;>;;>>;>;>;>;>;>;>;>;;>;>;>;;;>>;;>>>;;>>;>;>>>;>>;>>;>>>>;>;>>>;>;>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>,>>>>>>>>>>,>>,>,>,>>>>>,>>>>,>,>,>,>,>,>>,>,>>>,>>>,>>>>,>>>>,>>,>>>,>,,>>>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,,>>,,,>,>,,,>,,>,,,>,,>,,>,,,,,,,>,,,>,,,,,,,,,,>,,,>,,>,>,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,>,>,,,,',,,',,',',',,,,,,,,,,,,,,,,,,,',,,,',',',',',',',',','',',',',','''','','','','',','','',''''''''',',''','','','''''','''''''",
-">>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>>;;>>;>;>;>>;>;>;>>;>;>;>;>;>;>>;;>;>;>>;;>;>;>;>;>;>;>;>>;>>>;>>>>;>>;>;>>;>>;>>;>>;>>;>>;>;>>>>>;>>>>>;>;>;>>>>>>;>>>>>;>>>;>>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>,>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>>,>>>>,>,>,>>,>,,>,>,,>>,>,>,>>>>,>,,>,>>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,,,>>,,,,>>,,>,,>,,,>,,>,,>,>,>,,,>,,,>,>,,>,,>,,,,,,,,,,,,>,,,>,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,',,,,,,,,,,,,,,,,,,>,>,>>,>,>,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,,,,,,'',',',',',',',''',',','','','',','',',','','','',','','',',',',''''','''''',''','','''''',''",
-";>>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;;>;>;>>;>>;>;>>;>>;>;;>>;;>;>;>;>>;>;>;;>;>;>;>;>;>;;>>;>>;>;>>;>;>;>;>;>;>>;>;>;;;>;>;;>>;>;>>;>;>>>;>;>>;>>;>>>>>;>;>>>;>;>>>>>>;>>;>>>>>;>>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>,>>,>>,>>>>>,>>>,>,>,>,>,>>,>>>,>,>>>>>,>>>>>>,>>,>,>>>,>,,>,>,>>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>>,,>,>>,,,>,,>,>,>,,>,,>,,,,,,>,,,>,,,,>,,,,,,,>,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',',,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,>,>,,,,,',,',,,',,,,,,,,,,,,,,>,,,,,,,,,,,,,,',',',',',',','',',',','','',','',''',''''','''','','''''''',',''',',''''''''''',''''''''",
-";;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>>>;>;>;>;;>;>;>;>;>;>>;>;>>>;>;>;;>;>;>>;>;>;>>;>>;>>;>;>;>;>;>;>>;>;>;>;>;;>;>;>>>;>>;>>;>;>>;>;>>;;>>>;>>;>>>;;>;>>>>;>>;>>;>>;>>>>>>;>>;>>>>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>,>>>>>>>>>>>>>>,>>,>>,>>,>,,>>,>,,>,>>>,>>,,>>>>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,,>,,,>,,>>,,>,,,,,>,,,>,,>,>,,,,>,,,>,,,,,>,,>,,,,,,,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',',,,,,,>,>,,,,,,,,,>,>,>>,>>,,,,,,,,,,,',,,,,,,,,,,,,,>,,,,,,,,,,',',',',',',',',',',','',',',,',','','',',',',,'',','''''',',','''''','''''','',',','''','''','",
-">>;>;>>;>>;>;>;>;>>;>>;>>;>;>>>;>;;;>>;>;>>;>>;>;>;>;>;;>;>;>;>;>;>>;>>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;>;>>>;>>;>;>;;>;>;>>;>;>>;>;>;>>>>;>>;>>;;>>>>>>;>>>;>>>;>>>>>>;>>>>;>>>>>>>;>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>,>>,>>>>>>,>,>,>,>,>,>>>,>>,>>>,>>>>>,>>>>>>,,>>,>>>,>,,>>>,>,>,,>>>,>,>,>,>,>,>,>,,,>,>,,>,>>,,>,>,,>>,,>,,,>,,,>,>,,>,>,,>,,,>,>,,,>,,,>,>,,,,,,,>,,>,,,,,,>,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,',,,,,',,,,,,,>,>,,,,,,,,>,,>,>>,>,,,,',,',,,,,,,,,,,,>,>,,,,,>,,,,,,,,',,',,',',',',',',',','',','''','',','',','''',''''',,','''''',',',''','','''''''''''''','''''",
-";>;>;;>;>;>>;>;>;;>;>;>;>;>>;;>;>>>;;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;;>;>>;;>;>;>>;>>;>;>>;>;>>;>;>>>;>;>>;>>;>>>>;>;>;>>;>>>;>>>;>;>>>>;>>>>>;>;>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>,>>>>,>>,>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>,>>,>>>,>,>>,>,,>,>>>,>,>,>,>>,,,>>,>>>,,,>,>,>,>,>,>,>,>,>,>,>>,>,,,>,>,>,,,,>,>,>,,>>,,,>,,,,,>,,,>,,,,>,,,>,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,,,,,,,,,,',,,,,,,,,,,,,>,>,,,>,,>,>>>,>,>,,,,,,,,,,,,,,,,>,>,,,,>,,>,,,,,,,,,,,',,',',',',',''',',',,''',',',',''','','',','',',,'''',','','''''',''''''',',''',''''''''''''",
-">;>;>>;>;>;;>;>;>>;>;>;>;>;;>>;>;>;>>;>;>;>;>;>;>;>>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;;>>;>;>>;>;>;>;>;>>;>;;>>;>;>;;>;;>>;>;>>;>;>;>;>;>;>;>>;>>;>;>>;>>>>;>>;>>>;>>>>;>>>>;>;>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>,>>>,>,>>>,>,>>,>,>,>,>,>>>,>>,>>,>,>>>,>>>>>,>,>,>>,>>,>,>>>,>,>,,>>>,>,>,>,>,>,>,>,>,>,,>,,>,>>,>,,,,>>,>,,,>,>,,,,>,,>>,>,,,>,,,,>,,,>,,,>,>,,,>,,,,,,>,,,,>,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,',,,',,,,,,',,,,,>,>,>,,,>,,,>,>,,>>,>,>,,,,,,,,',,,,>,,,,>>,,>,,,,>,,,,',,',,'',',',',',',,,''','',',',''',',',',''','''','''',','''','''',',''','',''''','''','''''','''",
-">;>>;>;>;>>;>;>;;>;>;>;>;>>;;>;>;>;;>;>;>;>;>>;>>;;>;>;;>;>;;>;>;>;>;>;>>>;>;>;>>;;>;>>;>;>;>;>;>;>>;>>;;>;>;>>;>>>;>;>;>>;>>>;>;>>>>>;>>;>>;>>;>>>;>>>;>>>;>>>;>>>;>>>>>>>;>>>;>>>>>;>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>,>>,>>,>>>,>,>>,>,,>>>,>,>>,>>,>>,,>>,>>>,,>>,>,>,>,>,>,>,>,>,>,>,>,,,,>,>,>>,,,>,>>,,,>,>,>,,,,,,>,>,,>,>,,,>,,>,,,,,,,,,,>,,>,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,,,,',,',,,,,,,,,>,>,>,,,>,>,>>>,>>>,,>,>,,,,,,,,,,,,>,>,,>,,>,,,,,,,,,,,,,',,',',',',''''',,',',',',','',',''',','',','',''','','''',','''',''',''',''''','''','',''','",
-";>;;>;>;>;>;>>;>>;>;>;>>;>;>>;>>;>>;>>;>;>;>;;>;>>;>>;>>;>;>>;>>;>>;>;>;>;>;>;>;;>>;>;>;>>;>>;>>;>;>;>;>>;>>;>;>;;>;>>;>;>>;>;>>>;;>;>>;>>;>>;>>>;>>>;>>>;>>>;>>>>>>>;>>;>>>>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>,>>,>>>,>>>>>>,>>,>>,>>>>,>,>,>,>>>>>>,>>,>>>>>,>>>>,>,>>>,>>,>,>,>>,,>,,>>,>,>,>,>,>,>,>,>,>,,>,,>,>>>>,,>,,,>,>,,,,>>,,>,,,,>,>,>,,,>,,,,,>,,,,,>,>,>,,>,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,',,,',,,,,,,,,,,,>,>,>,>,,>,,>,>,,>>,,>>>,>,>,>,,,,,,,,>,,,,,,>,,,,,,,,,,',',,,',',',',',,',,''',',',','',',''',,'',','',''',','','',',''''',''','''''''',''''','''''''''''",
-";>>;>;>;>;>>;>;>;>>;>;>;>;>;>;;>;>;>;>;>>>;>>>;>;>;;>;>;>>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>>;>;>;>>;;>;>>;;>>>>;>>;>>;>>>;>>;>;>>>;>>;>>>>;>;>>>>;>>>;>>;>>;>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>>>,>>,>>>>>>>>,>>>>>>>>>>>,>,>,>>,>,>,>,>>,,>,>>,,>,>,>>,>,>,>>>>,>,>,>,>,>,>,>,>,>,,>>,,>,>,,,,,>,>,>,,>,>,>,,,>,,>,>,>,,,,>,,,>,>,,,>,>,,,,,,,,,,>,,>,,>,,,,,,,>,,,,>,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,',,,,,,>,>,>,,>>,>,>,,,>>>,,>>>,>,>,>,,,,,,,>,>>,>,>,>,,,,,,,,,,',',',',',','',',,,',',''',','',',''',','','',',''','','''',',''',''','','''''','''''''''''''''",
-";>;>>;>>;>;;>;>>;>;>;>;>;>;>;>>;>;>;>;>;>;>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;;>;;>;>>>;>>>;>;>>>;>;>>;>>;>>;;>;>>>>>>;>>;>>>;>>>>>;>>>>>;>>>>>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>,>,>,>,>>,>>>,>>>>,>>>>,>>>>,>>>,>>>,>>,>>,>,,>,>>,>,>,>,>,>,>,>,>>,,>>,>,>,>>,>,,>,>,,>,>,,>,,>,>,,,,,>,>,,>,,,,,>,,,,>,>,>,,>,,,,,,,,,,>,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,>,>>>,>>,>>>,>,>,,,>>>>,>>,>>,>,>>,>,>,,,>,,>,,,,,,,',',',,',',',',',','',''''',',',''',','',',''',''','''','','''',''''',''','''''','','''','','','','''",
-">;>;>;;>;>>;>;;>;>;>;>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;;>;;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>>>;>>;;>;>;>;>;>;>>>;>>;>>;>>>>>>;>;>;>>>>>;>>;>>;>>>;>>>>>>;>>>>>;>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>,>,>>,>>>>>>,>,>>>>>>>>>>>>>>,>>>,>,>>,>,>,>,,>>,>>,>,>>,>,,>,>>,>,>,>>,>,>,>,>,>,>,,>,>,,,>,>,,>,>,,>,,>,,,>,>,>,,,,>,>>,,,,>,,>,>,,,>,,,,,,,,,,,,>,>,,>,,,,,>,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,',',',,,,,,,,>>,>>>,>>>>>>>,>,>,,,>,>>>>,>,>,,>,>,,>>,,>,,>,>,,,,,,,,',',,',',',',',',',',,',',',','''',',',','','',',','''',',''',',''',''',',''''''',''''''''''''','",
-">;>;>>>;>;;>;>>;>;>;>;>>>;>;>>;;>>;>;>;>;>;;>;>;>;>;>;;>;>;>;>;>;>>;>;>>;>>;>>;>;>;>;>;>;>;>;>;>;>;>>>;>;>;>;;>;>;;>>>;>>;>>>;>;;>>;>;>>;>;>;>;>>>>>>;>;>>;>>>>>>>>>;>>;>>>>>;>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>,>,>,>,>,>,>>,>,>>>>,>>>,>>>,>,>,>>,>,>,>>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>>,,,,>,,>,>,,,,>,>,,>,,,,>,,,>,>,>,,>,>,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,>>,>>>>>>>;>>>,>,,>,>>,,>,>>>,>>,>,>>,,>,,>,,>,,,,,,',',,,'',',',','','',',','',',',',,,'',''','',','','''',','''',''''','','''''','',''''',''''',''''''",
-">;>;;;>;>>;>;>;>>;>;>>;;>;>>;;>>;>;>;>;>;>>;>;>;>;>;>>;>;>>>;>;>;;>;>;>;>;>;>;>>;>;>>;>>;>>;>>;>;>>;;>;>;>;>>;>;>>;>;>;>>;>;>;>>>;>>>>;>>>;>>>>;>;>;>>>>;>>>;>;>>;>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>,>>,>>,>>,>>,>>>,>>>>>>>>>>>>>>>>,>>>,>,>>,>,>>,>>,>>>,>,>>,>,>,,>,>,>>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,>,>,>,,,>>,>,>,,,,>,>,,,>,,,>,,,,>,,,,,,,>,,,,,>,,>,,,,,>,,,>,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,,,,',,',,,',,,',,,,',,,>,>>>>>>;;;;;;;>>>,>,>,>>>>>,,>>,>,>,,>,,>,,>,,>,>,,,,,,,'',,',',',',,',','','',',''','''','',',','''''',',',''',',''',','''''',''''',''',''''',''''',''''",
-";>;>>>>;>;>;>>;;>>;>;;>>;>;>>;>;;>>;>;>>;>;>>;>>;>>;>;>;>;;;>>>;>>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;>;;>;>;>>;>>;>;>;>>>;>;>>;>;>>;>>;>;>>>>>>;>;>>>;>>>>>>>>>;>>;>>>>>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>,>>>>,>,>,>,>,>,>,>,>>,>>>>,>>>>>,>,>>,>,>>>,>>,>,>>>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>>,>,,,>,>,,>,,,,,>,>,,,,>,,,>,,,>,,,>,>,>,,,,,>,,,,,,,,>,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,',,,,,,,,,,,',,,,',,,,,,,>>>>>;;>;;;;;;;>,>,>,>,>,,>>>,,>,>,>,>,>,>,,>,,>,,,,,',,,,'',',',','',',',',',',',,'',','',,''','',,','','''',''''','''''',',''','''''''','''''''''''''''",
-";>>;;;>;>;>>;;>>;>;>>;;>;>;;>;>>;>;>>;;>;>;>;>;>;>;>;>>;>>>;>;>;>;>>;>;>;;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>>;>;>;>;>;>;>>>;>;>;>>;>;>>;>;>>;>>;>;>>>>>>;>>>;>>>;>>;>>;>>>>;>>>>>>;>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>,>>,>>>>,>>>>>>>>>>>>>>>>,>>,>,,>>,>,>,>>,>,>>,>,>>,>,>,,,,>>,>,>>,>,>,>,>,>,>,>>,>,>,>,,>,>,,,,,>,>,,,>,>,>,>,>,,,>,>,,>>,,,>,,>,,,,,,,>,,,,,,>,>,,>,,,,,>,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,',,,,,,>;;;>;;;;---;;;>>,>,>,>>>,>>>,>,>,>,>,,,>,>,>,>,>,,,,',',,,',',',',',',',',','','',''',','','',''''',''',','',',''',',',''''',''','',''''',''','',''',''",
-">;;>>>;>;>;;>>;>;>;>;>>;>;>>>;>;>;>;;>>;>;>;>;>;>;>;>;;>;>;>;;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>>>;;>;>>;>>;>>>;>>;>>;>>>>;>>;>;>>>;>>>>;>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>>,>>>>>>>,>,>,>,>,>,>,>,>>,>>>>>>,>>>,>>,>>,>,>,>,>>,>>>>>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,>>>>,,>,>,>,,,>,>,,>,>,>,,>,,,,>,,,,,>,>,>,,,>,,>,,,,,,,,,,>,,,>,,>,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,',,,,,',,,,',,,,,,,,>>>;;;;;;;----;;>>>,>,>,>,>,,>>,>>>,>,>>,,>,>,>,,,,,,',,,,',,',',',',',''','',','',',',''',',','',',''',','',''''','''''''','''',''''''',''''''''''''''''",
-">>;>;>;>;>>;>;>;>;>>;;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>;>>>;>;>>;>>;>;>>>;>;>;>;>;>>;;>>;;>;>>;>;>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>;>>>;>;>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>,>>>>>,>,>>>>>>>,>,>>>>>>>>,>>>>>>>>,>>,>,>,>>,>>,>,>,>>,>>>>,>,>,,,>,>,>,>,>,>,>,>,>,>,>,>,>,,>>,>,>,,>,,,,>,,,>,>,>,,,,>,,,>,,>,,>,>,,>,>,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,,,,,,,,,,,,',,,,',,,,',,',,,,>>;;----------;>>>,>>>,>,>>>,>>,>>,>,,>>,>>>>>>,,,,,,,',',',,,',',''',',',','',,''',',',''','',''',','''','',',''',',',',''''''''','',''''',''''''',''''",
-";;>;>;>>;>;>;>;>;>;;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>>;>;>;>;;>>;>;;>;>>;>;>;>;>;>;>;>;;>;>;>>;>;>>;>;>>;;>;>>;>>;>>>;>>;;>>;>>>;>;>>>;>>>>>;>>;>>>>;>>;>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>>,>>>>>>>>,>,>>>>>,>,>,>>,>>,>>>>,>>,>>>>>,>>,,>,>>>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,>,>,>,>,,,>,>,>,,,>,,,,,>,,>,,,,,,,>,>,>,,,,>,>,,,,>,,,>,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,',,,,,,,,,,,,,,,>>;;;;---====-;;>>>,>,>>,>,,>>,>>>>>>,>,>>>>,>,>,,,',',,,,,'',,',',',',',',',''',','','',,'','',,'''',','',''''','''''''''','',','','''','''','','''''''",
-">;>;>;;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;>;>;>;;>;>;>;>>;;>;>>>;;;>;>;>;>;>;>;>;>>>>;>;;>>;>;>;>>;>>>>;>>>;>>;;>>;>>>;>>;>>>>>;>>>;>>>>>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>,>>,>>,>,>>>>>>>,>>,>>,>,>>,>,>,,,>>,>>>,>,,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,,>,,>,>,,>,>,>,,>,>,,,>,,,>,>,>,,,,,,>,>,,,,,>,,,,>,,,>,,>,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,,,',,,,',,',',,',,,,,>>>;----=-===--;>>>>>>,>,>>,>,>,>>>>>>>>>>>>>>,,,,,,,,'',',,,',,,',',','','',,,','','',''','',''',',''',''',',''',',',',','''''''''''','''''''''''''',''",
-">>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>;>>;;>;>>;>>;>;>>;>;>>;>;>>;>;;;>>>>;>;>>;>;>;>;>;;>;>;>>;>>;>>;>;>;;;>>;;>>;>>>;>>>;>>>>>>;>;>>;>>>>;>>;>>>>;>>>>>>>;>>>>>>;>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>,>,>>>,>>>>>>>>>>>>,>,>,>>,>>>,>>>,>>>,>>>,>,>>,>,>>>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,,>,>,>,,>,,>,,,,,,>,,>,>,,,>,,,,,,,,>,>,,,,,,>,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,,',,,,',,,,,,,,,,,,,,,,,,>>;;--=====--;;>>>>,>>,>,>,>>>>>>>>>>>>>>>,>,>,,,,',,',,,,,,'',,','',',','''','',','',,'',''','','',''',''''',''''''''''',''',''',''''''''','''','''''",
-";>;>>;>;>;>>;>>;>;>;>;>;>;>;>>>;>;>>>;>;>;>;>;>;>;>;>;>;>>>;;>;>;>>;;>;>;>;>;>;>;>>>;>;;>;>;;>>;>>;>;>>;>;>;>>;;>;>>;>;>>>>;>>>;>>;>>;>;>>;>;>;>>>>;>>;>;>>>>>;>;>>;>>>>;>>>>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>,>>,>>>>>>>>,>,>>,>>>>>>>>>>>,>,>,>,>,>,>>>>>>,>>,>>,>,>>,>>>,>>,>>,>,>>,,>>,>,>,>>>,,,>,>,>,>,>,>,>,>,>>,,>,,>,>,,>,,>,,,>>,,>,,>>,>>,,>,,,>,>,,>,>,>,>,,,,>,,>,,,,>,,,,>,,,>,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,',,,',,,,',',,',',',,,,,,,>>>;--==**==-;;>>>>>>,>,>,>,,>>;;>;>>;>>>>>>,>,,,,',,,',,,,,,,',',','',',,,''',','',''',',','','','',','',',''',',','','''',''',''',''','''''','''''''",
-">;>;;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;;>>;>;>;>;>;>>;>>;>;>;;;>>;>;>;>>;>>;>;>;>;>;>;>;>;>>;>;>>;>;>;>;>;;>;>;>;>>>;>;>>;>>;;>>;>;>>;>>;>>>;>>;>>>;>;>>;>>>>>>;>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>,>,>>>>>>>>>>>>>,>,>,>>,>>,>>>>,>>,,>>,>,>,>>>,>>,>,>,>,>,,>>>>,>,>,>,>,>,>,>,,,>,>,>,>,>,>,>,,>>,,,,>,>,,,,,,>,,,>,,,,>,,,,,,,,,,>,,,,,>,,,,,>,,,>,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,,,',,,,,,>>;;--=***==--;>>>>>>,>,>,>>>>>>;;;;;>;;>>>>,,,,,,,',',,,,,,,',','',,'',''',',''','',,'',''','',''',''',''''','''''''''',''''''''''''''','''''''''''''",
-">;>>;>>>;>;>;>;>>;>>;>;>;>;>>;;>;>>;;>;>;>;>;>;>;>;>;>;>>>;>>;>;>;>;>;>;>;>;>;>;>;>;>;;>;>;>;>;>;>>;>>;>;>>;>;>>;>;>>;>;>>;>>>>;>>;>>;>;>>>>;>>>>>>>>;>>;>>>>;>>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>,>>,>>>,>>>>>,>,>,>,>,>>>>>>>>,>>,>>,>,>>,>>>,>>>,>>,,>>,>,>,>,>>>>,,,>,>,>,>,>,>,>,>,>>,,>,,>,>,>,>,,>,,,>>,>,,>,>,>,,,>,>,>,>,,>,>,>,>,>,,,>,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,',,,',,,,',,,>,>;--==*****--;;;>>>>>,>,>,>,>>>;;;;;;;>;>>>>>,,,,,,,,',',,,,,,,',,'',',',,','',,'',''','',''','',',',''',',''',',',',''''','','',','''''''',''''',''''",
-">;>;>;>;>;>;>;>;>;>;>;>>;>>;;>>;>;;>>;>>;>>;>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;;>;>;>>;>;>>;>>;>>;;>>>;>>;>>>>;>>>;>;>;>;>>>>>>;>>>>;>>>>>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>,>>>>>>>>>>>>>,>>>>>>>>>>>,>,>,>,>>,>>>,>>>,>>,>,>,,>>,>>>,>>,>>>,>,,,>>>,>,>,>,>,>,>,>,>,,>,>,>>,>,,,>,>,,>>,,,,,>,,>,,,>,>,,,,,>,,,,,,,,,,,,,>,,,,>,,,,,>,>,,>,,,,>,,,,,,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,',,,',,,,,,,,',,,,',,,,,,>>;--==**&***=--;>;>>>>>,>,>,>>>>>;;;;;;;;>>>,>,,,,,,',,,,,>,,',','',','','',',''','',,'',',',''',''','',''''','''''''''','''''''''''',''''''''','''''''",
-">;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>>;>;>;>;>;>>;>;>;>;>;>;>;>>;>;>;>;>;>>;>>;>>;>>;>;>;>;>>;>;>;>>;>;>;>>;>>;>>;>;>>>;;>>;>;>>>>;;>>;>;>;>>>;>>>>>>>>>;>;>>>>;>;>>;>>;>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>,>>>>>,>,>,>,>,>>>>>>>>,>>,>,>>,>>,>>,>>>>,>,>,>,>,>,,>,>>>,,>>,>,>,>,>,>,>,>,>,>,>,,,>,,>>,,,>,>,,>>,>,>,>,,>,,,,>,>,,,>,>,>,>,>,>,,,>,,,,,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,',,',,,,',',,',,,,,>;-==**&*&**==--;;;>>>>>,>,>,>,>;;;-;;;;>;>>>>,>,,,,,,,',,,>,,,,',,',',',',''',','',''',',''',','',''','',',''',',',',',''',','',''''''','',''''''''''''",
-";>;>;>;>;>>;>>;>;>;>>;>;>;>;>;>;;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;;>;>;>;;>;>;>;>;>;>;>>;>;;>>>;>;>>;>;>>>;>>>>;>>;>>>;>;>;>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>;>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>,>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>,>,>,>>>,>>>,>>,>>>>,>,>,>>>,>>,>>,>>>>,,>>,>,>>,>,>,>,>,>,>,>,,>,>>,>,>,,>,>,,,>,,,>,,,>,,>,,>,>,,,>,>,,,,,,,,,,,,>,,,,>,,,,>,,>,>,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,',,',,,,,,,',,,,,,,,,',,>>;;==***&&&&*==--;;;;>>>,>,>,>>>>>;-;--;;>;>>>,>,,,,,,,,,>,>,>,,,,'','','',',',',','',,'','','''',''','',''''',''''''''''''''''''',',''''''''','''''','''",
-";>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>>;;>;>;>;>>;>>;>>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>>;>>>;>;>>;>;>>;;>>;>>;>;>>>;>;>;>>;>>;>;>>>;;>>;>>>;>>>>;>>>>;>>>>;>;>>>;>>;>>>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>,>>>,>>>,>,>,>,>,>,>>>>>>,>>>,>>>,>>,>,>>>,>,>,>>,>>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>,>,>,,>>,,>>,,>>,,>,,>,>,,>,,>,,>,>,>,>,>,,,,>,>,,,>,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,',,,,',,',,,,,,,>>;-=*&&&&&***==--;;;;>>>>,,>,>>>>>;;--;;;;>>>>>,>,,,,,,,,,,>>>,,',,',,',','',''','',''','','',','',','''',',''',',',',''',','','''''''',''''''''','''''''",
-";>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;>;>;>;>;>;>;>;>;>;>;;>>>;>;>;>;>;>;>>;>>;;>;;>>;>;;>>;>;>>;>;>;>>>;>;>;>;>;>>;>>>>;;>>>;>>>;>>;>;>>>>;>>;>>>>>>;>>>;>>;>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>,>,>,>,>>,>>,>>,>,>,>>>,>,>,>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,,,>,,,>,,,>,,>,,,,>,,>,,,,,,,,,,,,>,>,,,,,,,,,,,>,,>,,,,,>,,>,,,,,,>,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,>;;==**&&&&&**=---;;;;;>>>,>,>>>>>;;;---;;;;>>>>>,,>,,,,,,>>>>>,,,',''',',','',,'','',,'',''','''',''',',''''','''''''','''''''''','','''''','''''''''''''",
-">;>;>;>;>;>;>>>;>;>;>;>;>;>;>;>;>;>>;;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>>;>>;;>>;;>>;>;>;>>>;;>;>;>;;>;>;>;>;>;>>>;>>;>>;;>>>>;>>>;>>;>>>>>;>;>>;>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>,>>,>>,>>>>>,>>,>>,>,>,>,>,>>>>>>,>>>,>>,>>>,>>>,>,>,>,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,,>,,>,>,,,>,>,,>>,,>>,,>,,>,>,,>,,>,>,>,>,>,,,,,,>,,>,,>,,>,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,,,,',',,',,,,,,',,,,,,,,,,,,>>;-=*&&&&&&&**=---;;;;>>>,>,>,>>>>;;----;;>>>>>,>>>,>>,>>>>>>>>,,,,,,,','',',''',',''',',',''',','','','',',''',',',''''',''',','''''''''','''',''''''''''",
-";>;>>;>>;>;>;;>>;>;>;>>;>>;>;>;>>;>;>>;>;>;>;>>;>;>;>>;>;>>;>;>;>;;>>;>>;>;>;;>>;;>>;>>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>;>;>>>;>;>>;>;>;>>>;>;>>>>;>>>;>>;>>;>;>>;>>>;>>>>>>>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>,>,>,>>>,>>>,>>,>>,>,>>>,>>>,>>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,>,,,>,,,>,,,>,,>,,>,,,,,,,>,>,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,,,,,,,,,>>;-=**&&&&&**==----;;;;>,>,>,>>>>>;;---;;;;;>>>>>,>>>>>>>>>>>>>,,,'''',',','',,'',',','','',',''','','''''''','''''',',''',''''''','''',''''''''',''',''''",
-";>;>;>;>;>;>>;;>;>>>;;>>;>;>;>;>;>;>;>>;>>;>;;>;>;>;;>;>;>;>;>>;>>;;>;;>;>;>>;>;>>;>;;>;>;>;>;>;>>;>;>;>>;>>>;>;>>;>>;>>>;>>;>>;>>;>>>;>>;>>>;>>>;>>>>>>;>>>>>>>>;>>>>>;>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>,>>>>>,>,>,>,>>>>>>>>,>>,>,>>,>>,>,>>,,>>,,>>,>>,>>,>,>>>,>,>>,>,>,>,>,>,>,>,,>,,>,>,>>,>,>,,,>,,>>,,>>,,>,,>,>,,>,,>,,>,>,>,,,,,,,>,>,,>,>,>,,>,,,,,>,,>,,>,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,;;-=**&&&&&&**==--;-;;;;>>>,>,>>>>>;;----;;>;>>>>>>>>>>>>;>;>>>>,,,,,','','',''',''','','',''',','','',',',',''',','''''''''','','''',''''''','''''''''''''",
-">;>;>;>;>>;>;>>;>;;>>;;>;>>;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>;>;>;>;>;>>>>;>;>;>;>;>;;>;>>;>;>;>;>;>;;>;>;>;>>;;>>;>>;>;>;>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>;>>>>>>;>>;>>>>>;>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>,>,>>>,>,>>>>>>>>>,>,>,>,>>,>>>>,>>,>>>>,>>>,>>>,>,>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,,>,,,>,,>,>>,,>,,,>,,,>,,>,,,,,,,>,,>,,,,,,,>,>,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,>,>,,,,,,>,>;;-=*&&&%&&&*==----;-;;>>>,>,>,>>>;;----;;;;>;>;>>;>>;;;;;;;;;>>,,,',',',','',',',',','',',',''''','','''''''',''''','','','''''',''''''','''',''''''''''''",
-">;>;>;>;;>;>;>;>>;>;>>;>;;>;>;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>>;;>;>;;;;>;>;>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>>;>>>;>>;>;>>>>>;>;>;>>;>>;>>;>>>;>>>;>>>;>>>>>;>>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>>>>>>>>>,>>>>>>>>>>>>>>,>,>,>,>>>>>>>,>>,>,>>,>>>,>,>,>,>>,,>>,>>,>,,>>,>,>,,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,,,,>,>,>,,>>,,>,,>,>,>,,,>,,>,>,>,,,,,,,>,,,,,,>,,>,>,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,,,,,,,,,>,>,,,,,,,>>;-=**&&%&%&**==--;-;;;>>>>,>,>>>>>;;-=--;;;>;;>;;;;;;;;;;;;;>;>>,,,',',','',',''',''','',''',',,''','',',',',''',',''''',''','''''','''''''''''','''''','''",
-";>;>;>;>>;>;>;>;>;>;>;>;>>>;>>;>>>;>;>;>;>;>;>;;>>;>;>;>;>;>>>;>;>>>>>;>>;>;>;>>;>;>;>;;>;>;>>;>;>;>>;>;>;>;>;;>>>;;;>;>>>>>;>>;>>;>>>;>>>;>>;>>>;>>;>>>>>>>>>>>;>>>>;>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>,>>,>>,>>,>>,>>>>>>>>>>,>,>>>,>>>>,>>,>,>>>,>,>,>>>,>>,>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,,,>,>,>,>,,>>,,>,>,>,,,,>,,>,,,>,,>,,>,,,,,,>,>,>,,,>,,>,,,,,,,,>,,>,,>,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,',,,,,',,,,,,,,,',,,>,>,>,>,>>>,,,,,,>>>;;-=*&&&%&&&&*=---;;;;;>>>,>,>,,>>>;--==--;;;>;;;;;;;;;;;;;;;;;>>,,,','',',,''',,'',',',''','''',',''','''''''','''''',''''''','','''','''',''''''',''''''''",
-">;>>;>>;>;>;>;>;>;>;>;>;>;;>;>;;;>;>;>>;>>;>;>>;>;>>;>;>;>;;;>;>>;;;;>;>;>>;>;;>;>;>;>>;>;>>;;>>;>;>;>;>>;>;>>>;;>>>>>;>;>;>>;>>;>>;>>>;>>>;>>;>>>>>>>;>;>>;>>;>>>;>>>>>>;>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>>>>>>,>>>>>>>>>>>,>>>>>,>,>,>,>,>>>>,>>,>,,>>,>>>,>,>>>,>>,>>,>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,>,,>,,>,>,,>,,,>,,>>,,,>,,>,>,,>,,,,>,>,,,,,,,,>,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,,,,,>,>>,>>>>>>,,,,,>>>;--**&%&%&&&*==-;;;;>>>>>>,>,>>>>>;;===---;;;;;;;;;---;-;;;;;;>;>>,,,',',''',,''',',''',','',',''',','',',','''',',',''','','''''''''''',''''','''''''''''''",
-">;>;>;;>;>;>;>;>;>;>;>;>;>>;>;>>>;>>;>;>;;>>;>;>;>;;>;>;>;>>>;>;;>>>>;>;>;>>;>>;>>>;>;>;>>;;>>;;>>;>;>>;;>>>;;>>;>;>;>>;>>>;>>;>>;>>>;>>>;>>>>>;>;>;>>>>>>>>>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>,>>,>>>>>>,>>>>>>>>>>>>>,>>>,>>>>,>>>,>>,>,>,>>,>,>,>,>,>>,>,>>>,,>>,>,>,>,>,>,>,>,>,,>,,>,>,,>,>,,>,,>>,,>,,,>>,,,>,,,>,,>,>,,,,,>,>,>,,,>,,>,,,,,,,>,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,,>,>>,>>,>;>>>,,,>,>>>--=*&&&%%&&&*==--;;>;>>>,>>,>,,>>;;-====--;;;;;;-;-;---;--;;;;;>>>',','',',''',',''',,',''','''','''','''''',','''''''''''''',','','''''''''''''''''''''''''",
-">;>;>>;>;>;>;>;>>>;>;>;>;;>;>;>;>;;>;>;>>;>;>;>;>;>>;>>;>;>;>;>>;>;;>;>;>;;>;>;>;;>;>;>;>;>>;>>;>;>;>;>>>;;>>>;>>;>>;>>>;;>>;>>;>>>;>>;>>;>;>;>>>>>>;>>;>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>,>>>>>,>>,>>>>,>,>,>,>,>,>>,>,>>,>>>,>,>>>,>>,>,>,>>,>>,>,,>>>,,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,,,>,,>>,,,>,,>,>,,>,,,>,>,>,,,,,,>,,,,,,,>,>,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,>>>>>>>;;;>>>>,>>>;;--=*&&%&%&&**=--;;;>>>>>>,>,>>>>;;--====----;--;--------;-;;;;;;>>,,',,','',,'',',,''''','',','',','',',',''''',',','','','''''''''',''''','''',''''''',''''",
-">;>;>;>;>>;>>;>;>;>;>>>;>>;>>;>;>>;>;>;>;>;>;>;>;>;>>;;>;>;>;>;;>;>>;>;>;>>;>;>;>>;>;>;>;>;;>;;>;>;>;>;;>>>;>;>;>>;>>;;>>>;>>;>>>;>>;>>;>>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>,>>>>,>>,>>>,>,>>,>>,>>>,>>,>>,>>,,>>>>,,>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,>,,>,,>,>,>,,,>,>,>,,>,,>,,>,,,,,,,>,>,,,>,>,>,,,,,,,>,,>,,,,,,,,,,,,,,,>,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,',,',,,,,,,,,,',,,,',,,,>>>>;>>;;--;>,>>>>>;;-=**&&%%%&&&*=--;>>>>>>,>>,>,>>;;--=***==---------=-=----;;;;;;;>,,,,',',',''',''''',,',','',','''',''''''',','''''',''''''',''','''''',''',''''''',''''''''",
-">;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;;>>;>;>;>;>>;>;;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>;>;>>>>;>;>;>;>>;>;>>>>;>>>;>>;;>>>>>;>>>;>;>;>>>>;>>;>>;>;>>;>>>;>>>;>>>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>,>>,>>,>>>>,>,>>>>,>,>,>,>,>,>>>,>,>>,>>,>>>>,>>,>>,>,>>,>>,>,>>>,,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,>,>,>,>,>,,>>,,,,,,,,,>,,>,,>,>,>,,,,,>,,,,,,,,>,,>,,,,,,,,,>,,>,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,',,,,,,,>>;>;;;;----;>>>>>;;-==*&&%&%&&&**=--;;;>>>>>>>,>>>>;;-===**==------=-===-=---;-;;-;;;>,,',','',','',,','',''''''''',','',',',''''',',''''',',''''',''','''''''''''''''''''''''''",
-">;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;;>;>;>;>;>;>>;>>;>;>;>;>>;>;>;>>>;>>;>;>;>;>;>;>>;>>;>;>;>;>;>;>;;>;>;>>;>>;;>>>;>;>>;;>>;>>>>;>;>>>;>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>>,>,>>>,>>,>,>,>>,>,>,>>,>,>,>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,,>,,>,,>,,,>,,,>,>,>>,>,,>,,>,,,,,,>,>,,,>,>,,>,,,,,,,>,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,,,,,',,,,>>;-;-;--==-;;>>>>;--=*&&&%%%%&&**=--;;>;>>;>>,>>>;;;-==*****==--=-=========-;-;;-;-;>>,,,,',,'',',''',','',',,',,',''',''''''',','''''',''''',','''''''','''''','',''''''''','''",
-">;;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>;>;>;>;>;>>>;;>;>;>;>;>;;>;>;>>;>>;>;;>>;>;>;>;>;>>;>>>;>;>>;>>;>>>;;>>>;>>>>;>>;>;>>>>;>>>;>;>;>;>>>>>>>;>;>;>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>,>>,>>>>>>>>>,>,>>,>>>>,>>>>,>,>,>,>,>>>>>>,>>,>>>>>>,>>,>>>,>,>>,>>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>>,>,>,>,,>>,,>>,,,>,,,,>,,,>,,>,>,,,,,,>,,,,,,,,,>,,>,,,,,,,,,,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,>>;;----==**=-;;;;;;--=**&%&%%&&&&*==--;;;;;;>>>>>;-==**&&&&&&**=======*====---;-;--;-;>>,,,,',,''',',''',''''''''''','',',',','''',',',''',''''''','','''''',''''''''''''''''''''",
-">>;>>;>>;>>;>;>;>>;>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;;;>>>;>>;>;;>>>;>>;>;>;;>;>>;;>;>;>;>;>;>;;>;>>>;>;>;>;;>>>;>;>>;>;>>;>>>;>;>>>;>>;>>>>>>>>;>;>>>>>>>;>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>,>>>>>>>>>>,>,>,>>,>>>,,>,>>,>>,>,>>>,>,>,>,>,>>,>>,>,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,,,>,,,>,,,,>,,>,>,,,>,,,>,,,,>,>,,,>,>,>,,>,,,,,,,,,>,,,,>,,>,,,,,,,>,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,',,',,,,>>;---===****=-;;;;--=**&&%%%%%&&**==-----=------==***&&&%%%%%%&&&*********==-;------;;;>>,,,,',,',',',,',',,',',',',','''''''''','''''''''',''','''''''''''''''''''','''','''''''",
-";>;>;>;>;;>;>;>;>;>;>>;;>;>>>;>;>;;>;>;>;>;>;>;>;>;>;>>>>;;>;;>;>>>;;>;;>;>;>>;>;>;>>;>>;>;>;>;>>;>>;;>;>>>;>>>;;>>;>;>>>;>;>;>>>>>;>>;>>>>;>;>>;>>>>>>;>>>>>>>>;>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>,>>,>>>>,>>>>,>,>,>,>,>>>>>,>>>,>,>>>,>>,>>,>>,,>>>,>>>,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,,>,,>,>,,>,>,,>,>,>,>,>,>>,>,,,,>,>,,>,,,>,>,,,,>,,,,,,,,,,,>,>,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,',,,,,,,,,,,,,>;;======*&&&*=-----==**&&&%%%&&&***=-===**&*===----;----==**&&%%%%%&&***=*==-------;;;;;;>>,,,',''','''','''',''','''',',',',',''',','',''''',''','',''','','','',''''','''''''''",
-">;>;>;>;>>>;>>;>;>>;;>>>;>;;>>;>;>>;>;>;>;>>>;>;>;>;>;;;;>;>>>;>;;;>>;>>;>;>;>>;>;>;;>;;>>;>>;>;>;>;>>>;>;;>>;>>>;>>>>;;>>>>>>;>;>>>;>>>>;>>>>;>>>>>;>>>>;>>>;>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>,>>>>,>>>>>>>>>>>>,>,>>,>,>>>>,>>,>,>,>,>>>,,>>,,>>,>,>,>>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,,>,,>,,,,,>,>,,,,>,>,>,,,,>,>,,,,>,>,>,>,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,',,,,',,',,,,>;-==*****&&&&*=--===**&&&%%%%%&&&**=**&%%%&*-;>,,',,''',,>;;;--*&&%%%%&****===--==--;-;;;>>>,,,,,','',','',','',''',','''''''''',''',''''',''''''''''''''''''''''''''''''''',''''",
-">;>;>;>;>;;>;>;>;;>>;;;>;>>;;>;>;>>;>;>;>>;;>;>>>;>;>>>>;>>;;>;>>>;;>;>>;>;>;;>;>;>>;>>;>;>;>;>;>>;>;>;>>>>;>;>;>>;>;>>>;>;;>>>>>;>>>;>;>>;>>>>>>;>>>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>>>>>>>>,>,>>>>>,>>>,>,>,>,>,>>>>>>,>>>,>,>>,>>>>>,>>,>,>>>,>>>,>,>,>>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,>,>,,>,>,>,,,>,>,,>,,,,>,,,,,,>,>,,,,,,,,,>,,,>,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,,>;-=**&*&&&&&&&*====***&&%%%%%%&&&*&&&&%%&*->,,',','','',,>>;;;>>;-*&&%%%&**=====*=--;-;;;;>>,,,,,'',','','''','',,'''',',',',',''',''',''''','',',''','''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>;>>;>;>>>;>;;>>;>>;;>>;>;>;;>>;>;;>>;>;;>;>;;>>;>;>;>>;>;;>;>;>>;>;>;>;>;>;>;>;>>;>;>>;>>;>;;>>;>>>;>>>;>;>>>;>;>;>>>;>>>>;>>;>>;>>>;>>>>;>>>>>>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>>,>>>>>>>,>>>>>>>>>>>>>>>,>,>,>>>,>>>,>>,>,>,>>,>>,>>,>>,,>,>>,>,>,>>,,,>,>,>,>,>,>,>,>,,,>,,>,>,>,,>,>,,,>,,,>,>,>,,,>,,>,>,,,,>,,>,>,>,,,,,>,>,,>,,,,>,,,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,',,,,,,>>;-**&&&&&%%%&&**=****&&&&%%%%%%&&&&%$%&*->,,',',''''',',,>>>>;>;>>>;=*&%$%&*=*=**=---;--;;;>>,,',,,''','',','','''',,''''''''''','''''',','''''''''''''','',','''''''''''''''''''",
-">;>>;>;>>;>>;>>;>;>;;>;>>>;>;>;>>;;>;>;>>;;>;>>;;>;>>;>;>>;>;>>;>;>;>;>>>;>;>;>>;>;>;>;>;>;>;;>;>;>;>;>;>>>;>;>;>>;>>;>>;>>>>>>;>;>>;>;>>>>>>>>;>>>>;>>>>;>>>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>,>>>>,>>,>,>,>,>,>>>>>>>,>,>>,>>,>>>>>,>,>,>>,>,>,>>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>>,>,,>>,,>>,,,>,,>,,>,,,,,>,>,,,,,,,,,>,>,,,,,,,,,>,,,,,>,,,,,,,,>,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,',,',,,,,',,,,,>--**&&&&&%%%%%&&***&*&&&%%%%%&%&%%%%%&=;,,',','',',''''',,>>>;>;>;;>;;=*%%$%&****=-------;;>>,,,,',',','''','',','''',',',',',''',',''''''',','','',''''''''''','''''''''''''''''",
-">;>;>>;>;>;;>;;>;>;>>;>;;;>>;>;;>>>;>>;>;>>;>;;>>>;>;>;>;>;>;;>;>;>>;>;;;>>;>;>;>;>;>;>;>;>;>>;>>;>>;>;>;>;>;>>>;>>;>>;>>;>;>;>>>>;>>>>>;>;>;>>>>>;>>>;>>>>;>>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>,>>>>>>>>>>,>,>,>,>>>,>>,>>,>,>,>>>,>,>>,>>>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,,>,,,>>,,>,,>,,>,>,>,,>,>,>,>,>,,,,,>,>,,>,,,,>,>,,,,,,,>,,,,,,>,,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,',,,>>-=*&&&%%%%%%%%&&&&*&&&&&&%%%%%%%%$%&*=;;,,,,',',''''',',,,,>>>>>>>>;>;;;=&%%%%&&**---;-----;;>,,,,',''',','','''',',''''''''''','''',''','''''''''''''','''''''''',''',''',''''''",
-">;>;;>;>;>>;>>;>;>;>;>>;>>;>;>>;;;>;>;>;>;>;>>;>;;>>;>;>;>;>>;>;>;;>;>>>;>;>>;>;>;>>;>>;>>;>;>;>;>;>>>;>>;>>;>;>>;>>;>>;>>>;>>;>>>>;>;>>>>>>>>;>>>>>;>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>>>>>>>,>>,>>>>>>>>,>,>,>>,>>>>>>>>,>>,>>>,>>>,>,>,>>>,>>,>,,>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,,,>,>>>,,,>,>,,>>,,,>,,>,,>,,,>,,>,,,,,,,,,,>,>,,,,,,,,,>,,,,,,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,>>-=*&&%%%&%%$%%%&&&&&&&%%%%%%%%$$%%&*=-;>>,',','',',''''',,,,,>>>>>>>>;;;;-*&%%%&**=--------;;>>,',',,,'',','',',''',',',',','''',''''',''','',',''''',''','',''''''''''''''''''''",
-";>;>>;>;>;;>>;>;>;>;>;>;>;;>;>;>>>;>;>;>;>>;>;>;>>;;>;>;>;>;>;>;>>;>;>;;>;>;;>;>;>;;>;>;>;>;>;>>>;>;>;>>;>;>>;>;>>;>>>;>>;>>>>>;>;>>>>>;>;>>;>>;>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>>,>>>>,>,>,>>,>>,>,>>,>>>>,>,,>,>,>,>>,>,>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,,>,,,>,>,>,>,,,>,>,>,,>,,,>,,>,,>,>,>,>,>,,,,>,>,>,>,,,,,,,>,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,',,,,,,,,',,,,,,',,',,,,>-=&&&%%%%%$%$$%%%&&&&%&&%%%%$$$%%&*=--;>>,,,',',''',',','',,,,,,,>>>>>>>;;-*&%$$&*==----=----;>,,,,''','''','','',''''''''''',''',','''''''''''''',''''''''''''''''''''''''''''''",
-";>;>>;>;>>>;;>>;>;>;>;>;>>;>;>;>;>;>;>;>;;>;>;>;;>>;>;>;>;>;>;>>;>;>>;>>;>;>>>;>;>>>;>;>;>>;>;;>>;>;>>;>;>>;>>>;>>;>;>>;>;>;>;>>>>;>;>>>>>>>>>>>>>;>>>>>>;>>>>>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>,>,>>,>>>>>>,>,>>>>>,>>>>>>,>>>,>>>>,>>,,>,>>>>,>>,>>,>>,>,>,>,>>,,>>,>,>,>,>,>,>,>,,>,,>,,>,>,>,>,,,>,,>>,,,>,,>,,>,>,,,,>,,,,,,,,,,>,,,,,,,,,,,>,>,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,,,',',,,,,,',,>>;=*%%%%$%$$%$%%%%%%%&%%%%%%$$$$&&===--;>>,,,,,',,,',',',,,',,,,,,,>>>>;>;;;-*&%$$&*====-====--;>,,',''',','','','',',',',',''','''''','',','','','''''''''''','''''''''''''''''''",
-">;>;;>;>;;>>;>;>;>;>;>>;>;>;>;>;>;>;>>>;>>;>;>>>;>;>;>;>>>;>;>;;>;>;;>;;>;>;;>>;>;;;>;>;>;;>;>>;>>;>;;>>;>;>>;>>;>>;>>;>>>>>>>>;>>>;>>;>>;>;>>;>>>>>;>>>>>>;>>;>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>,>>,>>>>>>,>>>>>>>>>,>>,>>>>,>,>,>>,>,>,>>,>>,>,>>,>>,>>>,,>>>,>>,>>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,,>>,>,>,,>,>,,>,,,>>,,>,,,>,,,>,>,,>,>,>,>,>,,,>,>,>,,>,,,,,,,,,,,,>,,>,,,,,>,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,,>>-**&%%%%$%$$$$$%%%%%%&%%%%$$$%%&**=--;>>>,,,,,,,',,,,,,,',,,,,,,,,,,>>>>;;;;-*&%$%%*=====-===--;>,,',',''',''','',''''''','',''','','''''''''''''''''','','''''','''',''','''''''",
-">;>>;>;>>;;>;>;>;>;>>;;>>;>;>;>;>;>;>;>;>;>>;;;>;>;>>>;;;>;>;>>;>;>>;>>;>;>>;;>;>>>;>>;>;>>>;>>;>;>>>>;>>;>;>>;>>;>>;>>;>;>;>;>>;>>>;>>;>>>>>>>>;>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>>>,>>>>>>,>>,>>>,>>>>>,>,>>>,,>>,>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,,>>,,>,>,>,>,,>,>,>,,,,>,,>,,>,>,,,>,,,,,,,,,,,>,,,,,,,,,,,>,,,>,,>,,,,,,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,,,,',,,,>;=*&%%$%$$%$%$$%%%%%%%%%%%$$$%&**==-;;>>>,,,,,,,,,,,,,,,,,,,,,,,>,>,,>>>>;;--=*&$$%&**=========;;,,,''',''',''','',',',''',''',''''''','','','''''','''''''''''''''''''''''''''''",
-">;>;>>;>;>>;>;>;>;>;>>;;>>;>;>;>;>;>;>;>;>;>>>>;>;>;;>>>;>>;>;>;>>;>;>;>>;>;>>;>;>;>;>>;>;;;>;;>>>;;>;>;>;>>;>>;>>;>>;>;>>>>>>;>>>;>>>>>>>>;>>;>>;>>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>>>>>>,>>,>,>>>,>,>,>>>,>,>,>>,>>>,>>>,>,>>,>,,>>,>,>>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,,>,,>,>,,>,>>,>,,>,>,,>,,>,,,>,>,>,>,>,,,>,>,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,,,',,,,,',,,,,,>>-=&&%$%$%$$$$$$$$%%%%%%%$$$$%&&*==-;;>>>>,>>,,,>,>,,,,>,,>,,,>,>,>,>>>>>>;;;--=*&$$$%**====**===;>,,,,''',',','','''''','''','','',','''''''','',''''',''',''''''''''''''''''''''",
-">;>;;>;>;>;>>;>;>>;>;>>;;>;>>;>>;>>;>;>;>;>;;;>;>;>>;;;>>;>;>;>;>;>;>>;;>;>;>;>>;>;>;;>;>>>;>>>;;>>>;>>;>>;>>;>>;>>;>>>>;>;>>>>;>>>;>;>;>;>>>>>>>>;>>>>>>;>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>>>>>>,>>,>>>>>>>>>,>>>>>>,>>>>>>>,>>,>>,>,>,>>,>>>>>,>>>,>,>,>>,>,,>>>,>>,>,>,>,>,>,>,>,,>,,,>,>,>,>,>,>,,>,,>,,,>,>,,,,,,,>,,>,>,,,,,,,,,>,,,,,,,,,,,,,,,>,>,,>,,>,,>,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,',,,',,,,,',,',,>;=*&%%$$$%$%$%$$$$%$%%$%$$$$%&**=--;;>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>;;;---=*%$$%%*****=**==-;,,'',',''''','',','''',','''''''''''',','''''''''''''','''''''','''''''''''''''",
-";>;>>;>;>;>;>>;>;>;>;;>>>;>;>>;;>;;>;>;>;>;>>>;>;>;;>>>;>;>>;>;>;>;>;;>>;>;>;>;;>;>;>>;>;>;>;>;>>;;>;>;>;>>;>>;>>;>>>;;>>>>;>>;>>;>>>>>>>>>>;>;>>>>;>>>>>>>>;>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>>>,>>>>>>>,>,>>,>>>>,>,>>>>,>,>,>>>,>>,>>>>>,>,>,,>,>,>,>,>>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,>,,,>,>,>,,>,,>,>,>>,>,,,>,,,>,>,>,>,,,>,>,>,>,,>,,>,,,,,,,,,,,,,,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,>;=*&%%$%$$$$$$%$%$$%$$$$$$%%&&*=--;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;>;;;-=-=&%$$$&&*******=-;>,','''',','','''',','''''',',''',','''''',''','','''''''','''''''','''''''''''",
-";>;>>;>;>;>;;>;>;>;>>;;;>;>;;>>;>>;>;>;>;>;;>;>>;>>;>;;>;>;>;>;>;>;>>;>;>>;>;>>;>;>;;>;>;>;>>;>;>>>;>>;>>;>>;>>;>>;;>>>;>;>>;>>>;>>;>;>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>,>>>>>>,>,>>>>>>>>>,>,>>>>,>,>>>>>,>,>>,>>,>,>>,>>,>>,>>,>>>,>,>>,>,>,>>,>>,>,>,>,>,>,>,>,>,,>,,>,>>,>,,>>,,,>,,>,>,,>,,,,,,>,>,,>,,,,,,,,,>,,,,,,,,,,,,,,,>,,>,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,',,,,,,,',,',,,',,',,,>>-*&%%$$%$$%$$$$$%$$%$$$$$%&&**=-;;;;>>;>;>>;>>>>>>>>>>>>>>>>>>>>;>>>;>;>;;;----==&$$$%&********=;>,,',',','','','''''',',',''''','''''',''''''''''''',''''''''''''''''''''''''''",
-">;>;;>;>;>;>>;>>;>;>;>>>;>;>>;;>>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;>;>>;>;>;>;;>>;>;>;>;>>;>;>;>>;>>;>;>;>;>;>>;>>;>>;>>>>;>>>>;>>>;>>;>>>>>>>>;>>>;>>>;>>>;>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>,>>>,>,>>>>>>>,>>>>>>,>,>>>,>>>,>>>,>>,>>>,>>,>,>,>>,>,>,>>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,>,,>,,>,>,,>,>,>,,,>,,>,>,>,>,,,>,>,>,,>,>,>,,,,,,,,,>,,>,,>,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,;-*&%%%$$$$$$%$%$$$$$%$$$$%&**=--;;;;-;;-;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--==&%$$$$&&&&&&**=-;,,,',''','','',',','''''',','''''',''''',',''''','''',''''''''''''',''''''''''",
-">;>>;>;>;>;>;>;>;>;>;;>;>>;;>>>;;>>;>;>;>;>;>>;>;>;>;>;>;>;>>;>;;>;>;>;>>;;>;>;>>>;>;>>;>;>;>;>>>;>>;>>;>>;>>;>>;>;>>;>;>>>;>>>>>>;>;>;>;>>;>>>>>>>>>>>>>>>;>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>,>>>>>,>>>>>,>,>,>>>,>,>>>>>,>>,>,>>,>>>,>>,,>>,>>>,>>,>,>,>>,>,>,>>>,>,>,>,>,>,>,>,,>,>,>,,>>,>,>,,>,,>,>,,>,,>,,,>,,>,,>,,>,,,,,,>,,,,,,,>,,,,,,,>,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',',,',',,',,,,,>-=&%%$%$%$%$$$$$%$$$$$$$%&&*=---;--=*******=--;-;;;;;;;;;;;;;;;;;;;;;;;;;;-;---==*&$$$$%&&**&**=-;,,,'',''',''''''''',',''''''','',''',','''''',''''''''''''','','''''''''''''''",
-">;>;>>;>>;>;>;;>>;>;>>;>;;>>;;>>;;>>;>>>;>;>;;>;>;>;>;>>;>;>;>;>>;>;>;>>;>>;>;>;;;>;>;;>;>;>>;>;;>>;>>;>;>>;>>;>>;>;>>>>>;>>;>;>;>>>>>>>>>>>;>>;>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>,>>>>>>>>,>>>>>,>,>>,>>>>,>>,,>>,>>>,>>,,>>,>,>>,>,,>,>>,>,,>,>,>,>,>,>,>,>,>,,>,>>,,,>,,>,>,>,,>,>,,>,,>,,>,,>,,>,,>,>,>,,,>,>,>,,,,,,>,,,,,,>,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,',,,,,,,,,,,,,,,,,>,>;-*&%$$$$$$$$$$$$$$$$$$$%&**=---=*&&%&%%&%&&&*=----------;----;--;--;-;-;-;-----==&$$$$$&&&&&**=->>,',',',''',',',','''',','','''''''''''''''''''''''''','''''''''''''''''''''''",
-">;>;;>>;>;>;>>>;>;>;>;>;>>;>;>;>>;;>;;;>;>;>>;>;>;>;>;;>;>;>;>>;>;>;>>;;>;>;>;>>>;>>;>>>;>>;>>;>>;>;>;>>;>>;>>;>>>>;>;>;>>>>>>;>>;>>>;>>;>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>,>>,>,>>>>>,>>>>>,>,>,>>>,>,>>,>>,>>,>,>>,>>>,>,>,>,>,>>,>,>>,>,>>>,>,>,>>,>,>,>,>,>,>,>,>,,>,>,,,>>,>,>,,,>,>,,,>,>,,>,,,,>,,>,,,,,,,,,>,,,,,,,,>,>,,,,>,,,,,>,,,,,>,,>,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',,,,,,,,',,,,',,',,',,',,',,,,>>-=&%%$%$$%$$%$$$$$$$$$$%&**==*&&%&&&&**&&&&%%&&=---;-------;-----------------===**%$$$$%%&&&**=-;,,,'','','','''''','''''','''','','','','','''','','''''''''''''''''''''''''''",
-";>;>>;;>;>;>;;;>;>>;>>;>;;>>;>;>;>>;>>>;>>;>;>;>>;>>;>>;>;>;>;;>;>;>;;>>;>;>;>;;>;>;>;;;>;>;>;>>;>>;>>;>>;>>;>>;;>>;>>>>>;>;>>>>>>;>>>>>>;>>;>;>>>>>;>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>>>>,>>>,>>>>,>>>,>>>,>>,>,>>>,>>,>>>,>>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>>,,>,>>,,>,,,>>,,,,>,>,,,>,,>,>,,>,,,>,>,>,>,,,>,>,>,,,,,,>,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,>>-*&%$$$$$$$$$%$$$$$$$%&**==*&%%&&*=***=***&&%%&*=----------------------------==**%$$$$$%&&&**=-;,,,,',',',''',',''',',','''',''''''''''''''','''''''''''''''''''''''''''''''''",
-";>;>;>>;>>;>>>;>;;>;;>;>>>;>;>;>;>;>;;>;>;>;>>;>;>;>;>;>>;>;>>;>>>;>>;>;>>;>;>>;>;>;>>>>>;>>;>;>;>;>;>>;>>;>>;>>>;>>;>;>>;>>;>;>;>>;>>;>>>>>>>>>;>>>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>,>>,>>>>>>>>>>>,>,>>>,>>>>,>>>,>,>>,>>,>>>>,,>>,>>,,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,,>,,>,>,,>,,>,>,,,>>>,>,,>>,,>,,,>,,,>,,>,,,,,,>,,,,,,,>,,,>,,,>,,,,>,,>,,>,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,',',,',,',,',,,,,,,>>;=&%$%$$$%$$$$$$$$$#$%&***&%%&&***&&%%%%&%&&%%$&&*=============================**&$$$$$%%&&**=->>,',',','',''''','''''''',''''','','',''''''''''''','''',''''','''''''''''''''",
-">;>;>;;>;>;>;;>;>>;>>;>;;;>;>;>;>;>;>>;>;>;>;;>;>;>>;>;>;>>;>;>;>;>;;>;>;;>>;>;>;>;>;;;>;>;>>;>;>>>;>;>>;>>>;>>;>>;>>>>;>>>;>>>>>>>>>>>>>>;>>;>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>,>>>>,>>>>>>>>,>>>,>,>>>>>,>>>,>,>>>,>>>>,>>,>>,>,>>,>,>,>>>,>>,>,>,>>,>>,>,>,,>,>,>,>,>,>,>,>,>,>,,>,>,>>,,>,>,,,,,,>,,,>,,,>,,>>,,>,,,>,>,,,>,>,>,,,>,,,,,,,,>,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,',,,,,,,,,,,,',,,,,,,',,,,,>;=&%$$%$$$%$$$$$#$$$#&&**&%%&&*&%###$$$###@$%$%%%&=============================**&%#$$$$%&&&*=-;,,,,',','''',',''',',','''',','',''''''',''','','''''''''''''''','''''''''''''",
-">;>;>>;>;>;>>;>;>;>;>;>>>;>;>;>;>;>;>;>;>>;>>;>;>;;>;>;>;;>;>;>;>;>>;>;>>;>;>;>>;>;>>>;>;>>;>>>;>;>;>>;>>;;>>;>>;>>;>>>>;>>>>;>;>;>>;>>;>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>,>>,>>>,>>>>>,>,>>,>>>>>,>>,>,>>>,>>,>>>,>>>,>>,>,>,>,>>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,,>,>>,>,,>>,,>,>,,,,,>,,>,,,,,>,,,,,,,>,,,,>,,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,',,,',,',,,,,',,,,,,',,,,;=&%$$$$$$$$$$$$#$##$&&*&%%&&&$#@@$%&*&&&$@+@@#$$$&*====*=====****&*&*****==*=***&%#$$$$$&&**=;;,,'',,',,','''',''''''',''''''''''','','''''''''',''''''''',''''''''''''''''''",
-";>>;>;>;>>;>;>;>;>;>>;>;;>;>;>>>;>;>;>;>;>;>;>;>;>>;>;>;>>>;>;>;>;>;>>;>;>;>;>;;>>;>;;>>;>;>;;>;>>;>;>>;>>>;>>;>>;>>;>;>>>;>;>>>>>;>>>>>;>>>>>>>;>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>,>>>>>>>>,>,>>>,>>,>,>>,>>>,>>,,>>,>,>>,>>>,,>>,>>,>>>,>,>,>,>,>,>,>,>,>,,>,,,,>,,>,>,,,>,>,,,>,>,,,>,,>,,>,>,,>,,,>,>,,,>,>,>,,,>,,,,,,,,>,,,>,,>,,>,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,',,,,,',',,,,,>;=&%%$%$$$%$$$##$#$#$&&&%%%&%#@@$&-;,,,,;=&$++++@@#&*********&&%&%&&&%&%&&&******&%#$$$$$%&**=-;,,,,',,',''',''',',',''','',''',',''''''','''''''''','''''''''''''''''''''''''",
-";>;>;>>;;>;>;>;>;>;;>;>>;>;>>;;>;>;>>;>;>;>;>>;>;>;>>;>;>;;>>;>;>;>;;>;>;>;>;>>;>;>;>>;>>;>>>;>>;>;>>;>>;>>;>>;>>>;>>>>;>>;>>>;>>>>>;>>>>>;>;>>>>>;>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>,>>>>,>>>>>,>>,>>>,>,>,>>>>>,>>>,>>>,>>>,>>,>,>>,>>>>,>>,,>>>,>,>,>,,>,>>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,>,,>,,>,,>,,,>,,>,,,>,,,>,,,,,>,,,,,,,>,,,,>,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,',',,',,,',,,,,,,,,,,>;=&%$$$$$$$$$$#$####%&&$$%%$@+#&->'''''''',-&#+..++#&*****&%%%%&&******&&&%%&****&%##$$$$$&&*=-;>,',',,,',''',''''''',''''''',''''','''''''','','''''''','''''''''''''''''''''",
-">;>;>;;>>;>;>;>;>>>;>;>;>;>;;>>;>;>;>>;>;>;>;;>>;>;>;>;>;>>;;>;>;>;>>;>;>;>>;>;>;>;>;;>;>>;>;>;>>;>>;>>;>>>;>>;>;>>>;>>>;>>>;>>>>;>>>;>>;>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>>>>>>>>>>>>>,>,>>>>,>>>>>>>,>>>>>>,>,>>>,>,>>,>>>,>>,>>>>,>>,,>,>,>>>,,,>,>,>,>>>>,,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>,>,,>,>,>,,,,>,>,,>>,,>,>,,,>,>,>,,,>,,,,,,,,,,,>,,,>,,,,,,,,>,,,,,,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,',,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,>;*&%$%$%$$$$$##$####%&%$$%$++$=>''''''''''''>*$....@$&&*&&$#%&******=*==**&%$$&&&&$###$$$$%&*=->>,,,,,,,,'',''',',',''','',''''',''''','''''''''''''''''''''''''''''''''''''''",
-">;>;>>;>;>>;>>>;;;>;>;>;>;>>;>;>>;>;;>;>;>;>>;>;>>;>;>;>;;>>;>;>>>;;>;>;>;>;>;>;>>;>>>>;;>;>>>;;>>;>>;>>;;>>;>>>;>;>>;>>>;>>>;>;>>;>>>>>>>>;>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>,>>>>,>,>>>>,>,>>>>>>,>>>>>,>>,>,>,>>,,>>,>>>,>>>,>,>>>,>,>>>,,,,>>,>,>,>,>,>,>,>,,>,,>,,>,>,>,,>,,>,>,,>,>,,,>,>,,,,>,,,,>,,,,>,,,,,,,>,,,,>,,>,>,,>,,,>,,,>,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',',,',,',,',,,,,,,>-=&%%$$$$%$$$#####@@%%$$$$++$*-,''''''''''''',=$....@%&&$##$&&&%%%%%%%%&&**&%$#%&&$@##$$$$%&**=;>,,',,>,,,''','''''',''''''',''''','''''',''',''',''''''''''',''''''''''''''''",
-">>;>;>;>;>;>;>;>>>>;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;;>;>>;>>;>;>;>;;>>>;>;>;>;>>;>;>;>;;;>>>>>;;>>;>;>;>>;>>>;>>;>;>>>;>>>;>>>;>>>>>>>>;>;>;>>>>>>;>>>>>>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>,>>>>,>>>>>>>,>>>>,>,>,>>>,>,>>>,>>>>>,>>>,>>,,>>,,>,>>,,>>,>,,>>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,>,,>,,>,,,>>,,>,>,>,,,>,>,,,>,,,>,>,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,,,,,',,,,,,,,,,,,,,>>;=&%%$$$$$$$#$$##@@@$$#$$@+#*=;>'''''''''''''',=#...+$%$@@$$$###@@@@++@@#%&*&&##%%$@###$$$$&&*=->,,>,>>,,'',''',','''','',''''',''','''''','''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>;;>;;>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>>;>;>;>;>;>>;>>;;;>>;>>;>;;>;>;>;>>>;>;;;>>>;>>;>>>;>>;>>>;>>>;>>>>;>>>;>>;>;>>>;>>>>>>>;>>>>>>>;>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>,>>,>>>,>>>>>>>>,>>,>>,>,>>,>,>>,>>,>,>>,>>>>>,>>>,>,>>,,>,>>,>,>,>,>,>,>,,>,>,,>,>,>,>,>,,>,,>,,>,>,>,,,>,,,>,,>,,>,,,>,,>,,,,,,,>,,,,>,>,,>,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,,,,,,,,',,',,,,,,',,,,,,,,>,,,,>-=&%%$%$$$$$######+@###$@++&=-;;>,'''''''''''''>*@...@@+@#@@@@@#$$#$###@@+@$&&&#@##+@#$$$$$%&*=-;>,>>>>>,,'',''''',''''''','','''''''',''''''',''''',''''','''''''''''''''''''",
-">;>;>;>;>;>;>;>>;>>;>;>>>;>;>;>;>;>>;>;>;>;>;>;>;;>;>;>;>;>;;>;;>>>;>;>;>;>>;>>;>;>;>;>>>>;;>>;>;>;>>;>>;>;>>;>>;>;>>;>>>;>>>>;>>>>>>;>>>>;>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>,>>>>,>>>>>>,>>>>,>,>,>>>,>>>,>>>>,>>>>,>,>>,>>,>>,,>,>,,>,>>,>>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,>,>,>,,>,>,>,,,>,,>,,,>,,>,,>,,,>,,>,,,>,>,>,,,>,,,,,,,,,,,,,,,>,,>,,>,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,',,',,,,',,,,,>>,>,>>;=*%%$$%$$$$#$###@++@#$#@+%=-;;>,>''''''''''''',-%+.+@++.+++$&=;>>,,,>;=*%@+@%%%@+@+@###$$$%&**=;>>>;;;,,,''',',''','',''''''''',''''''''','''''''''',''''''''''''''''''''''''",
-">;>>;>>;>;>;>;>;>;>;>;>;>;>;>>;>>;>;>>;>;>;>;>;>>;>;>;>;>;>>;>>;>;>;>;>;>;>;>;>;>;>;>>;;>>>;>;>>;>>;>>;>>;>>;>;>>>>;>>;>>>;>;>>;>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>,>>>>,>>,>>,>,>>>>>>,>>>>,>>,>,>,>,>>>>,>,>,>>,>>>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,>,>,,>,,>,>,,,>,>>,,>,>,>,,>,,>,,>,,>,,,,>,,,,,,>,,,,>,,,>,,>,>,,,,,,,,,,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,',,,,',,,,,,,,,',,,,,,>,>>,,,>>;=&&%$$$$%$$####@@+++##@.#*--;>>,,,'''''''''''''>*#..++...#&=->''''''''',;*%@@$%$.+++##$$$$$%&*=------;>,'','''','''''',','','''''','''''''',''','''''''''''''''''''''''''''''",
-";>;>>;;>;>;>;>;>;>;>;>;;>>;>;>;>;>;>;;>;>>>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>>;>;>;>>;>>;>>;>>;>>;>>>>>>;>>>;>>;>>>>>>>>>>>>;>>>>>>>>>;>>>;>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>,>>>>,>>>>>>>>>>>,>,>,>>>,>,>>,>>>,>>>,,>,>>>>,>,>,>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>>,>,>,>,,>,>,,>>,,,>>,,,,>,>,,,,,,>,,,,>,,>,,,,>,,>,>,>,,,>,,,,>,,,,,,,>,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,',,',',,,,,,,,,>>>>>,,>>-=&%%$%$$$$$$###@@+++##@+%=-;>>,,,,'''''''''''',,;%+.@+.+%*--;>,'''''''''',-&@+#$+..+@##$$$$&&&=======;>',''',''',',''''''''','',''''','''''''''''''''''''''''''''''''''''''''",
-">;>;;>>>;>;>;>;>;>;>;>>;;>;>;>;>;>;>>;>>;;>;>>;>;>;>;>>>;>;>;>;>;>;>;>;;>;>;>;>>;>;>>;>>;>>;>;>;>>;>>;>>;>>;>;;>>>;>>>;>>>;>>;>>;>;>>>>;>;>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>,>>>>>>,>>>>,>>,>>,>>>>>>>>,>>>>>,>>,>>>,>>>>>,>,,>>>,>>,>>,>,>>>,>,>>,,>,>,>,>,>,>,>,,>,>,,>,>,>,>>,,,>>,,,>>,,,>,>>,>>,,>,>,,>,,>,>,,,,,,,,,>,,,,>,,,,,>,,,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,',,,,',,',,,,,,,,',,',,,>>>>>>,,>;=*&%%$$$$$$#$###@++++#@+@*-;;>>,,,,'''''''''''',,;*@+++@%=-;;;>>,'''''''''''>*#@#@.++@##$$$$%&&****&*=;,,'','',''''',','','''''''',''''',''''''''''''''','''''''''''''''''''''",
-";>;>>;;>>;>;>;>;>;>>;>;>>;>;>;>;>>;>;>;;>>;>;>>;>;>;>;;>>;>;>;>;>;>>>;>>;>;>;>;;>>;>;>>;>;>;>>;>>;>>;>>;>>;>>>>>;>>>;>>>;>>>>>;>>>>>;>>>>>;>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>>>,>>,>,>,>,>>>,>,>>>,>>,>,>,>,>,>>>,,>>,>>,>>,>,,,>>,>,>>,>,>,>,>,>,>,>>,,>,>,>,,>,,,>>,,,>>,,,>,>,,,,,,,,>,,,>,,>,,,,,>,>,>,>,,,>,,,,>,>,,>,,,>,,,,,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,',,',,,,,,,,,,>;;>>,>;=*&&%%$%$$$$$###@@+++@#@.$=;;>>,,,,','''''''''',,,>=$+@#&=-;;>,>,,'''''''''''';*@@+..+@##$$$$%%&&&&&&*=>,',''''',','''''''','',',''''''''','','''''''''''''''''''''''''''''''''",
-";>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;;>;>;>>;;>;>;;>;>;>;>>;;>;>;>;>;>>;;>;>;>>;>;>>;>;>>;>;>>;>>;>>;>>;>>;>>;>>;;>;>>;>>>;>>>;>;>>>>>;>>>>;>>>>>;>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>,>>>,>>>>>>>>,>,>>>>>>>>>>>>>,>>>,>,>>,>>>>>,>>>>,,>>>,>>,>,>,>>>>,>,>>,>,>>,>,>,>,>,>,,>>,>,>,>,>,>>,,,>,,,,>>,>,,>>,>,>,,,>,,>,,,>,>,,,,,,,,,>,,,,>,,,,,,,,,>,,,,,>,,,>,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,',,,,,,,,',,',,,,,,',',,,,,>>;;>>>>-*&%%%$$%$%$$$###@@+.++#@+&-;;;>,,,',',''''''''',,>>-&@@%=-;;>>,,,,,''''''''''''>&++..++@#$$$$%%%%&%&&*->,'',','''''','',''''''''''''',''''''''''',''',''''','''''''''''''''''''",
-">;>;>>;>;>;>>;>>;>;>;>;>;>;>>>;>>;>;>>;>>;>;>>;>;>;>;;>>;>>>;>;>;>;>>;>;>;>;>;>;>>;>;>>;>;>;>;>>;>>;>>;>>;>>>>>;>>>;>>>;>>>>>>;>>>>;>>>;>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>,>>>>>>,>,>,>,>,>,>>,>,>>>,>>,,>,>>>,,>>>>,>,>,>>>,>,,>,>,>,,>,>,,>,>,>,>,>,>>,,,>,,>,>,>,,>,>,>>,>,,,,>,,,>,,,>,>,,>,,>,,,,,>,>,>,>,,,>,,,,,>,,,>,,,,,>,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,>>;;-;>>;=&%%%$%$$$$$#$$$#@+++++@+@*;;;>>,,',',',''''''',;----&##*=;;>,,,,,'''''''''''''',-%....@@##$$$$%%%%%%&=;,',''''',','''''','','',''','''''''''','''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;>;;>;>;>>;>>;>>;;>;>;>>;;>;>;>;>;>>;>>;>>;>;>;;>;>>;;>;;>;>;>;>;>;>;>;>>;>;>>;>;>>;>>;>>;>>;>>;>;>>>;>>>;>>;>;>>;>>;>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>,>>>>,>>,>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,,>>,>,,>,>>>,>,>,>>,>,>>,>>>,>>,>,>,>,>,>,,>,>,>,>,,>,,>,>,>,,,>,>,>,>,>,,>,,>,,>,,>,>,>,>,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,',,,,,,',,,',',,',,,,',,,',,,>>;---;;-*&%%%$$$$$$$$####@@..++@+$=;>>>>,,,,',','','''>*&*-==*$&**=->,,''',,''''''''''''';*@..++@#$$$$$%%%%%&&-,,'',',''''','','''''''''',''''','','''''''''''''''''''''''''''''''''''''",
-";>;>;>>;>;>;>>>;>>;>;>;;>;;>>;>;>;;>>;>;>>;>;>;>;>;>;>;>;>>;>;>>>;>>;>;>;>;>;>;>;>;>>;>;>>;>;>>;>>;>>;>>>;>>>>;>>>;>>;>>>>>>>>>>;>>>>>>>>>;>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>,>>>>,>>,>,>,>,>,>,>,>,>,>,>>>,>,>>>,>,>>>>>,>,>>,>>,>>,>,>>,>,>,,>,>,>,>,>,>>,>,>,,>,>,>>,>,>,,>,,>,>,,>,,>,,>,,>,,>,,,,,,,,,,>,>,>,,,>,,,,,>,,,,,>,>,,,,,,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,,',,,',,,,,,,>;-=---=*&%$$$$%$$$$$$$##@+++.+++$->;>>,,,,',',,,',',,=@#;',=&&&%%*=-,,,,''',''''''''''',>=$...+@##$$$$$$%%%&=;,',''''',',''''''',','',''''',''''''''''''''''','''''''''''''''''''''''''",
-";>;>;;>;>;>;;;>;;>;>;>>;>>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;;>;>;;;>;>;>>;>>;>>;>>>;>;>;>>;>;>>;>>;>>>;>>;;>>;>;>>>;>>>>>;>;>;>>>;>>>;>>;>>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>>>>>>>,>>>>>>>>>>>,>>>,>,>>>,>,>>>,>,>,>,>,>,>,>,,>>>,,>,>,>>,>,>,>,>,>,,>,>,,>,>,>,,,,>,,>,>,,>,,>,,>,,>,,>,,,>,,>,>,>,>,,,,,,,>,,,,>,,,,,>,,,,,,,,>,,,,,,>,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',',,,,,,,,',,,,,>;-*===*&%%$$$$$$%$$$####@++.++.+%->>;>>,,,,,,',,',,'>%+.#=>-&&%@%>,-;,',,',',''''''''''>;=&..+++##$$$$%$%%%*->,'',','''''','','''''''''''''''''','',''''','''''''''''''''''''''''''''''",
-">;>;>>;>;>;>>>;>>;>;>;>;>;>>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>>;>;>;>;>;>;;>;>;>>;>>;>>;>>;>;>>;;>>;>>>;>>>>>;>>>;>;>>>>>>;>>>>;>>>>>;>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>,>>>,>,>>,>>>>>,>,>>>>,>,>,>,>,>>>,>>,>>,>>>>>,>>,>,>>>>,>>,>,>>,,,>>,>>,>,>,>,>,>,>>,>,>,>,>,,>,>>,>,,>,,,>,,>,,>,,>,,>,,,>,,,>,,,,,,,,>,>,>,,,>,,,>,,>,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,,,',,,,',,',,,,,,,,,,',',,',,,,,,,>;=****&&%$%$$%$$$$$#$$#@@++.....%->>>>>,,',',,',,,,,=#..+%=*%%#++%;;*>,'',',',''''''',,>;=&+..+@@#$$$$$$%%&=>,',''''',','''''''''',',','''''',''''''',''''''''','''''''''''''''''''''''",
-">;>;>;>>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>>;>>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>;>;>;>>>;>>>>;>>;>>>;>;>>>;>>;>>>;>;>>>>;>>>>>;>>>>;>>>>;>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>,>>>,>>>,>,>,,>,>,>>>,,>,>,>>>,>,>>>,>,,>,>,>,>,>,>,,>,>,>,>,>,>,,,>,>,>,>>,,>,>,,>,,>,,,>,,>,>,,>,>,>,>,,,,,,>,,,,,,,,,,,>,,,,,>,,,>,,>,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,,,,',',,,,,;-*&&&%%%$$$$$$%$$$$####@+......%;>>>>,,,,,,',,,',',*$+..@$@#$#..+&*%=,,',',',''''''',,;;-&+..++##$$$$%$%&=>,''',',''''','','',',''''''','','''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;>;>;>;>;>;>;;>;>;>;>;>;>;>;>;>;>;>;>>>;>;>;>;>;>;;>;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>;>>;>;>>;>>;>;>>>>;>>;>>>;>>>>>;>>>>>>;>>>>>>>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>,>>,>>>,>>,>>>,>,>,>,>,>,>,>,>>>,>>,>>>>,>>>,,>>>,>>>,,>,>>,,>>,>>,>,>,>,>,>,>>,>,,,>,>,>,>,>,>,>,,,,>,,>,>,,>,,>,>,>,,>,,>,,,,,,,>,,>,,,>,,>,,>,>,,,,,>,,,>,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,',,',,',,,,,,,,,,,;-*&&%%%$$%$$$$$$$$#$##@@++.....%;>>>>>,,,,,,,',,,,,&%+.....+##+..@++*',,,,,,',,'''',,>>--&+..++@#$$$$$%%*;,,',''''',',''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''",
-";>;>>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>>>;>;>>;;>;>;>;>;>;>>;>>>;>;>;>;>;>;>;>;>;>>;>>;>;>>>;>;>>;>>>;>>;>>;>>;>;>>;>>>;>>;>>;>>>;>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>,>>>>>,>>>>>>>>>,>>>>>>,>>>>>,>>>>>>>>>>>>,>>>,>,>>,>>,>,>>,,>>>,,>>,,>>,>,>,>>,>,>,>>,>,>,>,>,,>,>>>,>,,>,,>,>,,,>,>>,,>,,,>,>,,,>,,,,>,,>,,>,>,>,,,>,,>,,,,,,,,,,,,>,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,',',,,,,,,,,,',',',,,,,>-*&%%%%$$$%$%$$$$$#$##@@+......%->>,>>,,,',,,,,,,,,*%#.....+#%@.....&,,',',,,,,,',,,,>;;=&+..++@##$$$%%&-,,''',',''''''',',',''',','''''''''','''',''''''','''''''''''''''''''''''''''",
-">;>;;>;>>;>>;>;>;>;>>;>>>;>;>;>;>;;>>;>;;>>;>;>;>>;>;>;>;;;>;>>>;>>;>>;>;>;>;>;>;>>;>;;>>>;>>;;>>;>>;>>>;>>>;>>>;>>>;>>>>>>>>;>>>>;>>;>;>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>,>>>>,>,>>>,>,>,>,>,>>>>,>>>>,>>>,>>>,>>>>,>>>,>>>>,>,>>,>,>,>,>,,>,>,>,>,>>,>,,,>,>,>,>,>,>,>,,,>,>,>,>,,>,>,,>,>,,,,,>,,,,,,,>,,,,,>,>,>,>,,>,,,,,,,,,,>,,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,,,,,',',',,,,,,,,,,,>;=&&%%$$$$$$$$%$$$$###@+++.....%->>>>,>,,,,,,,,,,,,*&%+....+$%#....+*',,,,,',',,,,,,>>;-=&+..++@#$$$$$&*>,'',''''',',','''''','''''',','',''''''''''',''''''''''''''''''''''''''''''''",
-">;>>;>;;>>;>;>;>;>>;>;;;>>;>>;>;>>;;>;>>;;>>;>>;;>;>;>;>>>;>>;;>;>;>;>;>;>;>>;>>;>;>>>>;;>>;>>>;>>;>>;;>>;>>>;>>>;>>>>;>;>>;>>>>;>>>>>>>>>;>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>,>>,>>>,>>>>>,>>>>>>>>>>>,>,>>,>,>>,>>>,>,>,>,>,>,>>,,>,>>,,>,>,>>>,>>,>,>,>,>,,>,>,>,>,>,,>,,>,>,,>,,>,,,>,,>,,,>,,,,>,>>,,,>,>,>,,,>,>,,,,,,,,,,,,,>,,,,>,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,,,,,,,,',,,',,',,,,,,,,',',,',,,,,>=*%%%$%$%$$$$$$$$#$##@@+......$->>,>>>,,,,,,,,,,,,=&&#....@$&&@...@-,,,,,,,,,,,,,,,>>;-=%...++@##$$$$&-,,,'',','''''''''','''',''''''''''',''',''''''''''''',''''''''''''''''''''''''",
-";>;;>>>;;>;>>;>;>;;>;>>>;>;>;>;>;;>>>;>;>>;>;>;>>;>;>;>;>;>;;>>;>;>;>;>>>;>;>>;>;>>;;>;>>;>>>;>>;>>;>>>;>>>;>>>;>>;>;>>>>>>>>>;>>;>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>>>>,>,>,>,>,>>,>>,>>>,>>,>,>>>,>,>,>>,>,>>,>,>>,>>,>,>,>,,>,>,>,>,>>,>,>,,,>,>,>,>,,>,>,>,,>>,>,>,,>,,>,>,,,,>,>,,,,,,,>,,,,,>,>,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,,',,,',,,',,,',,,,,',,,,,,,>;*&%%$$%$$%$$$$$#$###@++......#=;>>,>,>,,,,,,,,,,,>&&&#++@##%*%#++&>,,,',,,,,',,,,>>;;-*$....+@#$$$$$*;,'','''',','',','''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>;;>>;>;;>;>;>>;>;>;>;>;>;>;>>>;;>;>;>;;>;>;>;>>;>;>;>;>>;;>;>;>;>;>;>;>>;>;>>;>>;>;>>>;;>>;>>;>>;>>>;>>>;>>;>>>>>;>>>;>>;>>>>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>,>,>>,>,>>,>,>,>>>>>>>>>>>>>,>>,>>,>>,>>,,>>>,>>,>>,>,>,>,>,>,>,>,>,>>,>,>,>,>,,>,>,,>>,>,>,>,>,>,,>,,>,,,,,>,>,,>,,,>,>,,,,>,>,>,>,,,>,>,,,,,>,,,,,,>,,,,,,>,,>,,>,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,>;-*%%%$%%$%$%$$$$#$##@++......+*;>>,>>,,,,,,,,,,,>,-**&%$$$@#&&&%&=,,,,,,,,,,,,,,>>>;;=&@...++@@#$$$$*>,'',''''''','''''''''',''''','',''''','''''''''','''''''''''''''''''''''''''''",
-">;;;>;>;>;>>;>>;>;>;>;>;>;>;>;>;;;>>;>;>;>>;>;>;>;;>>;>;>;>;>>;>;>;>;>;>;>;;>>;>;>;>>;>;;>>>;>>;>>;>>;>>>;>>>;>>>;>;>>>;>>>>>>>>;>>>;>>>>>>>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>,>,>,>,>,>,>>,>>,>>,>>>>>>,>,>>,>,>>,>>>,>,>,>>>,>,>,,>,>,>,>,>>,>,>>,,,>,,>,,>,,>,>,>,,>>,>,,,>,,,>,,,,>,>,,,,,,,,,>,,,,,,>,,,,>,>,,,,>,>,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,',,,,',,',,',,,,',,,',',,,,,,,,>-=&&$%$$%%$$%$$#$###@++......+%->>>,>>,>,,,,,,,,,>;=&&&%&#+#%&&*=>>>,,,,,,,,,,,>>>;;-=$.....+@##$$$$*>,',',',',''''',','',''''','''''''','''''''',''''''''''''''''''''''''''''''''''",
-">>>;>>;>;>;>;>;>;>>;>;>;>;>>>;>>>;;>;>;>;>>;>;>;>>;>;>;>>;>;>;>>;>;>>;>;>>>>;>;>>>;>;>>>>;>>>;>>;>>;>>;>>>;>>>;>>>>>>;>>>>;>>;>>>>>>>>>>>;>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>,>>>>>>>>>,>>,>>>>>>>,>,>,>>>>>>>>>>>,>>>,>>,>>,>,,>>,>>,>>>,>>>,,>,>>>,,,>>>,>>,>,>,>,>,,>,>,,,>>,>,>,>,>,>,,,>,>,,>,,>>,,>,,>,>,,>,,>,>,>,>,,,>,>,>,,,>,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,',,,,',,,,',,,,,,,,>-*&%%%%%%$$$$$$$###@++.......#=>>>,>>,>,>,>,>,>,>>;=*&*&#.+%*=-;>>>>>,,,,>,>>>>>>;;=&+.....++##$$$#&>,,',',,'',''''''''''',''''''''',''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;;>;>;>;>;>;>;;>;>;>;>;;;>;>;>>;>;>;>;;>;>>;>;>;>;>;;>;>;>;>>;>;;>;>;;;>>;>;>;>;>>;;>>;;>>;>>;>>;>>;>;>>;>>>;>;>>>>>;>>;>>>>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>,>>>>>>>>>,>,>,>,>,>>,>>,>>>,>>>,>,>>,>,>,>,>,>>,>,,>>>>,,>,>,>,>,>,>,>>,>,>>,,,>,>,>,,>,,>>,,>,>,,>,,,>,,>,,>,>,,>,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,,,,,,',',,',,,,,',,',',,,,,>,>,,>>-=&&%%%%%$$%$#$$#@@+........+&->,>,>>,>,,,,,>,>>>;-=*&&#@#$&*-;;>>>>>>>>>>,>>>>>;-&@......+@@##$$$%;,,,,,',,',',''','',''','','','''''',''',''''''''',''''''''''''''''''''''''''''",
-";>;>>;>>;>>;>;>;>>;>>;>>;>>>;>;>;>;>>;>;>>;>>;>;>;>;>;>>;>;>;>;;>;>>;>;>>>;>;>>;>;>>;>>>;>>>;>>;>>;>>>>>>>;>>>;>>>>;>>;>>>>>>>;>>>;>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>,>>>>>>>,>>,>>>,>>>,>,>,>,>>>>>>>>>>,>>,>>,>>,>,>>,>,>,>>,>>,>,>,>>>,,>,>>,>,>,>,>,>,>,,>,>,,>>>,>,,>,>,>,,,,>,,,>,>,>,,,>,,>,,,,>,,>,>,>,>,,,>,>,>,,>,,>,,,,>,,>,,,,,,,,,,>,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,',,',,,,,,,,,',,,,,,,,,,',,,,,>,,>>;-*&&%&&%$$$$$$#$#@+.........%=>>>,,>>>>>>>,>>>;==*&*&***&****==;;>>,>,>,>>,>>>;=&#........+##$$$$%->,,>,>,,,''',''''''''''''''''''''''''''''''''','''''''''''''''''''''''''''''''",
-">;>;>;>;>;;>;>>;>;>;>;>;>;>;>;>;>;>;;>>;>;>;;>;>;>;>;>;>>;>;>;>>>;>;>;>;>;>>;>;>>;>;>;>;>>;>>;>>;>>;;>;>;>>>;>>;>;>>>>>>>>;>;>>>>>>>>>>>>;>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>>>>>>>>,>>>>>>,>>>>>>>>>>>>>,>,>,>,>,>>,>>,>>,>>>>,>>,>>>,>>,>>,>,>,>,>>,>,>>,>,>,>,>,>,>>,>,>,,,,>,>,,>,>,>>,>,,>,>,,,>,>,,>,,>,>,,>,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,,,',,',',,,',',',',',,,,,>,>,,,,>>-*&&&&%$%$$$$##@@++........@&;;>>,>,>,>,>>>-**&&*==;;>>,>>>;-=*=-;>,>,>,,>>>-=&#........++@##$$$$*;;>;;>>>,,,,''',',','',''''','',''',''''',''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>>;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>;>;>;>;>;>>>;>;;>;>;>;>;;>>;>;>;>>;>>;>;>>>;>>>;>>;>>;>>>;>>>>>>>;>>>;>>>;>>;>>;>>>>>>>;>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>,>>>>>>,>>,>,>,>,>>>>>>>>>>,>>>,>>,>>,>,>>,>>,,>>,>>,>,>>,>,>,>,>,,>,>,>,>,>,>,,>,>,,>>,>,,>>,>,>,,,>,>,>,,>>,,,>,,,>,,,>,,,>,>,>,>,,,>,>,>,,>,,>,,,,>,>,,,>,,>,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,,,,',,,,,,,,,,,,,,,,,,,,,',,,,,>>,,,,,>>-**&&%$$$$$$$##++..........$=;>>>>,>>>>>;=&&&*--;>>>,,'''''''>-*=->>,>>>>;=*$+..........+@##$$$$&=------;>>',','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>;>;>;>;>;>;>;>;>;>;>;>;;>;>>;>;>;>;>>;>>;>;>;;>>;>>;>;>;>;>>;;>;>>;>;>;>>;>;;>>;;>>;>;>>;>;>>;>>;>;>>>;>>>;>>>>>;>>>>;>;>>>>>>;>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>,>>>,>>,>>>>>>>>>>>>>,>,>,>,>,>>,>>,>>,>>>,>,>,>>>,>,>,>>>,>>,>,>,>,>>,>,>,>,>,>,>>,>,>>,,>,>,,>,,>,,>,,>,,,>,,,>,,>,>,,,>,,>,>,,,,,,,,>,,,,,,>,,,,,,>,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',',,,',',,',',',',,',,,,>>>>,,,,>;-**&%%%$$$$###++..........+%=;>>>>>>>;;=%%&**=--;;>>,,''''''''>==-;>>;-*&%#............+@@$#$$$%&*****==-;>,,','','','''','''''','''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;>;>;>;>;>;>;>>;>>;>;>>;>>;>;>;>;>;;>;>;>>;>>;;>;>;>>;>;>;;>>;>>;>;>;>>;>;>>;>;>>;>>>>;>>>;>>>;>>>>;>>>;>>>;>;>>>>>;>>>>;>>>;>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>>>>>>>,>>>,>>,>>,>,>,>>>>>>>>>>,>>,>>,>>,>>>,>>,>,>>,>>,>,>,,>,>>>,>>,>,>,>,>,>,>,,>,>,,>,>,,>,>,>,>,>,>,,>>,,>>,,>,,,>,>,,>,,,,>,>,>,,,,>,>,,,,,>,,,,,,>,,,,,,,,,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,,,,,,,',',,,,,',,,,,,,,,,,,,',,,,,>>>>>>,,,,>;==*%%$$$$$$#@++...........#&-;>>>>>>;*&$$%&&**=-;;>>,,'''''''''=*=-==&$@+.............+@@#$$$$$&&&&&&**=-;,,'','''''',''''','''''',''''''','''','''''''''''''''''''''''''''''",
-">;;>;>;>;>>>;>;>>;>;>;;>>;>;>;;>;>;>;>;>>;>;>;;>;;>>>;>;>;>>;>>;>;>;;>;>>;>;>>>;>>;>>;>>;;>>;>;>>;>>;>;>>;>>>;>>>>>>;>;>>>>>>>;>>>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>,>>,>>>,>,>>>>>>>>>>,>>>>>>>>,>,>,>,>>,>>,>>>>,>,>>,>,>>,>>,>>,>,>>,>,,>,>,>,>,>,>,>,>,>>,>,,>,>,>>,,>,>,,>,,,>,,,>,,,>,,,>,,,,>,,>,>,,,,,,>,>,,,,>,>,,,>,,>,,,,,>,,,>,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,,,,,,,',,,,,,,',',',',,,,',,,>>;;>>>>>>>;-=*&%%$$$$##@@.............#&-;;>;>;-&%%%%%%%&**=-;;>>,''''''''>***=**$+...............+@##$$$$%%%&&&&&*=-;>,,'',','''''''''''',''''','''''''''''''''''''''''''''''''''''''''",
-">>;>;>;>>;;>;>>;>;>;>>;;>;>;>>;>;>;>>>;;>;>;>>;>>>;;>;>;>;;>>;>;>;>>;>>;>>;>;;>>;>;>>>;>>>;>>>>;>>;>>>>;>>;>>>;>>;>>>>>>>;>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>,>>>,>,>,>,>>>>>>>,>>>,>>,>,>>>,>,>>,>>,>,>,>,>>,>,>>,>>,>>,>,>,>,>,>,,>,>,>,,>,,,>,>,,>,,>>,,>>,,>>,,>>,,>,>,,>,,,>,>,>,,,,,>,,,,,,,,,,,,,,>,,,,,>,,,,,,>,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,',,,',,',,,,,,,,,',,,,,,,,>;;;>>,>>>>;-*%%%$$$$##@++............+$*=-;;;;-&&&%%%%&%&&**--;;>>,'''''',*=---==%#.............++@##$$$$$%%%%%%%&&=->,,'',''',''',''',''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;;>>;>;;>;>;>;>>;>;>;>;>;>;>;;>>>;>>;>;>;;;>>;>;>;>>;;>>;>;>;>;>>;>;>>;>;>>;>;>>;>;>>;;>>;>>;>;>>>>>;>;>>>>>>>;>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>,>,>>,>,>>>,>>>,>,>>>,>,>,>>>,>>,>,>,>>,>,,>,>>,>,>,>,>,>>,>,>,>,>,>>,>,>>,>,,,>,,,>,,,>,,,,>,,,>,,,>,,,,,,,>,>,,,>,,>,>,,>,>,,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,',,,,,,,,,,,',,,,,,,,,,',,',',',,',',,,,>;;-;;>;>;;;;-*&%$$$$$##++............+$&=-=----=&&&&%%%%%%%&&&=-;;>>,,''''-*-;>>>;-*$+............++###$$$$$%$%%%%&&*=;>,,'''''',''','''''''''''''''',''''''''''''''''''''''''''''''''''",
-";>>;>;>>;;>;>>;>;>;>;>;>;>>;>;>;>;>>;;;>;;>;>;>>>;;>;>;>;>;>;;>;>;>;>;;>;>>;>>>;>;>>;>>;>>;>>>;>>>>>>>;>;>>>>>>;>>;>>>>>>>;>>;>>>>>>>;>>;>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>,>,>>>>>>,>>,>,>,>,>>>>>>>>,>>>,>,>>,>>,>>,,>>>,>>,,>>,>,>,>>,>,>>>,>,>,>,>,>,>,,>,>,,>,>,,>,,>,,,,>,>,,>>,,>>,,>,>,,>,,,>,>,,>,>,>,,,,>,,,>,,,,,,,,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',',,,,,',,',,',,,,,,,,,,,,,,,,,,,,>>;---;;;;;;;-*&%%$$$##@++............%=;;;--===*&%**%%&%&&%&&&&*=-;;>>,,,;&=>,,,',,>-&+...........++@##$$$$$$$%%%%&&&*-;,,,',',''''''''''',''','''''''''''''''''''''''''''''''''''''''''",
-">;;>>;>;>>>;>;>;>;>;>;>>;>;>;>;>>;>;>>>;>>;>;>;>;>>;>;>>;>>;>>;>;>;>;>>>>;>;>;;>>>;>>;>>;>>;>;>>;>;>;>>>>;>;>;>>;>>;>>;>;>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>,>>>>>>>>,>,>,>,>>,>,>>>,>>,>>,>>>,,>>,>>>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>>,>,>,>,,,>,,,>,,,,>,,>,>,,,>,,,,,,,,>,,,>,,,,,>,>,,>,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',',',',',',,',,,,>;-===------;=*%$%%$$##@+............%-,,,,>;---=*&%**%%%%%&%%&%&*=-;;;>>;**;,,'''''',>&@...........+@@#$$$%$%$$$%%%%&*=->,',''',','','',''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>;>;;>;>;>;>;>;>;;>;>;>;>;>;>;>;;>;>;>>;>;>;;>;>>;>;;>;>;>>;>>>;>;;>>>;>>>;;>>;>>;>>;>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>,>>,>>>>>>>,>>>>>>>>>>>>,>,>,>>>>>>>>>,>>>>,>>,>>,>>,>,>>>,>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,,>,,>>,,>>,,>>,,,>,,,,>,,>,>,>,>,,,>,,,>,,>,,,,,,,,,,,,,,,,>,,,,>,,,,,,>,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,,,,,,,,,',',,',,',,,,,,,,,,,,',,,,,,>>>-=======---=*%%%%$$##@+...........$;'''',,,>;;-=*%&*&&%&%&%&&&%&&*=-;;-**->''''''''''>*@..........++@##$$%$%$%$%%%&&&*=;>,',,,'',''''''''''''''','''','''''''''''''''''''''''''''''''''",
-";;>;>;>;>>;>;>;>>;>>;>>;>;>>>;>;>;>;>>;>;>;;>;>;>>;>;;>;>>;>;>;;>;;>>;>>;;>>;>;>>;>>;>>>;>>;>>;;>>>>;>>>;>;>;>>;>>>;>>;>;>>>;>>>>>>;>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>,>,>>,>>>>>>>,>,>,>,>>,>,>>,>>,>>>>,>>,>,>>>,>,>>,>,>,,>>>,>,>,>,>,>,>,>>,>,>,,>,>,>,>,>,,>,>>,,>,,,>,,,>,,,,>,,>,>,,>,,,,,,,,,>,,,>,,,,,,,,,>,>,>,>,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,,,,,',,,,,',,',',',',,,,,,,,,>>;-=***====-=*&%&%$$##@++..........#;''''''',,,>>;-*%&*&%%&%&%%&&&&&*=--*&=>'''''''''''',*@..........++###$%%%$$$%%%%&&*=;>,,',,,,'',''''',''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>>;>;>;>;>;>;>;>;;>;>;>;>;>>;>;>>;>;>>;>;>>;>;>;>;>>>;>>;>;>;>>>;>;>;>>>;>>;>>;>>;>>>>;>;>>;>>;>>>>;>>>;>>>>>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>,>,>>>>>>>>,>>>,>>>,>>,>,>>,>>,>,,>>>,>,>>,>>,>,>,>>>,>,>,>,>,,>,>,>,>,,>,,>,,>>,>,,,>,>,>,,>>,,>,>,>,,,>,,>,,>,>,>,>,,,>,,,>,>,,>,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,,,,,,,,',',,,,,,',,,,,,,,,,,,,',',,,,>,>>;-***&****=*&%%&%%$#@@+..........@-'''''''''',,,>;-*&&*&%%%&&%&%&&&&*=*&=>,''''''''''''''*@.........++@##$%%&%%$%%%&&&**-;>,,,,,',''',''''''',''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>;>;>;>>;>;>;>;>;>;>;>>;>;>;>;>;;>;>;>>;>;;>>;>;>;>;>>;;>;>;;>>>;>>;;>;>>>;;>>>;>;>>;>>;>>;>>>>>>;>>>;>>>>;>>>;>;>>>>>>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>,>>>,>>,>>,>>,>>>>>>>,>,>,>>>,>,>>,>>>,>>,>,>>,>>>>,,>>,>,>>,>,>,>>,,,>,>,>,>,>>,>,>,>,>,>,>,>,,,>,,>,,>,>,>,,,>,,,,>,,>,,>,,>,,,,,,,,,>,,>,,,,,,,,,,>,,,>,,,,,,,,,>,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,',,,',,',',',',',,,,,,,,,>>;;-**&&&&****%%&&%$##@++.........+=''''''''''''',,,>-*&**&&%&%&%&%&%&&&&*;,''''''''''''''',*+.........++@##%&&%%%%%%%&&*==;>>,,,,,',''','''''''''',''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;;>;>;>;>;>;>;>;>;>>;>;>;>>;>;>;;>;>>;;>;>;>;>;>;>;>;>>>;;>>;>>;>>;;>>>;;>>>;>>;>>;>>>>;>;>>>;>>>;>>>>>>>>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>,>>>,>,>,>>>>>>,>>>>>,>>,>>,>>,>>,>,>,,>>>,>,>,,>,>,>,>,>>>,>,>,>,,,>,>,>,,>,>,,>,>>>,,>,,>,,,>,,>>,,>>,,,>,,>,,>,,>,>,>,>,,,,,,>,,>,,>,,,,,>,,,>,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,>>>>;--*&&&&&&&&%%&&&%$#@++.........+&'''''''''''''''',,>-*&&*&%&%&%&&%&%&%*->,'''''''''''''''',&+........+++##%&&&&%%%&&&***=;;>>>,,,',''''''','''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>>;>;>;>;>;>;>;>;>;;>>>;>;>;>>;>>>;>;>>;>;>>;>;>>;>;>;>;>>;;>;>>;>>;>;>>>>;>>;>>;>;>;>;>>>>;>>>;>>>;>>;>;>>;>>>;>>>>>>>;>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>,>>>>>>,>>,>>>>,>>,>>>>>,>>>>>>,>>,>,>>,>,>>,>>,>>,>,>,>>,>>>,>,>>,>>>,>>>,>,>>,,>,>,>,>>,>,>,>,>,,>,>,,,,,>>,>,,>>,,>,,,>,,,,>,,>,,,,>,,,,,,,,,>,>,>,,,,,,,,>,>,,,,,,,,,,,,,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,,,,,,,',,',,',',,',,,',',',',,,,,,,,,>>;>--=&&&&&&&%%&&*&%$@@+..........%,'''''''''''''''',,,>-*&**&&%&%&%&%%%&->'''''''''''''''''''>%..........+@#$&***&%%&&&**=--;;>>>,,,','',''''''''''','''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;>>;>>;>>;>>>;>;>>>;;>;>;>;>;>;;>;>;>;>>;;>;>;;>;>;>;>;>>>>;>;>;>;>>;>;>>;>>;>>>>>>>>>;>;>>>;>>>;>>>>>>>>>>>;>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>>>>>>,>>,>>>,>,>>>,>>>>,>>>,>>,>>>,>>>>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>>>,>,,,>,>,,>,>,>,>,>,,>,,,>,>,,>,>,>,>,,,,,,,>,>,,>,,,,,,>,,,>,,>,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,',,,,,,,,,,,,,,,,',,,,,,,,,,',,,,>>>>;;--*&&%%%%%%&&*&*%#@++.........#;'''''''''''''''''',,,>;*&&**%&%&%%&%&-;,'''''''''''''''''''';#.........++@$&*===*%&***==-;;;>>>,,,',''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>>;>;>;>;>;>;>;>;>;>;;;>>;>;>;>;>;>>;>;>;>;>>;>>;>>;>;>;>>;>;;>>;>>;>>;>>;>;>>;>>;;>;>;>;>>>>>;>>>;>>>>;>>>;>;>>>>>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>,>>>>,>>>,>>,>>,>,>>,>,>>>,,>,>,>>,>>,>>>,>,>,>,>,>>,>>,>,>,>,>,>,>,>>,,>,,>,>,,,>,,>,>,,,>,,>,,>,,,>,>,>,>,,,>,,,,,,,>,>,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',',,',,',,,,',',',,,,,,,>,>>>>;-==&&&&%%%&&***&$#++.........@='''''''''''''''''',,'',>;*&***&%%&%%&=;,''''''''''''''''''''''*+..........+#%*==-=*&&*==--;;>>>>>,,,,',''''',''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>>;;>>;>;>;>;>;>;>;>;>>>;;>;>;>;>;>;;>;>;>;>;;>>;>;>;>>;>;>;>>>;>;>;>>;>>;>>>;>>;>>>>>;>>>>;>;>>;>;>>>>;>>;>>>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>,>>>>>,>>,>>>>,>,>>>,>>>>,>>>,>>,>>>>,>>>,>,>>,>,>>,>>,>>,,>,>,>>,>,>,>,,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,>,,,>>,,>,,>,,>,,,,,,>,,>,,,>,>,>,,,,,,,>,,>,>,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,',,,,,,,',,,,,,,,,,',,,',,,,,,,',,,,,,>,>>;;;-=*&&%%%%&&****&#@+.........+&>''''''''''''''''''',,',,>-*&***&&%%&=;>,'''''''''''''''''''''',&.........++@$*=--;-*&=--;;;;>>>,>,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;;>>;;>;>;>>;>;>;>>;>;>;>>;>;>>>;>;>>;>;>>;>>;;>;>;>;>;>;>>>;;>;>>>;>;>;>>>;>>;>;>;>;>>;>;>>>>;>>>>>;>>>>>>>;>>>>;>>>>>>;>>>>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>,>>>>>>>,>>>>>>,>>>,>>>,>>>,>>,>,>>>,>>>>>,>>>,>,>,>,>>>,>>,>,>,>>,>>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>>,,,>,>,>,>,,>,>,>,,,,>,>,,,,,,,>,>,>,,,,,,,>,,>,,,,,>,,>,,,,,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,,',,,',,,,,,,,',',',,,,,,,,,>>>>;;-==*&&&%%%***=**%@++.........#-''''''''''''''''''',,,''',>;*&***&&&*;>'''''''''''''''''''''''''-#..........+#&*=--;;*&*-;;;>>>>>>,,,,,','''''',''',''''''''''''''''''''''''''''''''''''''",
-";>;>;>>;>>;>;>;;>;>;>;;>;>;>;>;>>;;;>>;>;>;>>;>;>;>>;>;>>;>;>;;>;>>>;>;>>;>>;>;>;>>>>>>;>;>>>>>;>;>>>;>;>>;>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>,>,>>>>>,>>,>>>,>>>,>>>,>>,>>>,>,>>,>,>,>,>,>>>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,,,>>,,,>,,,>,,>,,,>,>,,,,>,>,>,,,,,,,,>,>,,,,,,,,,>,,,,,,,,>,,,,,,,,,,>,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,',,,',,',',,,,,,',,',,,>,,>>>;;-=**&&%%&****=*&#+..........+*,''''''''''''''''''',,,'''',>;*&&*&&*;>>''''''''''''''''''''''''''&+.........+@$*=---;;=*=;;>>>>,>,,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;;>;>>;>;>>;>;>;>>;>>;>;>;>;>>;>;>;>;>;;>;>;>;;>;>;;>;>>>;>>;;>>;>;>;>;>;>>>;;>;;>>>>>;>;>>>>>;>>>>>>>>>>>;>>>>;>>;>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>,>>>>,>>>>>,>>>,>>>>>>>,>>>,>>>,>>>,>>>,>>>>>,>,>>>,>>,>>>>,>>,,>,>>,>>>,>,>>>,,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,,>>,,,>>,,>,>,>,,,>,,>,>,>,,,,,,>,>,>,>,,,,,>,,>,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,',,,,,,,,,',,,,,,,,',',,,,,,,,,>,>>>;;-=**&&%%&&***=**%@+..........%>'''''''''''''''''''',>,,'''',,>-*&*=;;>''''''''''''''''''''''''''';$..........+@%&==-;;;=&*->>,>,>>>,,,,'',''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;>;;>;>>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>;>>;>;>>;>>;;>>;>>>;>;>;>>;>>>;>>>>>>>;>;>>;>>>;>;>>;>;>>;>;>>>>>;>>>>>>>>>>;>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>>,>>>>>>>>,>>>,>>>,>>>,>,>>>>,>>,>>>,,>,>,>>>,>,>,>,>,>>,,>>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,,>>,,,>,,,>,>,,,,>,>,,>,,,>,,>,>,,,,,,,,,,>,,>,,,,,,,,,>,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,,,,',,',',,,,,',,',,,,,',',,,,,,,,>,>;--=*&&%%&***=*=&$@+..........@=,'''''''''''''''''''',,,,''''',,>>;;>>>,''''''''''''''''''''''''''''*+..........+@$&==--;;-&&->>>,>,>,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>>;>;;>;>;>;>;>;;>>;>;>;>;;>;>;>>;>;>;>>;>;>>;>;>;;>;>;>;>;>;>>>;>>;>;>;>;>;;>>;>;>>>;>>>>>>>;>>>>>>;>>;>>>;>>>;>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>,>,>>>,>>>,>>>,>>>>,>,>,>>,>,>>>>>>>,,>>,>>,>,>>,,>>,>>,>>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,>,>,,>,>,>,,,,>,,,>,,>,,,,>,>,>,>,>,,,,,,,>,>,>,,,,,,,,,>,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,',',,,,,,',,,,>,>>;;-=**&%&*******&#+...........+%>'''''''''''''''''''',,>>,'''''''',,>>>>'''''''''''''''''''''''''''''>%...........++@&*=--;;-*%->>,>,,,,,',''',''',''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>>>;>>;>>;>;>>>;>;>;>;>>;>;>;>;>;>>;;>;>;>;>;>;>>>;>;>>;>>;>;>;>>;>>>;>>;>>;>>>>;>>>;>;>;>>>>;>>;>>>>>>;>>>;>>>;>>>>>>>;>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>,>>>,>>>>>,>>,>>>>>>>>>,>>>,>>>,>>,>,>>>,>>,>>>>,,>,,>,>>,>>,>>,>,>>>,>,,>,>,>,>,>,>,>,>,>,,,>,>,,>,,>,,>,,,>,>,,>,,>,,>,>,>,,>,>,,,,>,>,,,,,,,,,,>,>,,>,,,,,,,>,>,,,,,,,>,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,',,,,',,',,',,',,,,',,,,,',',,,,,',,,,,>;;-=*&%&*=**=**&@++...........@=,''''''''''''''''''''>-==;,''''''',,,>>,''''''''''''''''''''''''''''''=@...........+++%*=--;;;*&=>,,,>,,,''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;;;>;>;>;>;>;;;;>>;>>;>;>;>;>;>;>;;>>;>;>;>;>;>;>;>>;>;>>;>;>;>;>>>;>>;>>>>>;>;>>>;>>;>>>;>;>>>>>>;>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>>>>,>>>>>>>>>>,>>>>>>>,>>,>>,>>>,>>>,>>>>>,>>,>>>>>,>,>>>,>>>>,>>,>,>,>,>,,>,>>>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>>,,>,,>,>,,>,,,,>,,>,,,>,>,,,,,,>,>,>,>,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,',',,,,',',,,,,,,>>;-=*&%*===***&$@++............%>''''''''''''''''''''-&%%%&='''''''',>>,''''''''''''''''''''''''''''''';$............+.+#&*--;;>=*=>,,,,,'',''''''''',''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>>>;>;>;>;>;>>>>>;>;>;>;>>;>;>;>;>>;>>;>;>;>;>;>;>;>>;>;>;>>;>>;>;>>;>>;>;;>>;>>>;>>>>>;>>>>>;>>;>>>>>>;>>;>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>,>,>,>>>>>,>>>,>>>,>>>,>,>>,>>,>,,>>>,>,>>,,>,>,>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,,,,>,,>,,,>,>,>,>,,>,,>,,,>,>,>,>,,,,,,,,>,,>,>,,>,,,,>,,,>,,,>,,,,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',,,,,,',,',,,,,',,,,,',,,,,,,',,,,,>>;-*&&*==****&$@++............@*,'''''''''''''''''''-&%%%&&&-''''''',,>,,,''''''''''''''''''''''''''''',*+............+.+@%*=-;;>;*->,,'',''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>>;>;;>;>>;>;>;>;>;;;>;>;>>;>;>>;>>;>;>;;>>;>;>;>;>;>>;>;>>>;>;>>;>>;>;>>>;>>>>;>>>;>>>;>;>>>;>;>>>>>;>>>;>>>>>>>;>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>>>>>>>,>>>>>,>>>,>>>,>>>>,>>>,>>>>>,>>,>,>>>>>,>>,>>,>>,>,>,>,>>>,>,>,>,>,>,>,>,>>,>,,,>,,>,>,>>,>,,>,>>,>,,>,,,>,,,>,,>,,>,,,,,,,>,>,>,,,,,,,,,,,>,,,>,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,',,,',,,,',,,',',,,',',,',,,,,,,>>;-&&=-=*=**%@+++++...........$;'''''''''''''''''''>&%%%=;,,'''''''',;-;,,''''''''''''''''''''''''''''''-#...........++...+$*==;;>>->,,,''','','''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;;;>;>>;>>;>;>;>;>;>>>;>;>;;>;>;;>;>;>>;>>;;>;>>;>>;>;;>>;>;;>>>;;>;>>>>>;;>>;>;>>;>>;>;>>>>;>>>>>>;>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>,>>>>>,>>>>>>>,>>>>>>,>,>>>,>>>,>>>,>>>,>>,>,>,>>,>>>,>,,>>,>,>,>,>,>>,>>,>,,>,>,>,>,>,>,>,>,,>,,>>,>,>,>,>,,>,>,>,,,,>,,>,>,,>,,,>,,,,,>,>,>,,,,,,,>,>,,>,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,',,,,,,,,','',,,>>-&*---==*&%@+++@+++.........+&>''''''''''',,'',;,,;&%%*>>'''''''''';=*;,,''''''''''''''''''''''''''''''>%+........+++++....#&=--;>>>,,',''''''''','''''''''''''''''''''''''''''''''''''''''''",
-";>;>>>;>;>;;>;>>;>>;>;>;;>;>;>>;>;>>;>;>;>;>;>>;>;>>;;>>>;>;>>>>;;>>>>>;;>;>>>;>;>>>;>;>>>>;>;>>>;>;>>>;>>;>>;>>>;>;>>>>>>;>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>,>>>>>,>>>,>>>,>>>,>>,>>,>>>>,>>,>,>>>,>>,>>>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,,>,,,>,,>,>,,>,,,>,,>>,,>>,>,,,,,,,>,>,>,,,,,,,,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,',,',,,,,',,',,,,',',',',,,',',',,',,,',,,;**-;-==*&$@+++@@@@+++.......#=''''''''''',>>,',-->-&%&=>,'''''''''>=&*>,,'''''''''''''''''''''''''''''',*@........++++......@%*-;>,,>,,''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;;>;>;>>;>;;>;>;>>;>>;>;>;>;>>;;>;>;>;>;>;;>;>;;>>;;;>;>>;;;>>>;;>;>>>>;>;>>>>;>;>>>;>>>>>>;>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>>>>>>>>>,>,>>>,>>>>>>>,>,>>>,>>>,>>>,>>,>>,>>,>,>>,>,>>,,>>,>>,,>,>>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,>,,>,,,>,,,>,,,,>,>,>,>,,,,,,>,,>,>,,>,>,,,,>,,,>,,,>,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,',,'',,',>-*;;;-=*%#+++.++###@++.......$;'''''''''',>;>>',-*--&%&=;,'''''''''-&%*;,>,'''''',,,,'''''''''''''''''''';$......++@@+++......+$*-;,,,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;;>>;>>;>;>;>>;>;>;>;;>>;>;>>;;>>>;>;>;>;>;>>>;>>;>;>>>;>;>>>>;;>>;>;>;;>>;>>;>;>>>>;>>>;>;>>>;>>>>;>>;>;>>>;>;>>>>>>;>>>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>,>>>>>>,>>>,>>>,>>,>>,>>>,>>>>,>>>,>>,>,>,>>>>>,,,>,>>>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>>,,>,,,>,,,,>,,>,>,,,>,,>,>,,,>,,,,,,,,,,>,>,,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,',',,',',,,,,,',,',,,',',',,,,',,',,,;=;>;-=*%@@+++.+@#$$#@++.....+&,'''''','''>;;>,,,;**=&&&*>>,,,,'''',*&&&>,>;,''',,,>,,''''''''''''''''''',>&+.....++@@@@+++......#*->,,,,,,'','''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>;>;>;>;>;>;>;>;>>;>;>>;;>>;;>;>;>;>;>;>;>;;>;>;>;>;>>;;>>>;>;>>;>>>;>>;>;>>;;>>>;>>>>>;>>>;>;>>>>>>>>;>>>>>;>>>>>>;>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>>>>>,>>,>,>>>>>>>,>,>>>,>>>,>>>,>>,>>,>>,>,>,>,>,>>>,>>>,>,>,>>>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>>,,>>,>,>,>,,>,>,,,,,,>,>,,>,>,>,>,,,,,>,>,,>,>,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,,,,,,,,',,',,,,,',,,,,,,,',','',',>;;;;;-*$@@++..++@$%%$#@++....@=,''''',,,,,>>>>,,,>=&*&&&*--=***;''',*&&=>,;--;>>>>,,,''',','''''''''''''''>*@....++@@@@@@++.......#*;>,,,,,,''''','''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;>;>;>;>;>;;>;>;;>>;;>>;>>>;>;>;>;;>>>;>;>;>;>;>>>;>;>>;>;>>;>>>;>>>;>>>;>>;>;>;>>>;>>>>>;>;>>;>>>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>,>>>>>>>>>>,>>,>>>>,>>>,>>>,>>>,>>,>,>>>,>>>>,>>,,>>,,>>,>,>,>,>,,>>>>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,,,>,,,>,,,>,,>,,>,>,>,>,,,>,,,,,,,,,>,>,,,,,,,,,,,,,>,>,,>,,,>,,>,,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',,,,,,,,,,,,',,',,,,,,,',',,,',',',,,,',',',,;>>>;-*#@+++.+.+#%%%%$#@++....$;''',>>>>',;;-;;;;;>;*&&&&&**&&&&*,'',;**;'';**-;>,,,>>>,,,,,,,'''''''''''',,;#....++@##@#$$#++......#=;,,',,,'''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;>;>>;>;>>>;>;>>;>;>>;>;;;>;>;>;>>;;;>;>;>;>>>;;>;>>;>;>>;>>>;;>>;>>;>;>>;>>>>>>;>;>>;>>>>>>>>>>>;>>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>,>>>>>>,>>>,>>>,>>>,>>>>>>>>,>>>,>,>>,>>>,>>>,>,>,>,>,>>>,,,>,>,>,>,>,>,>,>,>,,>,,>>,>,>,>,>,>,>,>,,>,,>,,>,,,,>,,,,>,,,>,>,>,>,,,,,>,,>,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',',,,,,,',,',,,,,',,,,,,,',,,',',''>>,>;-*$@+++++@#$%&&%%$##@+....&;,''=**=>,>********=;-=*&*&&*&**&*>''',>>,''>=**-;;;===;>>>>>>;;;;;>'''''''',;%+...+@@##@#%&&%#@+....+$=>,,',,,''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>;>>;>;;;>>;>;>;>;;>;>>>;>;>>;>;>>>>;>>;>;;>>;>>;;>>>;>>;;>>>>;>;>>>>;>>;>;>;>>>>;>>>;>>;>;>;>>>>>;>>>;>>>>>>>>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>,>>>,>>,>>>,>>>,>>>,>,>>,>,,>,>>,>,>>>,>>,,>>,>,>>>,>,>>,>,,>>>>>,>,>,>,>,>,>,>,>,,>>,,,>,>,,>,>,,,>,,>,>,,>,,>,>,,>,>,>,>,,,,,,,,>,>,,,>,,,,,,,,>,,,>,,,,,,,,,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,',,',,,,,,,,,',,',',',,,',,,',',,,,>>;*%@+++@#$%%&&&%%%%$@@+...+*,'',=**=,,;**&******->;=*********-''''>>-;,'>=***==**=;,>>>>-=******-;''''',,>&+...++#####%***&%##+...@%=>,,,>,,'''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>>;>;>>;>;>;>>>;;>;>;>;>>;>>;;>;>;>;>;>;;;>;>;>>>;>>;>;>>;;>;>>>>;>;>>>>;;>>>>>>>;>>;>;>>;>>>>>>>>>>;>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>,>>>>>,>>,>>>>>>>>>>,>>>,>>>,>>>>>,>>,>>>,>>,>>,>,>,>>>,>,>,>,>>>,>,>,>>,,,,>,>,>,>,>,>,>,>,>>,,,>>,>,,>,>,,>>,,>,>,,>,>,,,,>,,>,,,,,>,>,>,>,,,,,>,,,,,>,,>,,,,>,,,>,,,,,,>,,,,,>,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,,,,,,,,',',,',,,',,,,,,',,,,',','',,,>>=&#@+@#$%%&&=;-&&%$$#@+...#=>,',=**=,,;***->;***-,,;-*****--;,''''>==;''>-*******->>>>>-**********-,''''>>=@...+@#####&-;-=*&%%#+.+#&;,,',>,,''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;;>>;>;;>;>;>;>;>>;>;>>;>;>;>>;>>;>;>;>;>>>;>;>;;>;>;>;>>;>>>;>;>;>>>;>;>>;>;>;>;>>>>>>>>>>>;>;>>;>>>>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>,>>>,>>>,>,>>>,>>>,>>,>>>,>>>,>>,>>,>>,>>,,,>,>>,>,>>>>,>,>,>,>,>,>,>,>,,>>>,,,>,>,>,>,,,,>,,>,>,,,>,>,,>,,,>,>,,,,,,,,,>,>,,,>,>,,,,,,>,,,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,',,,,',,',,',',,,,,,,,',,,,',,',,,,',,',',,,,,,-*%##$$%&&*->,>;&%%%##@++..$;,'',-**-,,;=*=->>===-,'>;=**=,'''''''>-==,'',-=**=*==;,>;;;==*==---==*=;,,',,>-#...+@####$&-;>>;-*&%$#+@$*-,,,>>','''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;;>;>>;>;>;>;>;>;>>;;>;>;>;;>;>;>>;>;>;>;>;>;>>;>>;>>;>;>;>;>>;>>;>>;>>;>>>;>>>>;>;>;>;>;>>>>>>>>;>;>>;>>>;>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>,>>,>>>>>>,>>>>,>>>,>>>>>,>>>,>>>,>>,>>>,>>,>,>,>>,>>,>>>>,>,>,>,>,,>,>,>,>,>,>,>,>,,>,,,,>>,>,>,,,>,>>,>,,>,,>,,>,,>,,>,>,,>,>,>,>,>,,,,>,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',',,',,,,',,',',,',,'',,',,>=*%%%%&&*;,,,,>;*&%%$#@++.+%;>'',-==-,>;===-;-===;,',;-===,'''''''>==-,''';====-->,,>;--===->,,,-===;,,,,,>;$+.++@####$&-;>,,,>;=&%$##%*;,,;;,''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;;>>>;>;>;>;>;>;>;>;;>>;>;>;>>;>;>;>>;>;>;>;>>;>;>;>>;>>;>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>>>>;>>;>>>>>>;>>;>>>>>>>;>>>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>>,>>>,>>>>>>>>>>,>,>>>>,>>>,>>>>,>,>>>,>>,>,>>>,>,>,>,>>>,>,>>,>,>,,>>,>,>>,>>>,>,>,>,>,>,>,>,>,>,>>>,,>,,>,>,>,,,,>,>,,>,>,,>,,,>,,,>,,,,,,,,,,,>,,,>,,>,,,>,,>,,,,>,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,',,,,,,,,,,,',,,',,,,,,,,,,,',',,,,,,,',,',,',,',>;=**&&&=;,,,,,,>;&&%%$#@++.+&;,,',-==-,>;-===---=-,''>>-==-,'''''',;-=;''',;==-->,,''>---===>''',;-=-;>>,,>>>%+.++@##$#$&-;>>,,',>;*&&%%&=;>;;>,'''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>;>;;>>;>;>;>;>;>;>>;>;>>;>;>;>;>;>;>;>;>;>;;>;>;>>;>;>;>;>>;>>;>>;>>;>>;>;>>;>>;>>>;>;>;>;>>>>>;>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>,>>>>>>,>>>,>>>,>,>>>>>,>,>>,>>,>,>>>>>>,>,>>>,>>,>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>>,>,,,>,>>,,,>,>,,,>,,>,,,>,,,>,>,>,>,>,,,>,,,,,,,,,,,,,,>,,,,,>,,>,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,',,,',,,',,',,',',,,,',',',,,',,',',,,,>;-*&**;,,,,',',,;*&%%%##++.@*;,,'>;--;'>;-------;>''',;----,''''',>;---,''';---;>,''',;=----,'',>--;;;;>,',>>&@.+@@$#$#%*-;>>,,,'''>-*&&&&*--->''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>;>;;>>;>;>;>;>>;>;>;>;>;>;>>;>;>;>;>;>;>;>>;>>;>;>>;>>;>;;>;>>;>>;>>>;>>>;>>>>>;>;>>>>>>>>>;>>>>>>>;>>>;>>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>,>>>>,>>>,>>>>>,>,>>>>,>>>,>>>,>,,>,>,>,,>,>,>>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>>,>,,,>,>,,,>,>,,,>,>,,>,>,,,,,,,,,>,,,>,>,,>,,>,,>,,,,,>,,,,,,,,,,,,,,>,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,',,',,,',,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,>,>>--*=;>,,,',,,,,>>*&&%%#@@+.#*>>,,>---;',;---;>>,'''''>;----''''',>;---;''',;---;>>'''';----;>,,,>>;;;;;;,,,>>*@.++##$#$$*-;>>,,',''',>-**&&&&-,''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>>;>>;>;>;>;>>;>;>;>;>;>;>;;>;>;>;>;>>;>>;>;>;>;>;>;>;>>>>;>>;>>;>>;;>>;>>>;>;>>>>>>;>;>;>>>>>;>>;>>>>>>>>>>>;>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>,>>,>>,>>>,>>>>,>>>>,>>>,>,>>>>,>,>>,>,>>,>>>>>,>>>>>>>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,,,>,>,>,>>,>,,,,,,>>,,>,>>,,,,>,>,,>,,>,,>,>,>,,>,,>,,,,,>,,,,,>,,,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,',,',,',,',',,',,,',',',,','',',,>>;;--;>,,',',',',,,>=&%&%$@@++#->>,,;;--;',>;-;>''''''''>;;;-;,''''>;;;;-;,''';-;-;;>,''',;-;-;;>>>;>;;;;;>'',>>=#.+@##$$$%*-;>>,,,'''''',>-=**=>,''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>;>;;>;>>>;>;;>;>;>;>>;>>;>>;>;>;>;>;>;>;>;>;>>>;>>>;>;>;>>;>>;>>;>>>;>;>;>>>>>;>;>;>>>>>>;>;>>>>>>;>;>>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>,>>>,>,>>>,>>>>>>,>>>>,>>>>,>>>,>,>,>,,>,,>,>,>>>,>,>,>,>,>,>>>,>,>,>,>,>,>,>>,,>,>,>,,>,>,>>>,,,>,,,,,>>,>,,,>,,>,,>,,,,,,>,,,,,,,>,,,,,>,,,,,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,',,,,,,,',,,',,,,,,,',,,,',,,>>;;;>,',',,,',',,,,>=&&%%$#@++$->>,>;-;;>''>;;;>''''''',>;;;;>'''',,;-;;;;''',;;;;;;>'''''>;;;;;;;;;;;;;;;,'',>>-#++@#$$#$%=;;>>,,,','''''',,>>>''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;;>;>;>>;>;>;>;>>;>;>;>;;>;;>;>;>>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>>;>>;>>;>>>>;>>;>;>>>>>>>;>;>>>>>>>;>>;>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>,>>>>,>>,>>>,>>>>>>>>>,>>>,>,>,>>,>,>>,>,>>,>,>>,>>>>,>>>>,>>,,>,>>>,>,>,>>,,>,>,>,>,>,>,>,,,>,>,,,>,>,,>,,,,>,>,>>,>,,,,,>,,,>,,,,,>,>,,,,>,>,>,,,>,,>,,,>,,>,,>,,,,,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,',,',,,,,',',,,,',',,,,',,,',',',,,',',,,',,,,,,',',,'',,,,',,,>-&&&%$#@++%;>>,,>;;;;'',;;>>''''''',;;;;;>''''',>;;;;;,'''>;;;;;,'''''',>;;;;;>;;;;;;>,'',>>-#++@##$$$&=-;>>,,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>;>;>;>;>;>>;>;>;>;>>;>>;>;>;;>>;>>;>;>;>>;>;>>;>;>>;>;>>;>;>>;>>;>>;;>>>>>;>>;>;>;>>;>>>;>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>,>>,>>,>>>,>>>>>>>,>>>>,>>>>,>>>>,>>,,>>>,,>>,>>>,>,,>>,>,>,,>>,>,>,>,>,>,>,>>>,,>,>>,,>,>,>,>,>,,,,>,,>,>,>,,>,,,>,>,,,,>,>,,,,,,>,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,',',,,,,,,,,,,,',',,,',,,,,,',',,,,',,,',,,',,,',,,'',',,,,,;*%&%$#@@@%;>>,',,,,''',,,,,''''''',>>;>>''''''',>;>>>''''>;>>>>'''''''',,>>>>;>>>;>>,''',>>;$++##$$$%&-;;>,,,,,',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>>;>;>;>;>;;>>;>>;>;>;>;>>;>>;;>>;>;>;>;;>;>;>;>>;>;>>;>;>>;>>;>;>;>>>;;>;>>;>>>;>>>>>>;>>>>>>;>;>>;>>>>;>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>,>>,>>,>>>>>>,>>>,>>>,>,>,>>,>,>>,>,>>,>,>,>,>>,,>>>,>,>,>,>>,>,>>,>>,,>,>,>,>,>,>,>,,,,>,>,,>>,>,,,>,>,,>>,,>,,>,,,,>,,>,>,,>,>,,,,,>,>,>,,>,,>,,>,>,,>,,,,,>,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,',,,,,,,,',,',',,,,,,,,',,,',',,,,,',',',',,,',',',',',,,,',,',,>>*&&&%##@@&;>>,'''''''''''''',,,,,,,>>>>,'''''''',,>>,''''',>>,''''''''''',,>>>>>>>,,'''',>>;$+@##$$$%*-;;>>,,'''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>>;>;>;>>;>;>;>;>;>;>;;>;>>;;>;>>;>;>>>;>>;>>;>>;>;>>;>>;>;>>>>>>;>>>>>>>>;>>>;>;>;>>>;>;>>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>,>>>,>>>>>>>,>>>,>>,>>,>>>,>>>,>>>,,>>,>,>>>,,>>,>,>>,>>,>,>,>,>,>,>,>,>>,>,>,,,>,>,>,,,>,,,>,,>,,>>,>,,>,,,>,,,,,>,>,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,,,,,,',',',,,,',,,,,',',,',,,,,',',,,,,',,','',,',,,,,>=&&&%$@@@&;>>''''''''''''','',,,,',,,,'''''''''''','''''''''''''''''''''''',',',''''''''>>>;$+@##$$%%*-;;>,,,,','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;;>;>;>;>;;>;>;>;>;>;>>;>;>;>>;>;>;>>;;>;>;>;>;>;>>;>;>;>>>>;;>;;>>;>;>;>;>>;>>>>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>,>>,>>,>>>,>,>>>,>>>,>,>,>>,>>>,>>,>>,>>,>,>>,>>>>,>>>,,,>>,>,>,>,>,>,,>,>,>,>,>,>,>,,>,,>,>>,>,>,,>>,,>>,,>,>,,,,,,>,,>,,,>,>,,,,,>,>,>,,>,>,>,>,,>,,,>,,,,,,,,>,,,,>,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,',,',,,,,',,,,,',,',,',,,,,,',',,',,',,,',,,','',,,,','',,',',,,',',',,,>-*&&%$#@@&;>>,''''''''''''',,,,>,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''',;>;%@@#$$%&&=;;>>>,,'','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>>;>>;>;>>>;>;>;>;>>;>;>;>;>;;>;>;>;;>>;>>;>>;>>;>;>;>>>;>;>>;>>>>;>>>>>>>>>>;>;>;>;>>;>>;>>;>>;>>>>>>>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>,>>>>>>>>>,>>>>>>,>>>>>,>>>,>>>>>>>>,>,>>>,>>,>>,>,>,>,>,,>>,,>>>>,>,>,>>,>,>,>>,>,>,>,>,>,,>,>,>,,>,,,,>,>,,,>,,>,>,,,>,>,>,,>,,>,>,,,,>,>,,,,,,>,,,,,,,,,,,>,,,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',',,,,,,,,,,,,,',,,,,,,',,',,,',',,,,,',',,,',',,,'',,',,',,,>;**&&%##@&;;>,''''''''''',,',,>>>>,,,'''''''''''''''''''''''''''''''''''''''''''''''''''>>;;$@##$$&%&-;;>>,,,,''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>;>;>;>;>;;;>;>>>;>;>;>;>>;>;>>;>;>;>>;;>;>;>;>;>>;>;>>;;>>>;>>>;>;>;>;>;>;>;>>>>>>>>>;>>>>>>>>>>>;>>>;>>>>>>>;>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>,>>>>>>,>,>>>>>>>,>>>>>>,>>>,>>>>,>,>,>>,>>,>>>,>>,>>>,>>,>>>,>,>>,,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,>,>>,>,,>>,,>,,,>,>,,,>,,>,,>,,,>,>,,,,,>,>,,,,,>,,,>,,>,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,,,,,,,,,,,,,,',',,',,',',,',',',,,,,,',,,,,',',',,',',,,',',,,',,',',,,>>***&%$##&;>>>''''''''',,',,,,>>>>,,,,''''''''''''''''''''''''''''''''''''''''''''''''''>>>;%@##%%&&*-;;>>,,',,,'',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;>;>;>;>;>>>;>;;>>;>;>;>;;>>;>;>;>>;>;>>;>>>;>>;>;>>>;>>;>;>>>;>>;>>>;>>>>>>>;>;>;>;>>>>;>>;>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>>,>>,>>>,>>>,>,>>>>>>,>>,>,>,>>,>>,,>>,>>,>>,>>>,>>,>>,>,>,>,,>,>,>,>,>,>,>,>,>,,>,,,>,>,>,,>,,,>,,>,>,,>,>,,>,,,>,,>,,,,,>,>,,,,>,>,,,>,,,,,,,>,,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,,,,,,,,,,,,,,,,',',,',',',,',,,,',,,'',,',,',',',',',,>>-&**%$##&;;>>'''''',',',,,,,,>>>;>>,,,','''''''''''',,,,,''''''''''''''''''''''''''''',>;;;%##$%&&&=;;>>>,,,''','',','''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>;>;>;>;>;>;>;>>;;>;>;>;>>;;>;>;>;>;>;>;>;;>>;>>;>>;;>;>>>>;>;>>;>>;>>>>;>;>;>>>>>>>>>;>>>;>>>>>;>>>>>>>>>;>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>,>>>,>>>>>,>,>,>>,>>>>>,>>>,>>>,>,>,>,>>,,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,,>,>,>>,>,,,>,,>,>,,>,>,>,>,,,>,,>,,,>,,>,>,,,,,>,,,,,,>,,,,>,,>,,,,>,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,',,,,',,,,',,,',,',',',,',',',',',,,,',,,',,',,',',,'',,,',',',,,',,',,',,>;***&%##&;;>>,'''',',,,,,,,,,>;;;;>>>>,,>,,,'''',,,,,,>,,,,''''''''''''''''''''''''''',>>;;%##%&&&*-;;>>,,,,,,','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>;>;>;;>>;>;>>;>;>>;>;>;>;>>;>;>>;>;>;>;>;>>>>;>;>;>>;>>;>>;>;>>>>>>>;>;>;>;>>>>>>>>;>>>>>>;>>;>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>,>>,>>>>,>>>>,>>>>>>,>>,>>,>,>>>>,>>>,>,>>>>>>,>>>,>,>>>,>>>,>>,>>>,>,>>>,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,,>,,,>,,>,,,,>,>,,>,,,,,>,>,,,>,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,',,,',,,,',,',,',',',',',,,,>;=***%$$&-;;>,,,',,,,,,,,,,>,>>;;;;;>>>>>>>>,,,,',,>>>>;>>>,,,,,,,,',',',',,',','''',,>>;>-%#$&&*&*->>>>>,,,'',',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>>;>>;>;>;>>;>;>>;;>;>;>;>>;>;>;;>;>;>;>>;>;>>;>;>;>;>>>>;>>;>>;>>>;>;>;>;>>>>>;>>>>;>;>>>>;>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>,>>>>,>>>>>>>>,>>>,>>>>>,>,>,>>,>>,>>,>,>,>,>,>>,,>>>,>,>,>>>,>>>,,,>>,>,>,>,>,>,>,>,>,>,,,>,>,,>,>,,>,>,,>,,>>,,>,,>,>,,,>,,,>,>,,,,,>,,,,,>,,,,,>,>,,>,>,,>,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,',,,,,,',,',,',,,',,',',',',',',,',',,',,',,,',,','',',,',',,',,',,',,,,>>-***&%$&-;;>,,,,,',,,,,,,,,>>>;----;;;;;;;;>,,,,,,>>;;;;>>,,,,,,,,,,,,,,,',,,',,,,,',,>;;-%$&&**&-;>>>,,,,',,',',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>>;>;>>;>;>>>;>>;>;>>>;;>;>>;>>;>;>>>;>>>>>>>;>>>>>;>>>>>;>>>>>>>>>>>>;>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>>,>>,>>>,>,>>>>>>>>,>>,>>,>>>>>,>>>,>>>,,>,>>,>,>,>,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>,>,,,>,,>,>,,>,,>,>,,>,,>,>,,,>,>,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,',,,,,,,,,,,,,,,,,',,,',,,,,,,,,,',,,,,,',,',',',,',,,,,,',',,,',,',',',,,,,>>;**=*&$&=;;;>,,,,,,,,,,,,,,,>>;-----;-;;-;-;>>,,,>>;;--;;>>>>,,,,,,,,',,,,,,,,,,,,,,,>>;>-&%&****;;>>>>,,,,'',',',,''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;>;>;>;>;>;>;>;>>;>;>;;>;>;>;>;>;>>;>;;>>;>;>>;;>>>>;>>;>>>>;>;>>>;>;>;>>;>;>>>>>;>>>>;>;>>>;>>;>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>,>>,>>>>,>>,>>>,>>>>>,>>>>>,>,>,>,>>,>>,>>,>,,>>,,>>,,>>>>>,>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,,>,,>,>,,>>,,>,,,,>,,>,,,>,,,>,,,,>,,,,,>,>,,,>,,,>,,>,,>,,>,,,,,,,,>,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,',,',',,,,,,,,',',',',,,,',',,,',,,,,',,','',',',,'',,',',,',',,,,>>>-****&&=;;>>,,,,,,,,,,>,>,,>>>;-===-=--=-=-;>>,,>;---=-->>>>>>>,>,,,,,,,,,,,,,,,,,,,>;;;=&****&=>>>>,>,,,,,',',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>>;>;>;>;>>>;>;>>;>;>;>;>;>;>>;>;>;>;>;>;>>;>>;>>;>;>>>;>;>>;>;>;;>>>>>;>>>>>>;>>>>>>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>,>>,>,>>>>>>>>>,>>,>>,>>>>>,>>,>,>>>,,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,>,>,>,,,>,,,,>,,>,>,,>,,>,,,>,,,,>,,,>,>,,,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,',,,,,,,,,,',,,',,,,,,,,',',,,,,',,,',',,',,,,,',,,',,',',,',',',',,,,>>;**=&*&=-;;>>,,>,>,>>,,,>,>,>;;-===========-;>>>>;-====-;;>>>>>>>>>,>,,,>,,,,,,,,,,>>>;>-******;;>>>,,,',',,',',',',''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;;;>;>;>>>;;;>;>;;>;>;>;>;>;>;>;>>;>;>;>;>>;>;>>;;>>>;>;>>>;>>>>>>>>;>;>>>;>;>;>>;>;>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>,>,>>,>>>>>>>>>>>>,>,>,>,>>>,>>,>>,>,>>,>>>,>,>,>>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,,>,,,>,>,>,>>,,>,,,,>,,>,,>,,,>,>,,,>,,,,>,,,>,>,,,,>,>,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,',,,,',,,,',',',,,,,',',,',',,,',,','',,',',',,,',',',',',,,,,,>>>-*****=-;;;>>,>,,>,,>,,,>,>,>;--*********==-;>;;;==***=-;>>>>>>>>>>>>>,>>>>>,>,>>,>;;;;-*===*->>>,>,,,,,',',,',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>>;>;>;;>>>>;>;>>;>;>;>;>;>;>;>;;>>>;>;>;>>;>;>>>;;>;>>>;>>;;>;;>;>>;>>;>>>>>>>>>>>>;>>>>;>>>>;>>>;>>;>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>>>>,>>,>>>>>>>>,>,>,>,>,>,>>>>>>,>>,>>,>>>,>>>,>>,,>>,>>>,>,>,>,>,>,>,>>,>>,>,>,>,>,>,>,>,,,>,,>,,>,,>,>,,>,>,>,,>,,,>,,>,>,,,,>,,>,>,,,,,>,,,>,,,>,,,,,,>,,,,,>,,>,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,',,,,,,',,,,,',,,,,,,',',,,,',,',,',,',,,,,',,',,,',',,,',,,',',,,,,,>>;*****=--;;>>>>>,>,>,>,>,,>>>>;-=*********=-;;>--=****=--;;;;;;>>>>,>>>>,>,>>,>,>>>>;>;-===**;>>,>,,,,,,,,,',',,'',''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";;;>;>>;>>;;;;>>;>;>;>>>;>>;>>;>;>>;>;>;>>>;>;>>;;>>>;>>;;>>;>>>>>>>;>>>;>>;>;>;>;>;>>>>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>>>>>>>>>>,>,>>>>,>>,>>,>>,>,>>,>>>,>>,,>>,>>,>,>,>,>>,>,>,>>,>,>,>,>,>,>>,>,>,>,>,>,>,,>,>,,,>,,>,>,,>,,,>,>>,,>,,,,>,>,,,>,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,',,,,',',,,,',',,,',',',,,,',',,',,',,',,','',,',,'',',,',','',',,',,,>,,>>-****=;-;;;>>,>>>,>,>,,>,>>>>;;=***&&*&&**==-;-=*&&**=--;-;;;;;>>>>>>>>>>>>>>>,>>>;;>;-=-==->>>,,>,,,,''',','',,''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>;;>;;>>>;>;>;>;>;;;>;>;>;>;>;;>;>;>;>;>;>>;>>;>;>;>>>;>>;>;>;;>>>;>>>>>;>>>>>>>;>>;>>>>;>>>;>>>>>;>>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>,>>,>>>>>>>,>>>>>>>>,>>,>,>,>,>>>>>,>,>>,>>,>>,>>>>,>>,>,>,>>>,>,>,>>>,>,>,,>,>,>,,>,>,>,>,>,>,>,,>,>,>,>,>,>,,>,>,>,>,,>,>,,,>,,,,,>,,>,>,,,,,>,,,>,,,>,,,,>,,>,,,,,>,,,,,,,>,,,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,',,,,,,,,,,',,,,,,',,,,,,',,,,,,,,',,,,,,,',,',,,',,,,',',',,,',',,',,,',',,,,,,>,,>;=*=*=---;;>>>,>,>,>,>>,>,,>>>;-=**&&&&&&**=-==**&&&**=--;;-;;;;;;;>>>>>>>>>>>>>>>;>;;-=-==;>>,>,,,,',,,,',,,,''',''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";;>;>>;>>>;>;>;>>;>;>>>;>;>;>;>;>>>;>;>;>;>>;>;>;>;>>>;>;>>;>>>;>>>;;>>>;>;>>>;>;>;>>;>>>>;>>>>>>>>>>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>,>,>>,>>>>>>>>>>>,>,>>>>>,>>>>>,>>,>,>>,>,>>>,>,>>>,>,>,>,>>>>,>>>,>>,>,>,>,>,>,>,,>,>,,>,,>,,>,>,,,>,,,>,>,,,>,>,>,>,,,>,,,,>,>,,,>,,,>,,,,>,,,,,,,>,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,',,,,,,',,,,,,',,,,,',',',',,,',',',,',,',,',',,',,,',',,,',','',,,',',,,,,,,>>-**==----;;>>>>>>>,>,>,,>>>>>;-=**&&&&&&***==*&&&&&&==-------;;;;;>;>>>>>>>>>>>;>;;>;--=*;>>,,,,,,,,',',,''',,,'','''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;;;>;>;>;>>;>;>;>;>;>;>;>;;;>;>;>;>>;>>;>>;>;>;>>>;>>;;>>>;>>>>;>>>>>;>>;>>>>>>>>;>>>>;>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>,>>,>>>>,>>>>>>>>>>>,>,>,>,>>>>>,>>,>>,>,>>,>>,>>,>>>,,>,>>,,>>,>,>,>,,>,>,>,>,,,>,>,>,>,>,>,>,>,>,,>,>,>,,,>>,,>,>,,,>,>,,,,>,,,>,,>,>,,,,,>,,,>,,,>,,,,,>,>,,,>,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,',,,',,',,,,',',,,,,,,,',,,',,,',,',,',,,,',,'',,',',',,,',,''',,,',,,,,,,,;***=--;--;;>>>>,>>,>,>>,,>>>>;-=**&&&&&&&****&&&&&**==----;--;;;;;;;>;>>>>>>>;>;>>;;--*->>>>,,,,',,,','',,,''','''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>>>;>;>;>;;>;>;>;>;>>;>>;>>>;>;>;>>;>;>;>;>;>;>;>;>>>;>>;;>>;>;>>;>;>>>>>>;>>>;>>>>>;>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>>>>>>>>>>,>>,>,>>,>>>>>>>>,>,>>,>>>,>,>>,>>,>>>,>,,>>>>,>>>>,>,>,>>>>,>,>,>,>>>,>,>,>,>,>,>,>,,>,>,>,>,>,>,,,>,>,>,>,>,,>,>,,>,,>,,,,,>,>,,,>,,,>,,,,>,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,',,,,,,,,,,,',,,,,,',',',,,',,,',,,',,',,',',,',,,',,,',,'',',',,,',,,',,,,,,>>;***-----;;>>>>>,>,>,,>>,>>>>>;-**&&&%&&&&&&&&&%&&&*===------;;;;;>;;>;>;>>;>;>;;>;;-==;>,,>,,,,,',',,,','',,',','''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>>;>;>;>>>;>>>;>>>;>>;>>>>>>>;>>>>;>>>;>;;>>>;>>>;>;>>>;>>;>>>>>>>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>,>,>,>>>>>,>>>,>>>>,>>,>>,>,>>>>>,,>>,,>,>>>,>,,,>>,>,>,>,,>,>,>,>,>,>,,>,>,,>,>,>,,>,,>>,,>,,>,,>,,>,,,>,,>,>,>,>,,,,,>,,,>,,,>,,,>,,,>,>,,>,,,,,>,,>,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,',,,,,',,',,',,,,,',',,,,,,,',,,,',,',,',,,',,,',,'',,'',,',,,',',,'',',',,',,,,,>>=**--;--;;;;>>>>>>>>,>,>,>>>;;-=**&&&&&&&&&&&%&&&**====-------;;;;;;;>;>>;>;;;;>;>;-=;>>>>,,,,,',,,',',',,'',',''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>;>;>;>>;>>;;>;>;>>;;>>;>;>;;>;>;>;>;>>>;>>>>>;>>>;>>>>>>>>>>>>>;>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>,>>>>>>>,>>,>>,>>>>>>>>>,>,>>>>,>>,>,>>>>>,>>>,>,,>,>>,>>>,>,,>,>>>,,>>>,>>,>,>,>,>,>,>,>,>,,>>,>,,>,>,,>,,,>,,>,,>,,>,,>,,,>,,,,,>,,>,>,,,>,,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,',,,,,,,',',',,,',,',,',,,',',',',',,,',,',','',,,',',,,',,',,'',,,>>;=*=----======--;;>>>>>>>>>>>;;-**&&%&&&&&&%&%&&&***=-==----;-;;;;;;-==****===-;>;-=->>,,,>,,,,',',',',''',','','''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;;>;>;>>;>>;>;>;;>>;>>;>;>;>;>;>;>;>;>;>;>>>>;>;>>>;>>;>>>>;>>>>>>>>;>>;>;>>>;>>>>>>;>;>>;>;>>>>>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>,>>>>>>>>>>,>,>,>,>>>>,>,>>,>>,>>,>,>>,>>,>>>,>>,>,>,>>>>,>,>,>>,>,>,,>,>,>,>,>,>,>,>,>,,,>,>,,>,>,,>>,>,>,,>,>,,>,,>>,,,>,>,,,,,,,,>,,,>,,,>,>,,,,,,>,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,',,,,,',,',',,,,',',',,,,,,,,',,,,',,',',,,,,,',,',',,',,',,,''',','',,,',',,',',,,>-****&&%&&&***====--;;>>>>>>;;-=**&&%&%&%&%&%&&&***===-------==*&&&&&&&&&%%%&&*=-=-;>,>>,,,,,,,',',',',',',','',''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;>;>;>;>;>;>>;>;>;>;>;>;>;>>>;>;>;>>>;>;;>;>;>;>>>;>;>;>>;>;;>;>>>>>>>>;>>>;>>;>>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>,>>>,>>>,>,>>,>>>>>>>>>>,>>>>>>,>>,>>,>>,>>>,>>,>,>>,>>>,>>,,,>>>,>,>,,>,>>,>,>,>,>,>,>,>,>,>>>,>,>>,>,>,,,>,,>,>,,,>,,,>,,,>,,>,,>,>,>,>,,,>,,,>,,,,,>,>,,,,,,,>,,,,,>,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',',,,,,,,,,,',,,,,,,,,',,,,,,,',',',',,',',,',,,',',',,',,',,',,',,',',,,',,,',',,,'',',',,>>-*&&&%&&&&****====-=-=--;;;>>;;-**&&&&&&&&&&&&&&***===-----**&&%&&&&&*&&&&&%&&**=*--;>,>,,,,,,,,',','',','',',''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>>;>;>;>;>;>>>;>;>;>;>;>;>;;>;>>>;>>>;>>;>>>>;>>;>>>>>>;>;>;>;>>;>>>;>>>;>>;>;>>;>>>>>;>>>>;>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>,>>>>>>>>>>>,>>>>>>>>,>,>,>,>,>>>,>,>>>,>>,>>,>>>,>>,>>,>,>>,,>>,>>>>,,,>>,>>>,>>,>>,>,>,>,>,>,>,,>,,,>,,,,>,,>,>,,>,,>,>,>,,>,,>,>,>,,,>,,,,,,,,>,,,>,,,,>,,,,,,,>,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,',',,',,,',,',',,,,,,,,',,,,',,,',,',,,',',',',',',',,',',',',',','',',',',,,;-=**&&*=;;>;;--=---=---=-=--;;;;-=**&&&%&%&%&&&&***===-=--*&%%%%&%&&*&***-;>,>>--===--;;,>,,,',,',,',','',',',','''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>;>;>;>;;>;>;>;>;>;>;>;>>;;>;>>>;>>;>>;>;>;;>>;>;>;>>;>>>;;>;>>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>,>>>>,>>>,>>>>>>>>>>>>,>>>>,>>>,>>,>>,>,>>>,>,>>,>,>>,>,>,,>>>,>,>,,>,>,,,>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>,,>,,,>,,>,>,,,,,,,>,>,,>,>,>,,,>,,,>,,,,,>,,,>,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,',',',,,,',,',',,',,',,',,,',,',,',,',',,',,',',,,,',',''',,;;----;,,,,''',,,>;----=--======-;-==*&&&&&&&&&&*&***===-=*&%%%&&&&&&**=;,''''''''',>;----;>,,,,,,,',','',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;>>;>;>;>;>;>;>;>;;>>;>;>;>>>;>;>;>>>>;>>>>;>;>>;;>>>>>>;>;>;>;>>>>>>;>;>;>;>>;>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>,>,>,>>>,>>>>,>>,>>>,>>>,>,>>>,>,>>>,>>,>>>,>,>,>,>>,>,>>>,>,>,>,>,>,>,>,,>,>,,>,,>,>,>,,>,,>>,,>,,,,>,>,>,>,,,>,,,,,,,>,,,>,,,,>,,,>,,,,,>,,>,,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,',,,,,,,,,,,',,,',,',,',',',',,,,,,,',',',,',,',,,',,',',,',,,',,',,,'','',',',',','',',,>>;;>>,,,,',,,',',,,,>;--=---===*==-==***&&&&&&&&&***===-=&&%&%&%&&&&*=>,'''''''''',',,,>;;-;>>,',',',',','','',,','''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>>;>>;>;>>;>;>;>>;>;>>>;>;>;>;>;;>>;>>>;;;>>;;>>>>>;>>>;>;>;>>>;>>>>;>;>>>>>>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>,>>>>>,>>,>>>>>>>>>,>>>,>,>>,>>,>>,>,>>>,>,>>>,>,>>,>>,,>,>,>>>,>>,>,>,,>,>,>,>,>,>,,>,>,,>,>,>,>,,,,>,>,>,,>,>,>,,>,,,>,,>,,,>,>,>,,,>,,,>,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,,',,,',,,,,',,,,,,,,,',',',,,,,,',,',,',',,',,',','',,',',',,',,,,',',,',',',',,>,,,,',,,,,',,',,,,,,,,>---=--==****==**&&&&&&&******===*&%&%&&&&&&*=;,,,,''''''',',,,,,,,>;;;>>,,',','','',',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>;;>>>;>;;>;>;;>;>;>;>>;>>;>>;;>>>>;>>>;;>;>>>;>>;>>>>;>>>>;>>>>>;>>;>>>;>;>>>>>>>;>>>>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>>,>,>>>>>>>>,>>>,>>>,>,>,>,>>>,>>>>,>>,>>,>>,>>,>>,>,>,>>,>,>,>>>,>,>,,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>>,,>,,,>,,>,,,>,,,>,,,>,,>,,,,,,>,,,>,,,,,,>,,>,,,>,,>,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,,,,',',',,,,,,',',',,',,,',,,',,,',,',,,',,',',',,''',,',',,',',',,,,,,,,,,,,,,,,,,,,,,,,,>,>;--=-===*&&&*****&&&*&&&***==-*&%&%&&&&&&**;,,,,,,,,'',,,,,,,,,,,,>;;;>,,,',','','''',,',''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>>;>;>;>>;>;>>;>;>;>;>;>;>;>;>>;;>>;>;>>>>;>;>>;>>;>;>>>;>;>>;>;>>>>>;>>>>>>;>>>;>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>,>>,>>>>,>>,>>,>>,>>,>>>,>>,>>,>>,,>,>>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,,>,,>,>,>,,>,,>,>,,>,,,>,,>,>,>,,>,,,>,,,,,,,,,,,,,,,,,>,,>,,>,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,,,',,',,',,,,',,',,,,,,,',',,,,,',,',,',,,',,,'',',,,'',',,',','',,,'',',',',',',',,,',,,,,,>,,>,>,,,>,>,>,>>;----===**&&&*****&*&*****===*&&&&&&&&&*&=->>,,,,,,,>,,,,,,,,,,,,,,,>>>>,,','','',','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;>;>;>>;>;>;;>>;;>>;>;>;>;>;>;>>>;>>;>;>>;>>;>>;>;>>>;>>;>>>>>;>>>>>;>>>>;>>>>>;>>;>>;>>>>;>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>,>,>,>,>,>>>>>,>,>>>>>,>>>>>,>>,,>,>,>,>>,>>,>,>,>,>>,>,>,,>,>,,>,>,>,>,>,,>,,,>,>,,>,,,>,>,>,,>,,,>,,>,,,,>,>,>,,>,,,,,,,,,,>,,>,>,,>,,>,,>,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,,,,,,,,,,',',',,,,',',,,',,,,',',',',,,,,'',,,',',,',',,',',,,,',',',,,',,',,,,,>>>>>>>>>>>>>>>,,>,,>;-=--===*&&%&&***&*****===-*&%&&&&&*&***->>>>>>>>>>>>>>>>>>>>,>,,,,,>>>,',','','''','','''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;;>;>;>>;;>>;;>;>;>;>;>;>>;;>>;>;>>;>;>>>;>>;>;>>;>>;>;>;>>;>;>>>;>>>>;>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>,>>,>>,>>,>>>>>>>>>>>>>>>>>>>,>,>>>>,>,,>>>,>,>>,>>>>>,>>>,>,>>,>>,>,>>,>,>>>>,>,>>,>,>,>,>,,>,>,>,>,>>,>>,>,,>,,>,,>>,,>,,>,>,,,,,>,,,>,>,>,>,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,',',',',,,,,,,,',,,,,',,,',',,,',,,',''',,,',,',,',',,',',','',',',,',',',,,,>>>>>>;>;;;;>;>>>>>>>>,>>;---===**&%%&*********====&&&&&*&******;>>>>>>>>>>;;;;;;>;>;>>>>,,,,,>,,,'',''',,',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>>>;>>;>;>;>>;>;>>;>;>;>>>;>;>>;>;>>;>;>>>;;>>;>>;>;>>;>>>>>>>;>>>>;>>;>>>>>>;>>;>>;>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>>,>>,>,>,>,>>>>,>,>>>>,>,>>,>,>>,>,,>>,,>>>,>,>,>>,>,>,>>,,,,>,>,,>,>,>,>,>>,>,>,,>,,,>,,,,>,>,>,>,,,>,,,>,,,>,>,>,,>,,,,,,,,,,,>,>,,>,>,>,>,,>,,,,>,,>,,>,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,',,',,,,',,,',,,,,,,,,,,',',',',,',',,,',',,,,',,,,',,,,,',',',,',,',',,',',',,,,',',,,',,,,,>>>;;;;;;;;;;;;;;;;>>>>>>>;-----==*&&%%&******===-=*&&&&&*&*&***-;>>>>>>;;;;;;;;;;;;;;;;>>>>,,>,,,',''',''',',','''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>;;>;>;>>;>;;>;>;>;>;>>;;;>;>;>>;>;>>;>;>;>>>;>>>>;>>;>>;>;>;>>>>;>>>;>>>;>>>>>>>>>>>>;>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>,>>,>>>>>,>>>>>>>>>>>>,>>>>,>,>>>>>,>>>>,>,>>>,>>>,,>>>,>,,>>,>,>,>>>>,>,>>,>,>,>,>,,>,>,>,>,>>,,>>>,,,>,,,>,>,>,>,,>,,,>,,,>,,>,>,>,>,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,',,,,,,,',',,,',,,,,,,,,,,,,,,',,',,',',',',',',',,',',,',',,','',',,','',',,,,,,,,,,>>>;;;------------;;;;>>>>>>;---=-==**&%%&****====--*&&&********==-;>>>;;;;---------------;;>>>,,,,,,','''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;;>>;>;>;;>;>>;>;>;>>;>;>>>;>;>;>>;>;>>>;>;>;>>;>;>>;>>;>>;>>>;>;>>;>>>>;>>>;>>;>>;>;>>>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>,>>>>>>,>,>,>,>,>>>,>>>,>>,>,>>,>,>>>>,,>>,,>>,>,>,>>,>,>>,>,>,,>,>,,>,>,>,>,>,>,,,>,>,>,,>,,,,>>,>,>,>,,>,,,>,>,>,,,>,,>,,,,,,,,,,>,>,>,,,>,,,>,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,',,,,,,',',',',',',,',,,',,,,,',,,,,',',,',,',,',',',,,',',,,,,,,,,,'',,,>>;--=--=-=-=-=-=-----;;;>>>>;-----===*&&%%&*=====--=*&*&*&****====;;;;;;;;----=-=-==-=-------;>>>,,,,,',,''',',',''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;;>;>;>>;>>;>;>;>;;>;>;>;>;>>>;>;>>;;>;>>>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>;>>>>>;>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>>>>>>,>>>>>>,>>,>>>>>>>>>>,>>>,>>>,>>>,>>>>,>,,>>>,>>>,>>,>>,>>,>,,>,>,>>,>,>>,>,>,>,>,>,>,>,>,,>,>,>>,>,,,,,>,,>,>,>,,,,,,>,>,,>,,,>,>,>,,>,,,,,,>,,,,>,,,,,,,,,,,>,>,,>,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,,,,,',,,',,,,,',,',,,,,,,,,,,,',,',,',',',,','',,,',,',',',,',,',',',,'',',,'>,,,,,,>>;--=================---;;;;>;-----===**&&%**===--=-=*&******=*===-->;;;;--==================--;>>,,,,,''',','','','''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;>>;>;>;;>;>;>;>>;>;>;>;>;>;>>>;>>;>>;;;>>;>>;>>;>>;>>>;>>>;>>>;>>;>;>>>>>;>>>>>>;>>>>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>,>,>,>>>>,>,>,>>>,>,>,>,>>>>>,>>,,>>,>,>,>,,>>>>,>>,>,>,>,,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,>,>,,,>,,>>,>,,,,>,,,>,,,,,,>,,,>,>,,,,>,,,,,,>,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,',,,,,,,,,,',,,,,,',',',',',',,,,,',,',,,,',,,,'',,',,',,,',',',',,,',,,,,,,,>,,',,>>;-=*==***=*=*=**=*=*====-;;;;;;------==*&&&&*=-=----=*******=====---;;;---====*=*=**=*******==--;>>>,,,,',',',,','''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;>>;>>>;>;>;>>;>;>;>;>;>;>;>>;>;>>>;>>;>>;>>;>>;>>>;>>>;>>;>>>>>;>>;>>>;>>;>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>,>>>>>>>>,>,>>>>>>>>>>,>,>>>>>,>,>>>>>,>>,>,,>,>,>>,>>>,>,>>>,,,>>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,>,,>,>,>,,,>,>,,>,,,,>,>,>,,>,,>,>,,,,,>,,,,,>,,,,>,,>,,,,,,,,,,,,,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,',,,,',',,,,,,,,,,,,,,',',,',,',',,',',,,',',',,',',,',,',',,,,,,,>,>>,,,,>>;-==*******************===--;;-;------===*&&&*=------******====------;;--==********************==--;;;>>,,,',',,,',''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>>;>;>;;>>;>;>;;>;>;>>>;>;>;>;>>;>>;>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>>>>>>>;>>>;>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>>>>>>,>>,>,>>>>>>>,>,>,>,>>>>,>,>,>>>,,>,>>>>,>>>,>>>,>>,,>>>,>,,>>>,,>,>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,>,,>,>,,,>,,>,>,,>,,,>,,>,,,,,>,>,,,,>,,,,>,,,>,,,>,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,',,,,,,,,,,,,',,,,,,,',',',',',',,,,',,,,',,,',,,,',,',,',',,',',',',,',,,,,>>>>;,,,,>--=**&*&**&**&*****&******==-----;---=--==**&*=-----;-*****=====---------==***&****&***&**&*&*&***===---->,,,,,,,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;>;;>;>;>>;;>;>;>>;>>>;;>;>>;>>;>;>;>>>;>>;>>;>>;>>;>>;>>>;>>>;>>>;>;>;>>;>>>>>>>>>>>>;>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>>>>,>>>>>,>,,>>,>>,>,>>,>>>,,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,,>,,,>,,,>,>,,>>,,,>,,,>,,>,,>,,,,>,>,,,,>,>,,,>,,,,,,,,,,,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,,',,,',,',,,,,',,,',,,,,,,,,,,,',',,',',,',,','',',',',,,',,',',',,',,,,,>>>>;;>>>>;;-=**&*&&&&*&&*&&&&*&&&&&&***=----;-----=-==***==-;-;;-=*======----;-;--==***&*&&&&&*&&&&&&&*&&&&&******==->,>,,,,,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;;>;>>;>;>;;>>;>>;>;>;>;>>;>>;>;>;>>;>;;>>;>>;>>;>>;>>>>>;>;>>;>>>;>>>>>>;>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>,>>,>>>>>>,>,>,>,>>>,>,>,>,>,>,>,>>>>>>,>,>>,>,>>,,>>>>,>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,,,>,,>,>,,,>,,>,,>,,>,>,,,,>,>,,,,>,,,,,>,,>,,>,,,,,,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,',,,',,,,',,,',,,,',',',',',',,,,',,,',,',,,,,',,,,,'',',',,,',',,,,,,,>>>>;;;>;;-=***&&&&&&&&&&&&*&&&&*&&&&&&***=---;--=--=-===*=--;;-;-=======--;-;---==***&&&&&*&&&&&&&&&&&&&&&&&&&&&&&&&*-;>>>>>>,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>;>;>;>>;>>;>;>;>;>;>;>;>>;>;>>;>>;>>>>>;>>;>>;>>;>>;>;>>>>>;>>>;>>>;>>>>>>;>>>>>>;>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>,>>>>,>>,>>>>>>>>,>>,>>>>>>>>,>>>>>>,>>>>>>>,>,>,>,>>,>,>>,>>>,>,,>,>,>,>,>,>>,>,>>,>,>,>,>,>,>,,>,,,>,>,>,>,>,,>,>,>,,,>,,>,>,,,,>,,,,,,,>,,,,,,>,,,,,>,,,,,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,',,,,,,,,,',,,,,,,,',,,,,,,,,,,,,',',,',,',,,','',,'',',,,',,',',',,',,,>>>>>;;;;---==*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&**=------=-=-====--;;;;;-=====-----;-;--=**&&&&&&&&&&&&&&&&&&&&&&&&&&%%&%&&%*=--;;>>>,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>>;;>;>;>;>;>;>;>;>;>;>;>>;>;>;>;>;;>>;>>;>>;>>>;>>>>;>;>>>;>>;>>>;>>;>>>>>>;>>>>>;>>>>;>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>,>,>>>,>,>,>>>,>,>,>>,>>>,>>,>>>,>,>,>>,>>,>>>,>>,>,>,>,>,,>,>,>,>,>,>,>,,>>,>,,>,>,,,>,,,>,,>>,,,>,,,>,>,,>>,>,>,,,>,>,,,>,>,,,,,>,,>,,>,,,,>,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',',,',,,',',',,',',',,,',,',,',',,,,',,,',,',,',',',,',,,,,,>>>;;;---***&&&&%&%&%&%&%&%&%&%&&%&%&&&&&&&&*=-;-----=-=====---;;;;;-==-----;-;--==**&&&&&&&%&%&%&%&&%&%&%%%%%%%%%%%$%%&*=--;;;>>>,,,'''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;;>>;>;>;>;>;>;>;>;>;>;>>;>;>>>;>;>>>;>>;>>;>>;>;>>;>>;>>>;>>;>>;>>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>,>>>>>>>>>,>,>>>>>>>>,>>>>>>>,>,>>,>>,>>,>>,>>,>,>,>>>,>,>,>,>,>,>,>,>>,>,>>,>,>,>,>,>,,>,>,,>,,>,>,,>>,,>>,,>,,,>>,,>,,>,,>,,,,,,,>,,,,,>,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,,,,,,,,,,,',,,,,,,,',,,,,,,',,,,,,',,,',,',,,','',,'',,',',,',',',,,',,,>,>>>;;;-;=*&%&%%%%%%%%%%%%%%%%&%%%&%%%%%%%%%&&*=----====-===-----------==----;----=**&&%%%%%%%&%%%&%%%%&%%%&%%%%%%$$%$$%&**==-;;>>>,,,'''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;;>>;;>>;>;>>;>;>;>;>;>;>;>>;>;>;>>>;;>>;>>>;>>;>>>>>;>>>>;>>;>>>>>>>>>>>>>>>>;>>;>>>>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>>>>>>>,>>,>,>>>>>>>,>,>,>>>>,>,>,>>>,>>,>>,>>,>,>,>,>>>,>,>,>>>,>,>>,>,>>,,>,>,,>,>,>,>,>,>,>,>,>,>,,>,>,,,>,,,>,>,>,,,>,,>,,>,,>,>,>,,,>,>,,,>,>,,,,,,,>,,,,,>,>,,,,,,,,>,,>,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,',,,',',,,,,,',',,,,',',',,',',',,'',,',,,',,,,,',,,',,',',,',,',',,,,>,>>>;;;;--=*&%%%%%$%%%%%%%%%%%%%%%%%%%%%%%%%%&&**=--=-======-=-----------------;-==**&&%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$%%***==--;;>>>,,,''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>;>>;;>>;;>;>>>;>;>>>;>>;>;>>;>;;>>>;>>;;>>;>>;>;;>>;>;>>>>>;>;>>;>>;>>;>;>>>>>>>;>>>>>;>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>>,>>,>>>>>>>,>,>>>>>>,>>>,>>>>,>>>>,>>>,>,>,>>>,>,>,>,,>,>>,>>,>,>>,>,>,>,>,>,>,,>,,>,>>,>,,>>,,>>,,,>,>,>,,>,,>,,,,,,>,,>,,,,,>,,,,,>,,>,,,,>,,,,,,,,,>,,>,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,,,,,,',,,,,',,',,,,,',,,,,,,,,,,,,,',,,',,',',','',,'',,',,,',',',',,',,,,,>>>;;;---=**%$$$$$$%$%%%%%%%%%%%%%%%%%$$$%%$%%&*============-=-----------------==**&%%%%$$$%%%%%%%%%%%$%%$%$%$$$$$$$$%&**===---;;>>,,,,,'''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>>;;>>>;>;>;>;>;;>>;;>>>;>>;>>>;>>;>>>>;>>;>>>>>>>>>>;>;>>>>;>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>>,>,>,>>>>>,>,>>,>,>>,>,>>,>,>>,,>>,>>>,>,>,>>,>>>,>,>,>,>,>,,>,>,>,>,>,>,>,>>,,>,,>,>,,,>,,,>>,,>,,,,,,>,,,>>,>,,,,,,>,>,,,>,>,,,,,>,,,,>,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,,,,',,,,,,,,,',,,',',',,',',',,,',,,',,,,',,,',,',','',',,',',',,,,,>,>>>>>;;---==*&&%&%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&**======*====-------;-;-;------==**&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&**===---;;;>>>,,,''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>>;;>;>;>;>;>>;>;>>;;>;>>;>;>;>>;>;>>;>>;>;>;>;>;>>>>>;>>>>>>;>>;>>;>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>>>>,>>,>>>>>>>>,>,>>>>,>>>,>>>>,>>,>>,>>>,>>,,>,>>>,,>,>,>,>,>,>,>,>>,>,>,>,>,,,>,>,,>>,>,,>,,>>,,>>,,,>,,>>,>>,,>,,,,,>,>,>,,,,,>,,,,,,>,,,,,>,,,,,,,,>,,,>,,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,',',,,',,,,',,',,',,,',,,,,',,,,,,,',,',',,',',,',,',,,',,,,,,',',,,',',,,,,>>>>;;;;----===**************&*&*&&*&&&&&&&&&&**==--==-=-=-------;---;-;;;;----==**&&&&&&&&&&&&&&&&*&*&**&********=*===-=---;;;>>>,>,',''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;;>>;>;>;>>;>;>;>>;>>;>;>>;>>;>>;>>;>;>;>>>>>>>>>;>;>>>;>;>;>>;>>>>>>;>>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>,>>>>>>,>,>,>,>>>>>>,>>>,>>,>,>>,>>>,>>,>,>,>>>>,,>>>,>,>,>>,>>,>,>,,>,>,>,>,>>,,>,,>,,,>,>,>,,,>,,,,>,,>,,,,,,,,>,>,>,,,,,,,>,>,,,>,>,,,,,>,,,,,>,,>,,,>,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,,,',,',',,,,',',',,',,,,,',,,,',',,'',,','',',','',,',,,,,,,,>>>>;;;;-;---------=====*===*===**==*=**=*=**==--------------;--;;;-;;--;-;---=====**********==*=*==*=========--------;;;;;;>>>>,,,,','''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>>;>;>;>;>;>;>;>>;>>;>>>;;>;>>>;>>;>>>>>>;>;>;>;>>>>>;>>>>>>>>>>>;>>;>>>;>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>,>>>>>>,>,>>,>>>,>,>>>>>>>>>,>,>,>>,>>,>>>>,>>>,,>,>,>>>,>>,,>>>,,>,>,>>,>,>,>>,>>,>,>,>,>,,>>,>,>,>>,>,>,,>>,,>>,>,>,,>,>,>,>,,,>,,>,>,>,,,,,>,,,,,>,,>,,,>,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,',,,,,,,,,,,,',',,',,,,,,,,,',',,,,,',,','',,,',',,,',',,',',,,',,',,',,,',',,,>,>>>>>>;>;;;;;;;-;--;----------=--=-=-=-===-=-----;--------;-;-;;-;;;;;;;;;;-----====-==-=---=-=---=--------;;-;-;;;;;>;;>>>>>,,,,,',','''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>;>>;>;>;>;>;>;>;>>;>;>;>>;;>>>>>;;>>;>>;>;;>;>>>;>>>>;>;>>;>>;>>;>>;>>>>>>>>>>;>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>>>>>,>>>>>>,>,>,>,>>>>>>,>>,>>,>,>,>,>>>,>>>,,>>,>>>,>,>>,>>,>,>,>,>,,>,>,>,>,>,>,>,,>,,>,,>,,>,>,,,>,,,>,,>,>,>,,,>,,>,,,>,,,>,,>,>,,,>,>,,,,,,,,,>,,>,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,,',,',,,,,,,,',,',',',,,,,',',,',,,,,',',,,',',,,',,',,',',',,',',',,,,,,,,,,,,>>>>>>>>>>;>;>;;;;;;;;;;-;;-;-;--;-;;--;--;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;--;;--;-;--;-;-;;-;;;;;;;;>;;;>;>;>>>>>>>>>,>,,,,,,,''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;;>;>;>;>;>;>;>;;>>>;>;;>>;>;;;>>>;>>;>>>>>>;>;>>>;>>>>;>>>;>>>>>>>>>;>;>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>,>>,>>,>>>>>,>>>>>>>>>>>>,>,>>>,>>,>>>,>>>,>>>,>,>>>,>,>,>,>,>>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>>,,>,,>,>,,>,,>,,,>,,>,,>,,,,>,,,,>,,,,,,>,>,,>,,,,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,,',,,',,',,,,,,,,,,,',',,,,,',,',',,',,',,',',',,',,',',,',',',',,',,,,,,,,,,,,,,,>,>>>>>>>>>>>>>>>>>>;>>;>;>>;>;;;>;;>;;;>>>>>>>>;>;>>>>>>>;>>>>;>>>>;;>;;;;>;;;>;>;;>>;>>>;>>>>>>>>>>>>,>>,>,,,,,,,,,,,'''','''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>>;>;>;>>;>>;>;>>;>;>>>>;>;>>>>>;>>;>>;;>;;>>>>>>;>>;>>>>;>>>>;>;>;>>>>>;>;>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>,>,>,>>>>>,>>>,>>,>>,>>,>,>,>>,,>>,>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,,>,>,>,,,>>,>,,>,,>,,,>,>,,>,,>,,>,>,,,,>,,,>,>,,,,,,,,,,>,>,,,,,,,,>,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,',',',',,,,',,',,,',,,',,,,',',,,',',',',,,',',',,',',,',',',,,,,,,,,,,,,,,,,,,,,,>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>,>>,>,,,,,,,,,,,,,,,',,','',','''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>>;>;;>>;>;>;>;>;>;;>>;>>;;>;>>;>>;>>>>>>;>;>;>>;>>;>;>>>;>>>>>>>>;>>>>>>>>;>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>,>>>,>>,>>,>>>>,>>>>>>>>>>>,>,>>>,>>>,>>,>>,>>>,>>,>>>,>>>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>>,,,,>,,>,>,>,,,,>,,,>,,>,,,,>,>,,,>,,,,,>,,>,>,,,,,,,>,,,,,,,,,,,>,,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,,,,,',',,',,',,,,,,,,,,,,',',,',,',',',,,'',,,,',',,,',,,',',',',',',,'',,,',,',,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,>,,,,>>,>,>,,,>,>,>,>,,,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',,',','''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>;>;;>>>;;>;>>;>;>;>>>;>;>>;>>;>;>>;>>>;>;>;>>>>>;>>;>>>>;>>>;>>;>>;>>>;>>>;>>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>>>>,>>>>,>,>,>,>,>>>>,>>,>,>>,>>,>>>,>>,>>,>,>,,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,,,>,>,>,,>,,,>,>,,>>,,,>,,,>,,,,,>,,,>,>,,,,,,,,>,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',,',,,,,',,,,,,,',,',',',,,,,,,,,',,,,',',,,',',,','',,'',',,',',,',',',,',',',,',',',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',',,','','',''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>>;>;>>;>;;>;>>>;>;>>;>;>;>>;>>;>>;>;>>;>>;>;>>>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>>>>,>>>>>>,>>>>>,>>>>>>>>>>>>,>>>,>>>,>>>,>>,>>,>,>,>>,>>>>,>,>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,,>,,>,,>,>,>,,>>,>,,>,,>,,>,,>,,>,,,>,,,>,,,>,>,,,>,,,,,,>,,>,,,,,,,,>,,,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,',',',',,,',',,,',',,,',,',,,',,,,',,',,',',',',',',,'',,,',,'',''','',,','',',',',',,,,,',,,,,,,',,,,',',',,,,'',,',,',,,',',',',,',,,'''','','','''','''',''','''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;>;>;;>;>;>>;>;>;>;>;>>;>>;>;>>;>>;>>>>;>>;>>>;>;>;>>;>;>>>;>>;>;>>;>;>>>>>>;>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>>>>,>,>,>,>,>>>,>>>,>>>,>>>,>>,>>>>,>,>>,,>>,>,>,>>,>>>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,,>,>,,>,,>,,>,,>,,,,>,>,>,,>,,,,,>,,,>,>,,,,,,>,>,,>,,,,,,,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,',,,,,,',',',',,,,,,,,',',,,,',,,,',,',',,',,',',',',',',,',',',','',,''','',,',,',','',',,',,',','''''',''''''','''''','''''','''''''''''',''''''''''','''''''''','''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>;>;>>;>;>;>;>>;>;>>;>;>;>;>>;>>>;>>;;>;>>;>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>;>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>,>,>>>>,>>>,>>>>>>>>>>>>>,>>>,>,>,>>,>>>,>>,,>,>>,>,>>,>>>,>,,>,>,>,>>>>,>,>,>,>,>,>,>,>,>,>,>,>>,>,,>,,>,,>,>,>,>,,>,,>,>,,,>,,>,,,>,>,,,>,,,,,>,,,,,,,,,,,>,,,>,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,',,',,,,,,,,,,,',,,,,,,,,,,',',',,,,,',',,',',,',,,',',',',',,,',',',',,',',',,',',,',,'','','',',','','''','',,',',',,',','',',','',','''',',',',',''''',',''',''''','','',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>;>>;;>>;>;>>;>>>;>;>>;;>>;>>>>>;>>>;>;>>>>>>>>;>;>;>;>>;>;>>;>;>>;>>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>,>>>>>>>,>>>>>>,>>,>,>,>,>,>>>,>>>>>>,>,>,>>,>>>,>>,>>>,>>,,>>,>>>,>,>>,,,,>,>,>,>,>,>,>,>,,,>,>,>,,,>,>,>,,>,,>,,>,,>,,,,>,,,>,,,,,,>,,,,,>,,,,>,,,>,,>,,>,>,,,,,,,,>,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',',',',,,,,,',',',',,,,,,,',',,',,',,,',,',',,',,',,,',',,,',',',,',,,'',','','',',',','',',','',,,'',''',''',''''''',''','',''',','',''''''''',''''','''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>>;;>;>;>>;>;>;;>>>;>;>>;>>;>;;>>;>>;>>;>;>;>;>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>>>,>>>>>>>>>>,>>>,>,>,>>>>>,>>>,,>>,>,>,>>,>>,,>>,,>,>,>,>>>,>,>,>,>,>,>,>,,>>,,,>,>,>,>,>,,>,>,>,>,,>,,>,>,,>,>,>,>,>,,,>,>,,,>,,,,>,,,,,,,,,,,,,>,,,,,,,,,,>,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,',,,,,,,,,,,,,,',',,,,,,,,,',',',,,,',,,',,',,,',',,',,',,'',,','',',,,'',','',,',',',,',',',',,',''',,'''',',','',,'',',,','','',''',''''''''',',',''''',''''','''','''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>;>;;>>>>;>>;>>>;>>;>;>>>>;>>;>>>>>;>;>>>;>>>>>>>;>>;>>;>;>>;>>;>>;>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>>>>,>>>,>>,>>>,>>>>,>,>,>,>,>>>,>>,>>>,>,>>,>,>>>,>>,>>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>,,>,,>,,,>,,,>,,>,>,,,>,,,,,>,,,,>,,,,,>,,,>,,,,>,,>,,>,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,',,',',',,,,,,,',,',',,',',',,,,',,',,',,,,',',,',',',,',',,',',',',',,','','',',,''',,',''',',''',',''',''','',',''',',',','''''',',''''','''''''','',''',''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>>>;>>;>;;>>;>;;>;>;>;>;>;>>>;>>;;>;>>>>;>>>>;>;>;>>;>>>>>>>;>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>,>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>,>>,>>,>>,>>,>>>>,,>>,>>,>>,>>>,>,>,>,>>,>>>,>,>,>,>,>,>,>>,>,>,>>,>,>,,>,,>,>,>,,>,>,>,,,,,>,>,,>,>,,>,>,,,>,>,,>,,,,>,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,',,,',,,',,,,',,,',,,,',,,,,,,',',',,',,,',,,,,,','',',',',,'',',,',,',',',,',','',',',','',',,','','',,,''',',,''',','','','',',''''',','''''''',',''''''',''''','','''''''','''','''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;;>;>>;;>>>>;>>>;>>;>>;;>>;>>>>;>;>>>;>;>>;>>>>>>;>>;>>>>>>>>;>>>>>>;>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>,>>>,>,>,>,>,>,>>,>>,>>,>>,>>,>,>>>,>,>,>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,>,>,,,>,>,,>,,,>,>,>,,,,>,,,>,,,,,>,,,,,,,,>,,,,,>,,>,,>,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,',,,,,,,',,,,,',',',,,,,,,,,',,',',',',,,,',,,',',,,',',',',',',',,',',,',',',',,',''',',','''',',''',',','','',''',''',',',''''',',','''','','''',','''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>>;;>;>>>;>;>>>;;;>>;;>;>>;>>>>;>>;>;>>>>;>>>>>;>>>;>;>>>>>>;>;>>>>>>>;>>>>>>;>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>,>>,>>>>,>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>>>,>,>>>,>>>,>,>>,>>>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>,,,>,>,>>,,>,,,>,>,,>,,,>,>,,,>,>,>,>,,,>,,,,,,,,,,,,,,,,,>,,,>,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,',,,,',,',,,,',',,,,,,',',',',,',,,,',,,,',',,'',,,',',,,',',',,',,'',','',',',','',',',',','',,,',',','',''',','',','',''',''',',''''''',','''''','''''',''''','',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";;>>;>;>>;>;;;>;>;>;>>>;>>>;>;>>;>;>>;>>;>>;;>>>;>;>>>;>>>>>>>;>>>>>>;>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>,>>>,>>,>>,>>,>,>,>,>,>,>,>>>,>>,>>,>>,>>,>>,,>>,>,>>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>>,>,,,,,>,,,>,,>,,>,,>,,,,,>,,,,,,,,>,,,,,>,>,>,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,,,,,,,,,,,,,,',',,,,,,,,',,',',,'',',,,',,,'',,','',,',,',','',,,,',,',',',',',',','',',,''',',''','',,'',',''''','','',','''',',',''''',',''''''',''','''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>>>;>;>;>;>;>;>;>>>;>;>>;>>>;>>;>>>;>>;>>;>>>;>;>>;>>>;>>;>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>,>>,>>>,>,>>,>>,>>>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,,>>,>,>>,>,,>,,,,,,>,>>,,,>,>,>,,>,,>,>,>,>,,,>,>,>,,,,>,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,,,',,,,,,,,,,,,,,,,',,',,',',,',,,,,',',',',,',,,',,,,,',',',',,,',,,,,','',,',,,,''',',',',',',',','',,',''',',''',,'',''',''',',','','','''',','''''',','''''',',',''',''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;;>>;>;>>;>>;>;>;>;>>>;>>;;>>>;>>;>>;>>>>>>;>>>>;>>;>>>>>>>;>>>>>>>>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>,>>>>>>>,>>,>>,>>,>,>,>,>,>,>,>,>>,>,>>,>,>>,>>,>>,,>>,>,>>,>>,,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,,>,,>,,,>,>,>>,>>,,>,,>,>,,,,,>,,>,,,,,,,,,>,,,,,,,>,,,>,,,>,,,>,,,>,,,,,,,,,,>,,>,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,,,,,',,',',,,,,,,,,',,,',,,',',,',,',,'',,'','',,,',','''',,,',',',',',',',',''',',,','',,''','',,'',,'',''','','',',''''',',''''','','''''''''''','','','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>>;;>>>;>>;>;>>;>>;>;>>>;>>>;;>>;>>>>>;>;>;>>;>;>>>>>>;>>;>>>>;>>>>>;>>>>>>;>>>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>,>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>,>,>>,>>,>>,>>>,>>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,,,,>,,>,,>,,,>,>,>,,>,,>,>,>,>,,,>,>,>,,,,,,,,>,,,>,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,,,',',',,,,,,',,,,',',',',,,',',',,',,',,',,',,,',,',,',',',',,,,,'',',',',',',',',',,'','','','',','',''',''','',''','',''',',','''',',''''''',''','','''''''''''',''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;>;>>;>>;;>;>;>>;>;>;>>;>;>;>>;>>>>;>>;>;>>>>>>;>>>>>>>>;>>>>>>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>>>>,>>,>,>,>,>,>,>,>>,>,>>>>,>>,>>,>>,,>>,,>>,>>>,,>>,>>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,>,>,>,,>>,>,,>,>,,>>,,>,,,>,,,>,,,,,,,,>,,,,,,,>,>,>,,,,,,,,>,,,,,,,>,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,,,,,,',,',',,,,,,,,',',,,,,',,,,,,,,',',,,,,',,',,',,',,',',,',,',',',','','',,',',',',',',',','',,'',',,','',','',,'',',''',','',''','''''''',''''','',''',''''''''''''''',''''','''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>>;;>;>>;>>;>;>>;>>;>;>>>;>;>>;>;>>;>>>>;>;>;>>;>;>>;>>>>;>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>>>>>>,>>>>>,>>>>,>>>>>>>>>>>>>>,>>>,>,>>>,>>,>>,>>>,>>>,>>,,>>>,>,>,>>,>>>,>,>,>,>,>,>,>,,>,>,>,>,,>,,>,>,,>,>,,,>,,,,>,,>,,,>,,,>,>,>,>,,,>,>,,,,,,,,,>,,>,,,,,>,,>,,,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,',,,,,,,,,,,',,,',,,,,',',,,',',',,,,,',',',,,,,',,',',',,',',',',,,',,,,',,,',',',',',',',','','',',','',',''',,''',','',','',''',','',',',''',',''',''''''','',','','','''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;;>>;>;>>;>>;>>;>>;>;>>;>>;>>;>>>;>>;>;>>;>>>>>>>>;>>>;>>>;>>;>>>>>>>;>>>>>>>;>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>,>>>,>,>>>>,>>>>>,>,>,>,>,>,>>>,>>,>>,>>,>>>,>,>,>,>,>,>>>,,,>,>>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>,>,>,>,>,,>,,>,>,>,>,,,,,,,,>,,,,,>,,>,,>,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,',,,,,',,,,,,',,,,',,',',,,,',,',',,',,,',,',,',,,',',','',',''',',',',',',',',',',',',',','',',,''',,'','',''','',',''',''''''','''','''','','''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>>;>;>;;>;>;>>;>;>;>>;>>;>>>;>>;;>>;>>>>>>>;>;>;>;>>>>>>;>>>;>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>,>>>>>>>>>,>>>>,>,>>>>>>>>>>>>,>>,>>>,>>,>>,>,>>,>>>,>,>>,,>>>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,,,>,,>,>,,>,>,,>,,,>,,,>,,,,,>,,,,,>,,>,>,>,,,,>,>,,,>,,,,,,,>,,,,>,,,,,,,,,,,>,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,',,,,,,,,,,,,',,,,,',',,,',,,,,,',,',',,',',,',,'',,',,',,'',,',',,,',',,,',',',',',',',',',',',''',',,''''','''','','',''','''','',',',',''',''',''''''','','''',''''',''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;;>;;>;>;>>;>>;>;;>>;>>;>>;>>;;>>;>>>>;>>;>;>;>>>>>>>>>;>;>>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>>,>>>>,>>>>>>,>,>,>,>>,>>,>>>,>>,>>>>>,>>,>,>,>>>,>>>,,>,>,>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,>,,>>,,>>,,>>,>,,,>,>,,,>,,,,,>,>,,,,>,,,,>,,>,,,,,,,,,>,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,',,',,',,,',,',,,,',,,',',',,,',,,',,,,',,',,,',',',',,,'',',',',',',',',',',',',',','','',',,'','',',,',',,',','','','',','',''''''''','','''','',''''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>;>;>;>;>>>>>;>;>;>;>>;>>>;>>;>;>>;>>>;>>>;>;>;>>>>>>>;>;>>>;>>>>>>>;>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>,>>>>,>>,>>>>>>>>,>>,>>,>,>,>>,>,>>,>,>>,>>,,>>,>,>>,>>,>>>,>,>>,>,>,>,>,>,>,>,,>,>,,>>,>,,,,>,,>,,,>,,,>,,,,>,>,,>,>,,,>,>,,,,,>,>,,>,,,,,,,>,,>,>,,,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,',,,',,,,,',,,,,,',,',',,',,,,,,,',',,',,',',,',,',,',,,',,',,,',,',',,',',',',',',',',',',',',','',',',','''',''','',''','',''',''',',',','''''','''''''',','''''''''',''','''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>;>;>;;;>;>;>>;>>;>>;>;>>;>>>;>>>;>>>;>>;>>>;>;>>;>>>>;>>>>>>>;>>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>,>>>>,>>,>>,>>>>>>>>,>>>,>>>>,>,>,>>>>>>,>>>>>,>>,>,>>,>>,>,>>>,,>>,>,>,>>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>>,,>,,>,>,>,>,,>,>,,,>,,>,,>,,,,,>,>,,,,,,,,,>,>,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,,,,,,',,,,,,',,,,,,,,,,,,,,',',',,,,',,',,,',,',',',',',,','',',',',',,',,',',',',',',',','',',',','',''',,','','','',,'','','',',''''''''',',''','',','''''','','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>;>>>;>>>>;>>;>;>;>>;>>>>;>;>;>>;>>>;>>>>>>;>>>>>>>>>>;>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>,>>,>>>>>>>>,>,>>>>>>,>,>,>>,>,>>>,>>>>,>>,>>>,>,>>>,>,>,>,,>>,>,>>,>,>,>,>,>,>,>,,>,,>,>>,>,>,,,>,>,>,,>,,>,>,,,,>,,>,,,>,,>,>,,,,,>,>,>,,>,,,,,>,,>,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,,,,,',,',,,',,',',',',',,,,,,',',,',,',,,',,',,',,',',',,,',,',','',',',',',',',',',',',','',',',',','','',','','''','','',''',',',',','''',''''''''','','''''',''''',''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;;>>;>;;>>;>;>>>;>>>;;>>;>>>;>>>;>>>;>;>>>;>;>>;>;>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>,>>,>>,>>>>>,>,>>>>>>>,>>>,>,>>>,>,>,>>,,>>,>,>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>>,,>,,,>,>,>,,,>,>,,>,,,>,,>,,,,,>,>,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',',',,',,',,',,',,',,',,',,,,',,',,'',,',,,',',',',',',',',',',',','',',',','','','',',',','',''','',''''''''''',''',',''',''''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>;>>;>;>>>>;>;>>;;>>;;>>>>>>;;>>;>>>;>>;>>;>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>,>>>>>,>>,>>>,>,>>>>>>,>>>,>,>>>>,>,>,>>,>,>>>,>,>>>,>>,>>>,>>>,>>>,,>>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,>,,>>,,,>,,>,,>,,>,,>,,>,,,>,>,,,,,>,>,>,>,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,>,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,',,,,',,,',',,',',',',',',',,,,,,,',,',,',,',,',,',,',','',,','',,,',',',',',',',',',',',',''',',','',','','',',','','','''',''','',',',',',''',''''','''','','''',''',''''''''''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;;>>;>;>;>;;>>>;>>>;>>>>;;>;>>>;>>;>>>;>>>>>>;>;>;>>;>>>;>>;>;>>>>>>;>>;>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>>>>>,>>>>>,>>>>>>>,>>>>,>,>>>,>,>>,>,>,>,,>>,,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,>,>,>,>,,,>,>,,>,>,,>,,>,,>,,,>,,,,,>,>,,,,,,,,>,,>,>,,>,,,,>,,,,>,,>,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,',,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,',',,,',,',,',,',,',',',,',,',',,,','',',',,,',',',',',',',',',,'',',','','',','',''','','',',',',''',''''''''',''',',''''',''''''''''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;;>;>>;>;>>;;>>;;>>;>;>>>>;>;>>;>>;>>>;>;>;>>>>>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>,>>>>>,>,>>>,>,>>,>,>,>>,>,>>,>>,>>,>>,>,>>,>>>>,>>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,>,,>,>,>,,>>,,>,>,,,,>,,>,,>,,>,>,,>,>,,,,>,>,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,',',,,,',,',',',',,,,,',,,',,,,,',,',,',,',,',,,,',',',,',','',',,',',',',',',',''',','',',',','',',',',','',''',''',','',',',',''','''''',','''',''',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>;>>;>;>>;>>;>>;>>>;>>;>>;;>>>>;>>>>>;>>>;>>>;>>;>>;>>>>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>>>,>>>>>>>,>>>>>,>>>>>>,>>>>>>>>>>>,>>>,>>>,>>,>>>,>>>,>,>,>,>>,>,,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,,>,,,>,,>,>,>,,>,,>,,,>,,,>,,,,,,>,,,,,,,,>,,>,,>,,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,',,,',,',,,,,,',',,,',,,',',,',,',,,',',,'',',',,',',,,',,',',',',',',',','',,,'',',',',''',',''','',',''','''',''',''''''''',''',',''''''','','''''''''',''''''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;;>;>;>>>;>;>;>;>;;>>>;>>;>>>;;>>>;>;>>>;>>>;>>>;>>>>>>;>>;>>;>>>>>>>>;>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>,>>>,>>,>>>,>>,>>>,>,>,>,>,>>,>,>>,>>,>>,>,>,,>>>,>>,>,>,>>>>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>>,,>>,,>>,,>,,,>,>,,,>,,>,>,,>,,,>,>,,,>,>,>,,,,,,,,,,>,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,',,,,,,,',,',,,,',,,,,,',',,,,,'',,',',,',,,',,'',',,',,,',,'',,','',',',',',',',',',',',''',,',',','',,'''',,'','''',,'',','','',',',',',''',''''',''','''''','',''','''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>;>;;>>;>>;>>>>;;>>>;>>;>>;>;>>;>>;>>;>>>;>>>>;>>;>>;>>>>>;>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>,>>,>>,>>,>>>>,,>>>,>>>,>,,,>>,>,>>,>,>,>,>,>,>,>,>,,>,,>,>,>,>,,>,,,>,,,>,,>,>,,,,>,,,>,,,>,,,>,,,,,>,,,,,,>,,>,,>,,,,,>,,,,,>,,,,,,,,,>,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,,',,',,,,,,,',,,,',',',,,,',',,,,',,,',,,',,,',,,,',,',',',,',',',,,',,',',',',',',',',',,''',''',',''',,,''',',',,'''',''','',''''''''''','''',''','''''',''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;;>>>;>;>;>;>;;>>>;;>>;>>>>>>;>>>;>>;>>;>>>;>>>>;>>>>>>>;>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>,>,>>,>,>,>,>>,>,>,>,>,>>>,>>>,>>,>>,>>,,>>>>,,>,>,>,>>>,>,>>,,>,>,>,>,>,>,>,>,>>,,>,>,>,>,>,>,>>,,>>,,>,>,>,>,>,>,,,>,,>,>,,,>,>,,,>,>,,,>,,>,,>,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,',,,,,,,,,',,',,,,,,,,,,,,,,',,',,,',',,',,'',,',',',',',',,',,',',',,'',',',',',',',',',',''',,,'',,',',','''',',''','',','',''','',',',',',''',',''''''','',''''',''','''',''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>>;>;>>>;>>>;>>>;>>>>;>>;;>;>>>;>>>>>>>>>;>>;>>>>>>;>>;>>>>;>>>>>;>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>,>>,>>,>>>,,>,>>>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,,>>,,>,,>,,>,>,,,>,,,>,,>,,,>,,,,>,>,,>,,,,,>,,,,,>,,,,>,,,,,,,,,,,,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',',,,,,,',,',',',',',',,,,,,',,,',,',,,,',,,',',,',,',,',,',','',,',',',',',',',',',',,'''',,'',',','',',''',,''',''',',','',''''''''''',''''','','''''''','''''''',''''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>;>>;>;>;>;>;>;>>;>;>>;>>>>;>;>>>;>;>;>;>>>>>;>;>>>>>>>>;>>>>>>>>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>>,>>>>>>>>,>>,>,>>>,>,>,>,>,>,>,>>>>,>>,>>>,>>,>>,,>>>,>,>>>,>>>,>,>>,>,,>>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>>,,>>,,>,,>,>,,>,,,,>,,,>,>,,>,>,>,,,>,,,,>,,,>,,,,>,,,,,,,,,,>,,,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,,,',',,,,,,,,,,,,,,,,',',',,',,,',,',',,',',,',,,',',',',',,,,',,',,,',',',',',',','',,',''',',','',',',',''',,'','''''',''',',',',',''',','''''','','','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>;>;>>;>;>;>;>;>>;>>;>>;>;>>>;>;>>>>>>>;>;>>>>>;>>;>;>>>>>>>;>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>>,>,>>,>>>,>>>>>,>>>>,>>,>,,>>,,,>>,>,>,>>,,,>,>,>,>,>,>,>,,>,>,,>,,>,>,>,,,>,,,>,,>>,,,>,,>,>,,>,>,,,>,,,,,,,>,,,>,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,',,',',',',',,,,,,,',,',,,',,,',,',,',',',,',,',,,''',',',''',',',',',',','','',',,,',''','','','',,'''','',,','',',''''''''',''''','','''''''''''',''''''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>>;>>;>;>>>;>>>;>>>;>>;>;>>;>>>>>;>;>;>>>>>>;>>>>>>>>>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>,>>>>>>,>,>,>,>,>,>,>>>,>>>,>,>,>,>,>,,>,>,>>>>>,>>>>,>,>,>,>,>>,>,>,>,>,>,>,>>,>,>>,>,>,,>,>,>,>,>,,>,,,>,,>,,>,,>,,,>,>,,,>,>,>,,,>,,,,,,,>,,,,,>,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,',,',,,,',,',',,,,,,,,,,,,,',',',,,',,',,,',,,',,',,,',',,,',''',,,,',',,,,',',',',',',',,',','''''',',','','','''',,''','''','','',',',',''',',''''''',','','','''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;;>;>;>>;>;>;>;>>;;>>>;>>>;>>>;>;>>;>>>;>;>;>>>>;>;>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>,>>>,>>>>>>>>>>>>>>>,>>,>,>>>>,>>>,>>>>>>,>,,>,>,>,,>,>,>>,>>,>,>,>,>,>,>,>,,>,,>,,,>,>,>,,>,,>,,>,>,>,>,>,,>,,,>,,>,,,,,>,,,,,,,>,,,>,,>,,,,,>,,,,,,,,,,,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',',,,,,,,,,,',,,,,,,,,',,',',',',,,,,',,',,',',',,',',',,'',,',',',,,,,'',',','',',',',',',',',',',',',,,',',',','',',',,'',','',','','',''''''''',''''','',''''','''''''''',''''''','''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>;>>;>>;>;>>>;>>>>;;>>;>>>;>>>>>>>>;>>>>>>>>;>>>>>;>>;>>>>>>>>>;>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>>>>>>>,>>>>,>>>>>,>>>,>,>,>,>,>,>,>>,>>>,>,>>>,>>,>,,,>,>>>>,>>,>>,>>>,>,>,>,>,>,>,>,>,>,>>,,>,>,>>,,>,>,>,>,,>,,,>,,>,,,>,,>,,,>,>,>,>,,,>,>,,,,>,,,,,,>,,>,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,',,,',,',,,,,,,,,,,,,,',',,,',,',,,,,',,',,,',',,',,,',','',',,',,',,',',',',',',',''',','','',',',''',',''','',''','','','''',',',','''',','''''',''''''',''',',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;;>>;;>;>>;>;;>>;>;>>>>;>;>;>;>;>;>;>>>;>;>;>>>>;>>>>>>>>>>>>>>>>>;>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>>>>>>>>>>>>,>>>,>>>>,>,>>,>>>>,>>,>,>>,>,>,>,,>,>>,>,>,>,>,>,>,>,>,,>>,>,>,>,>,>,>,,,>,,>>,,>,,>>,,,,>,>,,,,>,,,,>,,,>,>,,,>,,>,,,,,,,,,,,,,,>,,>,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',',',',',,,,',,,',,'',',,',,',',,,,',',',,,',,',',',',',',',',',',',',,','',','',',',',','',',','',','','','',','''''''',','''','',''','',','','''''','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>;>;>>>;>;>>>>;>>>;>;>;>>>>;>>>;>>>>;>>>>>>>;>>>>>;>>;>>>>;>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>>>,>>>>>>>>>,>,>,>,>,>,>>>>,>>,>,,>>>,>>,>,>>,>>,>,>,>>,>,>>,>,>,>>,>,>,>,>,>,>,>>,,,>,,,>,,>,>,,>>,>,>,,>,>,,,,>,>,,,>,>,,,>,>,,,>,,,,>,,,,,,,>,>,,>,>,,,,,,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,,,,,,',,',,',,,,,,,,,,,,,,,,',,,',,,',,,,,',,',,','',',,',,'',',',,',',',',,',',',',',',',',',',',',''','',','',''',''',''','','',',',',','''',''''''''''''''''''''''''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;;>;>>;>;>>;>;;>>;;>>;>>>;>;>>>;>>>>;>>>;>;>>>>;>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>,>>>>,>>,>>>>>>>>>>>,>>>>,>>,>>,>>>>>>>>>>>>,>,>>,>>>>>>,>>>,>,>,>>,>>,>>,>,>,>>,>,>,>,>>,>,>,>,>,>,>,,>>,,>>,>,>,>,>,,,>,,,>,,>,>,>,,>,,>,,>,,>,,,,,>,,,>,,,>,>,>,,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',,',,',',',',',,,',,,',,,',',,',,',,,,',,',,',,,,',',',',',,',',',',',',',','','',',',',','',''','',,'',,''',''''','''''''''''',''',','','','','','''''''''''''''''''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>;>;>>;>>>;>>>;>>;>>>;>;>>>;>;>>;>>;>>;>>>>;>>>>;>;>>>>>>>>>>>;>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>,>>>,>>>>>>>>>,>,>,>,>,>,>>>,>>,>,>,>>,>,>>>,>>,>,>>,>>,>,>>,>,>>>,>,,>,>,>,>,>,>,>,>,,>,,>,>,,,>,,>,,>,>,,>,,,>,,>,,>,,>,,>,,>,>,,,,>,,>,,,,,,,,>,,>,>,,,>,,,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,,,,',',,',,,,,,',,,,,,,,,,',,,',,',',,,',,,',,'',,,',,',',',',,',',,,',',',',',',',',',',',,',''',',',',',,'',''',''',',',',''',',',',',',''','''''''''','''''','',''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>>>;>;>>;;>>>;>>;>>;;>>>>>;>>>>>>>;>>>>>;>>>>>>;>>>>>>>>;>>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>,>>>>>>>>>,>>,>,>>>>>>>>>>>>>>>>,>>>>,>>,>>>,>,>>,>>,>,>,>>,>,>,>>,,,>>>,>,>,>,>,>,>,>,>,>,>,,>,>>,>,>,>,,>,>,,>>,,>,,>,,>,,,,,>,,,,>,>,,,,,,,>,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',,,,',,,,,,,',,,,',,,,,,',',',',,,',,,',,,',',,',,',,,',',',,',',,',',',',',',,',',',',',',',',''',',',','',''''','',',',',''''','','','''''''''','''',',',''''''','''''',','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>;>;>;>>>;>;>>;>>;>>>;>;;>>>;;>;>>>;>;>>>>;>;>>>>;>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>,>>,>>>>>>>>,>,>,>,>,>,>,>>>,,>>>,>>,>,>>,>,>,>>>,>>,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>>,>,,>,,>,,>,>,,>,>,,>,,,>,,,>,>>,,>,>,,,,,>,>,>,,,,,,,>,,>,,,,,,,,>,,,>,,,>,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,',,,,,',,,,,,,',,,',,',,,,,,,,,',,,',,',,,,,',,',,'',',,,',,',,',',',,',',,'',',',',',',',',',',',',','',',',,',',',''','',',''','','',',',','''',','''''',','',''''',''''''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;>>>;>;;>;>>;>>;>>;>;>>>>>;>>>;>>;>>>>>>;>>>>>;>>>;>>>>>>;>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>,>,>>,>>>>>>>>>>>>>,>,>>>,>,>>,>>>,>>,>>>,,>>,,>>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,,,>,,>,>,,>,>,,,>,,>,,>,>,,,>,,,,,>,,,,,>,>,,,,,,>,>,,>,,,,,,>,,>,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',',',',,,',,',,','',,',,',,,,,'',',',,',',,',',',',,,',',',',',',','',','',',',,'','','',''',','','',','','','''''''',','''''',''''''''''','''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;;>>>>;>>;>>;>>;>>>>;>;>>>>>>>;>>>;>;>>>>>;>>>>;>>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>>>>>,>,>,>,>,>,>>>>,>,>>>>,>>,>,>,>>,,>>>,>>>,,>,>>>,>,>,>>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,,,>>,,>,,>,,,>,>,>,>,>,,>,>,,,,,>,>,>,,,,,,,,>,>,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,',,,,,',,,,,,,,,,',,',',',,,,,,,,,,',,',,',,,,,',,',,','',,,,',,',',,',',',','',',',',',',',',',','',','','','','','',,','','',''','',''',',',','''',',''''','','',''''''''','','''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>>>;;;>>;>>;>>>;>>;>;>>>>;>;>;>>>;>>>>>>;>>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>,>>,>>>>>>>>>,>>,>>>>,>>>,>,>>>>>>>>>>>>>,>,>>>,>,>>>,>>>,>,>>>,,>>,>,>>,>,,>>,>,>,,>,>,>,>,>,>,>,>>,>,>,>,>,>>,,,>>,,,>,,>,>,>,,>,,,>,,,>,,,,,>,>,,,,,,,,>,,>,,,,,,>,,>,,,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',',,',',,,,,,,,,,',',',',',,,,,,',,',',,',,',',,,',',',',,,'',',',,,',,',',',',',',',',',',,',',',',',',',',''''','',''','',''',''''''''',''''','',''''''''','''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>;;>>>>>;>>;>>;;>>;>;>>;>;>>>>>>;>>>;>;>>>>;>>>>;>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>>>>,>,>,>,>,>,>>>>,>>,>>,>>>,,>>>,>,>>>,>,>,>,>>>,,>,>>,>>,>,>,>,>,>,>,,,>,,>,,>,>,,,>>,,,>>,>,>,,,>,,,,>,,,>,,,>,>,,,,,>,>,>,>,,,,,,>,,,,,>,,,,,,,,,,,,,>,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',',,',,,,,,,,,,,,',',',,',,,',,,',,',',,',',,,',',,',,,''',,',',',',',',',',','''','','',',''',''',',,,'','',',''',',',',',','''',','''''''','',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;;>>>;>;>;>;>>;>>>>;>>>;>>>>;>;>;>>>;>>>>>;>>>>;>>>>>>>>>;>>>>;>>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>,>>,>>>>>>,>,>>>>,>>>>,>,>>>>>>>>>>>>,>,>>,>>,>,>,>>,>,>,>>,>,>>>,>,>,>,>>>,>,>,,>,>,>,>,>,>,>>,>,>,>,>,,>>>,,,>,,,>,,,>>,,>>,>,,>,,>,>,,,,>,>,,,,,,,,,>,>,,,,>,,,,,>,,,>,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,,',,,,,,',,',,,,,,,,',',',',',',,,,,,',,',',,',,',,,',',,',',',',','',,,',',',',',',',',',',',,,',',','',',','',','''',''','',','',''''''''',',''''','',','''''',''''''''','''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;;>;>;>;>>;>>;>;>;>>;>>;>;>>>;>>;>>;>;>>>>>;>>>>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>,>>>>>>>>>>,>,>,>,>,>,>>>,>>>,>>>>>,>>>,>>>,>,>>,,>,>>,>,>,>,>>,>>,>,>,>,>,>,>,,>,,>,,>,,>,,,,>,>,>,,>,>,,,>,,,,,>,>,,>,,>,>,,,,,>,>,,>,,,,,,>,,,,>,,,,,>,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,',,,,',,,,,,,,',,',,,,,,,,,,,,,,,',',,,',,,,',,',,'',,',',,,',,,',',,',',',',,',',',',',','','''','',',,','',',','',','',,'',''',''',',',',''''',','''''''''',',''',''',''''','''''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>;>>>;>;>>;>>;>>>;>;>;>>>>;>>>>>;>>>>;>>;>>>>;>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>,>,>>>>>>>>>>>>,>>,>,>>>,>,>>,,>>,,>>>,>,>>>,>,>,>,>,>,,>>,>,>,>,>,>,>,>,>,>,>>,>,>,>>,>,,>,>,>,,>>,,,>,>,,,,>,,>,,,,,>,>,,,,>,,,,,>,,,,>,,,>,,,,,,>,,,,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',',,',,,,,,',,',',',',',',,,',',,',',,',,',,,,',,,'',,',',,',',',',,',',',',',',',',,',,',','','',','''','',',',''',''','',','''''''',','''''','','',''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;;>;>;>;>;>>;>>;>;>>>>>;>;>>>;>;>>>;>;>>>>>>;>>>>>>>>>>>;>>>>;>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>,>>>>>,>>,>>>>>>>,>,>,>,>,>,>>,>>>,>,>>>,>>>>,>>>,,>>>,>,>,>,>>>,>>,>>,,>,>,>,>,>,>,>,>,,>,,>,>,>,,,,>,,>,,,,>,,,>,,>,,>,>,,>,,>,>,,,,,>,>,,,>,>,,,>,,,,,,,,>,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,',,,,',,,',,'',',',',,',',',',,',',,',',',',',',',','','',',',,','','',,',',''','',''',''','''',',',','''',',','''''''''',''','',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;>;>>>;>>;>>;>>;>;>>>>>;>>>>>;>>>>>;>;>>>>;>>>;>>>>>>>;>>>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>>,>>>>,>,>>>>>>>>>>>>>,>>>,>>,>>,>>>,,>>,,>>>,>,>,>>,>>,,,>,>,>,>>,>,>,>,>,>,>,>,>>,>,,>,>,>>>,,>,>,>>,,>,>,>,,,>,,,>,,,,,,,,>,>,,,,,>,,,,,,,,,,>,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,,,,,,,,',',,,,',,',',',',',',',,,',,',',,',',,',,,',,,',,',,,',','',,,'',,',',',',',',',',',','','',',,'',''''',','',''',',',''',',''''''''',''''''','','',''','''''''''','','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>;>;>>;>>;>>;>;>>;>;>>>;>;>>>;>;>>>>>>;>>>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>>>,>>>,>>>>>>>,>>>>>,>,>,>,>,>,>>>,>,>>>>,>>,,>>>,>>>,>>,>>>,>,>,>>>,>,>>,>,>,>,>,>,>,>,>,,,,>,,>,>,,,,,,>,>,,,,>,,>,,,,>,,>,>,,>,>,>,>,,,,>,>,,,,>,,>,>,,,,,,,,,,,>,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,',,,,,',,,',',,,,,',,,,,,,,,,,,,,,,,,',,',,,,',,,,',,',',,'',,',,'',',,',,'',,',',,',',',',',',',','',','',''',',',,','',',','',''',','''',',',',''',',''''''''''''''''''''',''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;;;>>;>;>>;>>;>>;>>;>>>;>>>;>>;>>>>>>>>;>>>>;>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>,>>>>>>,>>>>,>>,>>>>>,>>>>>>>>>>>>>>,>>>>,>,>>,>>>>,>>,,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>>,>,>>,>,>>>>,>,,>,>,>,>,,>,>,,>,,,,>,,>,,,,,,>,,,,,>,>,,,,,,,>,,>,,>,>,,,>,,>,,,>,,,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,',,,,',',,',',',',',',,,',,'',,',',,',,',',,,',,',,,,',',',,',',','',',',',',',',',',,'',',',,'',''','',','',',''','''',',''''''''',''''','','',',','','',''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>;>>>;>>;>>>;>>;>;>;>>;>>>;>>>;>;>;>>>>;>>>>;>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>,>>>>>>>,>,>>,>,>,>,>,>,>,>>,>,>>>,>>>,>,>,>,>>>,>>>,>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,>,,,,>,,,,,>,>,,,>,,,>,>,,>,,>,>,,,>,,>,>,,,,>,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',,,,',,,',,,,',,,,,,,',,,,,,,,,,',,',,,,',,,',,,',,,',',',','',',',,'',,',,',,',',',',',',''',''',',','',',','','','','''','',','','',',',',''',',''','',''''''''''''',''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;;>;>;>>;>>;>>>;>>>>>>>>>;>>>;>>>>>>>;>>>>;>>>>>>>>>;>>>>>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>,>>>,>>>,>,>,>,>>,>,>,>>,>,>,,>,>,>,>,>,>,>,>,>>,,>,>>,>,>>,>,,,>>,,>>,>,,>,,>,,>,,>,,>,,,,>,>,,,,,,>,>,,,,>,,>,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,',,',,,,',',',',,,',,',',,,',,,',,'',,',,',,,,',,',',,,',',','',',',',',',',,',',,','',',''',','','','',','','',','','''''','','''','''''''''','',''''''''''''''''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>;>>>;>>;>;>;>>;>;>;>;>>>;>>;>;>>;>>>;>>>>;>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>,>>,>>>,>,>>>>>>>>,>>>,>,>,>,>,>,>,>>>,>>,>>,>>>,>,>>,,>>>,>>,>,>,>,>>,>,>>,>>,>,>,>,>,>,>,>,,,>,>,,>,,>,,>,,>>,,,>,,,,>,,,>,,,,,>,,>,,>,>,,,,>,>,>,,,,,>,,,,,,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,',,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,',,,',',',',,',,,',,',,'',,',',,''',',',',,',',',',',','','','',',',',',''',,',',',''',''','''','',','''',''','''','','',''''''',''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;;>>;>;>>;>>>;>>;>>>>>;>>;>>;>>>>>>>>>>>>;>>>>>>;>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>>>,>>>>>>>>>>>>>>>,>>>,>>,>>,>>,>,>>>,,>>,>>,>>>,>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,,>,>,>,>,>,>,,>>,>,,>,,>,,,,,,>,,,,,,,,>,,,,>,,>,,>,,>,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,',,',',,',',,,,',',',',,,,',,',',,,',,,',,'',',',',,',',,',',,,',',,',',',',',',',',',',',',','',''',,''',''','',',',''','',''''',',''',''',''''''''''',',''''','''','',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>;>;>>;>>;>>>;>>;>;>>>;>>>>>;>;>;>>;>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>>>>>>>>>>,>>>>,>,>,>,>,>,>,>>,>>>,>>,>>,>>>,>,>>>,>>,>>,,>,>>>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,,>,,,,,>,,,>,,>,>,>,,,>,>,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,',,,,,,',',,',,,,',,,',,',,,,',,',,',,,'',',',',',,',',',',',',',',',',',','',',',',''','',','',''''',','','',',''''',''','''',','','',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;;>>>>;>>;>;>;>>;>>>>;>>>;>;>>>>>>;>>>>>>;>>;>>>>>>;>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>,>>,>>>>>,>>>>>>>>>>>>>>,>,>,>>,>>,>>>,>,>>,>,>,>,>,>>>>,,>,>>,>,>,,>,>,>,>,>,>,>,>,>,,,>,,>,>,>,>,>,,>,,>,,>,,>,>,>,,>,,>,,,,,,,>,,,,,,,>,,,,,>,,>,,>,,,>,,,,,>,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,',,,,',',,',',,',,,,,,,',',,,,',,',',,,',',,','',,',,',,'',,,',',',,,'',',',',',',',',',',''',','',',',',','','',','',','''','',''''',',''',''','''''''''''''','''''''''',''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>;;>>;>>>>;>>;>>;>;>>>;>>>>;>;>>>>>>;>>>>>>>>;>>;>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>,>,>,>,>,>,>>>>>,>>>,>>,>,>>,>>,>>>,>>>,>,,>>,>,>,>,>>,>,>,>,>,>,>,>,,>,,>>,>,>,>,,>,,,>,,>,,>,>,,,>,,,,>,,>,,>,>,>,,,>,>,>,,,,>,,,,,,,>,,,>,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,,,,,,,,,',,,,,,,,,,,,,',',,',,,,',,,,',,,',',,,,',,,,,',,',',,,,'',',,','',,',',',',',',',',','',,',',','',''','',',','','','',','','',',''''',''',''','',',',','',''','''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;;>>>;>>;>;>>;>>;>>>>>;>>;>;>>>>>;>;>>>;>;>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>,>>>,>>>>,>>,>,>>,>>>>>>>>>>>>>>>>>>>>,>,>,>>,>>,>>>,>,>,>>,,>>,>,>,>>,,>>,>>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,>,,>,>,>,>,,,>,>,,>,>,,>,,,,,,,,,,>,,,,,,>,>,,,,>,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,',',,,,,',,,',,,',',,',',,,',',,'',',',',,,'',',,',',,',',',,',',',',',',',',','',','',',',',','',''','',''',''',''','''',',''',''',''''''''''''''''''''''',''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>;>>;>>;>;>>;>>;>;>>;>>>>>;>;>>>>>;>>>>>>>>>>>;>>>>;>>>>>>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>,>,>,>,>,>,>,>,>>>,>>,>>,>>,>>,>>>,>,>>,>,>,>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>>>,>,>,>,,>,>,,>,,,>,>,,,>,,,,>,,>,>,>,>,>,,,>,>,,,,,,,,>,,,,,>,,>,,,,,,,,,>,,,>,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,,,',,',',,,,',,,,,',',,',,,',,,,,',,,,',,',,',,,',,',,'',,,',',,,'',',,,',',',',',',',','',','','',',','','','',','','',,'','',',''',''''',''','''','''','','','''''','''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;>>;>>>>;>>;>>>>;>>>;>;>>>>>;>>>>;>>>;>;>;>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>,>>>,>,>>,>,>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>,>>,>,>>,>>,>>>,>>,>,>,>,>,>,,>,>,>,>,>,>,>,>,,,>,,,,,>,,>,>,,,>,,>,>,>,,>,,>,>,,>,,,>,,,,,,,>,,,,>,>,,>,,,,,>,,,,,,,>,,,,>,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,,,,,,,,,,',,,,,,',,,,,,,,',,,',',,',',,',,',,,',,',,',,,'',,',''',,,','',',',',',',',',',,'',',',','',',''',','',','','''',','''',,''',',''',''','''','''''''''''',''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>;>>;;>>>;>>;>>>>;>>>>>;>;>>>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>,>,>,>,>,>,>,>>>,>>,>,>>,>>,>>>,>,>,>>,>,>,>,>>,>>,>>>>,>,>,>,>,>,>,>,>,>,>,>>>,>,>,,>,>,>,>,,>,,>,,>,,,>,,,>,,,>,>,>,,,>,,,,,,,,,>,,>,,,>,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,',,',,,',',',,,',,,,,',,,',,',,,',',',',',',,,,',',,,,'',',,',',',',',',',','',',','',',','',',','',','','',','''',',''',''''',''','''','''',','',''','''''','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>;>>;>>>;;>>;>>;>;>>>;>;>>>>>>;>>>;>>>>;>>>>;>>>>;>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>,>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>,>,>>>,>>>,>>,>>,>,>>>>,>,>>>,>,>,>,>,>,,,,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,>,>,,>,>,,>,>,,,>,,,>,>,>,,,,,,,>,,,>,>,>,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',,',,,,,,,,,,,',',,,,,,,',,,,,,,',,,',',,,',,',,,',,,,',,,',,','',,',','',,,',',,',',',',',',',',',',',,','',',',''','','','','''',',''','''',',''',''','''','''''''','''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>>;>;>>>;>>;>>>>;>>;>>>;>;>>>>>>>>;>>>>;>>>>;>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>,>>>,>,>>>>>>,>,>>,>,>,>,>,>,>>>>,>,>>,>>>,>>,>,>,>,,>>>,>,>,>>>,>,>,>>>>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,,,,>,,>,,>,,,,>>,,>>,,,,,>,>,>,>,,,>,,,,,,>,>,,>,,>,,,,>,,,,,,,>,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,',,',,,,',',',,',,,,',',,',,',',',',,'',,',,,,,',',',,,'',',',',',',',',',',','',','''',,',''',',',',',',''',',''',',''',''''',''',''',''''','','''''''''''''''''''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>;>>;>>;>>;>>>;>>>;>>>;>>>>>>;>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>>>>>>>,>>>>>,>>,>>>>>,>>>>>>>>>>>>,>,>>>>>,>>,>>,>>,>>,>>>,>,>,>>>,,,>,>>>,,>,>,>,>,>,>,>,>,>,,>,>,,>,>,>,,>,>>,>,>,,>,>,>,,,>,,,,>,>,,,,,,,,,>,,,>,>,,,,,,,,,,,>,,,,>,,,>,,,,,,>,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,',,',,,',,,',,,,,,,,',,,,,,',,,',,,,,',,,',,,',,,',,',',','',,',,','',,',',',',',',',',',',','',',,',''',','',','''','',','',','''',','',',''',''','''','''''''',''',''','','''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>;>>;>>>;>>;>>;>>>;>>>;>;>>>>;>>>;>>>>>>>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>,>,>,>,>>>>>,>,>,>>,>>,>>,>>,>>,,>>,>>>,,>>>,>>,,>>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,>,,,,,>,,>,>,,,>,,,,>,>,,>,>,>,>,>,,,>,,,,,,>,,>,>,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,',',,',,',',,,,',,',',',,',',,',,'',,',,,',',,,',',',',,',',,,',',',',',',',',',',''',',',','','''',,'','','',''',','','','''',''','''','''','',''''','''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>;>>>;>>;>>;>>;>>>;>>>;>>>>;>>>>>>>>>>;>>;>>>>>>>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>,>>>>>,>,>>,>,>>>,>>>>>>>>>>>>>,>,>>,>>>,>>,>>>,>,>>,>>>,>>,>,>>,>,>,,>>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>>,,>,,>,>,,>,>,>,,,>,,,,,,,,,,,>,,,>,>,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,,',,,,',,',,,,,,,,,,,,,,',,,',,,,,',,,',,,,',,',,,',,',',,,',',,',,','',,','',',',',',',',','','',,,'',','',',',,''','','',''','''',''''''',''',''',''''','''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>;;>>;>;>>>>>>;>>>;>>;>;>>>;>;>>;>;>>>>>>>>>;>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>,>>>>>>>>>>>>>>>,>,>,>,>,>,>>>>,>>,>>>,>>,>>,>>,>,>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>,,>,>,>,,>,,>,,,>,,,,>,,>,,>,>,>,>,>,>,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',,,,,,',',,,',',',,,,',,,',',,',,',',,',,,',,',',,',',',',',',',,,',',,',',',',',',',',',','''',',','','','',,'','','','',','',',',',''',''','','','''',''''',''''''','','''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";;>>;>>>>;>>>;>;>;>>;>>>;>>>>>>>>>>;>>>>>>;>>;>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>,>>>>>>>>>>>>,>>,>>>,>>,>>>>>>>>>>>>,>,>>>>,>,>>,>>,>>,>>,>>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,,>,>>,,,,>,,>,>,>,>,>,>,,>,,>,,,,,,,,,,,,,>,,,,>,,,,,>,,>,,>,,>,,>,,>,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,,,,',,,,,',,,,,,,',',,,',,,,,,,',,,,',,,',',',,',',,,',,,',',,','',,',',',',',',',',',',',',,,','',','','','',',','','',','',''''''''',''','''''''''','''','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>;>>;>>>>;>>;>>;>>>;>;>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>>,>>>>>,>,>,>,>,>>>>>>,>,>>>>,>>,>>,>,>>,>,>>,>,>,>>>,>,>,>,>>,>>,>,>,>,>,>,>,>,,,>,,>>,>,,,>>>,,>,,>,,>,,,>,,>,,>,,>,>>,>,>,>,>,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,,,',,,,',,,,,',,',,,,,',,,',','',,',',,',',,,,',,',,'',,'',',,',',,,',',',',',',',',','','',''',',','',',','',''',''''','''','',',',',''',''','',','','''',''''''''',''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>>>;>;;>>>>>>>;>>;>>>>;>>>;>>;>>>;>;>>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>,>>>>,>>>>>>>>>>>>,>,>,>>>,>,>>,>>>,>>,>,>>>,>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,,>>,>,>,,,,>>,,,,,>,>,,>,,>>,,>,,,>,,>,,,,,,,,,,,,,>,,,>,,,>,,>,,,,,>,,,>,,,,,,>,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',,,,,',,,,',,,,,',,,,,,,',',,,',,,,,,,',,',,',,,,',',',,',,,',,,,,'',','',',,',',',',',',',',',',',',','',','','','',,'',',','',','',''''''',''',''',''''''''',''','''''''''','',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;;>>;>>>;>;>;>>>;>>>;>>>>;>>>>>;>>>>>>;>>>>;>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>,>>,>>>>>>>>>>>>,>>>>>>>,>>>,>,>,>,>,>>>>>>,>,>>>,>>>,>,>,>>>,>,>>>,>>,>,>,>>>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>>>,,>,>,>,>,,>,,>,,,>,,>,,,>,,>,>,>,>,>,>,,,>,,,,,,,,,,>,,,,,,>,,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,',,,',,,,,',',,,,,,',,,',',',,,',,',,',',',,,',',',,',''',,',,,,',',',',',',',',',',','',',','',,'','',',',''','',''','''','',',',''',''',''''',','',''''''','',''','''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>>;>>>>;>>>>>>;>>>;>>>;>>>>;>>>>>;>>>>>;>>>>>>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>,>>>>>>,>,>>>>,>>>>>>>>>>,>,>,>>,>>,>>,>,>>>>>,,>>,>,,>>,>>,>,>,>,>,>,,>,>,,>,>,>,>,>,>,>,>,,>,,,>,>,>,>,,,>,,>>,,>,,,,>,>,,,>,,,,,,,,,,,,>,,,>,>,,>,,,,>,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,',',,,,,,',',,,,',,,,',,',,',,',,',,,'',,',,',',',,,,','',',',',',',',',',',',',',,''',',,'','','',''',',',''','',','','''''',''',''',',''''''''''',''''''','''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>;>;;>>>;>;>>>;>>>;>>>>;>>>;>;>>>>;>>>>>;>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>,>>>,>>,>>>>>>>>>>,>,>,>,>>>>>>,>>>,>>,>>>,>,,>,>>,>>>>>,>,>,>>,>,>,>>,>>,>,>>,>,>,>,>,,>,>,>,>,>,>,,>,,,,>>,,>,,,>,,>,>,,,>,>,,>,>,>,>,>,>,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,',,,,',,,',,',,,,,,',,',,,,',',,',,,,',,',,',,',,',',,',,',,,',,''',',,',',',,',,',',',',',','','',,',''',',',','',,'',''',',',''',''',','''',''','''''','',','',''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>;>>>>>;>>>>>;>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>,>,>>,>>>>>>>>>,>,>>>>,>>,>>>,>>>>,>>,>>,,>,>>,>>,>,>,>,>,>,>,>,>,,>,>,>,>,>>,,,>,>,>,>,>,>,>>,,>,>,>,>,>,>,,,>,,>,,>,,,,,,,,,,,,>,,,,>,>,,,,,>,>,,>,,>,,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,',,,,,,,,,,,,,,',,,,,,',',,,,,,,',',,',,',,,,,',,',,,',','',,',,,,,',',',,',','',',',',',',',',','',',,'','','',''','',','''''','',',''',',''',''',','''''''''''''''''''''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>;>;>>>;>;>>>;>>;>>>>;>>;>;>>>>>;>>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>,>>,>>>,>>,>>,>>>>>>>>,>,>,>,>>>>>,>,>,>>>,>,>,>,>>,>>,>>,>,>>,>,>>,>>>,>,>>>,>,>>,>,>,>,>,,>,>,>,,>,,>,>,,>,,>,,,>,,>,,>,,>,,>,,,>,,>,>,>,>,>,>,,>,,,,,,,>,>,,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',,',,',,,,',,',,,,',',',,,,,',,',,',',,,',,'',,',,,,',',''',',',,',',',,',',',',',',','',','''',,'','','',,'',','',',','','''',''''',''','''''','',''','','''','','''''''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>;>;>>;>>;>>;>>;>>>;>>>>>>>>>>;>>>;>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>,>>>>>>>>>,>,>>>>>>,>,>>>,>>>,>,>,>,>>,>,>,>,>,>,,>>,>,,,>,>,,>,>,>,>,>>,>,,>,>,>,,>,>,,>,,>>,,>,,>,,,,,>,,,>,,>,,,,,,,,,,,,,,,>,,,>,,,,,,,,>,,>,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,',,,',,,,',,,,,,,',',,',,,',,',',,',,,',,,'',,',',,,',,',',',','',',',',',',',','',',,,'',','',','',',''','',''','',',''',',''',''','','''''','''''',''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;;>>>>;>>>>>;>>;>>>;>>>;>;>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>>>,>>>>>>,>>>>>>>>>>,>,>,>,>>>>,>,>,>>>,>>>>,>>,>>>,>>,>>>,>>,>,>>>,,>>,>>>,>,>,>,>,>,>,,>,>,>,,>,>>,>,,>,,>,,,>,>,,>,>,>,,>,>,,,,>,>,>,>,>,>,>,,,,>,,,,>,,>,,,,,,,>,,,,,>,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,',,,,,',,,,,,,,,',,,',',',,,,,',,',,,',,,,',',',,'',,',,',,'',',',',,',',,',',',',','','',,',''',','',','',''',','',''','','''','''''',''',''''''',','''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>;>;>>;>;>>>;>>>;>>>;>>>>>>>;>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>,>>>,>>>>,>,>>>,>>>>>>>>>,>,>>>,>>,>>,>,>>,>>,,>>,>>,,>>,>>,>,,>>,>,>>,,>,>,>,>,>,>,>,,>,>,>,,>,,>,>,,>,,>,>,,>,>,,,>,,>,,,>,>,,,,,,,,,,,,,,,>,,,,>,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,',,,,',',,',,',,,,,,,,',',,,,',',,',',,',,',',,,',',,',,,',',',',,','',',',',',',',','',',','',',''','',,'',',''','','',','',',',''',''','','''''',''',''',''''','''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>;>>>>>>;>>>;>>>;>>>>>;>;>>>;>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>,>>>>>,>>,>,>,>,>>>>>,>>>,>>,>>>,>>,>,>>,>>,>>>,>,,>>>>,>,>,>,>>,>,>,>,>,>,>,>>,>,>,>>,>,>,,>,>,>,>,>,,>,,>,>,>,,>,,>,,>,>,>,>,>,>,>,,,>,,,,,>,,>,,,,,>,,,>,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,,,',,,',,,,,',,,,,,,',,',',',',,,',',',,,',,,',,',',,',',,,',','',,',,','',',,',',',',',',',','',',',','',',',','',''',',',''',''',''''''',''',''',''','''''''''''''''''''',','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>>;>;>;>>>;>>>;>>>>;>>>>>>>>>>>;>>>>>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>>>>>>>,>>>,>>>>>,>>>>>,>>>>>>>>>>>,>,>>,>,>>,>>>,>>,>,>>>,>,>>,,>>,>>,,,,>,>>,>,>,>,>,>,>,>,>,>,,,>,,>,,,,>,>,>,,>,,,,>,>,,>,,,,,>,,>,,,>,,,,,,,,,,,,,>,,,,,>,,,,,,,>,,,,,,,,,>,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,',,,,,',,,,,',',,,,,,,,,,,,',,,',,,,',,',',,',,,',,',',',,',,',',',,',,,'',',',',',',','',','',',',','',',''','',,''''',',''','''',',''',''',''''''','',','','''''',''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>;>>;>>>;>;>>>;>>;>;>>;>>;>>;>>;>>>>;>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>,>>>>,>,>,>,>,>>>>,>>>,>>,>,>>,>>>>,,>>>,>,>>,>>,>>>>>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>>>,>,,,>,,>,>>,,,>,>,>,>,,,>,,>,>,,>,>,>,>,>,>,,,>,>,,,>,>,,,,,>,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,',,,,,',',,,',,,,,,,',',',',',,,',,,',',,',,,,',',',,',,,',',',',',',,',',',,',',',',',',',','',,',',''',',''',,'',''',','''',','',','''',''',''',',','''''''''''',',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>>>;>>>>>;>>;>>>>>>>>>>;>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>,>>>>,>,>>>>>,>>>>>>>>>>>>,>>>,>>,>>,>>,>>,,>>>,>,>>>,>>,,>,>,,>,>,>,,>,>,>,>,>,>,>,>,>,>,,>,,,,>,>>,,>,>,,>,>,,>,,,,>,>,,,>,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,>,,>,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,',,,',',,,',,',',,',,',',',',,,',',,',,'',',','',',',',',',','',','''',',,','',,''',',','',',','','',''',',''',''',''''''','','',',''''''','''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>;>>>;>;>>;>>>;>>;>>;>>>>>;>>>>>>>>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>,>>,>>>,>>>>>>,>,>>>,>,>,>,>,>>>,>,>>>>,>>,>>,>>>,,>>,>,,>>,>>,>,>>,>,>,>>>,>,>,>,>,>,>,>,>,,>,>,>>,,>,,,>,>,,,>,,>,,>,>,,,,>,>,,>,,,>,>,>,>,>,,,,,>,,,>,>,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,',,,',,',,',',,,,,,,',',',',,,,',,',,',,,',,,',,,',,,',',,'',',',',',,',',,',',',',',',','',',',',,','''','''',',''',',''','','','',''''',''',''','''''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;;>>>;>>>>;>>>;>>>>>;>>>>;>>>>;>>>>;>>>>>>>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>,>>>>,>,>>,>>,>>,,>>>>,>>>>,>>,>>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,,>,>,,>,>,,,,>,>,,>,,>,,>,,,,,,,,,,>,>,,,>,,,,,,,,,,>,>,,,,>,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,,',,',',,,,,,,,',',,',,',,',',,',,',',',',,,',,,,,',,',',',,',',',',',',',',',,',',','',',,',',',,''',,'','','','','','',',''',''','''',','','',''','''','''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>;>>>;>>>>;>>>;>;>>>>>;>>;>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>,>>,>>>,>>>>>,>,>,>,>,>>>,>,>>>,>>>,>>>>>,>,,>>,,>>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,,>>,,,>,>,,>,>>,,,>,,,>,,>,,,>,>,>,>,,,,,,,,,,>,,,>,,>,,,,,,,,,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,,,,,,,,',',',,',,,,',,,,',',',,,,,,,,,',,',,,,',,',',',,','',',',','',,',,',',',,',',',',',','',''',','','',''',''',''',''','',''''',''''''',''',''',''''''''',''',''','''','',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>>;>>;>;>>>;>>>>;>>;>>>>>;>;>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>>>,>>,>,>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>>,>,>>,>>>,>,>,>>>,>>,>,>>>,>,>,>>,>>,,>,>,>,>,>,>,>,>,>,,,>,>>,>,>,>,>,,,>>,>,,>,>,,,,>,,,>,,>,,,>,,,,,,,,>,>,>,,>,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,,,,',,,,,',,,,,,,,',',',',,',,',',,',,,,,',',,,,,,',',',,',',',',',',',',',',',',',',','',',','',,'',,',','',,'',''',','',',',''',''',''','','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>;>>>;>>>>;>>>;>>>>>>>>>;>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>,>>,>,>>,>>>>>>,>,>,>,>,>>>,>,>>>>,>>,>,>>,>>,>>,>>,>>,,>,>>>,,>,>,>>>,>,>,>,>,>,>,>,>,>,>,,,,>,,,>,,>>,,,,,>,>,,>,>,,>,>,,,,>,,>,>,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,',,,',,',,,,',,,,',',',',,,,,,,,',,',,,',,,','',,,','',',',,',',',',',,,',',',',',',',',',',',',','',,''','''',','''','','','',''','',''',''','''''''''','','''''',''''''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>>>;>;>>>;>>>>;>;>;>>>>>;>>;>>>>>>;>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>,>,>>>>>>>>>>>>,>>>>,>,>>,>>>>,>>,>,>,>,>>,>>>,>,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>>,,>,,,,>>,>,,,>,,>,,>,,,>,>,>,,,,,,,,,>,>,>,>,>,>,,>,>,,>,>,,,,,,>,,>,,,>,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,',,,,,,,,,,,,,,,,,,',,,,,,,,,',',',',,,,,',,',',,',,,',',,,',,',',,',,',',''',',',',',',',',',',',',',',''',','',,'',',',''',','',''',''''',''',''',','',',''','',','''','',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>;>>>>>;>>>;>>>>>>>>;>>;>>>>>>>>;>>>>;>>>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>,>>,>>>>>>>>,>,>,>,>,>,>>,>,>>>,>>,>,>>,>>,>,>>>,>,>,>,>>>,,>,>>,>,>,>,>,>,>,>,>,>,,>,,>,,>,>,,>,>,>>,>,,>,>,>,,,,>,,>,,>,,,,>,>,>,>,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,',',,',,',',,,,',',',,,,,,,,,','',,,',,,,',,'',',,',,',,,',',',',,',,,,',',',',',',','',',','','',,'','',''',''',',','''','',','','''',''','''''''''''''''''''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>>;>;>>>;>>>;>>;>>>>>>>>;>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>>,>>>>>,>,>>,>>>>>>>>>>>>>>>>,>>,>>,>>>>,>>,>>>>,>,>>>,>,>,>,>>,>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,,>,,,>,,>,,>,,>,>,,>,,>,,>,>,,,,,,,,,>,>,>,,>,,,>,,>,,>,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,',,,',,,,,,,,,,,,,,,,,,,,,,',,,,,,',',',',,,,,',',,',',,',,,,,',',',',',',',',',,'',',',',',',',',','',''',',','',',',',',',',''''',','','','''',',''',''',',','',',''','''',''''','',''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>;>>>>>;>;>>;>>>>>;>;>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>,>>>>>>,>>>,>>>>>>>>>,>,>,>,>,>,>,>,>>,>>,>>,>,>>,>,>,,>,>>,,>>>,>,>,>,>>,,>,>,>,>,>,>,>,>,>,>>,>,,>,>,>,>,,>,>,,>,,>,,>,,,>,,,>,,>,,,>,>,>,,>,,,,,,,,,,,>,,,,,,,,>,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,',,,',',,',,',,,,',',',,,,,,,,',',,,,',,',,',,'',',',,,',,,',',,,','',,',',',',',',',',',,'',,',',',','''','','','',','''',''','',','''',''',''''''''''''',''',''''','''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";;>>;>>;>;>>>>>>>>>;>>>>>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>>>,>,>>>>>>>>>>>>>>>>>,>>,>>>,>>>,>>>,>>>>>,>>>,,>>,>,>,>,,>>>>,>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,,>,,>,,>,>,,>,,>,>,,>,,,>,,,,,,>,,>,>,>,>,>,,,>,,>,>,,,,,,,>,,,,,,>,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,,,,,',,,,,,,,',',',',,,',',,',,',,',,,',,,'',,'',,','',,',,,',',',',',',',',','',,'',',','',',,'','',',',','',,''','',''''',''',''','',''','','''''''''''''''''','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>;>>;>;>;>;>>>>;>>>;>>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>,>>>>>,>,>,>,>,>,>,>>>>,>>,>>,>,>>,>,>,>,,>>,>>>>,>,>>>,>>>,,,>,>,>,>,>,>,>,>,,>,>,>,>,,>,>,>,,>,>,>,,,>>,,>,,,>,,,>,>,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,,,,',,',',',,,,,',',',,,,,,,,,',,,',,,',,,',,'',,'',,,',,,',',,'',,'',',',',',',',',','','','',''',,'','',','','''''',''',','''',',''',''',''',''','''''','','''','''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>;>>>>;>>>>>>>>;>>>;>>>>;>>>>>;>>>;>>>>>;>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>,>>,>>>>>>>>>>,>>,>>>>>>,>>>>>>>>>>>>>>,>,>>>,>>,>>>,>>,>>,>>,>,>,,>,>,>,,>,>,,>>>,>,>,>,>,>,>,>,>>,,>,,>,>>,>,,>,>,,,>,>>,,,,>,,>,,>,>,,,>,,,,>,>,>,>,>,>,,>,,,>,>,,>,>,,,,,,,>,,,,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,',,,,,,,,,,,,,,,,,',,',,,,,,',',',',,',',,,',,,',,',,,',,,'',,',',',,',,'',,,,',',',',',',',',,',',',',','','','',',',',,','',','',',','''',''',''',''''''''',''''''','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>;>>>>;>;>;>>>>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>,>,>>,>>>>>>>,>>,>>>,>,>,>,>,>,>>>>,>,>>,>>,>>>,>>,>>,>>>,>>>,>>,>>,>>,>>,,>,>,>,>,>,>,>,>,,>,>,>,>,,,,>,,>,,>,>,,,,>>,,>,,,>,,,>,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',',,',,,,,,,,,,',',,,,,,,,,,',,,',',',',,',',',,',,,',',,',',',',,','',',',',',',',',''',',','',',',','',''','''','''','',''','',',''',''',''','','',''','',''''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>;>;>>>>>>>;>>>>>>;>>;>>;>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>,>,>>>>,>>>,>,>,>,>,>>,,>>,>,>,>>,>,>,>,>>>>,>,>,>,>,>,>,>,>,>,>,,>,>>>,>,,>,>,,,>>,,,>,>,>,,,>,,>,,,,>,>,>,>,>,>,>,,>,,,,,>,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',',,',',,,,,,',',',',,,',',,,',,,',,',,',',',',,',',,',',',',',,',',',',',',',',,','',',,',',''','',,',',,'',','','''',''''''',''','',''','''''','''''''',''',''''''''''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>;>>>>;>;>>;>>>;>>>>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>,>>>>>>>,>>,>>,>,>,>,>,>,>,>>>>,>,>>,>>>>,>>>,>>,>>>,>>,>>,,>,>,>,>,,>,,>,>,>,>,>,>,>,,>,,,>,>,>,,,,>,>,,,>>,,,>>,,,,,>,>,,>,,>,>,,,,,,,,,,,,,,,,,>,,,,,,,,,>,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,,',',',,,,,,,,',,,,,',,,',,',,,',,,',,,',,',',',,',,',,'',',',',',',',','','',','''','',,'','''',''',''',''',','',',',''','''''','''','',''','''''''''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>>;>;>>>>>>>>>>>;>>;>>;>>>>>;>>;>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>,>>>>>>>>>,>>>>>>,>,>>>>>>,>>>>>>>>,>>>>>>,>,>>>,>>,>,>>>,>>,>>,>,>,>>,>>>,>>,>>,>>,>>,>,>,>,>,>,>,>>,>>>,,>,,>>,>,,,>>,,,>>,,,>,>,>,,,>,,,>,,,>,,>,>,>,>,>,>,,,,,>,,>,>,,,,,,,>,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,',,,,,,',,,,',,',,',',,,,,,,,',',',',,,',',,,',,',,',',',',',',',,',',',',',',,,',',',',',',',',',',',',,',','',',',','',','','',',''',','''',''',',',''''''''''''''','''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>>>>>;>;>;>>;>>>>>>>;>>>>;>>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>,>,>>>>,>,>,>>>>,>,>>,>>,>>,>>,>>,>,>,>,>,>>,>>,>,,,>>,>,>,>,>,,>,>,>,>,>,>,>,,,>,,,>,>,>,,>,>>,,,>>,,,>,,,,>,,>,,>,>,,>,,,>,,,,,,,,,,,,>,>,,,,,,,,,,,>,,,,,,,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,',,',,,',,,,,,,,,,,,',,',,,,,,,,,,',',,',',',,',,,',,',',,',,,',',',',',','',',',',',',',','','','','',',','',''',','','','','''',''''','''',''''''','',','','',''''','''',''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>>>;>;>>>>>>>>>;>;>;>>>>;>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,>>>>,>>>,>>>>>>>,>>>>>>>>,>>,>>>>,>>,>>,>>,>>,>>>,>>,>,>>,>>>>>,,>,>,>,>,>>,>,>,>,>,>,>,>,>,,>>,>,,>,>,,,,>>,,,>,>,>,>,,>,,>,,,,>,,,,,,>,>,>,>,>,,,,,,,,>,,>,,>,,,>,,,,>,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',',,',,,',,',',',',',,,,,',,,,,',,',',,',,,',,',',,,',,,',',,,',',',',',',',',,',',',',',',',','',,'',','','','',',',',','',',''',',','''''''''''''',''''''''''','''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>>>>;>;>>;>>>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>>,>,>,>>>>>>,>,>>,>>,>>,>>,>>,,>>,>>>,>,>,,,>,>>>,>>>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>>,,,,>,,>,>,,,>,,,>,,>,>,,>,>,,,,,,,,,,,,>,,>,,>,,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,',,,,,,,,,,,',,',,,,,,,,,,','',,',',,',,,,',,',',,',',,'',',',',,'',',',',',',',','',',',','','',''',''','','','','''',''''',''''''',''''''',','',','',''''',''''''',''',''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>>;>;>>>>;>>>>;>>>;>>>>>>>>;>>>>>;>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>>>,>>>>>>>>>>>,>>>>>>,>,>,>>>>,>>,>>,>>,>>,>>>>,>,>,>,>>>>>,>,>,>,>,>,,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,,>>,>,>,,>,,>,,>,>,,>,,,>,,,,>,>,>,>,>,>,,,,,,,,,>,,>,>,,,,>,,,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,',,',,,,',,,',,',,,,,,,',',',',,,,,,,',,,',,,',,',',,',',,',',,,',',,'',,,,',',',',',',',,',''',',',',',',',,'','','','',',''',',''',',','''',','''''''''''''','''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>>>;>>>>>;>>>;>>>>;>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>,>>,>>>>,>>>,>>>>,>,>>,>>>>,>,>,>>>>>>>,>>>,>>,>>>>>,>>,,>,>>,>>>,>,,>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,,>>,>,,>,>>,,,>,,>,,>,>,,,>,,>,,>,,,>,>,,,,,,,,,,,,,>,>,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',,,,,,,,,,,,,,,,,',,,,,,',,',,,,,,,,,',',',,',',,',',',,,',',,',',,',',',',',,''',',',',',',','','',,',',',','','''','',',',','',','','',',''''',','''','','',''',','''''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>;>>>;>;>>>;>>>>;>>>>>>>>>>;>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>,>,>,>,>>,>>>,>,>>,>>,>>,>>,,>>,>>>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,,>,,>,,>,,>,,>,,>,,,,>,>,,,,,,>,>,>,>,>,,,,,,,,,>,,>,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,',,,,',',,,',,',',',',,,',,,',,',,',,,,,',',,,',,',,',',',',,',',,,',',',',',',',',','',',''',',''',,',','','''','''',''','''',',''''','',''''''','''''',''''''','','''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>;>>>>>>>>>>;>>>;>>;>>>>;>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>>>>,>>,>,>>>,>,>,>,>>>>>>>>>,>>>,>,>>,>>,>>>,>>,>>>,>,>,>,>,>>>,,,>>,>,>,>,>,>,>,>,,>,>,,>,>>,,>,,>,>,>,,>,>,>,,>,,,,>,>,,,>,>,>,,,,,,,,,,,,>,,>,,,,,,,,,>,,,,,>,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,',,',,',,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,',,',,','',',,'',,',,',,,',',,',',',',',',',',',',',',','','',,','',,'''',','',',''',','','',',''''',','''''','','''''','''''',',''''''',''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>>;>>;>>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>>>,>>>>>>,>>>>>>>>>,>>>>>>>>>,>,>,>,>>,>,>>>,>>,>>,,>,>,>,,>>,>,>,>,>,,>>>,>,>,>,>,>,>,>,>,>,,>,>>,>,,>>,>,>,,>,>,,>,,,>,,>,>,,>,,>,,,,,,,>,>,>,>,>,,,,,,,>,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,,,,,,,,',,',',,,,',',',',',',',,',,',',,',,,',,,,,,',,,',',',',',',',',,',',',',',',',',',','',',',''',','',',,'''','',',',''','',''''',','''',',',''''','',''','',''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>>>>;>>;>>;>>;>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,>>>>>>,>,>,>>>>>>>,>>,>>>,>,>>,>>,>>>>>,>>>>,>>>,>,>>>>,,>>,>,>,>,>,>,>,>,>,>,>,,,>,,>,,>,,,,>,>,,>,,>>,,>,,,>,,,>,,>,>,>,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,>,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,,',,,,,',,,,,,,,,,,,,,,,,,',,,',,,',,',','',',',,',,',',',,',',',',',',',',',',',','',',',',,,',',''','',,,','','''','','',',',''''','''''''','''''''''''''''''''','','''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>;>;>>>>>>>>>;>>>>>;>>>;>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>,>>>>>>>,>>,>>>>>>,>,>,>>>,>>>,>>>>,>>>,>>,,>,>>,,>>,,,>>>,,,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>>,,>,,>,>,,,>,,,>,,>,>,,>,,,,,>,>,>,>,>,,,>,,,,>,,>,,>,>,,,>,,>,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,',,,,,',,,,,,,',,,',,',',',',',',',,,',,,',,',,',,,,',',,',,',,,',',,',',',,,',',',',',',',',,',',',''''',',,'','''',','',','','','','''',',''',',',''''',',',''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>>>>;>>;>>>>>>>;>;>>>>>>>;>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>,>>>>,>>>>>>>>,>,>>>>>>>,>,>,>>>>>>,>>>,>>,>,>>>,>,>,>>>,>,>>>,>>>>,,>>>,>,>,>>,>,>,>,>,>,>,>,,>,,>,>,,,>,,>,,,>,,>,>,,>>,,>,>,>,,,,>,,>,>,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,,,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,,,,',',,',',,',,,'',,',,',',',,',','',',,,',',',',',',',',','',''','',,,,''''','',',''','''',''','','','''''',''''''','','''''','''','',''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>;>>;>>>;>>;>>>>>>>;>>>>>>>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>,>>>>>>>>>,>,>>>,>>,>>>>,>,>>>,>,>,>>>,>,>,>,,>,>,>,>>,>,,>,>,>,>,>,>,>,>,,>>,>,>>,>,>,,>,>,>,,,>,,,,>,,,,,>,>,,>,,,,,>,>,>,>,>,,>,,,,,>,,>,>,,,>,,,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,,,',',,',',',',',',',',,,,',,,,',,,',,,',,',,',,',',',,,,',',',',',',',',',',','',',',',''''',',,',','',','',',',','',''''',',',''',',',''''''','''',''''''''',''''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>;>>;>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>>,>>,>>>>>,>,>,>,>>>>>,>>,>>,>,,>>>>,>>,>>,>,,>>,>>,>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>>,,,,>,,>,>,,>,>,,,>,>,>,>,,,>,>,,,,>,,>,>,>,,,,,,,,,,,,,,>,,,,,,,,,,>,,,>,,,,>,,,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,',',,,,,,,,,,,,,,,,,,,,,,,',',,',',,',',',,',',',,',,,',,''',,',',,',',',',',',',',,',',',',,',,','''','',''',,''',''',''',',''''''','''''''',',''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>;>>;>>>>>>>>>>>;>>>>>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>,>>>>>>>>>>,>>,>>>>>>>>,>,>>>,>>,>>>>>,>,>>,>>,>>>>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,,>>,>,>,,>,>>,,,>,>,>,,,>,>,>,,,>,>,,>,,,,,,>,>,>,>,>,,>,,,,>,>,,,>,,,,,,,,,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,,,',,,,,,,,',,,,,,,',,',,',',',',',',',',,,',,',,',,,,',',,,',',,'',,'',,,',',',',',',',',',',','','','','','','',,'','',,'',','''','','','',',',''',',',''''''','''',''',''',''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>>>;>>;>>;>>>>>;>>>>>>>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>,>>>>,>>,>>,>>>>>>>,>,>,>>>>>,>>>,>>,>,>>>>,>>,>,>,>,,>>,>,>,>,>>,>>>,>,>>,>,>,>,>,>,>,>,,>,,>,>,,>,>,,,>>,>,,,>,>,>,,,,>,>,,>,,,>,>,,,,,,,,,,,,>,,,>,,,,,>,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,,',,,,',,',,,,,,',,,,,,,,,,,,,,,,',,',,,',,',',,,',',,,',',,',,',',',',',',',',',',',',',',',',',',','',','',',''','''',',''','','','''''',''''''','',''''','''''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>>>;>>>>>>;>>;>;>>>>>>>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>>>>,>>,>>>>>>>,>,>>>,>>,>>,>>,>,>>,>>>,>,>>>,>>>,>,>,>>,,,>,>,>,>,>,>,>,>,>,>,>,>>,,>,>,>,>>,,,,,>>,,>,>,,>,>,,,,>,,>,,,,>,>,>,>,>,>,,,,,,,>,,,,,,>,,,>,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,',,,,,,,,',,,,,',',',',',',',,',,',',,,',,,'',,',',',,,',',',',',,,',',,',',',',',',','',',',',',',,''','',',','',,''',','','','''',',''',',',''''''',''''',''''''''''''',''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>>;>>>>>>>>>>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>,>,>>>>,>>,>,>,>>>>>,>>,>>>,>>,>>>,>>,>,>>>,>,>,>,>,>>,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,,,,>>,>,,,>,,,,>,>,,>,>,,>,,>,>,,,,,,,,,,,,,>,>,,,,,>,,>,,,>,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,',,',',,,',,,,,,,,,,,,,,,,',,',,,,',',,',,,',,,',',',,,',',,,',',',',',',',',',',',',',','','',''',,'',''','',''',''',','','',','''','''''''',',''''',''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>;>>;>>;>>;>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>,>>,>>>>>>,>>>>>>>>>>>,>,>>>,>>,>>>,>>,>>,>,>>,,>>,>,>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,,>,>>,>,>,>,>>,,>,,>>,>,>>,,,,,>,,,>,,,>,,,,,>,>,>,>,>,,,,,>,,>,,,,,,,,,,,,,,,,>,,,,,,>,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,',,,,,,,',,,',,,,,,,,,,,,,',',',',',',,',,',,,',',,,',,',',',',,,','',,',''',',',,',',',',',',',',','',',',',',,'',',',,',','',',','''','','''''',''',',',''''',','''',''''''''''','''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>>>>>;>>>>>;>>>>;>>>>>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>,>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>,>,>,>,>>>>,>>>,>>,>>>,>>,>>,>,>>>,>>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,,>,>,,>,,>,,,,>,,,>>,>,,>,,,>,>,,>,>,,,,,,,,,,>,,,,,,,,,,>,,>,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,',,,',',,,,,,,,,,,,,',,',,',,',,',,,',,',,',,'',,,,,',',,,,',',',',',',',',',',',',','','',''','','''''','',''''',',''','',',',''',''''''',''''''','''',''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>;>;>>>>>;>>>>;>>>>>>;>>>>;>>>>>>>>>>>>;>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>,>>,>>>>>>>>>>>>,>,>>,>>,>>,,>>,>>,>>,>>,>>,,>>,>>,>,>>>,>,>,>>,>,>,>,>,>,>,>,>,,>,>>,>,>,>,>,>,>,,>>,,>>,,,,,>,,>,>,,,>,,,,,>,>,>,>,,,>,,>,,>,>,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,',,,,,,',,,,,,,',',',',',,,',,,,,',,',,',',,',,',',,,'','',,','',',,',,',',',',',',','',',',',',',,'',',',',,'','',,',''',','''''''''','',',','''''','''',''''''''',''''''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>;>>>>>;>>>>;>>>>>;>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>>>>,>>,>,>,>,>>>>>,>,>>,>>>,>>,>>,>>,>,>,>>,>>,>,>>,,>,>>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,,>,,,>,,>,,>,,,,>,>,,,>,,,>,>,,>,>,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,',',,,,',,',,,,,,,,,,,',,,','',,',,',,,,',',',,',',,,',,',',,',,',',',,',',',',',',,','',','','',','''',''',','''',','''',',,',',',''''''''','','''','''',''',''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>,>>,>,>>>,>>>>>>>>,>>,>>>>,>>>,>>,>>>,>>,>>>,>>>,>,>>>,,>>>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,,>,,>,,>>,>,,,>,>,,>,,>,,,,,,,>,>,>,>,,,>,,>,>,,>,,,>,>,,,,>,,>,,,,>,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,,,,,,',,,,,,',,,,,,,,,,,,,',',',',',,,,',,,,,',,',,',',,',,,',,',,',',',,',','',',','',',',',',','',','',',',','',',,'',,'',',','''',','''''''''''',',',','''''','''''''''''''''''',''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>>>>>>;>>>>;>>>>>>;>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>,>>,>>>>,>>,>>>,>>>>>>>>>>>>>,>>>,>,>,>>>,>>>,>>>,>>>,>>,>,>,>,>,>>,,>>>,,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,,>,>,,>,,>,,,>,>,>,,>,,,>,,>,,,,>,,>,,>,>,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,',,',',',,,,,,,,,,,,,',',,,',',,',,',,,',,',',',',',',,,'',',',,,,',',,',',',',',','',',','',',',''','',''',''','',',''',',',',',','''''''''',','''','',','',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>;>>;>>>>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>,>,>>,>>>>,>>>>>>,>>>,>>,>,>,>,>>>,>>>,>>>,>,>>>,,>>>,>,>,>,>>>,>,>,>,>,>,>,>,>,>>,>,,>,>,>>,>>,,>,,>,>,>,>,>,,>,>,,>,,,>,,,,,,>,>,>,>,,,,>,,>,,>,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,',,',',',',,,,',',,,',,,',,',,',',,',,,',,,'',,,',,,'',',','',',',',',',','',',',','',',,'','',,'',,'','','',','','''''''',',',','''''',''''''''''''''''''','''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>;>>;>>>>;>>>>>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>,>>>>,>,>>>,>>>,>>>,>>>,>,>>,>>,>,>,>>,,>>>,,>>,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,,,>,,>,,>,,,>,,>,,,>,,,>,,>,>,,,>,>,,,,,,,,,>,,,,,,,,,,,,,,,,,>,,,,>,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,',,,,,,',,',,,',',,,,,,,,,,,',,,,,',,,,',,,',,',',,',,',',',',,'',',',,',',,',',',',',',',',,',',','',',''','',''',''','','','''','',',',',''''''''','''''','','''''',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>>>>>>;>>;>>>>>>>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>>,>>,>>>>>,>>,>>>,>,>>>>,>>>>,>>>,>>,>,>>>>,>,>>,>>>,>>>>,>>,>,>,,>>,>,>>,>,>,>,>,>,>,>,,>,>,>,>,,>>,>,,>,>,>>,,>,,>,>,,>,,>,,,,,>,,,,>,>,>,>,,,>,,>,>,,>,,>,,>,,,,>,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,',,,,,,,,,',,,,,,',,,,,,,',',',',,,',',,,'',',,',,',,',,',,',,,',,',',,',','',,',',',',',',',',','',''',',,',',',','',',',','''','',','','''''''''',',','''','',''''',',''''''''''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>>;>>>>>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>,>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>,>>,>>,>>>>>,>,>>>>,>>,,>>,,>,>,>,>,>>>,>,>,>,>>,>,>,>,>,>,>>,>,,>,,>>,,>,,>,,,>,,,>,>,>,,,>,>,,,>,>>,,>,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,',,,,',',,,,',,,',,,,,,,,',,,,,',,,,,,',,',,,,',',',',',,',,',',',',,',',,',',',',',',','',',',','''',''','',',','','',''','''','',',',',',''''''',''''''','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>>>>>>;>>>>>>;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>,>>>>>>>>,>>>>>,>>,>,>,>,>>>,>>>>>>>>,>>>,>,>>,>>,>,>,>>,>,>>>>,>>,>>,,>,>>,>,>,,>,>,>,>,>,>,,>,>,,>>,,>,>,>,>,>,,>,,>,,>,>,,,,>,>,,,,>,,,,,,>,>,>,,,>,>,,>,,>,>,>,,,>,,,,,>,,>,,,,,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',,,,,,,,,,',,,,',',',,,,',',,',',',,',,',',,,',,',,',',,',',',,',',','',',',',',',',','',',',',,,',',',',''','','','','',',''''''''''''''',',''''',',''''',''','''''','''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>;>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>,>>>,>,>>>>>>>>>>>>,>>,>,>,>,>>,>,>>>,>>,>,>,>>,>>>,>,,>>,>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,,>>,,,>,>,>,,,>,,>,>,,>,,,,>,>,,>,,>,>,,>,>,>,,,,,,>,,,,,,,,,,,,,,,,>,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,',',,,,',,,,,,,',',,,,',,,',,',,',,,',',,',,',,',',',,,',',,',',,',',',',',',',',,',',''''','',''',',',','','','',''',',,',',',',',''''','',''''',''''''''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>>>>>;>>>>;>>>>>>>>>;>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>,>,>,>>,>>>>>>>>,>>>,>,>>,>>>>>>,>>,>,>>>,>,>,>,>,>,>>,>,,>>,>,>,>,>,>,>,>,>,,>>,,>,>,>>,,>,,>,>,,>>,>,,,>,,,>,,,,,,,,,,,>,>,,,>,,,>,,>,>,,,>,,,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,,,,',,,,,,',,,,',',',,,,',',,,',,',,',,,',,',',',',',,,,',',',','',,',',',',',',',',''','',',,,',','',','',''',',','',''',''''''''''''''',','''''''',''''',','''''','',''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>;>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>,>>>>>>,>>,>>,>>,>>>>>>>>>>>>,>,>,>,>>,>>>>,>>>,>,,,>>,>,>,>,>>,>>,>,>>,>,>,>>,,>,>,>,>,>,>,>,,>,>,,>>,,,>,,,>,>,>,,>,>,,,,>,,>,>,,>,>,>,>,>,,,,,>,,,,>,,,,,,,,>,,,,,,,,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,',,',,',,',,,,,',,,,,,',,,,,,,,',,,,,',',,,',,,',',',,,',,,',,''',,',',,',,,',',',',',',',',',,',',',''',','',','','',,''''',''',,'',',',',',',',''''','','''''',','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>>>>>;>>>>>>>>>>;>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>,>>>>>>>>>>>,>,>,>,>>>>>>>>>>,>,>,>>,>,>>>>,>,>>>,>>>,>,>,>>,>,>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>>,,>,>,,,>,,>,,,>,>,,>,,,,>,,>,,,,,,,,>,>,,,>,,,,,>,,>,,,,,>,,>,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,',,,',,',,,',',',',,,',',,,,,',,',',,,,,'',,'',,',,,,'',',',,'',',,',',',',',',',','',',',','',','',','',''',,','',''','','''''''''''',',''''','','''''''','''''''''',''',''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>>>>;>>>>>>>>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>,>>>>>>>>>,>>,>>,>>>>>>>>>,>,>,>,>,>>>>>,>>>>,>,>>>>,>,>>,,>>>,>,>,>>,>,>>,>,,>,>,>,>,>,>,>,>,>,,>,>,,>>,,>,>,>,>,>,>,,,>,,>,>,,,>,,>,>,>,>,,,,>,,,>,,>,,,,,,>,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,,,,',,',,',',,,,,,,,,,',,,,,,,,',,,,,','',,',,,',',',,,',,,',',',',,',,'',,',',',',',',',','','',',''',',','','','',',',''''',',','','',',',',',',''''','''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>;>>>>>;>>;>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>,>>,>>>>>>,>>,>>>,>>>>>>,>,>,>,>>>>>>>>>>>,>,>>,>,>>>,>,,>>,>,>>>,>,>,>,>,>>,>,,>,>>,>,>,>,>,>,>,,,>,>,>,>,>,,,>,,>,,,,>,,>,>,,>,,>,,>,,>,,,,,,,,,,>,,,>,,,,,,,,>,,,,>,,,,,,,,>,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,',,',,,,,,,,,,,,',,',,',,,,,',',',,,',',,,,,',,,',,',,,'',,',',,,',,',',',,',',',',',',',',',',,',,',',,'',',',',','','','',,','''''',''','''''''''''',','','',',''',','''''',''','''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>>>>>>>,>,>,>,>,>,>>>,>>>,>,>>>>,>,>>,>,>,>,>>>,>,,>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>>,,>,,>>,>,>,,,>,,,>,,>,>,,,>,>,>,>,>,,,>,,,>,>,,>,,,>,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',',,,,,,,',,,,',',,,',',,,,'',,,',',,'',,',,',,'',,',,',',',',',',','',''',''',,','','','',',''','''',',',''','',',',',',',''''''''''''''''''''',','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>,>>>>>,>>,>>,>,>,>>,>>>>>>,>,>,>,>>>>>>>>,>>>,>,>>,>>,>>,,>>,>>,>,>>>,>,,>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,,>,,>,,>,,,>,,,>>,,,>,,>,,,,,>,,,,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,>,,,,>,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,',,,,,',,,',',',,,,,,',',',,',,',,,',',,,',',,,,',,',',,,',',',',,,',',',,,',',',',',',,',',',',''',','','',''',,'',','',''',',',''''''''''''',','','','','','','''''''''',''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>;>>>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>,>,>,>>,>>,>>,>>,>>,>>>,>>,>>>,>,>,>>,>>,,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>>,>,,>>,>,>,,>>,,,>,>,,,,>,>,>,>,>,>,>,>,,,,,,,,>,,>,,>,,>,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,',,,,',,,,,,,',',,,,,,,,,,',,',,',,',,',,',',',',,',',,',,','',',',,''',',',',',','',',',',',',',',',',',',''',','','','','''',',',',',','''''''''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>;>>>;>>>>>>>>>>>>>;>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>,>>,>>>,>,>,>,>,>>>>>>>>>,>>,>>,>>,>>>,>>,>,>,>,>,>>>,>>,>,,>>,,>,>,>,>,>,>,>,>,>,,>,>,>,,>,,,>,>,,,,,>,>,,,>,>,,,>,>,,>,,,,,,,,,,,,,,>,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,',,,,,,',',',',,,',,',,',,',,',,',',,,,',',,',',,',,',,',',,,',',',',',',,',',','',','',''',''',',',''','','','',','''''''''''',',',','',',''''','''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>;>>;>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>,>>>,>>,>>>,>>>>>>>>>>>>>>>>>,>,>,>,>>>,>>>>>,>>,>>,>,>>>,>>,>,>,>,>,>>>,>,>,>>,>,>,>,>,>,>,>,>,>,,,>,>,>,>,,>,>,>,,,>,>,,,,>,,>,,>,,>,>,>,>,>,>,>,,,,,,>,,>,,>,>,,,,,,,>,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,,',,,,,,,,,,',,,,',,',,,,',',,,,,,,,,',,,',,',,',,',,',,,','',,,',',,'',',',',',',',',',',',','',''','',',',',',',',','',',','','','''''',',',',',','''''''''''''''',''''','''''''''''''''','''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>;>>;>>>>>>>>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>>,>,>,>>>>>>>>>,>,>>,>,>>,>>,>>,>,>,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>>,,>,>,>,,>,,>,,>,,>,,,,,,,,,,,,>,>,,,,,,,,,,,,>,>,,,,,>,,>,,,,,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,,,,',,,,,,,',,,,,,',',',',,,',,',,,,,',,',,,',',,,',',,,',,,',',',',',',',',',',',',,',',',','',',',''',','','','',''''',,',','''''''''''',',','',','','''','''',''''','''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>;>>>;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>,>>,>>>>>>,>>>>>>>,>,>,>,>>>>>,>>,>>>,>>>,>>>,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,>>,>,,,>,,,,,>,,,>,,>,,>,,>,,>,,>,>,>,>,>,,,,,,,>,>,,>,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',',,,,,',',,,,,,,,,,',,',,',',,',,,'',',,'',,','','',',,',',,,',',',',',',','',',',',',,',','','','','','','',',''''','',',',',',',''''''''''''''','''''''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>;>>>>;>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>,>>>>>>>,>>,>>>,>,>,>>>>>>>>>,>,>>,>>,>>,>,>>,,>>,>,>,>,>>,>>,>>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,,>,>,,>,>>,,>>,,>,,>,,>,,,>,,,,,,,,,,,,>,>,>,,,,,>,,,,,,>,,,>,>,,,,,,,>,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,,,,,',,,,,',',,,,,',',',',',,',,,',,,',,,',,,,,',,,',',,,,,',',',,,''',,',',',',',',',',',',','','',',','',',','','','',',',''',''''''''''''',','','',','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>>>>>>>>>>>>>,>,>,>,>>,>>,>>,>>,>>>,>,>>,>,>>>,>>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,,>,,>,>>,>,>,,>,>,,>,,>,,,>,,>,,>,,>,,,>,>,>,>,>,,,,,,,,>,,,,,,,>,,,,,>,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,',,',,,,',,,,',,,,,,,',,,,,,,,,,,,,,,',,,',,,',',','',,',,',,','',,,',',',,,',',',',',',',','',''','',',','','',''','',',''','''',',''',',',',',','''''''''''''','','''','','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>>>>>;>>>>>>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>,>>>>>,>>,>>>>>>>>,>>,>>,>,>,>,>>>>>>>>>>>>,>>,>>,>>,>,>>>>,>>>,,>>,>>,>,>,>>,>,,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,>,>,,>,>,,>,,>>,,>,,>,,,>,,>,>,,,,,,,,,>,>,>,,,>,,>,>,,,,>,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,',,,,',,,',',',',',',',,',',',',,,',,,',',',,',',,,',',',',',',',',',',',',',,',',,',',','',',',',',',','',','',','','',''''''''''''','','',''','''''''''''''''''',''''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>>>>;>>>>;>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>,>,>>>>>>>>,>>>>>>>>,>,>,>,>,>,>>,>>,>>,>>>>,,,>>,,>>>,>,>>,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,,,>>,>,,>,>,,>,,,>,,>,>,,>,,>,,>,,,>,,,,>,>,>,>,,,,,,,>,,,,,,,,,>,,,,,,,,,>,,,,,,,,>,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,',,',,,,,,,',,',,,,,',,,,',,,,,,,,,,,,,,',,,',,,',,,,',,',,,',,',,'',',',,',',',,',',',',',','',','',',',',','',''',',''','''','''',''',',',',',',',','''''''','''',''''',''''''''''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>>>>;>>>>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>,>>,>,>>>>>>>,>,>>>>>>,>>>>>,>>>>>,>>,>,>>>>,>>>,>,>>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>,>,>>,,,>,>,,>,>,>,>,>,>,,,>,,>,,,,>,>,,>,>,,,,,,>,,>,>,>,,,,,>,,>,,,,,>,,,>,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,',,,,,,',,,,',,,,',,,,',',',',',',',,',,,',,',',,',,'',',',',,,',,',',',',',',',',',',',',',','','','',',',','''',',',','',',''',''''''''''''''''',',',''''',''','''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>,>>,>>>>>,>,>>>>>,>,>>,>,>>>,>>>,>,>>,>,>>,>,>>,>,,>>,>>>,>>,>,>,>,>,>,>,>,>,,,>>,>,,>>,>,,,>,>,,,>,>,,>,,>,>,,,>,,>,,>,>,,,,>,,,,,,,>,,,,,,,,>,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,,',,,',,,,',,,,,,,,,,,,,,',,',',,',,,',',',,,,',,,',','',,',,',,',',',',',',',','','',',',',','''',',,'',','',','',','',',',',',',',',',''''''',''''',''','''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>>>>>>>;>>>>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>>,>>>>>>,>,>>>>>,>,>,>>>>,>>,>,>>>,>>,>,>,>>,>>,>,>>,>>>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,>>,,,,>>,,>,>,,>,>,,,>,,>,,>,,,,,>,,,>,>,>,,,>,,>,>,,,,>,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,',,',,,',,,,,',,',',',',',',',,,',,,',,',',,,',,'',,',',,',,',',',',',',',',',',',',,',',,'','',',',,',''',',''','''','''','',''''''''''''''''''',''',','''''''','''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>;>>;>>>>;>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>,>>>,>>>,>>>,>>,>>>>>>>>>>>,>>>,>,>>>>>,>,>>>>>>>>,>>>,>>>>,>,>>,>>,>>,>>,>>>,,>,,,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,,>>,>,,>,>,,>,,,,>,>,,,>,,,>,>,,,>,,,,,,,>,,,,,,,,,>,,,,>,,,,,>,,,>,,>,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,,,,,,,',,',,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',',,',,',,,,'',,',,,',',',',',',',',',',',',',',',','',',''',,',','',''',',''',',',',''',','','',',',',',',',',','''''''''','''''''',''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>,>>>>>>,>,>,>,>,>,>>,>,>>>,>>>,>>,>,>>,,>>,>>>>,>>,>>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,,>,,>,,>,,>,>,,,,>,,,>,,,,,>,,,>,>,>,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,',,,,,,,,,,,',,',,',,,',',',',',',',',',',,,',,',,',',,,',,'',,',,,',',,,',',,,',,',',',',',',',',',,,'','',','',','',,'',',''',',''','','''''''''''''''''','','','''',','''''''','','','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>>>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>,>>>>>>>,>,>>>>,>>,>,>,>>>>>>>>>>>>,>>>,>,>>,,>>,>,>>,>>>>,>,,>,>,>,,,>,>,>,>,>,>,>,>,>,,,>,>>,,>,>,,>,,>>,>,>,,>,>,,>,,>,>,>,>,,>,>,,,>,,,,,,,,>,>,,,,,,>,,,,,,,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,',,,',,,',',,',,,',,'',,,''',,,''',',',',',',',',','','''',',','',',''',''',''',','''','',''',',',',',',',',''''''''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,>>,>>>>>>>>,>,>>>>>>,>>>,>>>>>>>>,>,>,>,,>,>>,>>>>,>>,>,>>,>,>>,,>>,>>>,>,>>>>>>,>,>,>,>,>,>,>,>>>,,,>,>,,>,>,>,,,,,>,,>,,,>,,>,,>,,,,,>,,,,,>,,,>,>,>,,,,,,,,>,,,,,,,>,,>,,>,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,,,,,,',,,',,,,,',,,,,',,',,',,,',,',',',',',,,,,',,',,,',,,',,',',,',',',,,'',,,,'',,,,',',',',',',',',',',',,'',',',,''',,'',,'',',''',','','',','''''''''''''''''','',','''''''''','',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>>,>,>,>,>>>>>,>>>>>,>>,>,>>,>>>,>>>>,>,>>,>,>,>,>,>,,,,>,>,>,>,>,>,>,>,,,,>>,>,>,>,,>,,>>>,>,>,,>,>,,,,>,,>,>,,>,,>,,,>,,,,,,,>,,>,,>,,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',',,,,,',,,',,,,,,,,,,,,,',',,',,,',',',,',,',,',',,,',',,'',',,'',',',',',',',',',',',','',,','','',,''',''',','','''',''','''',',',',',',','',''''''''','',''''''''''','''''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>;>>>>;>>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>>>>,>>>>,>>>>,>>>>>>>>>,>,>>>,>,>,>>,>>>,>>,>,>,,>,>,>>,>>,>,>>,>,>>>>>,>,>,>,>,>,>,>,>>,,,>,>,>,>,,>,,,,,,,>,>,,,>,>,,>,>,,>,,,>,,>,,,>,>,>,,,,,,,,>,,,,,>,,,>,,,,,,>,,,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,',,,,,,,,,,,',,,,,,,,',',',',',',,,,,',',',,,,,',,',',',,,'',',,',,',',',,',,,',',',',',',',',',',''',','',''',','',,''','',,'',','',','''''''''''''','',',''','''''',''''''','''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>,>>>>>,>>>>,>>>>,>,>,>>>>>>,>>>>,>>,>>,>>>,>,>>>>>,>>>,>,,>,>,,>,>,>,,,>,>,>,>,>,>,>,,>,,>>,>,>,>,>,>,>,>,>>,,>,>,,,>,,,,,,>,,>,,,>,,,>,,,,,,,>,>,,,,,,>,,,,,>,,,>,,>,,,,>,,,,,,,>,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,,,,,,,,',,,,',,',,,,,,,,,,,,,,',',,,,,,',',',,',,,,,',',,,,',,'',,',',',',',',',',',',',',''',',,,',',,',','',',''',,'',''',''','''',',',',',',','''''''','''','''''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>,>>>>>>,>,>,>>,>,>>,>>,>>,>,>>,>,,>,>,>,>>>,>>,>>>>,>,>>,>,>,>,>,>,>,>,>,>>,,>,,,>,,>,,>,,>,,,>,,,>,>,,>,>,>,,>,,,>,,,>,,>,,>,>,,,,>,,>,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',,',,,,',,,,,,,',,',',',',',,,,',',--*-->,,',,'',',,','',,',,',',',',',',',',',',',',',',',''''''',''','',','',,''','',','','',','''''''''''''','','''''',''',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>>>;>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>,>>,>>,>>>,>>>>,>>>>,>,>>>>>>>>>>,>>,>>,>>,>>>,>>,>>>,>>,>>,>,>,>,>,,>,>>,>,>,>,>,>,>,>,>,>,,,>,>,>,>,>,>,,>,,>>,,>>,,,>,,,,>,,>,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;**-,,',,,,,,,,',,,,',',,,,,,,,,,,,,,,',',,,=*&&&&&&-,,',,>=*-,,,,',',',',',,,',',',',',',',',',',',',',,',,',',,','''',''',,'','''','',''',',',',',',',''',''',','''''''',''''''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>>;>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>,>,>>>>,>,>,>,>,>>,>>>>>,>>,>,>,>>>,>>,>,>,>>>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,>>,,>,>,>,>,,>,>,>,,>,>,,,>,,>,>,,>,,,>,,>,,,>,>,,,>,>,>,,,>,,>,,>,,,,,>,,>,,,>,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,;&&&&;,,',,,,,,,,,',,,,,,,',',',',',',,,,,,>*%&&&%&&&>,',,,*&&&-',',,,',,,','',,',,,',',',',',',',',',','','',','''',,,'',,''','',',''','','''''''''''''',''''''''''','',''''',''''''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>,>>,>>,>>>>>>>>>>>,>,>>>>>>>>>,>>>,>,>>>,>>>,>>,,>,>,>>,>>,,>,>>>,>,>,>,>,>,>,>,>,>,>,,,>,,>>,>,,>,,>,,>,>,,>,,,>,>,,>,,,>,,,>,,>,,,>,,,,,>,,,,,,,>,,,,,,,,,,,,>,,,,,,>,,,,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,*&&&&*,,,,',,',,,,,,',,',,,,,,,,,,,,,',',',&&&&%*&*&*,,','-&&&&&',,'',,'',',,'',',',',',',',',',',',',',,','',',',,'''',''',,'',''',','','',',',',',','''','',',''','''''''''''',''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>>,>>,>>>,>>>>>>,>>,>>>,>>>>>>,>,>,>,>>>,>>,>,>,>>,>>,>>>,>>>,>,>,>>,>,,,>,>,>,>>,>,>,>,>,>,>>,>,>,,,>,>,>,>,>,,,,>,>,>,,>,,>,,>,,>>,,>,,,>,,,>,>,,,>,>,,,,,,>,>,,>,>,,,,,,,,,,,,,,>,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*%&&&*,,,,,,,,',,',,,,,,',,',',',',',,,,,,=&&&&=,,,,,',,,,-&&&&*,',,',',,',,',,,',',',',',',',',','','''',','',',''',','',''','',','''','',''''''''''',',''''''','''','','',''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>;>>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>>,>>>,>>,>,>,>>>>>>>>,>,>,>>>>>>,>>,>>,>>,>,>>>,>,>>,>>>>,>,>>,,>,>,>,>,>,>,,>,>,,>>,>,>,>,>,,>>,,>,,,>>,,>,,>,>,,,,>,,>,,,>,,,,,>,,,,,,>,,>,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',>&&&&;,,,,,,',,,,,,',,,,,,,,,,,,,,,,',','>*&&&=,,',,,,'',,,&&&&-,,',,',',',','',',',,',',',',',',',',',,',',,','',','',',',','''''',','','',',',',',''''',','''''',''','''''',''','''',''','''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>,>,>,>,>>>>>,>,>,>>,>,>,>,>,>>,,>>>,>,>,,>,>>,>,>>,>,>,>,>,>,>>,>,>>,,,,>,,,>,>,,,>,>,>,,,>,,>,,,,>,>,,>,,,>,,,>,>,,,,>,>,,,,,,,,>,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,>*=;,',,',,,,',',,,,',,',',',',',',,,,,,-&%&*,',,',',,,',',=*;,',,',',,',',,,',,','',',',',',',',',','''',''',','',',''',''',',',','',''',''''''''',',''''','',''''''''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>>>,>,>>,>,>>>,>>>,>>,>>,>,>,>>>>>>>>>>,>,>>>>,>>,>>>,>>>,>>,>>>,,>>,>>>,>,,>,>,>,>,>,>,>,>,>,,,>,,,>>>,>,>,>,,>>,,,,>,>,>,>,,>,>,,,,>,,>,,,>,,,,,>,>,,,,,,>,,>,,,>,,,,>,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',',,,*&&&-,,',,,',',',',',,,',',,',',,'',',',',,',',',',',',',','',,,',',','','',',,'',,'',''''','','',',',','''''',''''''''','',''','',''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>>>>,>,>,>,>,>>,>>,,>>>,>>,>>,,>>,>>,,>>>,,>,>,>>>,>>,>,>,>,>,>,>,>,>,>,>>>,,,>,>,>,>,,,>>,>,,>,,,,,>,,,>,>,,,>,,>,,,>,>,,,,,>,,>,,,,,>,,,,,,,,,,>,,,,,,,,>,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,',,,,,',,,',,,,',',,,',',',',,,,,','&&&&>,',,',,,,',,',,',',,',',',',,,',',','',',',',',','','',,''',',','',',''''',''',''',',''',','''''''',',','',''','',''''','''''''''''''''''''',''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>,>>,>>,>>>>,>,>>>>>>>>>>>,>>,>>>,>,>>,>,>>>,>,>>>>,,>>>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,,,,>>,>,>,,,>,>,,,>,>,,>>,>,,>,,,>,>,,>,,,>,,,,,>,>,,,,,,,>,,,,,>,>,,,,,,,,,,,>,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',,,,',,,,,',,,',,,,,,',,,,,,,,',',,,,'&&&&>,,',,',',,',,',',,',,,',','',',,',,',,',',',',',',',','',,',','',''',',,',',',',','',','''',',','''''''',''','''''','''''','''',''''',''','''''''''=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>,>>>>>>,>>>>,>>>>>,>,>,>,>,>>,>>,>,>>>>>,>>,>,>>,>,,>>,>,,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>==-=;>,>,>,,>,>,>->,>,,,,,>,,>;-==->-===>,>,>,,,,>,>;-,,,,,>,,,,,,-=-=;;===-,>,,,,,,,,,,->,,,,,,,,,,,,----,,,,,,,,,,,,',,,,,,,>>>>;>>>,,,,,',>>>>>,,>=****=>',',',,,,'>>>>&&&&->>>>,,','>>>>>>>>,,',',,,>>>>',',;=***=;,',',',',>-****=;,,'',',',,','','',''',''','''',','',-****=->','''''''','>>>>'','>=***=-'','''',;=***=->''*&*'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>,>>>,>>>>>>>,>>,>,>>>>>>>>>>>,>>>>>>>,>,>>,>>,>,>>,>>>,>>,>>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,>,*&&%&,,>,,>,,,>,*&;,,>,>>,,>,,*%&&=,&&&&*,,,,>,,,,,,&&,>,,,,,>,,,>&&&&;;&&&&-,,,>,,,,,,>&*,,,,,,,,,,,-&%&&,,,,,,,,,',,,,,,,,,,&&&&&&&&',,,,,,*&&&*,*&&&&&&&&&-,,,,',,,*&&&&&&&&&&&&-,,,'*&&&&&&&>,',','-&&&&',;*&&&&&&>,',',',;*&&&&&&&&&*>,'','''','','',','',''',',''',>=&&&&&&&&&*>,'','',''>&&&&>'>=&&&&&&-''''''=*&&&&&&&&==&&&*,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>;>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>>>,>,>,>,>,>>>,,>,>,>>>,>,>,>>,>,>>,>,>,>,,>,>>,>,>,>>,>,>,>,>,>,>,>,>,,>,=%&&&>>,>,,>>,>>&&*,>,,,,>,,>;&&%&;,*&%&&,>,,,>,>,,-&&-,>,>,,,>,,-&%&&,,&&%&*,,,,,>,,,,*&&>,>,,,,,,,,*&&&*,,,,,',,,,,,,,,,,,,'&&&&%&&*,,,',,,*&&&&*&&&%&&&&&&&*>',,,',*&&&&%&&&&&&&-'',,*&&&&&&&>,,',',-&&&*,;&&&&&&&*'',',',=&&&&&&&&&&&&&=','',','',','',''',',',''','-&&&&&&&&&&&&&='''''''',&&&&>>*&&&&&&*,''''>*&&&&&&&&&&&&&&*;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>,>>,>>>>,>>>,>,>,>,>>>>>>>>>>,>>>>>,>>,>>>>,>>,>>>,>,>>>,>>>,>>,>,>,>,>,,>,>,>,>,>,>,>,>,>,,>&&%%=,,>>,,,,>=&&&,>,>,,,>,,=%&&&,,-&&&&;,>,,,,,,,*%&*,,,,,,,,,,*&&&=,,=&&&&,,,,,,,,,,&&&=,,,,,,,,,,&&&&;,,,,,,,,,,,,,,,,',,,*&%&&&%*,,,,,,,*%&&&%&&*&&&&&&&&&&,,',,,*&&&&&&&%&&&&=,,',*&&&&&&&>',',',-&&&&;&&&&*&&&;,',','*&&&&&&*&*&&&&&&=',','',''',',','''','',','=&&&&&*****&&&&&=','',''>&&&&>*&&&***&-','',*&&&&&*=**&&&&&*,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>,>>>>>>>>,>>>,>>>>>>>>>>>>>,>,>,>,>,>,>,>,>>,>,>,,>>,>>,,>>,>,>,>,>,>,>,>>,>>,>>,>,>,>,>,>,>,,>,>,>>,&&&&&>,,,,>>,,&&%&=,,,,>,,,,&&%&=,>,&&%&*,,>,>,>,;&&%&;>,,>,,>,>&&%&;,,;&%&&->,,,,,,,-&&&&,,,,,,,,,;&%&&,,,,,,,,,,,,,,,,,,,,,=--*&&&&,,,,',,*&&&&&*;,',,-*&&&&&*,,',,--=-&&&&*-=-->',,'-=-=&&&&>,',',,-&&&*&&&=,,'>*,',','*&&&&*;,,',>=&&&&&='',',',,',''',',',''''''-&&&&*-,',',-*&&&&;'''',',&&&&*&&=,'',=>''''=&&&&=>''',-&&&&*,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>;>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>,>>>>,>>>,>>,>>,>,>>>>>>>>>>>>>>>,>>,>>>>>>>,>,>>>>,>>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,>,,>,,,>-%&%&>>>,>,,>-&%&&&,>>,,>,>>&&&&>,,,*&&&&,,,,,,,,=&&&&*,,,,,,,,-&&&&,,>,&&&&*,,,,,,,,*%&&&-,,,,,,,,*&&&=,,,,,,,,,,,',,,,,,,,,,,,-&&&*,,',,,,*&%&&;,,,,,',,-&&&&&;,,,,,,,'&&&&-,,,,,,',,',,>&&&&>,',,',-&&&&&&;,',',',',',=&&&&=,'',''''>*&&&*,','''''',',''','',',,',*&&&*>','''',>*&&&*,,''''>&&&&&&-'''''''''';&&&&*'''''''-&&&&-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>,>,>,>,>,,>,>>,>>,>,>,>,>>,>,,>>,,>>,>,>>>,>>,>>,>,>>,>,>,>,>,>,>,,>,>,>>,,>*%&&=,,>,,>,*&&&%&;,,,>,,,*&%&*,>,>;&%&&;>,>,>,,&%&%&&,,>,>,,,&&%&=,,,,=%&%*>,,,>,,;&&&%&*,,,,,,,>&&%&;,,,,,,,,,,,,',,,,,',,,,,=&&%*,,,',,,*&&&*',,',,,,,'-&&&&*,,'',','&&&&-',',',',',,';&&&&>,,'',,-&&&&&-,',',',',',,*&&&=',',',,',,>*&&&='',,',,'','',''','''',=&&&&-'''','''';&&&&-'','',&&&&&=','''''',''=&&&*,''''''''*&&&*'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>,>>,>,>>,>,>>,>>>>,>>>>>>>>>>>>>>>,>>>,>>>,>>,>,>>,>>,>>>,>>>,,,>>,>,,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,*&%&&,,>,>,>&%&%&&*>,,>,>,&&&%-,,,,>&&%&=,,,,,,-&&&&&&=,,,,,,>&&&&;,,,,>&&&&-,,,,,,*&%&&%&;,,,,,,-&&&&,,,,,',,,',,,,,,,',,,,',,-&&&&,,,,,,,*&&&*,,,,',',,',*&&&&>,,,,',,*&%&-,,,,',,,',',>&&&&>',,'',-&&&&*',',',',',',=&&&&','','','','=&&&*,''','','','',''',',''*&&&*',','','','*&&&*'''',,&&&&*,''','',''''*&&&='''''''''-&&&&,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>>,>,>,>,>,>,>,>>,>,>>,>>,>>>>,>>,>>,,>>,>,>>>,>,>>,>>,>,>,>,>,>,>,>,>,>,,>,>,>,>-&&%&;,>,,>=&&&&%&&>>,,>,;&%&&>,>,,,=&&&&>,>,>,*%&%&%&&,,,>,,=&%&&,,,,,,&&%&*,,,,,,&&&&&&&*,,,,,,*&&&=,,,,,,,,,,,,,,,,,,,,,,,,,-%&&*,,,',,,*&%&*,,',,,,',,,;&%&&-',',,',&&&&-',',,',',,,';&&&&>,',,',-&%&&;,',',',',','&&&&-,',,',',',',>&&&&,,','',','','',',''',;&&&&;''''''','',-&&&&,,'''>&&&&='''''''''','*&&&-'''''''''>*&&&,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>,>>>,>,>>,>,>>>>,>>>>>>>>>>>>>>,>>>>>,>>,>>,,,>>,>>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,>&&&%=,,>,>&&%&*&&&=,,,,>*&&&*,,,>,>;%&%&;,,,,>&&&&*&&&;>,,,>&&&&=,,,,,,=&&&&,,,,,-&%&&&&&&,,,,,>&&%&;,,,,,,,,,,,,,,,,,,,',,,,,-&&&&',,,',,*&&&*,,,,',,,,',,*&&&*,,',,,'*&&&=,,'',',,'',,>&&&&>,',',,-&&&&,,',',',',',>&&&&>''','',',',',*&&&>',',''',''','''','''=&&&*,',',','''''>&&&&;'',',&&&&>''''''''''''*&&&;'''''''''>&&&*>''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>,>>>,>>>>,>>>>>>>>>>,>,>>,>,>,>,>,>,>,>>>,>,>>,>>,>>>>,>,>,>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,*%&&&,>,,-&%&*,&%&&>,>,,&%&%-,>,,,,,&&&&=>,>,*&%&--&%&*,,,,>&&&&>,>,,,,>&%&&-,,,,*&&&>=%&&-,,,,-&&&*,,',,,,,,,,,,,',,,,,,',,,,-%&&&,',,,,,*%&&*,,',,',',,,,*&&%*,,,',,,*%&&-',,,,,',,,',>%&&&>',,','-&&&*,',',',',','-&&&*--------------&&&&-''',','',','',','','*&&&*,''''''',',',*&&&-'''',&&&&>',','','''''*&&&-''''''''',&&&&,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">;>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>>>>>>,>,>,>>,>>,>>,>,>>,>>,>>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,,>,>,>,,>>,>,;&%&&>>,,*&&%-,=&&&-,,,-&&&&,,,>,,,,=&%&&,,,,&&%&>,*%&&>,,,*&%&*,,,,>,,>*&&%*,,,;%&%*,>*&%&,,,,*&%&=,,,,,',,,,,,,,,,,',,,,,,',-&&&*,,,,,,,*&&&*,,,,,,,,',,,*%&&*,',,',,*&&&-,','',,'',,'>&&&&>,',',,-&&&*,',',',',','=&&&&&&&&&&&&&&&&&&&&&&-',''','','',','','',*&&&*',',','''''''*&&&*',''>&&&&>'''''''','''*&&&*''','''''-&&&&,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>;>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>,>>>>,>>>,>>,>>>>>>>,>>,>>,>,>,>,>,>,>,>,>>>>>,>>,>>>,>,>>,>>,>>,>>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,&&%&=,>>&%&&,,;%&%*>>,*&%&*>,,,>,>,;&&&&;,,-&&&=,,-&&&=,,,&&&&-,,,,,,,,=&&&&,,,=&&&-,,*&&&;,,>&&&&>,,,,,,,,,,,,,,,,,,,,,,,,,,=&&&&,',',,,*&%&*',',',',,',,*&&%*,,',,,,&&&&-,',,,',,,',,>&&&&>',',',-&&&&',',',',',',*&&&&&&&&&&&&&&&&&&&&&&>,',',','','''','',''*&&&*''''''','',',*&&&*'',',&&&&>''''''''''''=&&&*,''''''''=&*&*'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>>>,>>>>>>>>>>,>>,>>>,>>>>,>>>>>>>>>>>>>>,>,>>,>>>,>>,>>,>,>,>,>>,>,,>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,>,,>,>>,>,,>=&%&&,,*&&&=>,,*&&&;,>&&&&-,>,,,,,,>&&%&=,,&&%&;,>,&&%*>,;&&%&>,,,,,,,,>&&&&;,>&&%*,,,;&&&*,,=&%&*,,,,,,,,',,,,,,,,,,,',,',,,-&%&*,,,,',,*&&&*,,,,,,,,,,',*&&&*,,,',',*%&&-,,'',,'',,',>&&&&>,,',',-&&&*,',',',',','*&&&&******************,'','''','',','','',,*&&&*',','''',''''*&&&*''''>&&*&,''','''''',';&&&&=''''''';&&&&-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>,>>>>,>,>,>,>,>,>,>>>,>>>,>>,>>,>>,>>>>,>,>>>>,>>,>>,>,>,>,,>,>,>,>,>,>,>,>,,>,>,>,,>,>,>;&&&&>,&%&&,,,>-&%&*,-&%&&,,,>,>,>,,=&&&&,;&&&*,,,,*&&&-,=%&&*,,>,>,,,,,*&%&*,=&&&=,,,,*%&*>,&&&&-,,,,,,,,,,,,',,,',,,,,,,,,,=&&&&,,,,,,,*&%&*,,',',',',,,*&&&&',',,,'&&&&-',,,',,',',,>%&&&>',,','=&&&*',',',',',',*&&&*,,',','',''''',''',',',',''','''','''''*&&&*''''','''',',*&&&*,''',&&&&>,''''',''''''=&&&&=''''';&&&&*,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>,>>>>>>>,>,>>,>>>>>,>,>>>>>>>>>>>,>>,>>>,>,>,>>,>>,>>,,>,>>,>,,>>,>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,,>,&%&&--&&&*,>,,>&&&&,*&%&*,,,,,,,,>,;&%&%>=%&%-,,>,>&&&*,&&&&-,,,,,,>,,,-&&&&,&&%*>,,,,-&&&=>&&%&>,,,,',,,,,,,,,,,,,,,,,,,,',-&&&*,,',,,,*&&&*,,,,,,,,,,',*&&&&',,',,'&&&&-,',,',,',,',>&&&&>,',','-&%&&',',',',',',=&&&&'',',',',',,'',',''',','',''',','',',',*&&&*',','',''''''&&&&-'','>&&&&,'''','''''''',*&&&&**--*&&&&&>''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>,>>>>>>>>,>,>>>>>>,>,>,>,>,>>>,>,>,>>>>>,>>,>,>,>>>>,>>,>>,,>,>>,>,>,>,>,>,>,>,>,>,>,,>,,>,>,>,>,>,>,>,=&%&&*&%&>,,>,,=&%&*&&&&;>,>,>,>,,,,&&&&=&&&&,,,,,,*&%&=&&&&,,,,,,,,,,,,&&&&=&&&*,,,,,,&&&&*&&&*,,,,,,,,,,,,,,,,',,',,',,,,,=&&%*,,,',,,*&%&*',',',',',,,&%&&*,',,','&&&&-,',',',,',,'>&&&&>,',,',-&&&*,',',',',','-&&&&>,',','','',',''',,'''','',',''','','''*&&&*''''''','',',&&&&-'''',&&&&>,'''''''''''''>*&&&&&&&&&&*&;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>,>,>>>,>>,>>>>>>>,>,>>>>>>>>>>>,>>>>>>,>,>,>>,>>,>>>,,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,,>,;&&&%&%&*,>,,>,,&&&&&%&&,,,,,,,,>,,,-&%&&&%&->,,,,>;&&&%&%&*,,>,,,,,>,,,*&%&&%&&;,,,,,,=&&&&%&&-,,,,,,,,',,,,,,,,,,,,,,,,,,,-&&&&',,,,,,*&&&*,,,,,,,,,,'>&&&&=,,',,,,*&%&-,,,',,',',',>&&%&>,',',,-&&&*,',',',',',,>&&&&-,''',,','','',,''',,'','','',''','',''-&&&&>',','''''''-&&&&>''''>&&&&,'','''',''''''''-&&&&&&&&&*,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,>>>,>>>>>>>>>>>>>>>,>>,>>>>>>,>,>,>,>,>>,,>,>>,>>>>,>,>>,,>>,>>,>>,>>,,>>>,>>>,>,>,>,>,>,>,>,>,>,>,>,>,,,>,>,,>,,>,&%&&&&&;,,>,,,>=%&%&%&=>,>,>,>,,,>,>&&&%&&&,,,>,,,,*%&&&&&-,,,,>,,,,,,,-&&&&&%*,,,,,,,>&%&&&&&,,,,,,,,,,,',,,,,,,',,,,,',,,-%&&*,,,',,,*&%&*,',',',',,,=&&&&>,',,','&&&&-',',,',,',,,>&&&&>',',',-&&&&',',',',','''&&&&*',,'','','',''',','','',''','','','''',&&&&-''''','',',*&&&*'',''>*&&&>'''','''''''''';*&&&&**=->''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>,>>>>>,>,>,>>>>>>>>>>,>>>>,>>>,>,>>>,>,>>,>>,>>,>,>,>>,,>,>,>,>,>,>,>,>,>,>,>,,>,,>,,>>,>,,>,>,,>,=&%%&%*>,,,>,,>>&&%&&%>,,,,,,,>,,,,,*%&&%&*,,,,,>,,-&&%&%*>,,,,,,,,,,,,,&&%&&&-,,,,,,,,=&&%&&*,,,,,,,,,,,,,-**-,,,,',,,,,,,-&&%*,,,,',,*&&&*,,,,,,,,',;&&&&*,,,',,,,*&&&-,,',',',,','>&&&&>,,',',-&&&*,',',',',',,'-&&&&=',',',','',',','',','',';**=,','',',''*&&&*,',''''''';&&&&='''''>&&&&,''''''''''''',*&&=;,,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>;>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>,>>,>>>>>>>>>,>>>>,>>>>>>>,>,>,>,>,>>,>,>>,>,>>>,,>,>>>,>>,>,>>,>,>,,>>,>,>,>,>,>,>,>,>,>,>,>,,>,>,>,,>,>,,>,,>,,;&&&&%-,,>,,>,,>*&&&&&,,,>,>,,,>,>,>-&%&&&>,,>,,,,,,&&&&&=,,,,,>,,>,,,,,*&&%&&,,,,,,,,,;&&&&&-,',,,',,,,,,=&&&&*,,,,',,',,,=&&&*,,,,,,,*%&&*,,',',',,>*&%&&;,',,',',&&&&-',,',,',',,,>&&&&>,',','-&&&&',',',',','','&&&&&;,'','',','>>',',''','';&&&&*,','''',';&&&&=''','','>*&&&*,',''',&&&&>'''''''''''''*&&;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>>>>>>,>>>,>>>>>>,>>>,>,>>>>>>>>>>>,>>>>,>>>>,>,>>>>>,,>>,>,>>,>,>>>>,>>,>,>,>,>,>,>,>,>,>,>,>>,>,>,>,>,,>,>,>,,>,>*%&%*>,>,>,,>,,-%%&&=,>,,,,>,,,,,,,,&&&%*,>,,,>,,>,*&%&%;,,>,,,,,,,,,,,;&&&&=,,,,,,,,,,*%&%*,,,,,,,,,,,,;&&%&&&;,,,,,,,,,'-&%&&,',',,,*&&&&=,,,,,,'=*%&&&*,,',,',,'*&&&-,',,',,,',',>&&&&>,',',,-&&&*,',',',',',''';&&&&&=>'',''',=*&''',','','*&&&&&='',',''''*&&&&=,'''''>*&&&&-''''''>&&&&>'','''''','',&&&-,',,;-**=*-,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-";>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>,>>,>>>>,>>>>>,>,>,>,>,>>,>,>>,>,>>>>,>,,>>>,>>,>>,>,>,,>,>,>>,>>>,>,>,>,>,>,>,>,>,,,>,,>,>,>>,,,,>,>,,>-&%&*,,,,,>,,>,,&&%&;,,,>,,,>,>,>,,,*%&&-,,,,,,,,,,>&&&&,,,,,,,,,,>,,,,,&%&&>,,,,,,,,,,-&&&*,,,,,,,,,,,,=&&&&&&-,,,,,,,,,,-&&&*,,,,',,*&&&&&**--=*&&&&&&&>',,',,',,&&&&-',',,',',',,>&&&&>',,','-&&&&',',',',',',','=&&&&&**=--**&&&&=',''',''>&&&&&&*,'''''',',*&&&&*=---*&&&&&*','',''>*&&&>'''',''''''',*&&&&*&&&&&&&&&&=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>;>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>,>>>>>>>>>>>>>,>>>>,>,>>>>>>>>>>,>>>,>>,>>,>,>>,>>,,>>,>>,>,>>>>,>,>,,>>,,>,>,>,>,>,>,>,>,,>>,>,>,,>,,,>>,>,,>,,>>&&&>>,>,,,>,,,,=&&*>,>,,>,,,,,,,,>,-&&&,,>,>,,,,,,,*&&=,,,,,>,,,,,,,,,,=&&=,,,,,,,,,,,,&&&;,,,,,,,,',,,;&%&&%&-,,',,',,,,=&&&&,,,,,,,*%&&&&&&&&&&&&&&&*>,,',,',,,'&&&&-,,',',,',,',>&&&&>,',,',-&&&*,',',',',',','',-&&&&&&&&&&&&&&&*,',''',',*&&&&&=',',','','>*&&&&&&&&&&&&&*''''''''>&&&&,'''''''''''''*&&&&&&&&&&&&&&&&*,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>>,>,>>,>,>>>>>,>>>>>,>,>,>,>,>>,>>,>>>,>>>,>>,>>>,>,>,>>>,,>,>,>,>>,,>>,>,>,>,>,>,>,,>,>,,>,,>,>,>>,,>,,>,>,>,,*&*,,>,,>,,>,>,,&%-,,,,,,,>,>,>,,,,,&&=,,,,,>,,,,,,;%&>,,>,,,,,,,,,,,,,;%&;,,,,,,,,,,,,=&&,,,,',,,,,,,,,&&&&&&,,,,,,,,,',-%&&*,',,',,*&&&&&&&&&&&&&&&*>,',,,,,',',*%&&-,',,,',,'',,>&&&&>,',','-&&&&',',',',',',','',;*&&&&&&&&&&&*-,'',','',,=&&&&&;''''''''''',=&&&&&&&&&&*-''',''''',&&&&>,''''''''''''>=&&&&&&&****&&&&&=''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>>>>>>>>>>>>>>>>,>>>>,>,>>>>>>>>>>>,>>,>>,>>,>,>>,>>,>>,>>>,>,>>,>,>>>,>,>>,>,>,>,>,>,>,>>,>,>,,>,>,,>,,,>,,>,,,>,,>>-&;>,,>,,>,,,>,,=&>,>,>,>,,,,,,,,,,,*&,,>,,,,,>,,,,,*&,,,,,,,,,,,,>,,,,,&*,,,,,,,,,,,,,>*=,,,,,,,,,,,,,,>*%&*>,,,,,',,,,,-****,,,,,,,*&&&*>-*&&&%&**>,',,',',,',,,=***-,',',',,,'',>****>',',,,-***=',',',',','',','','-***&&&***;,'',''','''',=*&*;',',',',',''''>=**&&&**-,'',''',''',*==*,'','''',''''''';-=*-;,,'''>=&&&&,'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>>>>,>>>>>>>>>>>,>,>>,>>>>,>>>>>>,>,>,>,>,>>,>>,>>,>>>>,>,>,>,>>,>,>,>,>,>>,,>,>>,,>,>,>,>,>,>,>,>,,>,>>,>,>>,>>,,>,,>,>,,>,,>;,,>,,>,,,>,,>,,;,,,,,,,>,,>,>,>,>,,>,,,,,,,,,,,,,,>>>,,,>,,>,,,,,,,,,,>>,,,,,,,,,,,,,,>,,,,,,',,,,,,,,,,>>,,,',,,,,,,',,,,,,,',,',,*%&&*,,,,>>>,,,,',,,',,',,,',,,,,',,',','',,,',,,,',,','','',',',',','',',',',',','',,>>>','',',',','',',',,>,',''''''''',','''''>,>,'',''''''',''''''''''''''''''''''''''''''''''''**&&;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>;>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>,>>,>,>>>>>>>>,>>>,>,>,>>>>>>>>>>,>>,>>,>>,>,>>>,>>>,>,>>,>>,>,>,>>,>,>,>>,>,>,>,>,>,>,,>,>,,,>,,>,,,,>,>,>,>,,>,,>,,>,,,>,,>,>,,,,>,,>,>,>,,,>,,,,,,,,,>,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,',,,,,',*&&&*,,',,,,',,,,',,,',,',','',',',',,,,,'',','',,',',,',',',',',',',,',',',',','',',''',',''','','',''''',''''',',',',''''','',''''''''',''''''','''''''''','''''''''''''''''''''''*&&&='''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>,>>>>>,>>>>>>>>>>,>>,>>>,>>>>>>>,>,>,>,>,>>,>>,>>>,>>>,,>>,>,>>,>,>>,>>,>,>,>,>,>,>,>,>,>,>,>,>>,>,>>,>,>,,>>,>,,>,,>,,>,>,,>,>,>,,,>,,,>,>,,,,,,,,,>,,,,>,,,,>,,,,,,,,,>,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,,,',,,,',,,,,,,,,',,,,*&&&*,,,,',',,'',,'',,,',,,,,',,',,,'',',,',',,',',','',',',',',',','''',',''',',','',',''',,'','','',,',''',','''''''',','',''''',''',''',''''''''','',''''''''''''''''''''''''''''**&&-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>>,>>>>,>>>>>>>>>,>,>,>>>>>>>>>>,>>>,>>,>,>>,>>>,>,>,>>,>>,>,,>,>,>,>>>,>,>,>,>,>,>,>,,>,>,,>,>,>>,,>,>,,>,>,>,>,,>,,,,,>,>,,>,,,>,,>,>,>,,,,>,>,,,>,,,,>,>,,>,,,,,,,,,>,,,,,,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,,',,',,',,,',,*%&&*,',,,,,',,,',,,',,','',,',,',',,',',',,',',',,',,',',',',',',',',,','',,',','',','',','',',''','''',',',''',',','''''''','',''',''''''','''''''''''''''''''''''''-;''''''''''',*&&&;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>>>>>>,>,>>>>>>>>>,>,>,>,>>>>,>>>,>>>,>>,,>>,>>>,>,>,>>>>,>>>,>,,>>,>,>,>,>,>,>,>,>,,>,>,,>,,>,,>,>,,>,,,>,,>,>,>,>,,,,>,,>,,>,,,,,,>,>,,,,,,,,,>,,,,,,,,,,,>,,,,,,>,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,',,',,,',,,,,,,,,,,*&&&*,,,',',,,',,,',,',,,,',',',',,',,',,',',',,',',,',',',',',',',',''',','','',',''',,''','','','',','','''',''''''',',',''''''''''','',''','','',''',''''''',''''';&&*;'''''''';*&&&*''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>>>,>>,>>>>>>,>,>,>>>>>>>>>>,,>>,>,>>,>>>,>>>,>>,,>>>>,>,,,>,>,>,>>,,>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,,>,>,>,>,,,>,,>,>,,>,,>,,,>,>,,,,,>,>,,>,,,,,>,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,',,',',',*&&&*,,,,,,',,',',,',,',',,,',,,',,',,',',',,',',',',',',',',',',',',',',','',,',',',''',,'','',',''''','',','',',',''''''','',''','''''''''''''''''',''''''','''''',*&&&&*--,>--*&&&&&-''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>,>>,>>>>>>>,>>,>>>>>>,>,>,>,>,>>>>,>>>>,>>,>>,>,>,>>>,,>,>>>>>>,>,>>,>>>,,>,>,>,>,>,>,>,>,,>,>,>,>,>,>,>,,>,>,,,,>,,>,,,>,,,>,,>,,,>,,,,,>,>,,,,>,,,,>,,,,,,,,,>,,,,>,,,,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,',,,,',',,',,,,,,,,,,,*%&&*,',',',,',,,',,',,,',',',',',',',,',,',',',',',',',',',',',','',','',',''',''','',''',',','''',',''',''',''''''',',',''''',''''','',''''''''''''''','''''''''''-&&&&&&&&&&&&&&&&&='''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>,>>>>>>>>>,>,>>>>>>>>,>,>>>>>>>>>>>,>,>>,>,>>,>>,>>,>>,>,>>>,>,,>,,>,>,>,>,,>>,>,>,>,>,>,>,>,>>,>,>,,,>,>,,,>,>,,,>>,>,>,,>,,,>,,,>,,>,,,>,>,,,,,>,>,,,>,,,,>,,>,,,,,,,>,,,,>,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,',,,',,,,,,,,,',,,,',,,,,,,',,',,',',,*&&&*,,,,,',,,',,,',,',',,',,,',,,',,',',',',,',,,',',',',',',',',,',',',',',,',','',',',''','',','',',''',''',',',''''''',','''',','''''','','','''''''''''''''''''';*&&&&&&&&&&&&&*;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>>,>>>>>,>>,>,>>>>>>,>,>,>,>,>>>>>,>>>,>>,>>,>>,>,>>,>,>>>>,>>,>>,>,>>,>,>,>,>,>,>,>,>,,,>,,>,>>,,>,>,>,,,>>,,,>,,,>,>,>,>,>,,,>,,>,,,,,>,>,,,,,,,,,,>,,,,,,>,,>,,,,>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,',',,,,,,',,,,,,*&&&*',',,',',',',,,',,,',,'',,',',,',',',,',',',',',',',',',',',''',','',',''',',','','',','',''','','',''','''''',',','''''','''''',','''''''''',''''''''''',''''''''>=*&*&&*&&&*-''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>>>>>>>>,>,>>>>>>>>>>>,>,>,>>,>>,>>,>>,>>>,>>,>>,,>,>,>>,>,>,>,>>,>,>,>,>,>,>,>>,>,>,>,,>>,>,,>,>>,,,>,,>,>,,,,,>,,,>,>,,>,,,>,>,,,,>,>,,>,,>,,,>,,>,,,,,,,,,,,,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',',,,,,,',,,,,,,',',,,,',',,-=-=-,,,',,,,,,,',',,',,',,,,',',',',,',',',',,',',',',',',',',',',','',',',',',''',',',','','','',''','',,'',',','''''',''','''','''''''''''',''''','''''''''''''''''''''>;;--;>,''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>>,>>>>,>>>>,>>,>>>>>,>>,>>,>>>>>,>,>,>,>,>>,>>>,>>,>>,>>,>>,,>,>,>,>>>,>,>,,>,>,>,>,,>,>,>,>,>,>,>,>,,>,>,>,,,>,>,,>,,,>,>,>,,>,>,>,,,,>,,,>,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,>,,,,,,,,,,,,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,,',,,,,,',,,',,,',,,,',,,',',',',,,',,',','',,',,,',',,',',',',',,',',',',',',',',',',,','',','',,'',''','','',',''','','''''''''''',','','''','''',''','','''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>>>>>>,>>>>>>>>>>>,>,>>>>>>>>>>,>>,>>>,>>,>>,>,>,>>>,>>>,>,>>,>>>,>>>,>>>>,>,>,>,>,>,>,>,,>,>,,>,>>,>,,>,,>,>,>,,,>,,,>,,>,>,,>,,,>,,,>,>,>,,,>,,>,>,>,,>,>,,>,,>,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,',,,,,,,,,',,,,,,,',,,,,,,,,,,,,,',,,',,,',,,,',,,,',,,',',,,,',,',',,,'',',',,',',',',',',',',',',','',''',,','',''','',',','','''','','',',',','',','''','''''''','''','''''',''',''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>,>>,>,>>>>>,>,>,>,>,>>>>,>,>>,>>>>>>,>>>,>>,>,>>,>,>,>,>,,>>,,,>,>,>,>,>,>,>,>,>,>,>,,>,,,>,>,,>,,>,,>,>,>>,,,>,,>,,>,>,,,>,,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,',,',,,,,',,',,,,',',',,',',',,,',,',',,'',,',',',',,,,'',',',',,'',,,',,',',',',',',',',',',',',','',,''',','',,'',,''',','',','','','''''''','''''','''','',''','''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>,>>>>>>>>,>>>>>>>>>>,>>>>>,>>>>>>>>>>>>,>,>>>,>>>,>,>,>>,,>>,>,>>,>>,>>,>,>>,,>>>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,,>,,>,>,,,>,,>,,,>,,,>,>,,,>,>,,,,,,,,,>,,,>,,>,,>,,,,,,,>,,>,,>,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,',,,',,,',,,','',,,',,',,',,,'',,',',',,,',',',',',',',','',','',,','',,''',''','','',''','',''',',',',''',',''','''''''''''','''','''','''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>,>>,>>>>>>>,>>,>,>,>,>,>,>>>>>,>>,>,>>>,>,>>>,>>,>>,>>,>,,>,>,>>>,,>,>,>,>,>,>,>,>,,>,>,,>,>,>,>,>,,>,>,,>,,>,,>,,>,,>,>,,>,,,,,>,,,,>,>,>,>,,,,>,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,',,,,,,,,,',,,,,',',',,',,',',',',,,',,,,',,,,',,',,,,',,,,,',,',,',,',',,'',,,',',',,',',',',',',',',',,','',',''',',',',',',','','',''','','''''','''',''','','','','''',''',''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>>>>>>>>>>>,>,>,>>>,>>,>>,>>,,>>,>>,>,>,>>>,>>>,,,>>>,>,>,>,>,>,>,>,>,>,>>,>,>,>,,,>,>,,>,>,>,,>,,>,,>,,,,>,,>,>,,,>,>,,,,,,,,>,,,,,>,>,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,',',,,,,,,,,,,,,,,,,,',,,,',,,',',,',,',',,'',',',,',',',,',',,''',,',',',',',',',',',',','','',',',,'',''',',''','',',''',',','',',',''',''','''''','''''',''''''''''''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>>>>>>,>>>>,>,>>>>>>>,>,>,>,>,>,>,>,>>,>>>>,>>,>>,>>,>>,>,>,>>,>,>,>,>,>,>>>,,>,>,>,>,>,>,>,>,>,,>,,,>,,>,>>,>,,,>,,>,,>,,>,,>,,>,>,,,>,,,,>,,,,,>,>,>,,,>,>,,,,,,>,,>,,,,,,>,,>,,>,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,,,',,',',,',',,,',',,',,',,',,,',,,',,,',,',',,,',,',',',,,',',',',',',',',',',',','',',','','',',','','','','''',',''''',''''''',''',''',',''','',''',''''','',''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>,>>>>>>>>>>>>>>>>>>,>>,>,>,>>>,>>,>>,>>>,>>,>>>,>,>,>,>,>,>>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,,,,>,>,>,,,>,>,,>,,,>,,,>,>,,>,>,,,>,,,,,,,,,,,,,,,>,,>,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',',',,,,,,,,,,,,',,,,,,,,,,,',,',',,',,',,',,',,'',,',',',,'',',',',,',',',',',','','',',','',',',''',','',','',','','',',''',',',''',''',''''''''''''''''',''''''''',''''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>,>>,>>>>>,>>,>,>,>,>,>,>,>>>,>>,>>>>,>>,>>,>>,,>>,>>,,>,>>,>,>,>,>,>>,>,>,>,>,>,>,>,>>,>,>,>,>,>>>>,,>,,,>>,,>,>,,,>,,>,>,,,>,,,,,>,,>,>,>,>,>,,,>,,,,,,,>,,,,,,,,,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,',,',,',,,,,,,',,',,',,',,,,,,,,,,',,',',',,,',',',',',,,',,,,',,',,',',,',,,',,',,',',,,',,','',',',',',',',,',','',',,',','',','','',','''','','','',''''''',''',''','',''','',','''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>,>>>>>>>>>,>>>>>>>,>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>,>>,>,>,>>>,>,>,>>,>,>,>>>,>,>>,>>,>>,,>,>,>,>,>,>,>,>,,,>,,>,,,>,,,,,>,,>>,,,>,,,>,>,,>,,,,>,,>,>,>,,,,,,,,,,,,,,>,,,>,,>,,,,>,,,,>,,>,,,,>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,',,',,,,,,,,,,,,,,',,',',,,,,,,,,',,,,,,,,',,',,,',',,',,',',,',',',',,',',','',,',',,',',',',',','',',',',''','',',','','',''',',','''','',',',',',''',''','''''','''''''',''','',''''',''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>,>>>>>>>,>>>>>>>,>>>>>>,>>,>>,>>>,>>,>,>,>,>,>,>,>,>>>,>>>>,>>>>>,>>,>>>,>>,>>>,>,>,>,>,>,>,>>>,>,>,>,>,>,>,>,>>,>,>,>,>,,>>,>,>,,,>>,,>,>,,,>,,>,>,,>,,,,,,,,>,>,>,>,,>,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,',,,,,,,,,',,',',,,,',',',,,',,',',,,',,',,,',',,,',,',',',,,',,'',,',',',',',',',','',',',',',','',''',',',',',',''',','',''''''''''',''',''''',''''','',''''''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,,>>,>,,>>,>>,,>>,>>,,>>,>>,>,>,>,>,,>,>,>,>,>,>,>,>,,,>,>,>,>,>>,,>,,,>,>,,,>,>,,>,,>,,,,>,>,,>,>,>,,,,,,,,,>,,,>,,>,,>,,>,,,,,,,,,>,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,',',,,,,,,,,,,',',,,,,,',,,',,,',',,',,'',,,',',',,',,,''',',',,',',',',',',',',',,','','',',','',','','',','''',''','''',',',',',''',''','',''','''''''','','''''''',''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>,>>,>>,>>,>,>,>,>,>,>,>>>,>>>>>,>>>>,>>,>>>,>>,>>>>,>,>>,>,>>,>>,>,>,>,>,>,>,>,>>,>,,>,,>,>,,>,,>,>,>,,>>,,,>,,>,,>,>,,,,>,,,,,,,>,>,>,>,,,,,,,,,>,,,,,,>,,,,>,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,',,,,,,,,,',,,,,,',,,',',',,,,',',',,',',,',,,,',,',,,'',,',,,',,'',,,,',',',',,',',',',',',','',',',',',',','',',''',''',,'',','',','','''''''',''',''''',''',','','''''',''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>,>>>>>,>>>,>>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>>,>,>>,>,>,>,>,>,,>,>>,,>>>,>,>,>,>,>,>,>,>,>,>,,>,>,>,>,>,,>,>,>,,>,,>,,,>>,,>,,>,,,>,>,,,>,>,>,,>,,,,,,,>,>,,>,,,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,',,',,,,',,,,,,,,',,',,,,,,',,',,,',,,,,,,',,,,,,,,,,,',,',',,',,,',,,,',',',',',','',,,',',,',',',',',',',','',','','','',',''',',',',''',''','','','',',',',''',''',''''''''''''''''''''','''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>,>>>,>,>,>>,>,>,>,>,>,>,>,>>,>>,>>,>>>>,>>>,>>,>>,>>>>,>,>>,,>,>>,>,>>,>,>,>,>,>,>,>,>,>,>,>,>>,,>,,>,,>,,>>,,,>,,>,,,>,,,>,>,,,,,,>,,,,>,>,,,,,,,,,>,,,,>,,,,,,,,,>,,>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,',,,,,,,,,,,,,',',,,',',',',',,,',,,',,,',,'',',,',,',,,',',,'',,','',',',',',',',',','',',',',','',',,'','','',','','','','',''''''''',''','','','','','',','''''''',''','''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>,>>>>>>>>>>>,>>>>,>>>>,>>,>>>,>>>>>>>>>>>>>>>>>>>>>>>,>>,>>,>>,>,>>,,>>,>>,>>,,>,>,>,>>,>,>,>>,>,>,>,>,>,>,>,>,,>,,,>,,>,,>,>,>,>,,>,,,>>,,>,,>,>,>,,,,>,>,>,,,>,>,,,,>,,>,>,,,,,>,,,,,>,,,,>,,,,,,>,,>,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,',,,,,,,,,,,,,,,,',,,,,,,',,,',,',,',,',,,,,',,,,,,,,,,',',,',,,',',',,,',',,',,',',,',',',',,,',',',',',',',',',,',',',',',','''',',''',','','','','''',',',',',''','''''''''''''''''''','''''''','''''''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",
-">>>>>>>>>>>>>>>>>>>>,>>>>>,>>>>>,>>>>>>,>>>>>>>,>,>>,>,>,>,>,>,>,>>,>>>,>>,>>>,>>>,>>,>>,>>>,>>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,,>,>,,>,,>,>,,>,,,>,,,>,,,,,>,>,,,,,,,>,,,,,,>,,,,,,,,,>,,,,,>,,,,>,,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,',,,,',,,,',,',,,,,,,,,,,',,,,,',',,,',',',',',,,,',,',',,,',,',,',',,',,',',',,',','',,',',',',',',',','',''',','','',,',',',',''','','','',',''''''''''',''''','','','','',''''''','''''''',''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"};
diff --git a/config/grub2/default b/config/grub2/default
new file mode 100644 (file)
index 0000000..39eed0f
--- /dev/null
@@ -0,0 +1,7 @@
+GRUB_TIMEOUT=5
+GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
+GRUB_DEFAULT=saved
+GRUB_CMDLINE_LINUX="panic=10"
+GRUB_DISABLE_RECOVERY="true"
+GRUB_BACKGROUND="/boot/grub/splash.png"
+GRUB_FONT="/boot/grub/unifont.pf2"
diff --git a/config/grub2/splash.png b/config/grub2/splash.png
new file mode 100644 (file)
index 0000000..045fff8
Binary files /dev/null and b/config/grub2/splash.png differ
diff --git a/config/install/fstab b/config/install/fstab
deleted file mode 100644 (file)
index 58297c2..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/dev/ram0      /       squashfs
-/proc          /proc   proc
-none           /sys    sysfs
-none           /tmp    tmpfs
-none           /dev    tmpfs
diff --git a/config/install/group b/config/install/group
deleted file mode 100644 (file)
index 465a9cf..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-root:x:0:root
-tty:x:5:
-disk:x:6:
-uucp:x:14:
diff --git a/config/install/halt b/config/install/halt
deleted file mode 100644 (file)
index 90a0c80..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-# Clear screen
-/usr/bin/clear
-echo "Shutting down..."
-echo "Sending all processes the TERM signal..."
-/sbin/killall5 -15
-sleep 3
-echo "Sending all processes the KILL signal..."
-/sbin/killall5 -9
-sleep 3
-echo "Unmounting filesystems..."
-/bin/umount -a > /dev/null 2>&1
-echo "Unmounting root..."
-/bin/mount -n -o remount,ro /
-echo "Rebooting..."
-/sbin/reboot -f
diff --git a/config/install/hosts b/config/install/hosts
deleted file mode 100644 (file)
index f4fb350..0000000
+++ /dev/null
@@ -1 +0,0 @@
-localhost      127.0.0.1
diff --git a/config/install/nsswitch.conf b/config/install/nsswitch.conf
deleted file mode 100644 (file)
index da516c6..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-passwd:     files 
-shadow:     files 
-group:      files 
-hosts:      files
-services:   files
-networks:   files
-protocols:  files
-rpc:        files
-ethers:     files
-netmasks:   files     
-bootparams: files
-automount:  files 
-aliases:    files
-netgroup:   files
-publickey:  files
diff --git a/config/install/passwd b/config/install/passwd
deleted file mode 100644 (file)
index 365a8d7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-root::0:0:root:/:/bin/ash
diff --git a/config/install/profile b/config/install/profile
deleted file mode 100644 (file)
index 02c63b9..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/ash
-
-TERM=linux
-LANG=en_US.UTF-8
-export TERM LANG
-
-/usr/bin/unicode_start
diff --git a/config/install/rc_installer b/config/install/rc_installer
deleted file mode 100644 (file)
index c1dd5b6..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# IPFire Installer RC
-#
-
-echo >/proc/sys/kernel/printk "1 4 1 7"
-echo -n -e "\033[9;0]"
-
-ln -snf /proc/self/fd/0 /dev/stdin
-ln -snf /proc/self/fd/1 /dev/stdout
-ln -snf /proc/self/fd/2 /dev/stderr
-ln -s /proc/kcore /dev/core
-mount tmpfs -t tmpfs /tmp
-
-echo "Starting shells on tty2 and tty3 ..."
-/usr/local/bin/iowrap /dev/tty2 /bin/bash &
-/usr/local/bin/iowrap /dev/tty3 /bin/bash &
-
-echo "Loading Installer..."
-/bin/bash --login -c "/bin/install /dev/tty2"
-
-/etc/halt
diff --git a/config/install/shells b/config/install/shells
deleted file mode 100644 (file)
index 006aa38..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/bin/ash
index 9bc1d43aff4d09da2c1c4da52951d9c3bca1386a..13fac5eb74ea0b56c7797e0e02ea2ba2bbeffc47 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.10.27-ipfire-kirkwood Kernel Configuration
+# Linux/arm 3.14.22 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -10,8 +10,10 @@ CONFIG_HAVE_LATENCYTOP_SUPPORT=y
 CONFIG_LOCKDEP_SUPPORT=y
 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
 CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ZONE_DMA=y
 CONFIG_NEED_DMA_MAP_STATE=y
 CONFIG_VECTORS_BASE=0xffff0000
 CONFIG_ARM_PATCH_PHYS_VIRT=y
@@ -26,16 +28,19 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y
 CONFIG_BROKEN_ON_SMP=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
 CONFIG_CROSS_COMPILE=""
+# CONFIG_COMPILE_TEST is not set
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
 CONFIG_HAVE_KERNEL_GZIP=y
 CONFIG_HAVE_KERNEL_LZMA=y
 CONFIG_HAVE_KERNEL_XZ=y
 CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_HAVE_KERNEL_LZ4=y
 # CONFIG_KERNEL_GZIP is not set
 # CONFIG_KERNEL_LZMA is not set
 CONFIG_KERNEL_XZ=y
 # CONFIG_KERNEL_LZO is not set
+# CONFIG_KERNEL_LZ4 is not set
 CONFIG_DEFAULT_HOSTNAME="(none)"
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
@@ -47,19 +52,17 @@ CONFIG_AUDIT=y
 CONFIG_AUDITSYSCALL=y
 CONFIG_AUDIT_WATCH=y
 CONFIG_AUDIT_TREE=y
-CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
-CONFIG_HAVE_GENERIC_HARDIRQS=y
 
 #
 # IRQ subsystem
 #
-CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_IRQ_SHOW=y
 CONFIG_HARDIRQS_SW_RESEND=y
 CONFIG_GENERIC_IRQ_CHIP=y
 CONFIG_IRQ_DOMAIN=y
 # CONFIG_IRQ_DOMAIN_DEBUG is not set
+CONFIG_IRQ_FORCED_THREADING=y
 CONFIG_KTIME_SCALAR=y
 CONFIG_GENERIC_CLOCKEVENTS=y
 CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
@@ -78,6 +81,7 @@ CONFIG_HIGH_RES_TIMERS=y
 # CPU/Task time and stats accounting
 #
 CONFIG_TICK_CPU_ACCOUNTING=y
+# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
 # CONFIG_IRQ_TIME_ACCOUNTING is not set
 CONFIG_BSD_PROCESS_ACCT=y
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
@@ -95,6 +99,7 @@ CONFIG_TINY_RCU=y
 # CONFIG_TREE_RCU_TRACE is not set
 # CONFIG_IKCONFIG is not set
 CONFIG_LOG_BUF_SHIFT=18
+CONFIG_GENERIC_SCHED_CLOCK=y
 CONFIG_CGROUPS=y
 # CONFIG_CGROUP_DEBUG is not set
 CONFIG_CGROUP_FREEZER=y
@@ -114,6 +119,7 @@ CONFIG_BLK_CGROUP=y
 CONFIG_NAMESPACES=y
 CONFIG_UTS_NS=y
 CONFIG_IPC_NS=y
+CONFIG_USER_NS=y
 CONFIG_PID_NS=y
 CONFIG_NET_NS=y
 CONFIG_SCHED_AUTOGROUP=y
@@ -126,11 +132,11 @@ CONFIG_RD_BZIP2=y
 CONFIG_RD_LZMA=y
 CONFIG_RD_XZ=y
 CONFIG_RD_LZO=y
+CONFIG_RD_LZ4=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SYSCTL=y
 CONFIG_ANON_INODES=y
 CONFIG_HAVE_UID16=y
-CONFIG_HOTPLUG=y
 CONFIG_EXPERT=y
 CONFIG_UID16=y
 # CONFIG_SYSCTL_SYSCALL is not set
@@ -163,12 +169,14 @@ CONFIG_SLUB_DEBUG=y
 # CONFIG_SLAB is not set
 CONFIG_SLUB=y
 # CONFIG_SLOB is not set
+# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
 # CONFIG_PROFILING is not set
 CONFIG_TRACEPOINTS=y
 CONFIG_HAVE_OPROFILE=y
 # CONFIG_KPROBES is not set
 CONFIG_JUMP_LABEL=y
 # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
+CONFIG_ARCH_USE_BUILTIN_BSWAP=y
 CONFIG_HAVE_KPROBES=y
 CONFIG_HAVE_KRETPROBES=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
@@ -179,11 +187,19 @@ CONFIG_GENERIC_IDLE_POLL_SETUP=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
 CONFIG_HAVE_DMA_API_DEBUG=y
+CONFIG_HAVE_PERF_REGS=y
+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
 CONFIG_HAVE_ARCH_JUMP_LABEL=y
 CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
+CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR_NONE is not set
+CONFIG_CC_STACKPROTECTOR_REGULAR=y
+# CONFIG_CC_STACKPROTECTOR_STRONG is not set
 CONFIG_HAVE_CONTEXT_TRACKING=y
+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
 CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
 CONFIG_MODULES_USE_ELF_REL=y
@@ -203,7 +219,7 @@ CONFIG_MODULES=y
 # CONFIG_MODULE_FORCE_LOAD is not set
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
+CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_SIG is not set
 CONFIG_STOP_MACHINE=y
@@ -213,12 +229,14 @@ CONFIG_BLK_DEV_BSG=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_THROTTLING=y
+# CONFIG_BLK_CMDLINE_PARSER is not set
 
 #
 # Partition Types
 #
 CONFIG_PARTITION_ADVANCED=y
 # CONFIG_ACORN_PARTITION is not set
+# CONFIG_AIX_PARTITION is not set
 # CONFIG_OSF_PARTITION is not set
 # CONFIG_AMIGA_PARTITION is not set
 # CONFIG_ATARI_PARTITION is not set
@@ -236,6 +254,7 @@ CONFIG_LDM_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 CONFIG_EFI_PARTITION=y
 # CONFIG_SYSV68_PARTITION is not set
+# CONFIG_CMDLINE_PARTITION is not set
 
 #
 # IO Schedulers
@@ -254,6 +273,7 @@ CONFIG_INLINE_READ_UNLOCK=y
 CONFIG_INLINE_READ_UNLOCK_IRQ=y
 CONFIG_INLINE_WRITE_UNLOCK=y
 CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
 CONFIG_FREEZER=y
 
 #
@@ -284,8 +304,8 @@ CONFIG_ARCH_KIRKWOOD=y
 # CONFIG_ARCH_W90X900 is not set
 # CONFIG_ARCH_LPC32XX is not set
 # CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_SHMOBILE is not set
+# CONFIG_ARCH_MSM_NODT is not set
+# CONFIG_ARCH_SHMOBILE_LEGACY is not set
 # CONFIG_ARCH_RPC is not set
 # CONFIG_ARCH_SA1100 is not set
 # CONFIG_ARCH_S3C24XX is not set
@@ -294,8 +314,6 @@ CONFIG_ARCH_KIRKWOOD=y
 # CONFIG_ARCH_S5PC100 is not set
 # CONFIG_ARCH_S5PV210 is not set
 # CONFIG_ARCH_EXYNOS is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_U300 is not set
 # CONFIG_ARCH_DAVINCI is not set
 # CONFIG_ARCH_OMAP1 is not set
 # CONFIG_GPIO_PCA953X is not set
@@ -304,26 +322,28 @@ CONFIG_KEYBOARD_GPIO_POLLED=y
 #
 # Marvell Kirkwood Implementations
 #
+CONFIG_KIRKWOOD_LEGACY=y
 CONFIG_MACH_D2NET_V2=y
-CONFIG_MACH_DB88F6281_BP=y
-CONFIG_MACH_DOCKSTAR=y
-CONFIG_MACH_ESATA_SHEEVAPLUG=y
-CONFIG_MACH_GURUPLUG=y
-CONFIG_MACH_INETSPACE_V2=y
-CONFIG_MACH_MV88F6281GTW_GE=y
 CONFIG_MACH_NET2BIG_V2=y
 CONFIG_MACH_NET5BIG_V2=y
-CONFIG_MACH_NETSPACE_MAX_V2=y
-CONFIG_MACH_NETSPACE_V2=y
 CONFIG_MACH_OPENRD=y
 CONFIG_MACH_OPENRD_BASE=y
 CONFIG_MACH_OPENRD_CLIENT=y
 CONFIG_MACH_OPENRD_ULTIMATE=y
 CONFIG_MACH_RD88F6192_NAS=y
 CONFIG_MACH_RD88F6281=y
-CONFIG_MACH_SHEEVAPLUG=y
 CONFIG_MACH_T5325=y
+CONFIG_MACH_DB88F6281_BP=y
+CONFIG_MACH_DOCKSTAR=y
+CONFIG_MACH_SHEEVAPLUG=y
+CONFIG_MACH_ESATA_SHEEVAPLUG=y
+CONFIG_MACH_GURUPLUG=y
+CONFIG_MACH_INETSPACE_V2=y
+CONFIG_MACH_NETSPACE_MAX_V2=y
+CONFIG_MACH_NETSPACE_V2=y
 CONFIG_MACH_DREAMPLUG=y
+CONFIG_MACH_ICONNECT=y
+CONFIG_MACH_NAS6210=y
 CONFIG_MACH_TS219=y
 CONFIG_MACH_TS41X=y
 
@@ -331,30 +351,7 @@ CONFIG_MACH_TS41X=y
 # Device tree entries
 #
 CONFIG_ARCH_KIRKWOOD_DT=y
-CONFIG_MACH_CLOUDBOX_DT=y
-CONFIG_MACH_DLINK_KIRKWOOD_DT=y
-CONFIG_MACH_DOCKSTAR_DT=y
-CONFIG_MACH_DREAMPLUG_DT=y
-CONFIG_MACH_GOFLEXNET_DT=y
-CONFIG_MACH_GURUPLUG_DT=y
-CONFIG_MACH_IB62X0_DT=y
-CONFIG_MACH_ICONNECT_DT=y
-CONFIG_MACH_INETSPACE_V2_DT=y
-CONFIG_MACH_IOMEGA_IX2_200_DT=y
-CONFIG_MACH_KM_KIRKWOOD_DT=y
-CONFIG_MACH_LSXL_DT=y
-CONFIG_MACH_MPLCEC4_DT=y
-CONFIG_MACH_NETSPACE_LITE_V2_DT=y
-CONFIG_MACH_NETSPACE_MAX_V2_DT=y
-CONFIG_MACH_NETSPACE_MINI_V2_DT=y
-CONFIG_MACH_NETSPACE_V2_DT=y
-CONFIG_MACH_NSA310_DT=y
-CONFIG_MACH_OPENBLOCKS_A6_DT=y
-CONFIG_MACH_READYNAS_DT=y
-CONFIG_MACH_TOPKICK_DT=y
-CONFIG_MACH_TS219_DT=y
-CONFIG_MACH_ICONNECT=y
-CONFIG_MACH_NAS6210=y
+CONFIG_MACH_MV88F6281GTW_GE_DT=y
 # CONFIG_PLAT_SPEAR is not set
 CONFIG_PLAT_ORION=y
 CONFIG_PLAT_ORION_LEGACY=y
@@ -389,12 +386,14 @@ CONFIG_CACHE_FEROCEON_L2=y
 # CONFIG_CACHE_L2X0 is not set
 CONFIG_ARM_L1_CACHE_SHIFT=5
 CONFIG_ARM_NR_BANKS=8
+CONFIG_MULTI_IRQ_HANDLER=y
 
 #
 # Bus support
 #
 CONFIG_PCI=y
 CONFIG_PCI_SYSCALL=y
+CONFIG_PCI_MSI=y
 # CONFIG_PCI_DEBUG is not set
 # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set
 CONFIG_PCI_STUB=y
@@ -402,6 +401,21 @@ CONFIG_PCI_ATS=y
 CONFIG_PCI_IOV=y
 # CONFIG_PCI_PRI is not set
 # CONFIG_PCI_PASID is not set
+
+#
+# PCI host controller drivers
+#
+CONFIG_PCI_MVEBU=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIEAER=y
+# CONFIG_PCIE_ECRC is not set
+# CONFIG_PCIEAER_INJECT is not set
+CONFIG_PCIEASPM=y
+# CONFIG_PCIEASPM_DEBUG is not set
+CONFIG_PCIEASPM_DEFAULT=y
+# CONFIG_PCIEASPM_POWERSAVE is not set
+# CONFIG_PCIEASPM_PERFORMANCE is not set
+CONFIG_PCIE_PME=y
 CONFIG_PCCARD=m
 # CONFIG_PCMCIA is not set
 CONFIG_CARDBUS=y
@@ -427,6 +441,13 @@ CONFIG_ARCH_NR_GPIO=0
 CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT_VOLUNTARY is not set
 # CONFIG_PREEMPT is not set
+CONFIG_HZ_FIXED=0
+CONFIG_HZ_100=y
+# CONFIG_HZ_200 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_500 is not set
+# CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
 CONFIG_SCHED_HRTICK=y
 CONFIG_AEABI=y
@@ -437,16 +458,18 @@ CONFIG_HAVE_ARCH_PFN_VALID=y
 CONFIG_HIGHMEM=y
 # CONFIG_HIGHPTE is not set
 CONFIG_HW_PERF_EVENTS=y
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_HAVE_MEMBLOCK=y
+CONFIG_NO_BOOTMEM=y
 # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
 CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=999999
 CONFIG_COMPACTION=y
 CONFIG_MIGRATION=y
 # CONFIG_PHYS_ADDR_T_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=0
+CONFIG_ZONE_DMA_FLAG=1
 CONFIG_BOUNCE=y
 CONFIG_KSM=y
 CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
@@ -454,11 +477,15 @@ CONFIG_CROSS_MEMORY_ATTACH=y
 CONFIG_NEED_PER_CPU_KM=y
 CONFIG_CLEANCACHE=y
 # CONFIG_FRONTSWAP is not set
+# CONFIG_CMA is not set
+# CONFIG_ZBUD is not set
+# CONFIG_ZSMALLOC is not set
 CONFIG_FORCE_MAX_ZONEORDER=11
 CONFIG_ALIGNMENT_TRAP=y
 # CONFIG_UACCESS_WITH_MEMCPY is not set
 CONFIG_SECCOMP=y
-CONFIG_CC_STACKPROTECTOR=y
+CONFIG_SWIOTLB=y
+CONFIG_IOMMU_HELPER=y
 
 #
 # Boot options
@@ -485,6 +512,34 @@ CONFIG_AUTO_ZRELADDR=y
 #
 # CPU Power Management
 #
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_GOV_COMMON=y
+CONFIG_CPU_FREQ_STAT=y
+# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+# CONFIG_GENERIC_CPUFREQ_CPU0 is not set
+
+#
+# ARM CPU frequency scaling drivers
+#
+CONFIG_ARM_KIRKWOOD_CPUFREQ=y
+
+#
+# CPU Idle
+#
 # CONFIG_CPU_IDLE is not set
 # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
 
@@ -511,12 +566,20 @@ CONFIG_COREDUMP=y
 #
 # Power management options
 #
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_PM_SLEEP=y
+# CONFIG_PM_AUTOSLEEP is not set
+# CONFIG_PM_WAKELOCKS is not set
 CONFIG_PM_RUNTIME=y
 CONFIG_PM=y
 # CONFIG_PM_DEBUG is not set
 CONFIG_APM_EMULATION=y
 CONFIG_PM_CLK=y
-# CONFIG_ARM_CPU_SUSPEND is not set
+# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
+CONFIG_CPU_PM=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ARM_CPU_SUSPEND=y
 CONFIG_NET=y
 
 #
@@ -553,7 +616,6 @@ CONFIG_IP_MROUTE=y
 CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
 CONFIG_IP_PIMSM_V1=y
 CONFIG_IP_PIMSM_V2=y
-# CONFIG_ARPD is not set
 CONFIG_SYN_COOKIES=y
 CONFIG_NET_IPVTI=m
 CONFIG_INET_AH=m
@@ -586,7 +648,6 @@ CONFIG_DEFAULT_CUBIC=y
 CONFIG_DEFAULT_TCP_CONG="cubic"
 CONFIG_TCP_MD5SIG=y
 CONFIG_IPV6=y
-CONFIG_IPV6_PRIVACY=y
 CONFIG_IPV6_ROUTER_PREF=y
 CONFIG_IPV6_ROUTE_INFO=y
 CONFIG_IPV6_OPTIMISTIC_DAD=y
@@ -600,6 +661,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m
 CONFIG_INET6_XFRM_MODE_TUNNEL=m
 CONFIG_INET6_XFRM_MODE_BEET=m
 CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_VTI=m
 CONFIG_IPV6_SIT=m
 CONFIG_IPV6_SIT_6RD=y
 CONFIG_IPV6_NDISC_NODETYPE=y
@@ -663,7 +725,22 @@ CONFIG_NF_NAT_FTP=m
 CONFIG_NF_NAT_IRC=m
 CONFIG_NF_NAT_SIP=m
 CONFIG_NF_NAT_TFTP=m
-CONFIG_NETFILTER_TPROXY=m
+CONFIG_NETFILTER_SYNPROXY=m
+CONFIG_NF_TABLES=m
+CONFIG_NF_TABLES_INET=m
+CONFIG_NFT_EXTHDR=m
+CONFIG_NFT_META=m
+CONFIG_NFT_CT=m
+CONFIG_NFT_RBTREE=m
+CONFIG_NFT_HASH=m
+CONFIG_NFT_COUNTER=m
+CONFIG_NFT_LOG=m
+CONFIG_NFT_LIMIT=m
+CONFIG_NFT_NAT=m
+CONFIG_NFT_QUEUE=m
+CONFIG_NFT_REJECT=m
+CONFIG_NFT_REJECT_INET=m
+CONFIG_NFT_COMPAT=m
 CONFIG_NETFILTER_XTABLES=y
 
 #
@@ -708,6 +785,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 #
 CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
 CONFIG_NETFILTER_XT_MATCH_BPF=m
+CONFIG_NETFILTER_XT_MATCH_CGROUP=m
 CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
@@ -724,8 +802,12 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m
 CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 CONFIG_NETFILTER_XT_MATCH_HELPER=m
 CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
 CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
 # CONFIG_NETFILTER_XT_MATCH_IPVS is not set
+CONFIG_NETFILTER_XT_MATCH_L2TP=m
+CONFIG_NETFILTER_XT_MATCH_LAYER7=m
+# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
 CONFIG_NETFILTER_XT_MATCH_LENGTH=m
 CONFIG_NETFILTER_XT_MATCH_LIMIT=m
 CONFIG_NETFILTER_XT_MATCH_MAC=m
@@ -744,8 +826,6 @@ CONFIG_NETFILTER_XT_MATCH_RECENT=m
 CONFIG_NETFILTER_XT_MATCH_SCTP=m
 CONFIG_NETFILTER_XT_MATCH_SOCKET=m
 CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_LAYER7=m
-# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
 CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
 CONFIG_NETFILTER_XT_MATCH_STRING=m
 CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
@@ -760,7 +840,9 @@ CONFIG_IP_SET_HASH_IP=m
 CONFIG_IP_SET_HASH_IPPORT=m
 CONFIG_IP_SET_HASH_IPPORTIP=m
 CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_NETPORTNET=m
 CONFIG_IP_SET_HASH_NET=m
+CONFIG_IP_SET_HASH_NETNET=m
 CONFIG_IP_SET_HASH_NETPORT=m
 CONFIG_IP_SET_HASH_NETIFACE=m
 CONFIG_IP_SET_LIST_SET=m
@@ -811,6 +893,11 @@ CONFIG_IP_VS_PE_SIP=m
 CONFIG_NF_DEFRAG_IPV4=y
 CONFIG_NF_CONNTRACK_IPV4=y
 # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_TABLES_IPV4=m
+CONFIG_NFT_CHAIN_ROUTE_IPV4=m
+CONFIG_NFT_CHAIN_NAT_IPV4=m
+CONFIG_NFT_REJECT_IPV4=m
+CONFIG_NF_TABLES_ARP=m
 CONFIG_IP_NF_IPTABLES=y
 CONFIG_IP_NF_MATCH_AH=m
 CONFIG_IP_NF_MATCH_ECN=m
@@ -818,6 +905,7 @@ CONFIG_IP_NF_MATCH_RPFILTER=m
 CONFIG_IP_NF_MATCH_TTL=m
 CONFIG_IP_NF_FILTER=m
 CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_SYNPROXY=m
 # CONFIG_IP_NF_TARGET_ULOG is not set
 CONFIG_NF_NAT_IPV4=m
 CONFIG_IP_NF_TARGET_MASQUERADE=m
@@ -843,6 +931,10 @@ CONFIG_IP_NF_MATCH_IPP2P=m
 #
 CONFIG_NF_DEFRAG_IPV6=y
 CONFIG_NF_CONNTRACK_IPV6=y
+CONFIG_NF_TABLES_IPV6=m
+CONFIG_NFT_CHAIN_ROUTE_IPV6=m
+CONFIG_NFT_CHAIN_NAT_IPV6=m
+CONFIG_NFT_REJECT_IPV6=m
 CONFIG_IP6_NF_IPTABLES=y
 CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
@@ -856,12 +948,14 @@ CONFIG_IP6_NF_MATCH_RT=m
 CONFIG_IP6_NF_TARGET_HL=m
 CONFIG_IP6_NF_FILTER=m
 CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_TARGET_SYNPROXY=m
 CONFIG_IP6_NF_MANGLE=m
 CONFIG_IP6_NF_RAW=m
 CONFIG_IP6_NF_SECURITY=m
 CONFIG_NF_NAT_IPV6=m
 CONFIG_IP6_NF_TARGET_MASQUERADE=m
 CONFIG_IP6_NF_TARGET_NPT=m
+CONFIG_NF_TABLES_BRIDGE=m
 CONFIG_BRIDGE_NF_EBTABLES=m
 CONFIG_BRIDGE_EBT_BROUTE=m
 CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -886,7 +980,6 @@ CONFIG_BRIDGE_EBT_LOG=m
 CONFIG_BRIDGE_EBT_NFLOG=m
 # CONFIG_IP_DCCP is not set
 CONFIG_IP_SCTP=m
-# CONFIG_SCTP_DBG_MSG is not set
 # CONFIG_SCTP_DBG_OBJCNT is not set
 # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
 CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
@@ -928,6 +1021,7 @@ CONFIG_LLC=y
 # CONFIG_LAPB is not set
 # CONFIG_PHONET is not set
 # CONFIG_IEEE802154 is not set
+CONFIG_6LOWPAN_IPHC=m
 CONFIG_NET_SCHED=y
 
 #
@@ -953,6 +1047,8 @@ CONFIG_NET_SCH_CHOKE=m
 CONFIG_NET_SCH_QFQ=m
 CONFIG_NET_SCH_CODEL=m
 CONFIG_NET_SCH_FQ_CODEL=m
+CONFIG_NET_SCH_FQ=m
+CONFIG_NET_SCH_HHF=m
 CONFIG_NET_SCH_PIE=m
 CONFIG_NET_SCH_INGRESS=m
 CONFIG_NET_SCH_PLUG=m
@@ -972,6 +1068,7 @@ CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
 CONFIG_NET_CLS_FLOW=m
 CONFIG_NET_CLS_CGROUP=m
+CONFIG_NET_CLS_BPF=m
 CONFIG_NET_EMATCH=y
 CONFIG_NET_EMATCH_STACK=32
 CONFIG_NET_EMATCH_CMP=m
@@ -1001,10 +1098,16 @@ CONFIG_BATMAN_ADV_DAT=y
 CONFIG_BATMAN_ADV_NC=y
 # CONFIG_BATMAN_ADV_DEBUG is not set
 CONFIG_OPENVSWITCH=m
+CONFIG_OPENVSWITCH_GRE=y
+CONFIG_OPENVSWITCH_VXLAN=y
 CONFIG_VSOCKETS=m
 CONFIG_NETLINK_MMAP=y
 CONFIG_NETLINK_DIAG=m
-CONFIG_NETPRIO_CGROUP=m
+CONFIG_NET_MPLS_GSO=m
+CONFIG_HSR=m
+CONFIG_CGROUP_NET_PRIO=m
+CONFIG_CGROUP_NET_CLASSID=y
+CONFIG_NET_RX_BUSY_POLL=y
 CONFIG_BQL=y
 CONFIG_BPF_JIT=y
 
@@ -1114,12 +1217,12 @@ CONFIG_REGMAP=y
 CONFIG_REGMAP_I2C=y
 CONFIG_REGMAP_IRQ=y
 CONFIG_DMA_SHARED_BUFFER=y
-# CONFIG_CMA is not set
 
 #
 # Bus devices
 #
 CONFIG_MVEBU_MBUS=y
+# CONFIG_ARM_CCI is not set
 CONFIG_CONNECTOR=y
 CONFIG_PROC_EVENTS=y
 CONFIG_MTD=y
@@ -1133,7 +1236,6 @@ CONFIG_MTD_OF_PARTS=y
 #
 # User Modules And Translation Layers
 #
-# CONFIG_MTD_BLKDEVS is not set
 # CONFIG_MTD_BLOCK is not set
 # CONFIG_MTD_BLOCK_RO is not set
 # CONFIG_FTL is not set
@@ -1196,9 +1298,9 @@ CONFIG_MTD_NAND_IDS=y
 # CONFIG_MTD_NAND_DISKONCHIP is not set
 # CONFIG_MTD_NAND_DOCG4 is not set
 # CONFIG_MTD_NAND_CAFE is not set
+# CONFIG_MTD_NAND_PXA3xx is not set
 # CONFIG_MTD_NAND_NANDSIM is not set
 # CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
 CONFIG_MTD_NAND_ORION=y
 # CONFIG_MTD_ONENAND is not set
 
@@ -1223,13 +1325,12 @@ CONFIG_OF_FLATTREE=y
 CONFIG_OF_EARLY_FLATTREE=y
 CONFIG_OF_ADDRESS=y
 CONFIG_OF_IRQ=y
-CONFIG_OF_DEVICE=y
-CONFIG_OF_I2C=y
 CONFIG_OF_NET=y
 CONFIG_OF_MDIO=y
 CONFIG_OF_PCI=y
 CONFIG_OF_PCI_IRQ=y
 CONFIG_OF_MTD=y
+CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
 CONFIG_PARPORT_SERIAL=m
@@ -1240,6 +1341,7 @@ CONFIG_PARPORT_SERIAL=m
 CONFIG_PARPORT_1284=y
 CONFIG_PARPORT_NOT_PC=y
 CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_NULL_BLK is not set
 # CONFIG_PARIDE is not set
 # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
 CONFIG_BLK_CPQ_CISS_DA=m
@@ -1273,7 +1375,6 @@ CONFIG_BLK_DEV_RSXX=m
 # CONFIG_ATMEL_PWM is not set
 CONFIG_DUMMY_IRQ=m
 # CONFIG_PHANTOM is not set
-# CONFIG_INTEL_MID_PTI is not set
 # CONFIG_SGI_IOC4 is not set
 CONFIG_TIFM_CORE=m
 CONFIG_TIFM_7XX1=m
@@ -1318,6 +1419,14 @@ CONFIG_TI_ST=m
 # Altera FPGA firmware download module
 #
 CONFIG_ALTERA_STAPL=m
+
+#
+# Intel MIC Host Driver
+#
+
+#
+# Intel MIC Card Driver
+#
 CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
@@ -1381,7 +1490,6 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=5000
 CONFIG_AIC7XXX_DEBUG_ENABLE=y
 CONFIG_AIC7XXX_DEBUG_MASK=0
 CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
-# CONFIG_SCSI_AIC7XXX_OLD is not set
 CONFIG_SCSI_AIC79XX=m
 CONFIG_AIC79XX_CMDS_PER_DEVICE=32
 CONFIG_AIC79XX_RESET_DELAY_MS=4000
@@ -1395,6 +1503,7 @@ CONFIG_SCSI_MVSAS=m
 CONFIG_SCSI_MVSAS_TASKLET=y
 # CONFIG_SCSI_MVUMI is not set
 CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ESAS2R=m
 CONFIG_MEGARAID_NEWGEN=y
 CONFIG_MEGARAID_MM=m
 CONFIG_MEGARAID_MAILBOX=m
@@ -1443,7 +1552,7 @@ CONFIG_SCSI_DC390T=m
 CONFIG_SCSI_PMCRAID=m
 CONFIG_SCSI_PM8001=m
 # CONFIG_SCSI_SRP is not set
-CONFIG_SCSI_BFA_FC=m
+# CONFIG_SCSI_BFA_FC is not set
 CONFIG_SCSI_CHELSIO_FCOE=m
 CONFIG_SCSI_DH=y
 CONFIG_SCSI_DH_RDAC=m
@@ -1485,6 +1594,7 @@ CONFIG_SATA_HIGHBANK=m
 CONFIG_SATA_MV=m
 CONFIG_SATA_NV=m
 CONFIG_SATA_PROMISE=m
+CONFIG_SATA_RCAR=m
 CONFIG_SATA_SIL=m
 CONFIG_SATA_SIS=m
 CONFIG_SATA_SVW=m
@@ -1562,13 +1672,14 @@ CONFIG_MD_MULTIPATH=m
 CONFIG_MD_FAULTY=m
 CONFIG_BCACHE=m
 # CONFIG_BCACHE_DEBUG is not set
-# CONFIG_BCACHE_EDEBUG is not set
 # CONFIG_BCACHE_CLOSURES_DEBUG is not set
+CONFIG_BLK_DEV_DM_BUILTIN=y
 CONFIG_BLK_DEV_DM=y
 # CONFIG_DM_DEBUG is not set
-CONFIG_DM_BUFIO=m
+CONFIG_DM_BUFIO=y
 CONFIG_DM_BIO_PRISON=m
 CONFIG_DM_PERSISTENT_DATA=m
+# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
 CONFIG_DM_CRYPT=m
 CONFIG_DM_SNAPSHOT=y
 # CONFIG_DM_THIN_PROVISIONING is not set
@@ -1576,8 +1687,8 @@ CONFIG_DM_CACHE=m
 CONFIG_DM_CACHE_MQ=m
 CONFIG_DM_CACHE_CLEANER=m
 CONFIG_DM_MIRROR=y
-CONFIG_DM_RAID=m
 CONFIG_DM_LOG_USERSPACE=m
+CONFIG_DM_RAID=m
 CONFIG_DM_ZERO=y
 CONFIG_DM_MULTIPATH=m
 CONFIG_DM_MULTIPATH_QL=m
@@ -1586,6 +1697,7 @@ CONFIG_DM_MULTIPATH_ST=m
 CONFIG_DM_UEVENT=y
 # CONFIG_DM_FLAKEY is not set
 CONFIG_DM_VERITY=m
+CONFIG_DM_SWITCH=m
 # CONFIG_TARGET_CORE is not set
 CONFIG_FUSION=y
 CONFIG_FUSION_SPI=m
@@ -1611,12 +1723,12 @@ CONFIG_I2O_BLOCK=m
 CONFIG_I2O_SCSI=m
 CONFIG_I2O_PROC=m
 CONFIG_NETDEVICES=y
+CONFIG_MII=m
 CONFIG_NET_CORE=y
 CONFIG_BONDING=m
 CONFIG_DUMMY=m
 # CONFIG_EQUALIZER is not set
 # CONFIG_NET_FC is not set
-CONFIG_MII=m
 CONFIG_IFB=m
 # CONFIG_NET_TEAM is not set
 CONFIG_MACVLAN=m
@@ -1635,6 +1747,7 @@ CONFIG_IMQ_BEHAVIOR_AB=y
 CONFIG_IMQ_NUM_DEVS=2
 CONFIG_TUN=m
 CONFIG_VETH=m
+CONFIG_NLMON=m
 # CONFIG_ARCNET is not set
 CONFIG_ATM_DRIVERS=y
 # CONFIG_ATM_DUMMY is not set
@@ -1680,6 +1793,8 @@ CONFIG_ACENIC=m
 CONFIG_NET_VENDOR_AMD=y
 CONFIG_AMD8111_ETH=m
 CONFIG_PCNET32=m
+CONFIG_NET_VENDOR_ARC=y
+CONFIG_ARC_EMAC=m
 CONFIG_NET_VENDOR_ATHEROS=y
 CONFIG_ATL2=m
 CONFIG_ATL1=m
@@ -1754,12 +1869,17 @@ CONFIG_IGBVF=m
 CONFIG_IXGB=m
 CONFIG_IXGBE=m
 CONFIG_IXGBE_HWMON=y
+CONFIG_IXGBEVF=m
+CONFIG_I40E=m
+CONFIG_I40E_VXLAN=y
+CONFIG_I40EVF=m
 CONFIG_NET_VENDOR_I825XX=y
 CONFIG_IP1000=m
 CONFIG_JME=m
 CONFIG_NET_VENDOR_MARVELL=y
 CONFIG_MV643XX_ETH=m
 CONFIG_MVMDIO=m
+CONFIG_MVNETA=m
 CONFIG_SKGE=m
 # CONFIG_SKGE_DEBUG is not set
 CONFIG_SKGE_GENESIS=y
@@ -1768,6 +1888,7 @@ CONFIG_SKY2=m
 CONFIG_NET_VENDOR_MELLANOX=y
 # CONFIG_MLX4_EN is not set
 # CONFIG_MLX4_CORE is not set
+# CONFIG_MLX5_CORE is not set
 CONFIG_NET_VENDOR_MICREL=y
 # CONFIG_KS8842 is not set
 # CONFIG_KS8851_MLL is not set
@@ -1785,7 +1906,6 @@ CONFIG_NE2K_PCI=m
 CONFIG_NET_VENDOR_NVIDIA=y
 CONFIG_FORCEDETH=m
 CONFIG_NET_VENDOR_OKI=y
-CONFIG_PCH_GBE=m
 CONFIG_ETHOC=m
 # CONFIG_NET_PACKET_ENGINE is not set
 CONFIG_NET_VENDOR_QLOGIC=y
@@ -1802,6 +1922,7 @@ CONFIG_8139TOO=m
 CONFIG_8139TOO_8129=y
 # CONFIG_8139_OLD_RX_RESET is not set
 CONFIG_R8169=m
+CONFIG_SH_ETH=m
 CONFIG_NET_VENDOR_RDC=y
 CONFIG_R6040=m
 CONFIG_NET_VENDOR_SEEQ=y
@@ -1906,8 +2027,11 @@ CONFIG_USB_NET_AX88179_178A=m
 CONFIG_USB_NET_CDCETHER=m
 CONFIG_USB_NET_CDC_EEM=m
 CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_HUAWEI_CDC_NCM=m
 CONFIG_USB_NET_CDC_MBIM=m
 CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9700=m
+CONFIG_USB_NET_SR9800=m
 CONFIG_USB_NET_SMSC75XX=m
 CONFIG_USB_NET_SMSC95XX=m
 CONFIG_USB_NET_GL620A=m
@@ -1962,25 +2086,38 @@ CONFIG_ATH9K=m
 CONFIG_ATH9K_PCI=y
 CONFIG_ATH9K_AHB=y
 # CONFIG_ATH9K_DEBUGFS is not set
+# CONFIG_ATH9K_WOW is not set
 # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
+CONFIG_ATH9K_RFKILL=y
 CONFIG_ATH9K_HTC=m
 # CONFIG_ATH9K_HTC_DEBUGFS is not set
 CONFIG_CARL9170=m
 CONFIG_CARL9170_LEDS=y
 CONFIG_CARL9170_WPC=y
-# CONFIG_CARL9170_HWRNG is not set
+CONFIG_CARL9170_HWRNG=y
 # CONFIG_ATH6KL is not set
 CONFIG_AR5523=m
 CONFIG_WIL6210=m
 CONFIG_WIL6210_ISR_COR=y
+# CONFIG_WIL6210_TRACING is not set
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+# CONFIG_ATH10K_DEBUG is not set
+# CONFIG_ATH10K_DEBUGFS is not set
+# CONFIG_ATH10K_TRACING is not set
+CONFIG_WCN36XX=m
+# CONFIG_WCN36XX_DEBUGFS is not set
 CONFIG_B43=m
+CONFIG_B43_BCMA=y
 CONFIG_B43_SSB=y
 CONFIG_B43_PCI_AUTOSELECT=y
 CONFIG_B43_PCICORE_AUTOSELECT=y
 CONFIG_B43_SDIO=y
+CONFIG_B43_BCMA_PIO=y
 CONFIG_B43_PIO=y
 CONFIG_B43_PHY_N=y
 CONFIG_B43_PHY_LP=y
+CONFIG_B43_PHY_HT=y
 CONFIG_B43_LEDS=y
 CONFIG_B43_HWRNG=y
 # CONFIG_B43_DEBUG is not set
@@ -1995,7 +2132,11 @@ CONFIG_B43LEGACY_PIO=y
 CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
 # CONFIG_B43LEGACY_DMA_MODE is not set
 # CONFIG_B43LEGACY_PIO_MODE is not set
+CONFIG_BRCMUTIL=m
+CONFIG_BRCMSMAC=m
 # CONFIG_BRCMFMAC is not set
+# CONFIG_BRCM_TRACING is not set
+# CONFIG_BRCMDBG is not set
 CONFIG_HOSTAP=m
 CONFIG_HOSTAP_FIRMWARE=y
 CONFIG_HOSTAP_FIRMWARE_NVRAM=y
@@ -2051,10 +2192,12 @@ CONFIG_RT73USB=m
 CONFIG_RT2800USB=m
 CONFIG_RT2800USB_RT33XX=y
 CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_RT3573=y
 CONFIG_RT2800USB_RT53XX=y
 CONFIG_RT2800USB_RT55XX=y
 CONFIG_RT2800USB_UNKNOWN=y
 CONFIG_RT2800_LIB=m
+CONFIG_RT2800_LIB_MMIO=m
 CONFIG_RT2X00_LIB_MMIO=m
 CONFIG_RT2X00_LIB_PCI=m
 CONFIG_RT2X00_LIB_USB=m
@@ -2063,14 +2206,17 @@ CONFIG_RT2X00_LIB_FIRMWARE=y
 CONFIG_RT2X00_LIB_CRYPTO=y
 CONFIG_RT2X00_LIB_LEDS=y
 # CONFIG_RT2X00_DEBUG is not set
-CONFIG_RTLWIFI=m
-# CONFIG_RTLWIFI_DEBUG is not set
+CONFIG_RTL_CARDS=m
 CONFIG_RTL8192CE=m
 CONFIG_RTL8192SE=m
 CONFIG_RTL8192DE=m
 CONFIG_RTL8723AE=m
 CONFIG_RTL8188EE=m
 CONFIG_RTL8192CU=m
+CONFIG_RTLWIFI=m
+CONFIG_RTLWIFI_PCI=m
+CONFIG_RTLWIFI_USB=m
+# CONFIG_RTLWIFI_DEBUG is not set
 CONFIG_RTL8192C_COMMON=m
 CONFIG_WL_TI=y
 CONFIG_WL1251=m
@@ -2086,6 +2232,8 @@ CONFIG_MWIFIEX=m
 CONFIG_MWIFIEX_SDIO=m
 # CONFIG_MWIFIEX_PCIE is not set
 CONFIG_MWIFIEX_USB=m
+CONFIG_CW1200=m
+CONFIG_CW1200_WLAN_SDIO=m
 
 #
 # Enable WiMAX (Networking options) to see the WiMAX drivers
@@ -2167,8 +2315,8 @@ CONFIG_HISAX_FRITZ_PCIPNP=m
 CONFIG_ISDN_CAPI=m
 CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
 CONFIG_CAPI_TRACE=y
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPIDRV=m
 
 #
@@ -2267,6 +2415,7 @@ CONFIG_INPUT_MISC=y
 # CONFIG_INPUT_MMA8450 is not set
 # CONFIG_INPUT_MPU3050 is not set
 # CONFIG_INPUT_GP2A is not set
+# CONFIG_INPUT_GPIO_BEEPER is not set
 # CONFIG_INPUT_GPIO_TILT_POLLED is not set
 CONFIG_INPUT_ATI_REMOTE2=m
 CONFIG_INPUT_KEYSPAN_REMOTE=m
@@ -2277,7 +2426,6 @@ CONFIG_INPUT_CM109=m
 CONFIG_INPUT_RETU_PWRBUTTON=m
 CONFIG_INPUT_UINPUT=m
 # CONFIG_INPUT_PCF8574 is not set
-CONFIG_INPUT_PWM_BEEPER=m
 CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 # CONFIG_INPUT_ADXL34X is not set
 # CONFIG_INPUT_IMS_PCU is not set
@@ -2296,6 +2444,7 @@ CONFIG_SERIO_ALTERA_PS2=m
 # CONFIG_SERIO_PS2MULT is not set
 CONFIG_SERIO_ARC_PS2=m
 CONFIG_SERIO_APBPS2=m
+# CONFIG_SERIO_OLPC_APSP is not set
 # CONFIG_GAMEPORT is not set
 
 #
@@ -2305,6 +2454,7 @@ CONFIG_TTY=y
 CONFIG_VT=y
 CONFIG_CONSOLE_TRANSLATIONS=y
 CONFIG_VT_CONSOLE=y
+CONFIG_VT_CONSOLE_SLEEP=y
 CONFIG_HW_CONSOLE=y
 CONFIG_VT_HW_CONSOLE_BINDING=y
 CONFIG_UNIX98_PTYS=y
@@ -2324,7 +2474,6 @@ CONFIG_N_HDLC=m
 CONFIG_N_GSM=m
 # CONFIG_TRACE_SINK is not set
 # CONFIG_DEVKMEM is not set
-# CONFIG_STALDRV is not set
 
 #
 # Serial drivers
@@ -2348,6 +2497,7 @@ CONFIG_SERIAL_8250_RSA=y
 # Non-8250 serial port support
 #
 # CONFIG_SERIAL_MFD_HSU is not set
+# CONFIG_SERIAL_SH_SCI is not set
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 CONFIG_SERIAL_JSM=m
@@ -2362,6 +2512,8 @@ CONFIG_SERIAL_ARC=m
 CONFIG_SERIAL_ARC_NR_PORTS=1
 CONFIG_SERIAL_RP2=m
 CONFIG_SERIAL_RP2_NR_UARTS=32
+# CONFIG_SERIAL_FSL_LPUART is not set
+# CONFIG_SERIAL_ST_ASC is not set
 # CONFIG_TTY_PRINTK is not set
 CONFIG_PRINTER=m
 CONFIG_LP_CONSOLE=y
@@ -2388,7 +2540,16 @@ CONFIG_I2C=y
 CONFIG_I2C_BOARDINFO=y
 CONFIG_I2C_COMPAT=y
 CONFIG_I2C_CHARDEV=m
-# CONFIG_I2C_MUX is not set
+CONFIG_I2C_MUX=y
+
+#
+# Multiplexer I2C Chip support
+#
+# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
+# CONFIG_I2C_MUX_GPIO is not set
+# CONFIG_I2C_MUX_PCA9541 is not set
+# CONFIG_I2C_MUX_PCA954x is not set
+# CONFIG_I2C_MUX_PINCTRL is not set
 CONFIG_I2C_HELPER_AUTO=y
 CONFIG_I2C_SMBUS=m
 CONFIG_I2C_ALGOBIT=m
@@ -2424,7 +2585,6 @@ CONFIG_I2C_CBUS_GPIO=m
 # CONFIG_I2C_DESIGNWARE_PCI is not set
 # CONFIG_I2C_EG20T is not set
 CONFIG_I2C_GPIO=m
-# CONFIG_I2C_INTEL_MID is not set
 CONFIG_I2C_MV64XXX=y
 # CONFIG_I2C_OCORES is not set
 CONFIG_I2C_PCA_PLATFORM=m
@@ -2438,6 +2598,7 @@ CONFIG_I2C_SIMTEC=m
 CONFIG_I2C_DIOLAN_U2C=m
 CONFIG_I2C_PARPORT=m
 CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_ROBOTFUZZ_OSIF=m
 # CONFIG_I2C_TAOS_EVM is not set
 CONFIG_I2C_TINY_USB=m
 CONFIG_I2C_VIPERBOARD=m
@@ -2450,11 +2611,6 @@ CONFIG_I2C_STUB=m
 # CONFIG_I2C_DEBUG_ALGO is not set
 # CONFIG_I2C_DEBUG_BUS is not set
 # CONFIG_SPI is not set
-
-#
-# Qualcomm MSM SSBI bus support
-#
-# CONFIG_SSBI is not set
 CONFIG_HSI=m
 CONFIG_HSI_BOARDINFO=y
 
@@ -2489,7 +2645,6 @@ CONFIG_PTP_1588_CLOCK=m
 #
 # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
 #
-CONFIG_PTP_1588_CLOCK_PCH=m
 CONFIG_PINCTRL=y
 
 #
@@ -2499,15 +2654,15 @@ CONFIG_PINMUX=y
 CONFIG_PINCONF=y
 CONFIG_GENERIC_PINCONF=y
 # CONFIG_DEBUG_PINCTRL is not set
+# CONFIG_PINCTRL_CAPRI is not set
+# CONFIG_PINCTRL_MSM8X74 is not set
 CONFIG_PINCTRL_SINGLE=m
-# CONFIG_PINCTRL_EXYNOS is not set
-# CONFIG_PINCTRL_EXYNOS5440 is not set
 CONFIG_PINCTRL_MVEBU=y
 CONFIG_PINCTRL_KIRKWOOD=y
 CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
 CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIO_DEVRES=y
 CONFIG_GPIOLIB=y
+CONFIG_GPIO_DEVRES=y
 CONFIG_OF_GPIO=y
 # CONFIG_DEBUG_GPIO is not set
 CONFIG_GPIO_SYSFS=y
@@ -2520,6 +2675,7 @@ CONFIG_GPIO_GENERIC_PLATFORM=y
 # CONFIG_GPIO_EM is not set
 CONFIG_GPIO_MVEBU=y
 # CONFIG_GPIO_RCAR is not set
+# CONFIG_GPIO_SCH311X is not set
 CONFIG_GPIO_TS5500=m
 # CONFIG_GPIO_VX855 is not set
 # CONFIG_GPIO_GRGPIO is not set
@@ -2550,9 +2706,14 @@ CONFIG_GPIO_MCP23S08=m
 # AC97 GPIO expanders:
 #
 
+#
+# LPC GPIO expanders:
+#
+
 #
 # MODULbus GPIO expanders:
 #
+# CONFIG_GPIO_BCM_KONA is not set
 
 #
 # USB GPIO expanders:
@@ -2608,8 +2769,9 @@ CONFIG_CHARGER_88PM860X=m
 # CONFIG_CHARGER_GPIO is not set
 # CONFIG_CHARGER_MANAGER is not set
 # CONFIG_CHARGER_BQ2415X is not set
+# CONFIG_CHARGER_BQ24190 is not set
+# CONFIG_CHARGER_BQ24735 is not set
 # CONFIG_CHARGER_SMB347 is not set
-# CONFIG_BATTERY_GOLDFISH is not set
 CONFIG_POWER_RESET=y
 CONFIG_POWER_RESET_GPIO=y
 CONFIG_POWER_RESET_QNAP=y
@@ -2641,18 +2803,20 @@ CONFIG_SENSORS_ATXP1=m
 CONFIG_SENSORS_DS620=m
 CONFIG_SENSORS_DS1621=m
 CONFIG_SENSORS_I5K_AMB=m
-CONFIG_SENSORS_F71805F=m
-CONFIG_SENSORS_F71882FG=m
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
 CONFIG_SENSORS_F75375S=m
 CONFIG_SENSORS_G760A=m
+CONFIG_SENSORS_G762=m
 CONFIG_SENSORS_GL518SM=m
 CONFIG_SENSORS_GL520SM=m
 # CONFIG_SENSORS_GPIO_FAN is not set
 CONFIG_SENSORS_HIH6130=m
+CONFIG_SENSORS_HTU21=m
 CONFIG_SENSORS_IBMAEM=m
 CONFIG_SENSORS_IBMPEX=m
 # CONFIG_SENSORS_IIO_HWMON is not set
-CONFIG_SENSORS_IT87=m
+# CONFIG_SENSORS_IT87 is not set
 # CONFIG_SENSORS_JC42 is not set
 CONFIG_SENSORS_LINEAGE=m
 CONFIG_SENSORS_LM63=y
@@ -2683,10 +2847,10 @@ CONFIG_SENSORS_MAX6642=m
 CONFIG_SENSORS_MAX6650=m
 CONFIG_SENSORS_MAX6697=m
 CONFIG_SENSORS_MCP3021=m
-CONFIG_SENSORS_NCT6775=m
+# CONFIG_SENSORS_NCT6775 is not set
 CONFIG_SENSORS_NTC_THERMISTOR=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_PC87427=m
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
 CONFIG_SENSORS_PCF8591=m
 CONFIG_PMBUS=m
 CONFIG_SENSORS_PMBUS=m
@@ -2703,16 +2867,16 @@ CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SIS5595=m
 # CONFIG_SENSORS_SMM665 is not set
-CONFIG_SENSORS_DME1737=m
+# CONFIG_SENSORS_DME1737 is not set
 CONFIG_SENSORS_EMC1403=m
 # CONFIG_SENSORS_EMC2103 is not set
 CONFIG_SENSORS_EMC6W201=m
-CONFIG_SENSORS_SMSC47M1=m
+# CONFIG_SENSORS_SMSC47M1 is not set
 CONFIG_SENSORS_SMSC47M192=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SCH56XX_COMMON=m
-CONFIG_SENSORS_SCH5627=m
-CONFIG_SENSORS_SCH5636=m
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SCH56XX_COMMON is not set
+# CONFIG_SENSORS_SCH5627 is not set
+# CONFIG_SENSORS_SCH5636 is not set
 CONFIG_SENSORS_ADS1015=m
 CONFIG_SENSORS_ADS7828=m
 CONFIG_SENSORS_AMC6821=m
@@ -2723,7 +2887,7 @@ CONFIG_SENSORS_TMP102=m
 CONFIG_SENSORS_TMP401=m
 CONFIG_SENSORS_TMP421=m
 CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_VT1211=m
+# CONFIG_SENSORS_VT1211 is not set
 CONFIG_SENSORS_VT8231=m
 CONFIG_SENSORS_W83781D=m
 CONFIG_SENSORS_W83791D=m
@@ -2733,18 +2897,24 @@ CONFIG_SENSORS_W83795=m
 # CONFIG_SENSORS_W83795_FANCTRL is not set
 CONFIG_SENSORS_W83L785TS=m
 CONFIG_SENSORS_W83L786NG=m
-CONFIG_SENSORS_W83627HF=m
-CONFIG_SENSORS_W83627EHF=m
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
 CONFIG_THERMAL=y
 CONFIG_THERMAL_HWMON=y
+CONFIG_THERMAL_OF=y
 CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
 # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
 # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
 CONFIG_THERMAL_GOV_FAIR_SHARE=y
 CONFIG_THERMAL_GOV_STEP_WISE=y
 CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_CPU_THERMAL=y
 CONFIG_THERMAL_EMULATION=y
 CONFIG_KIRKWOOD_THERMAL=m
+
+#
+# Texas Instruments thermal drivers
+#
 CONFIG_WATCHDOG=y
 CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_NOWAYOUT=y
@@ -2753,12 +2923,14 @@ CONFIG_WATCHDOG_NOWAYOUT=y
 # Watchdog Device Drivers
 #
 CONFIG_SOFT_WATCHDOG=m
+CONFIG_GPIO_WATCHDOG=m
 # CONFIG_DW_WATCHDOG is not set
 CONFIG_ORION_WATCHDOG=m
 # CONFIG_MAX63XX_WATCHDOG is not set
 CONFIG_RETU_WATCHDOG=m
 CONFIG_ALIM7101_WDT=m
 CONFIG_I6300ESB_WDT=m
+CONFIG_MEN_A21_WDT=m
 
 #
 # PCI-based Watchdog Cards
@@ -2793,13 +2965,21 @@ CONFIG_BCMA_POSSIBLE=y
 #
 # Broadcom specific AMBA
 #
-# CONFIG_BCMA is not set
+CONFIG_BCMA=m
+CONFIG_BCMA_BLOCKIO=y
+CONFIG_BCMA_HOST_PCI_POSSIBLE=y
+CONFIG_BCMA_HOST_PCI=y
+# CONFIG_BCMA_HOST_SOC is not set
+# CONFIG_BCMA_DRIVER_GMAC_CMN is not set
+# CONFIG_BCMA_DRIVER_GPIO is not set
+# CONFIG_BCMA_DEBUG is not set
 
 #
 # Multifunction device drivers
 #
 CONFIG_MFD_CORE=y
 # CONFIG_MFD_AS3711 is not set
+# CONFIG_MFD_AS3722 is not set
 # CONFIG_PMIC_ADP5520 is not set
 # CONFIG_MFD_AAT2870_CORE is not set
 # CONFIG_MFD_CROS_EC is not set
@@ -2807,6 +2987,7 @@ CONFIG_MFD_CORE=y
 # CONFIG_PMIC_DA903X is not set
 # CONFIG_MFD_DA9052_I2C is not set
 # CONFIG_MFD_DA9055 is not set
+# CONFIG_MFD_DA9063 is not set
 # CONFIG_MFD_MC13XXX_I2C is not set
 # CONFIG_HTC_EGPIO is not set
 # CONFIG_HTC_PASIC3 is not set
@@ -2814,9 +2995,11 @@ CONFIG_MFD_CORE=y
 CONFIG_LPC_ICH=m
 CONFIG_LPC_SCH=m
 # CONFIG_MFD_JANZ_CMODIO is not set
+# CONFIG_MFD_KEMPLD is not set
 CONFIG_MFD_88PM800=y
 CONFIG_MFD_88PM805=y
 CONFIG_MFD_88PM860X=y
+# CONFIG_MFD_MAX14577 is not set
 # CONFIG_MFD_MAX77686 is not set
 # CONFIG_MFD_MAX77693 is not set
 # CONFIG_MFD_MAX8907 is not set
@@ -2839,6 +3022,7 @@ CONFIG_MFD_SM501_GPIO=y
 # CONFIG_MFD_STMPE is not set
 # CONFIG_MFD_SYSCON is not set
 # CONFIG_MFD_TI_AM335X_TSCADC is not set
+# CONFIG_MFD_LP3943 is not set
 # CONFIG_MFD_LP8788 is not set
 # CONFIG_MFD_PALMAS is not set
 # CONFIG_TPS6105X is not set
@@ -2867,26 +3051,30 @@ CONFIG_MFD_VX855=m
 # CONFIG_MFD_WM831X_I2C is not set
 # CONFIG_MFD_WM8350_I2C is not set
 # CONFIG_MFD_WM8994 is not set
+# CONFIG_VEXPRESS_CONFIG is not set
 CONFIG_REGULATOR=y
 # CONFIG_REGULATOR_DEBUG is not set
-# CONFIG_REGULATOR_DUMMY is not set
 CONFIG_REGULATOR_FIXED_VOLTAGE=y
 # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
 # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
-# CONFIG_REGULATOR_GPIO is not set
+# CONFIG_REGULATOR_88PM800 is not set
+CONFIG_REGULATOR_88PM8607=y
+# CONFIG_REGULATOR_ACT8865 is not set
 # CONFIG_REGULATOR_AD5398 is not set
+# CONFIG_REGULATOR_DA9210 is not set
 # CONFIG_REGULATOR_FAN53555 is not set
+# CONFIG_REGULATOR_GPIO is not set
 # CONFIG_REGULATOR_ISL6271A is not set
-CONFIG_REGULATOR_88PM8607=y
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_LP3972 is not set
+# CONFIG_REGULATOR_LP872X is not set
+CONFIG_REGULATOR_LP8755=m
 # CONFIG_REGULATOR_MAX1586 is not set
 # CONFIG_REGULATOR_MAX8649 is not set
 # CONFIG_REGULATOR_MAX8660 is not set
 # CONFIG_REGULATOR_MAX8952 is not set
 # CONFIG_REGULATOR_MAX8973 is not set
-# CONFIG_REGULATOR_LP3971 is not set
-# CONFIG_REGULATOR_LP3972 is not set
-# CONFIG_REGULATOR_LP872X is not set
-CONFIG_REGULATOR_LP8755=m
+# CONFIG_REGULATOR_PFUZE100 is not set
 # CONFIG_REGULATOR_TPS51632 is not set
 # CONFIG_REGULATOR_TPS62360 is not set
 # CONFIG_REGULATOR_TPS65023 is not set
@@ -2918,7 +3106,6 @@ CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_MEMOPS=m
 CONFIG_VIDEOBUF2_DMA_CONTIG=m
 CONFIG_VIDEOBUF2_VMALLOC=m
-CONFIG_VIDEO_V4L2_INT_DEVICE=m
 CONFIG_DVB_CORE=y
 CONFIG_DVB_NET=y
 CONFIG_TTPCI_EEPROM=m
@@ -2996,6 +3183,7 @@ CONFIG_USB_GSPCA_SQ905=m
 CONFIG_USB_GSPCA_SQ905C=m
 CONFIG_USB_GSPCA_SQ930X=m
 CONFIG_USB_GSPCA_STK014=m
+CONFIG_USB_GSPCA_STK1135=m
 CONFIG_USB_GSPCA_STV0680=m
 CONFIG_USB_GSPCA_SUNPLUS=m
 CONFIG_USB_GSPCA_T613=m
@@ -3012,7 +3200,7 @@ CONFIG_VIDEO_CPIA2=m
 CONFIG_USB_ZR364XX=m
 CONFIG_USB_STKWEBCAM=m
 CONFIG_USB_S2255=m
-CONFIG_USB_SN9C102=m
+CONFIG_VIDEO_USBTV=m
 
 #
 # Analog TV USB devices
@@ -3024,8 +3212,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_HDPVR=m
 CONFIG_VIDEO_TLG2300=m
 CONFIG_VIDEO_USBVISION=m
-CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_STK1160_COMMON=m
 # CONFIG_VIDEO_STK1160_AC97 is not set
+CONFIG_VIDEO_STK1160=m
 
 #
 # Analog/digital TV USB devices
@@ -3094,6 +3283,7 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m
 # Webcam, TV (analog/digital) USB devices
 #
 CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_V4L2=m
 CONFIG_VIDEO_EM28XX_ALSA=m
 CONFIG_VIDEO_EM28XX_DVB=m
 CONFIG_VIDEO_EM28XX_RC=m
@@ -3126,6 +3316,7 @@ CONFIG_VIDEO_CX88=m
 CONFIG_VIDEO_CX88_ALSA=m
 CONFIG_VIDEO_CX88_BLACKBIRD=m
 CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_ENABLE_VP3054=y
 CONFIG_VIDEO_CX88_VP3054=m
 CONFIG_VIDEO_CX88_MPEG=m
 CONFIG_VIDEO_BT848=m
@@ -3160,12 +3351,15 @@ CONFIG_V4L_PLATFORM_DRIVERS=y
 CONFIG_VIDEO_CAFE_CCIC=m
 CONFIG_VIDEO_TIMBERDALE=m
 CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_SCALE_CROP=m
 CONFIG_SOC_CAMERA_PLATFORM=m
+CONFIG_VIDEO_RCAR_VIN=m
 # CONFIG_VIDEO_SH_MOBILE_CSI2 is not set
 # CONFIG_VIDEO_SH_MOBILE_CEU is not set
 CONFIG_V4L_MEM2MEM_DRIVERS=y
 CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
 CONFIG_VIDEO_SH_VEU=m
+CONFIG_VIDEO_RENESAS_VSP1=m
 # CONFIG_V4L_TEST_DRIVERS is not set
 
 #
@@ -3193,7 +3387,6 @@ CONFIG_VIDEO_SAA7146=m
 CONFIG_VIDEO_SAA7146_VV=m
 CONFIG_SMS_SIANO_MDTV=m
 CONFIG_SMS_SIANO_RC=y
-# CONFIG_SMS_SIANO_DEBUGFS is not set
 
 #
 # Media ancillary drivers (tuners, sensors, i2c, frontends)
@@ -3257,7 +3450,12 @@ CONFIG_VIDEO_UPD64031A=m
 CONFIG_VIDEO_UPD64083=m
 
 #
-# Miscelaneous helper chips
+# Audio/Video compression chips
+#
+CONFIG_VIDEO_SAA6752HS=m
+
+#
+# Miscellaneous helper chips
 #
 CONFIG_VIDEO_M52790=m
 
@@ -3308,6 +3506,7 @@ CONFIG_MEDIA_TUNER_FC0013=m
 CONFIG_MEDIA_TUNER_TDA18212=m
 CONFIG_MEDIA_TUNER_E4000=m
 CONFIG_MEDIA_TUNER_FC2580=m
+CONFIG_MEDIA_TUNER_M88TS2022=m
 CONFIG_MEDIA_TUNER_TUA9001=m
 CONFIG_MEDIA_TUNER_IT913X=m
 CONFIG_MEDIA_TUNER_R820T=m
@@ -3319,6 +3518,7 @@ CONFIG_DVB_STB0899=m
 CONFIG_DVB_STB6100=m
 CONFIG_DVB_STV090x=m
 CONFIG_DVB_STV6110x=m
+CONFIG_DVB_M88DS3103=m
 
 #
 # Multistandard (cable + terrestrial) frontends
@@ -3349,8 +3549,7 @@ CONFIG_DVB_TUNER_CX24113=m
 CONFIG_DVB_TDA826X=m
 CONFIG_DVB_TUA6100=m
 CONFIG_DVB_CX24116=m
-CONFIG_DVB_M88DS3103=m
-CONFIG_DVB_M88DC2800=m
+CONFIG_DVB_CX24117=m
 CONFIG_DVB_SI21XX=m
 CONFIG_DVB_TS2020=m
 CONFIG_DVB_DS3000=m
@@ -3432,6 +3631,8 @@ CONFIG_DVB_A8293=m
 CONFIG_DVB_LGS8GXX=m
 CONFIG_DVB_ATBM8830=m
 CONFIG_DVB_TDA665x=m
+CONFIG_DVB_DVBSKY_M88DS3103=m
+CONFIG_DVB_M88DC2800=m
 CONFIG_DVB_IX2505V=m
 CONFIG_DVB_IT913X_FE=m
 CONFIG_DVB_M88RS2000=m
@@ -3450,6 +3651,7 @@ CONFIG_VGA_ARB_MAX_GPUS=16
 CONFIG_DRM=m
 CONFIG_DRM_USB=m
 CONFIG_DRM_KMS_HELPER=m
+CONFIG_DRM_KMS_FB_HELPER=y
 # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
 
 #
@@ -3470,8 +3672,12 @@ CONFIG_DRM_UDL=m
 # CONFIG_DRM_AST is not set
 # CONFIG_DRM_MGAG200 is not set
 # CONFIG_DRM_CIRRUS_QEMU is not set
+# CONFIG_DRM_ARMADA is not set
+# CONFIG_DRM_RCAR_DU is not set
+# CONFIG_DRM_SHMOBILE is not set
 # CONFIG_DRM_TILCDC is not set
 # CONFIG_DRM_QXL is not set
+# CONFIG_DRM_BOCHS is not set
 # CONFIG_VGASTATE is not set
 # CONFIG_VIDEO_OUTPUT_CONTROL is not set
 CONFIG_HDMI=y
@@ -3504,6 +3710,7 @@ CONFIG_FB_MODE_HELPERS=y
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_IMSTT is not set
 # CONFIG_FB_UVESA is not set
+# CONFIG_FB_OPENCORES is not set
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_NVIDIA is not set
 # CONFIG_FB_RIVA is not set
@@ -3546,9 +3753,12 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
 # CONFIG_BACKLIGHT_ADP8860 is not set
 # CONFIG_BACKLIGHT_ADP8870 is not set
 # CONFIG_BACKLIGHT_88PM860X is not set
-# CONFIG_BACKLIGHT_LM3630 is not set
+# CONFIG_BACKLIGHT_LM3630A is not set
 # CONFIG_BACKLIGHT_LM3639 is not set
 # CONFIG_BACKLIGHT_LP855X is not set
+# CONFIG_BACKLIGHT_GPIO is not set
+# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_BD6107 is not set
 
 #
 # Console display driver support
@@ -3557,9 +3767,6 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
 # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
 CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_MONO is not set
 # CONFIG_LOGO_LINUX_VGA16 is not set
@@ -3585,6 +3792,7 @@ CONFIG_SND_SEQUENCER_OSS=y
 CONFIG_SND_HRTIMER=m
 CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
 CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_MAX_CARDS=32
 # CONFIG_SND_SUPPORT_OLD_API is not set
 CONFIG_SND_VERBOSE_PROCFS=y
 CONFIG_SND_VERBOSE_PRINTK=y
@@ -3613,7 +3821,6 @@ CONFIG_SND_MPU401=m
 CONFIG_SND_PORTMAN2X4=m
 CONFIG_SND_AC97_POWER_SAVE=y
 CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
-CONFIG_SND_TEA575X=m
 CONFIG_SND_PCI=y
 CONFIG_SND_AD1889=m
 CONFIG_SND_ALS300=m
@@ -3657,9 +3864,7 @@ CONFIG_SND_ENS1371=m
 CONFIG_SND_ES1938=m
 CONFIG_SND_ES1968=m
 CONFIG_SND_ES1968_INPUT=y
-CONFIG_SND_ES1968_RADIO=y
 CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X_BOOL=y
 CONFIG_SND_HDA_INTEL=m
 CONFIG_SND_HDA_PREALLOC_SIZE=64
 CONFIG_SND_HDA_HWDEP=y
@@ -3668,19 +3873,19 @@ CONFIG_SND_HDA_INPUT_BEEP=y
 CONFIG_SND_HDA_INPUT_BEEP_MODE=1
 CONFIG_SND_HDA_INPUT_JACK=y
 # CONFIG_SND_HDA_PATCH_LOADER is not set
-CONFIG_SND_HDA_CODEC_REALTEK=y
-CONFIG_SND_HDA_CODEC_ANALOG=y
-CONFIG_SND_HDA_CODEC_SIGMATEL=y
-CONFIG_SND_HDA_CODEC_VIA=y
-CONFIG_SND_HDA_CODEC_HDMI=y
-CONFIG_SND_HDA_CODEC_CIRRUS=y
-CONFIG_SND_HDA_CODEC_CONEXANT=y
-CONFIG_SND_HDA_CODEC_CA0110=y
-CONFIG_SND_HDA_CODEC_CA0132=y
+CONFIG_SND_HDA_CODEC_REALTEK=m
+CONFIG_SND_HDA_CODEC_ANALOG=m
+CONFIG_SND_HDA_CODEC_SIGMATEL=m
+CONFIG_SND_HDA_CODEC_VIA=m
+CONFIG_SND_HDA_CODEC_HDMI=m
+CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CONEXANT=m
+CONFIG_SND_HDA_CODEC_CA0110=m
+CONFIG_SND_HDA_CODEC_CA0132=m
 # CONFIG_SND_HDA_CODEC_CA0132_DSP is not set
-CONFIG_SND_HDA_CODEC_CMEDIA=y
-CONFIG_SND_HDA_CODEC_SI3054=y
-CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_CODEC_CMEDIA=m
+CONFIG_SND_HDA_CODEC_SI3054=m
+CONFIG_SND_HDA_GENERIC=m
 CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
 CONFIG_SND_HDSP=m
 CONFIG_SND_HDSPM=m
@@ -3714,8 +3919,10 @@ CONFIG_SND_USB_UA101=m
 CONFIG_SND_USB_CAIAQ=m
 CONFIG_SND_USB_CAIAQ_INPUT=y
 CONFIG_SND_USB_6FIRE=m
+CONFIG_SND_USB_HIFACE=m
 CONFIG_SND_FIREWIRE=y
 CONFIG_SND_FIREWIRE_LIB=m
+CONFIG_SND_DICE=m
 CONFIG_SND_FIREWIRE_SPEAKERS=m
 # CONFIG_SND_ISIGHT is not set
 # CONFIG_SND_SCS1X is not set
@@ -3723,11 +3930,9 @@ CONFIG_SND_SOC=m
 CONFIG_SND_ATMEL_SOC=m
 CONFIG_SND_DESIGNWARE_I2S=m
 CONFIG_SND_KIRKWOOD_SOC=m
-CONFIG_SND_KIRKWOOD_SOC_I2S=m
 CONFIG_SND_KIRKWOOD_SOC_OPENRD=m
 CONFIG_SND_KIRKWOOD_SOC_T5325=m
 CONFIG_SND_SOC_I2C_AND_SPI=m
-# CONFIG_SND_SOC_ALL_CODECS is not set
 CONFIG_SND_SOC_ALC5623=m
 CONFIG_SND_SOC_CS42L51=m
 CONFIG_SND_SIMPLE_CARD=m
@@ -3759,8 +3964,10 @@ CONFIG_HID_CYPRESS=y
 # CONFIG_HID_DRAGONRISE is not set
 # CONFIG_HID_EMS_FF is not set
 # CONFIG_HID_ELECOM is not set
+CONFIG_HID_ELO=m
 CONFIG_HID_EZKEY=y
 # CONFIG_HID_HOLTEK is not set
+# CONFIG_HID_HUION is not set
 CONFIG_HID_KEYTOUCH=m
 CONFIG_HID_KYE=y
 # CONFIG_HID_UCLOGIC is not set
@@ -3792,7 +3999,6 @@ CONFIG_HID_PICOLCD_LCD=y
 CONFIG_HID_PICOLCD_LEDS=y
 CONFIG_HID_PICOLCD_CIR=y
 # CONFIG_HID_PRIMAX is not set
-# CONFIG_HID_PS3REMOTE is not set
 CONFIG_HID_ROCCAT=m
 CONFIG_HID_SAITEK=m
 CONFIG_HID_SAMSUNG=m
@@ -3808,6 +4014,7 @@ CONFIG_HID_THINGM=m
 # CONFIG_HID_THRUSTMASTER is not set
 # CONFIG_HID_WACOM is not set
 # CONFIG_HID_WIIMOTE is not set
+# CONFIG_HID_XINMO is not set
 # CONFIG_HID_ZEROPLUS is not set
 CONFIG_HID_ZYDACRON=m
 CONFIG_HID_SENSOR_HUB=m
@@ -3823,9 +4030,7 @@ CONFIG_USB_HIDDEV=y
 # I2C HID support
 #
 CONFIG_I2C_HID=m
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB_ARCH_HAS_XHCI=y
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_COMMON=y
 CONFIG_USB_ARCH_HAS_HCD=y
@@ -3852,7 +4057,6 @@ CONFIG_USB_WUSB_CBAF=m
 # CONFIG_USB_C67X00_HCD is not set
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_PLATFORM=m
-# CONFIG_USB_XHCI_HCD_DEBUGGING is not set
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_EHCI_TT_NEWSCHED=y
@@ -3863,11 +4067,11 @@ CONFIG_USB_EHCI_HCD_PLATFORM=y
 # CONFIG_USB_ISP116X_HCD is not set
 # CONFIG_USB_ISP1760_HCD is not set
 CONFIG_USB_ISP1362_HCD=m
+# CONFIG_USB_FUSBH200_HCD is not set
+# CONFIG_USB_FOTG210_HCD is not set
 CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PCI=y
 CONFIG_USB_OHCI_HCD_PLATFORM=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_UHCI_HCD=y
 # CONFIG_USB_U132_HCD is not set
 CONFIG_USB_SL811_HCD=m
@@ -3875,7 +4079,9 @@ CONFIG_USB_SL811_HCD_ISO=y
 # CONFIG_USB_R8A66597_HCD is not set
 CONFIG_USB_WHCI_HCD=m
 CONFIG_USB_HWA_HCD=m
+# CONFIG_USB_HCD_BCMA is not set
 CONFIG_USB_HCD_SSB=m
+# CONFIG_USB_HCD_TEST_MODE is not set
 
 #
 # USB Device Class drivers
@@ -3914,9 +4120,22 @@ CONFIG_USB_STORAGE_ENE_UB6250=m
 #
 CONFIG_USB_MDC800=m
 CONFIG_USB_MICROTEK=m
+# CONFIG_USB_MUSB_HDRC is not set
 CONFIG_USB_DWC3=m
 CONFIG_USB_DWC3_HOST=y
+
+#
+# Platform Glue Driver Support
+#
+# CONFIG_USB_DWC3_EXYNOS is not set
+CONFIG_USB_DWC3_PCI=m
+CONFIG_USB_DWC3_KEYSTONE=m
+
+#
+# Debugging features
+#
 # CONFIG_USB_DWC3_DEBUG is not set
+# CONFIG_USB_DWC2 is not set
 CONFIG_USB_CHIPIDEA=m
 # CONFIG_USB_CHIPIDEA_HOST is not set
 # CONFIG_USB_CHIPIDEA_DEBUG is not set
@@ -3927,6 +4146,7 @@ CONFIG_USB_CHIPIDEA=m
 CONFIG_USB_USS720=m
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_SIMPLE=m
 CONFIG_USB_SERIAL_AIRCABLE=m
 CONFIG_USB_SERIAL_ARK3116=m
 CONFIG_USB_SERIAL_BELKIN=m
@@ -3937,7 +4157,6 @@ CONFIG_USB_SERIAL_CP210X=m
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 # CONFIG_USB_SERIAL_EMPEG is not set
 CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
 CONFIG_USB_SERIAL_VISOR=m
 CONFIG_USB_SERIAL_IPAQ=m
 CONFIG_USB_SERIAL_IR=m
@@ -3956,16 +4175,14 @@ CONFIG_USB_SERIAL_MCT_U232=m
 CONFIG_USB_SERIAL_MOS7720=m
 CONFIG_USB_SERIAL_MOS7715_PARPORT=y
 CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_MXUPORT=m
 # CONFIG_USB_SERIAL_NAVMAN is not set
 CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_OTI6858=m
 CONFIG_USB_SERIAL_QCAUX=m
 CONFIG_USB_SERIAL_QUALCOMM=m
 CONFIG_USB_SERIAL_SPCP8X5=m
-# CONFIG_USB_SERIAL_HP4X is not set
 # CONFIG_USB_SERIAL_SAFE is not set
-CONFIG_USB_SERIAL_SIEMENS_MPI=m
 CONFIG_USB_SERIAL_SIERRAWIRELESS=m
 # CONFIG_USB_SERIAL_SYMBOL is not set
 # CONFIG_USB_SERIAL_TI is not set
@@ -3975,9 +4192,7 @@ CONFIG_USB_SERIAL_WWAN=m
 CONFIG_USB_SERIAL_OPTION=m
 # CONFIG_USB_SERIAL_OMNINET is not set
 # CONFIG_USB_SERIAL_OPTICON is not set
-# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
 # CONFIG_USB_SERIAL_XSENS_MT is not set
-# CONFIG_USB_SERIAL_ZIO is not set
 # CONFIG_USB_SERIAL_WISHBONE is not set
 CONFIG_USB_SERIAL_ZTE=m
 CONFIG_USB_SERIAL_SSU100=m
@@ -4006,6 +4221,7 @@ CONFIG_USB_SISUSBVGA_CON=y
 # CONFIG_USB_TRANCEVIBRATOR is not set
 CONFIG_USB_IOWARRIOR=m
 # CONFIG_USB_TEST is not set
+# CONFIG_USB_EHSET_TEST_FIXTURE is not set
 # CONFIG_USB_ISIGHTFW is not set
 CONFIG_USB_YUREX=m
 CONFIG_USB_EZUSB_FX2=m
@@ -4015,7 +4231,20 @@ CONFIG_USB_SPEEDTOUCH=m
 CONFIG_USB_CXACRU=m
 CONFIG_USB_UEAGLEATM=m
 CONFIG_USB_XUSBATM=m
+
+#
+# USB Physical Layer drivers
+#
 # CONFIG_USB_PHY is not set
+# CONFIG_USB_OTG_FSM is not set
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_AM335X_PHY_USB is not set
+# CONFIG_SAMSUNG_USB2PHY is not set
+# CONFIG_SAMSUNG_USB3PHY is not set
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ISP1301 is not set
+# CONFIG_USB_RCAR_PHY is not set
+# CONFIG_USB_ULPI is not set
 # CONFIG_USB_GADGET is not set
 CONFIG_UWB=m
 CONFIG_UWB_HWA=m
@@ -4042,6 +4271,7 @@ CONFIG_MMC_SDHCI=m
 CONFIG_MMC_SDHCI_PCI=m
 CONFIG_MMC_RICOH_MMC=y
 CONFIG_MMC_SDHCI_PLTFM=m
+# CONFIG_MMC_SDHCI_OF_ARASAN is not set
 CONFIG_MMC_SDHCI_PXAV3=m
 CONFIG_MMC_SDHCI_PXAV2=m
 CONFIG_MMC_TIFM_SD=m
@@ -4052,6 +4282,7 @@ CONFIG_MMC_DW=m
 # CONFIG_MMC_DW_IDMAC is not set
 CONFIG_MMC_DW_PLTFM=m
 CONFIG_MMC_DW_EXYNOS=m
+# CONFIG_MMC_DW_K3 is not set
 CONFIG_MMC_DW_PCI=m
 CONFIG_MMC_VUB300=m
 CONFIG_MMC_USHC=m
@@ -4064,6 +4295,7 @@ CONFIG_MEMSTICK=m
 #
 # CONFIG_MEMSTICK_UNSAFE_RESUME is not set
 CONFIG_MSPRO_BLOCK=m
+CONFIG_MS_BLOCK=m
 
 #
 # MemoryStick Host Controller Drivers
@@ -4089,15 +4321,16 @@ CONFIG_LEDS_LP55XX_COMMON=m
 CONFIG_LEDS_LP5521=m
 CONFIG_LEDS_LP5523=m
 CONFIG_LEDS_LP5562=m
+CONFIG_LEDS_LP8501=m
 # CONFIG_LEDS_PCA955X is not set
-CONFIG_LEDS_PCA9633=m
+CONFIG_LEDS_PCA963X=m
+CONFIG_LEDS_PCA9685=m
 CONFIG_LEDS_PWM=m
 CONFIG_LEDS_REGULATOR=m
 # CONFIG_LEDS_BD2802 is not set
 CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_NS2=m
 CONFIG_LEDS_NETXBIG=m
-# CONFIG_LEDS_RENESAS_TPU is not set
 CONFIG_LEDS_TCA6507=m
 CONFIG_LEDS_LM355x=m
 CONFIG_LEDS_OT200=m
@@ -4149,11 +4382,14 @@ CONFIG_RTC_DRV_DS1307=m
 CONFIG_RTC_DRV_DS1374=m
 CONFIG_RTC_DRV_DS1672=m
 CONFIG_RTC_DRV_DS3232=m
+CONFIG_RTC_DRV_HYM8563=m
 CONFIG_RTC_DRV_MAX6900=m
 CONFIG_RTC_DRV_RS5C372=m
 CONFIG_RTC_DRV_ISL1208=m
 CONFIG_RTC_DRV_ISL12022=m
+CONFIG_RTC_DRV_ISL12057=m
 CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF2127=m
 CONFIG_RTC_DRV_PCF8523=m
 CONFIG_RTC_DRV_PCF8563=m
 CONFIG_RTC_DRV_PCF8583=m
@@ -4194,6 +4430,7 @@ CONFIG_RTC_DRV_DS2404=m
 #
 CONFIG_RTC_DRV_MV=y
 CONFIG_RTC_DRV_SNVS=m
+CONFIG_RTC_DRV_MOXART=m
 
 #
 # HID Sensor RTC drivers
@@ -4206,7 +4443,9 @@ CONFIG_DMADEVICES=y
 # DMA Devices
 #
 CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y
+# CONFIG_DW_DMAC_CORE is not set
 # CONFIG_DW_DMAC is not set
+# CONFIG_DW_DMAC_PCI is not set
 CONFIG_MV_XOR=y
 CONFIG_TIMB_DMA=m
 CONFIG_DMA_ENGINE=y
@@ -4217,16 +4456,17 @@ CONFIG_DMA_OF=y
 #
 CONFIG_ASYNC_TX_DMA=y
 # CONFIG_DMATEST is not set
+CONFIG_DMA_ENGINE_RAID=y
 # CONFIG_AUXDISPLAY is not set
 CONFIG_UIO=m
 # CONFIG_UIO_CIF is not set
-# CONFIG_UIO_PDRV is not set
 # CONFIG_UIO_PDRV_GENIRQ is not set
 # CONFIG_UIO_DMEM_GENIRQ is not set
 CONFIG_UIO_AEC=m
 CONFIG_UIO_SERCOS3=m
 CONFIG_UIO_PCI_GENERIC=m
 # CONFIG_UIO_NETX is not set
+# CONFIG_UIO_MF624 is not set
 CONFIG_VIRT_DRIVERS=y
 
 #
@@ -4248,14 +4488,16 @@ CONFIG_USBIP_HOST=m
 # CONFIG_PRISM2_USB is not set
 # CONFIG_ECHO is not set
 # CONFIG_COMEDI is not set
-# CONFIG_ASUS_OLED is not set
 # CONFIG_PANEL is not set
 # CONFIG_R8187SE is not set
 # CONFIG_RTL8192U is not set
 # CONFIG_RTLLIB is not set
 # CONFIG_R8712U is not set
+# CONFIG_R8188EU is not set
+# CONFIG_R8821AE is not set
 CONFIG_RTS5139=m
 # CONFIG_RTS5139_DEBUG is not set
+# CONFIG_RTS5208 is not set
 # CONFIG_TRANZPORT is not set
 # CONFIG_IDE_PHISON is not set
 # CONFIG_LINE6_USB is not set
@@ -4330,10 +4572,7 @@ CONFIG_RTS5139=m
 # Triggers - standalone
 #
 # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
-# CONFIG_IIO_GPIO_TRIGGER is not set
-# CONFIG_IIO_SYSFS_TRIGGER is not set
 # CONFIG_IIO_SIMPLE_DUMMY is not set
-# CONFIG_ZSMALLOC is not set
 # CONFIG_FB_SM7XX is not set
 # CONFIG_CRYSTALHD is not set
 # CONFIG_FB_XGI is not set
@@ -4355,13 +4594,19 @@ CONFIG_RTS5139=m
 # CONFIG_ANDROID is not set
 # CONFIG_USB_WPAN_HCD is not set
 # CONFIG_WIMAX_GDM72XX is not set
-# CONFIG_CSR_WIFI is not set
+CONFIG_LTE_GDM724X=m
 CONFIG_NET_VENDOR_SILICOM=y
 CONFIG_SBYPASS=m
 CONFIG_BPCTL=m
 CONFIG_CED1401=m
 # CONFIG_DGRP is not set
 CONFIG_FIREWIRE_SERIAL=m
+CONFIG_FWTTY_MAX_TOTAL_PORTS=64
+CONFIG_FWTTY_MAX_CARD_PORTS=32
+# CONFIG_LUSTRE_FS is not set
+# CONFIG_XILLYBUS is not set
+# CONFIG_DGNC is not set
+# CONFIG_DGAP is not set
 CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
@@ -4369,15 +4614,18 @@ CONFIG_COMMON_CLK=y
 #
 # Common Clock Framework
 #
-# CONFIG_COMMON_CLK_DEBUG is not set
 CONFIG_COMMON_CLK_SI5351=m
-CONFIG_MVEBU_CLK_CORE=y
-CONFIG_MVEBU_CLK_GATING=y
+# CONFIG_COMMON_CLK_SI570 is not set
+# CONFIG_COMMON_CLK_QCOM is not set
+CONFIG_MVEBU_CLK_COMMON=y
+CONFIG_KIRKWOOD_CLK=y
 
 #
 # Hardware Spinlock drivers
 #
+CONFIG_CLKSRC_OF=y
 CONFIG_CLKSRC_MMIO=y
+CONFIG_ORION_TIMER=y
 CONFIG_MAILBOX=y
 CONFIG_IOMMU_SUPPORT=y
 CONFIG_OF_IOMMU=y
@@ -4393,6 +4641,7 @@ CONFIG_OF_IOMMU=y
 # CONFIG_PM_DEVFREQ is not set
 # CONFIG_EXTCON is not set
 CONFIG_MEMORY=y
+# CONFIG_MVEBU_DEVBUS is not set
 CONFIG_IIO=m
 CONFIG_IIO_BUFFER=y
 CONFIG_IIO_BUFFER_CB=y
@@ -4403,6 +4652,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 # Accelerometers
 #
+# CONFIG_BMA180 is not set
 # CONFIG_HID_SENSOR_ACCEL_3D is not set
 # CONFIG_IIO_ST_ACCEL_3AXIS is not set
 
@@ -4411,6 +4661,8 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 # CONFIG_EXYNOS_ADC is not set
 # CONFIG_MAX1363 is not set
+# CONFIG_MCP3422 is not set
+# CONFIG_NAU7802 is not set
 # CONFIG_TI_ADC081C is not set
 # CONFIG_VIPERBOARD_ADC is not set
 
@@ -4423,7 +4675,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 CONFIG_HID_SENSOR_IIO_COMMON=m
 CONFIG_HID_SENSOR_IIO_TRIGGER=m
-# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set
 
 #
 # Digital to analog converters
@@ -4453,6 +4704,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
 # CONFIG_IIO_ST_GYRO_3AXIS is not set
 # CONFIG_ITG3200 is not set
 
+#
+# Humidity sensors
+#
+CONFIG_DHT11=m
+
 #
 # Inertial measurement units
 #
@@ -4462,22 +4718,65 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
 # Light sensors
 #
 # CONFIG_ADJD_S311 is not set
+# CONFIG_APDS9300 is not set
+# CONFIG_CM32181 is not set
+# CONFIG_CM36651 is not set
+# CONFIG_GP2AP020A00F is not set
+# CONFIG_HID_SENSOR_ALS is not set
 # CONFIG_SENSORS_LM3533 is not set
+# CONFIG_TCS3472 is not set
 # CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_TSL4531 is not set
 # CONFIG_VCNL4000 is not set
-# CONFIG_HID_SENSOR_ALS is not set
 
 #
 # Magnetometer sensors
 #
 # CONFIG_AK8975 is not set
+# CONFIG_MAG3110 is not set
 # CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set
 # CONFIG_IIO_ST_MAGN_3AXIS is not set
+
+#
+# Inclinometer sensors
+#
+# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set
+
+#
+# Triggers - standalone
+#
+# CONFIG_IIO_INTERRUPT_TRIGGER is not set
+# CONFIG_IIO_SYSFS_TRIGGER is not set
+
+#
+# Pressure sensors
+#
+# CONFIG_MPL3115 is not set
+# CONFIG_IIO_ST_PRESS is not set
+
+#
+# Temperature sensors
+#
+# CONFIG_TMP006 is not set
 # CONFIG_VME_BUS is not set
 CONFIG_PWM=y
+CONFIG_PWM_SYSFS=y
+# CONFIG_PWM_PCA9685 is not set
 CONFIG_IRQCHIP=y
+CONFIG_ORION_IRQCHIP=y
 # CONFIG_IPACK_BUS is not set
-# CONFIG_RESET_CONTROLLER is not set
+CONFIG_RESET_CONTROLLER=y
+# CONFIG_FMC is not set
+
+#
+# PHY Subsystem
+#
+CONFIG_GENERIC_PHY=y
+# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
+CONFIG_PHY_MVEBU_SATA=y
+# CONFIG_PHY_EXYNOS_DP_VIDEO is not set
+# CONFIG_BCM_KONA_USB2_PHY is not set
+# CONFIG_POWERCAP is not set
 
 #
 # File systems
@@ -4512,6 +4811,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
 # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
 # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
 # CONFIG_BTRFS_DEBUG is not set
+CONFIG_BTRFS_ASSERT=y
 # CONFIG_NILFS2_FS is not set
 CONFIG_FS_POSIX_ACL=y
 CONFIG_EXPORTFS=y
@@ -4532,7 +4832,6 @@ CONFIG_QUOTACTL=y
 CONFIG_AUTOFS4_FS=y
 CONFIG_FUSE_FS=m
 CONFIG_CUSE=m
-CONFIG_GENERIC_ACL=y
 
 #
 # Caches
@@ -4614,10 +4913,13 @@ CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=m
 # CONFIG_NFS_SWAP is not set
 CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
 CONFIG_PNFS_FILE_LAYOUT=m
 CONFIG_PNFS_BLOCK=m
 CONFIG_PNFS_OBJLAYOUT=m
 CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="ipfire.org"
+CONFIG_NFS_V4_1_MIGRATION=y
+CONFIG_NFS_V4_SECURITY_LABEL=y
 CONFIG_NFS_FSCACHE=y
 # CONFIG_NFS_USE_LEGACY_DNS is not set
 CONFIG_NFS_USE_KERNEL_DNS=y
@@ -4626,6 +4928,7 @@ CONFIG_NFSD_V2_ACL=y
 CONFIG_NFSD_V3=y
 CONFIG_NFSD_V3_ACL=y
 CONFIG_NFSD_V4=y
+CONFIG_NFSD_V4_SECURITY_LABEL=y
 # CONFIG_NFSD_FAULT_INJECTION is not set
 CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
@@ -4709,59 +5012,83 @@ CONFIG_DLM=m
 #
 # Kernel hacking
 #
+
+#
+# printk and dmesg options
+#
 # CONFIG_PRINTK_TIME is not set
 CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+# CONFIG_BOOT_PRINTK_DELAY is not set
+CONFIG_DYNAMIC_DEBUG=y
+
+#
+# Compile-time checks and compiler options
+#
+# CONFIG_DEBUG_INFO is not set
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 CONFIG_ENABLE_MUST_CHECK=y
 CONFIG_FRAME_WARN=2048
-# CONFIG_MAGIC_SYSRQ is not set
 CONFIG_STRIP_ASM_SYMS=y
 # CONFIG_READABLE_ASM is not set
 # CONFIG_UNUSED_SYMBOLS is not set
 CONFIG_DEBUG_FS=y
 CONFIG_HEADERS_CHECK=y
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_MAGIC_SYSRQ is not set
 CONFIG_DEBUG_KERNEL=y
+
+#
+# Memory Debugging
+#
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_HIGHMEM is not set
 CONFIG_DEBUG_SHIRQ=y
+
+#
+# Debug Lockups and Hangs
+#
 CONFIG_LOCKUP_DETECTOR=y
 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+# CONFIG_DETECT_HUNG_TASK is not set
 # CONFIG_PANIC_ON_OOPS is not set
 CONFIG_PANIC_ON_OOPS_VALUE=0
-# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_TIMEOUT=0
 CONFIG_SCHED_DEBUG=y
 CONFIG_SCHEDSTATS=y
 CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_HAVE_DEBUG_KMEMLEAK=y
-# CONFIG_DEBUG_KMEMLEAK is not set
+
+#
+# Lock Debugging (spinlocks, mutexes, etc...)
+#
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
 # CONFIG_DEBUG_LOCK_ALLOC is not set
 # CONFIG_PROVE_LOCKING is not set
 # CONFIG_LOCK_STAT is not set
 # CONFIG_DEBUG_ATOMIC_SLEEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 CONFIG_STACKTRACE=y
-# CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_HIGHMEM is not set
 CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
 # CONFIG_DEBUG_WRITECOUNT is not set
-CONFIG_DEBUG_MEMORY_INIT=y
 CONFIG_DEBUG_LIST=y
-# CONFIG_TEST_LIST_SORT is not set
 # CONFIG_DEBUG_SG is not set
 # CONFIG_DEBUG_NOTIFIERS is not set
 # CONFIG_DEBUG_CREDENTIALS is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
 
 #
 # RCU Debugging
@@ -4769,13 +5096,9 @@ CONFIG_FRAME_POINTER=y
 # CONFIG_SPARSE_RCU_POINTER is not set
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_RCU_TRACE is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-# CONFIG_LKDTM is not set
 # CONFIG_NOTIFIER_ERROR_INJECTION is not set
 # CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
 CONFIG_NOP_TRACER=y
 CONFIG_HAVE_FUNCTION_TRACER=y
 CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
@@ -4811,29 +5134,49 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
 # CONFIG_FTRACE_STARTUP_TEST is not set
 CONFIG_RING_BUFFER_BENCHMARK=m
 # CONFIG_RING_BUFFER_STARTUP_TEST is not set
+
+#
+# Runtime Testing
+#
+# CONFIG_LKDTM is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
 CONFIG_RBTREE_TEST=m
 # CONFIG_INTERVAL_TREE_TEST is not set
-# CONFIG_BUILD_DOCSRC is not set
-CONFIG_DYNAMIC_DEBUG=y
-# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_PERCPU_TEST is not set
 # CONFIG_ATOMIC64_SELFTEST is not set
 CONFIG_ASYNC_RAID6_TEST=m
+# CONFIG_TEST_STRING_HELPERS is not set
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_BUILD_DOCSRC is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_TEST_MODULE is not set
+# CONFIG_TEST_USER_COPY is not set
 # CONFIG_SAMPLES is not set
 CONFIG_HAVE_ARCH_KGDB=y
 # CONFIG_KGDB is not set
-# CONFIG_TEST_STRING_HELPERS is not set
-# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_ARM_PTDUMP is not set
 CONFIG_STRICT_DEVMEM=y
 CONFIG_ARM_UNWIND=y
 CONFIG_OLD_MCOUNT=y
 # CONFIG_DEBUG_USER is not set
 CONFIG_DEBUG_LL=y
-CONFIG_DEBUG_LL_UART_NONE=y
+# CONFIG_DEBUG_LL_UART_NONE is not set
 # CONFIG_DEBUG_ICEDCC is not set
 # CONFIG_DEBUG_SEMIHOSTING is not set
-CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
+# CONFIG_DEBUG_LL_UART_8250 is not set
+CONFIG_DEBUG_LL_UART_PL01X=y
+CONFIG_DEBUG_LL_INCLUDE="debug/8250.S"
+# CONFIG_DEBUG_UART_PL01X is not set
+CONFIG_DEBUG_UART_8250=y
+CONFIG_DEBUG_UART_PHYS=0xf1012000
+CONFIG_DEBUG_UART_VIRT=0xfed12000
+CONFIG_DEBUG_UART_8250_SHIFT=2
+# CONFIG_DEBUG_UART_8250_WORD is not set
+# CONFIG_DEBUG_UART_8250_FLOW_CONTROL is not set
 CONFIG_UNCOMPRESS_INCLUDE="mach/uncompress.h"
 CONFIG_EARLY_PRINTK=y
+CONFIG_DEBUG_SET_MODULE_RONX=y
 
 #
 # Security options
@@ -4891,13 +5234,14 @@ CONFIG_PAX_USERCOPY=y
 # Memory Protections
 #
 # CONFIG_GRKERNSEC_KMEM is not set
-CONFIG_GRKERNSEC_JIT_HARDEN=y
 # CONFIG_GRKERNSEC_PERF_HARDEN is not set
 CONFIG_GRKERNSEC_RAND_THREADSTACK=y
 CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
+CONFIG_GRKERNSEC_RANDSTRUCT=y
+CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
 
 #
@@ -4956,12 +5300,12 @@ CONFIG_GRKERNSEC_DMESG=y
 CONFIG_GRKERNSEC_HARDEN_PTRACE=y
 CONFIG_GRKERNSEC_PTRACE_READEXEC=y
 CONFIG_GRKERNSEC_SETXID=y
+CONFIG_GRKERNSEC_HARDEN_IPC=y
 # CONFIG_GRKERNSEC_TPE is not set
 
 #
 # Network Protections
 #
-CONFIG_GRKERNSEC_RANDNET=y
 CONFIG_GRKERNSEC_BLACKHOLE=y
 CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 # CONFIG_GRKERNSEC_SOCKET is not set
@@ -4982,6 +5326,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 CONFIG_GRKERNSEC_FLOODTIME=10
 CONFIG_GRKERNSEC_FLOODBURST=6
 CONFIG_KEYS=y
+# CONFIG_PERSISTENT_KEYRINGS is not set
+# CONFIG_BIG_KEYS is not set
 # CONFIG_ENCRYPTED_KEYS is not set
 CONFIG_KEYS_DEBUG_PROC_KEYS=y
 CONFIG_SECURITY_DMESG_RESTRICT=y
@@ -5064,6 +5410,7 @@ CONFIG_CRYPTO_VMAC=m
 #
 CONFIG_CRYPTO_CRC32C=y
 CONFIG_CRYPTO_CRC32=y
+CONFIG_CRYPTO_CRCT10DIF=y
 CONFIG_CRYPTO_GHASH=m
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=y
@@ -5108,6 +5455,8 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_ZLIB=m
 CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_LZ4=m
+CONFIG_CRYPTO_LZ4HC=m
 
 #
 # Random Number Generation
@@ -5116,6 +5465,7 @@ CONFIG_CRYPTO_ANSI_CPRNG=m
 CONFIG_CRYPTO_USER_API=y
 CONFIG_CRYPTO_USER_API_HASH=y
 CONFIG_CRYPTO_USER_API_SKCIPHER=y
+CONFIG_CRYPTO_HASH_INFO=y
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_MV_CESA=y
 CONFIG_CRYPTO_DEV_HIFN_795X=m
@@ -5134,8 +5484,10 @@ CONFIG_BITREVERSE=y
 CONFIG_RATIONAL=y
 CONFIG_GENERIC_STRNCPY_FROM_USER=y
 CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_NET_UTILS=y
 CONFIG_GENERIC_PCI_IOMAP=y
 CONFIG_GENERIC_IO=y
+CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
 CONFIG_CRC_CCITT=y
 CONFIG_CRC16=y
 CONFIG_CRC_T10DIF=y
@@ -5150,10 +5502,14 @@ CONFIG_CRC7=m
 CONFIG_LIBCRC32C=m
 CONFIG_CRC8=m
 CONFIG_AUDIT_GENERIC=y
+# CONFIG_RANDOM32_SELFTEST is not set
 CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
+CONFIG_ZLIB_DEFLATE=y
 CONFIG_LZO_COMPRESS=y
 CONFIG_LZO_DECOMPRESS=y
+CONFIG_LZ4_COMPRESS=m
+CONFIG_LZ4HC_COMPRESS=m
+CONFIG_LZ4_DECOMPRESS=y
 CONFIG_XZ_DEC=y
 CONFIG_XZ_DEC_X86=y
 CONFIG_XZ_DEC_POWERPC=y
@@ -5168,10 +5524,12 @@ CONFIG_DECOMPRESS_BZIP2=y
 CONFIG_DECOMPRESS_LZMA=y
 CONFIG_DECOMPRESS_XZ=y
 CONFIG_DECOMPRESS_LZO=y
+CONFIG_DECOMPRESS_LZ4=y
 CONFIG_TEXTSEARCH=y
 CONFIG_TEXTSEARCH_KMP=m
 CONFIG_TEXTSEARCH_BM=m
 CONFIG_TEXTSEARCH_FSM=m
+CONFIG_ASSOCIATIVE_ARRAY=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
@@ -5186,9 +5544,8 @@ CONFIG_CORDIC=m
 # CONFIG_DDR is not set
 CONFIG_MPILIB=m
 CONFIG_OID_REGISTRY=m
+CONFIG_FONT_SUPPORT=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
 CONFIG_VIRTUALIZATION=y
-CONFIG_KVM_ARM_MAX_VCPUS=0
-
-#
-# Virtio drivers
-#
index 34045f2a6a6a47f52601b1569148a987533d0239..a1c49d433c7cb62f547c799721bb329bae5e73f0 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.10.32 Kernel Configuration
+# Linux/arm 3.14.25 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_MIGHT_HAVE_PCI=y
@@ -12,6 +12,7 @@ CONFIG_LOCKDEP_SUPPORT=y
 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_ARCH_HAS_BANDGAP=y
 CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_ZONE_DMA=y
@@ -28,16 +29,19 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y
 #
 CONFIG_INIT_ENV_ARG_LIMIT=32
 CONFIG_CROSS_COMPILE=""
+# CONFIG_COMPILE_TEST is not set
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
 CONFIG_HAVE_KERNEL_GZIP=y
 CONFIG_HAVE_KERNEL_LZMA=y
 CONFIG_HAVE_KERNEL_XZ=y
 CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_HAVE_KERNEL_LZ4=y
 # CONFIG_KERNEL_GZIP is not set
 # CONFIG_KERNEL_LZMA is not set
 CONFIG_KERNEL_XZ=y
 # CONFIG_KERNEL_LZO is not set
+# CONFIG_KERNEL_LZ4 is not set
 CONFIG_DEFAULT_HOSTNAME="(none)"
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
@@ -49,19 +53,17 @@ CONFIG_AUDIT=y
 CONFIG_AUDITSYSCALL=y
 CONFIG_AUDIT_WATCH=y
 CONFIG_AUDIT_TREE=y
-CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
-CONFIG_HAVE_GENERIC_HARDIRQS=y
 
 #
 # IRQ subsystem
 #
-CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_IRQ_SHOW=y
 CONFIG_HARDIRQS_SW_RESEND=y
 CONFIG_GENERIC_IRQ_CHIP=y
 CONFIG_IRQ_DOMAIN=y
 # CONFIG_IRQ_DOMAIN_DEBUG is not set
+CONFIG_IRQ_FORCED_THREADING=y
 CONFIG_SPARSE_IRQ=y
 CONFIG_KTIME_SCALAR=y
 CONFIG_GENERIC_CLOCKEVENTS=y
@@ -76,6 +78,7 @@ CONFIG_TICK_ONESHOT=y
 CONFIG_NO_HZ_COMMON=y
 # CONFIG_HZ_PERIODIC is not set
 CONFIG_NO_HZ_IDLE=y
+# CONFIG_NO_HZ_FULL is not set
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
 
@@ -83,6 +86,7 @@ CONFIG_HIGH_RES_TIMERS=y
 # CPU/Task time and stats accounting
 #
 CONFIG_TICK_CPU_ACCOUNTING=y
+# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
 # CONFIG_IRQ_TIME_ACCOUNTING is not set
 CONFIG_BSD_PROCESS_ACCT=y
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
@@ -111,6 +115,7 @@ CONFIG_RCU_NOCB_CPU=y
 CONFIG_RCU_NOCB_CPU_ALL=y
 # CONFIG_IKCONFIG is not set
 CONFIG_LOG_BUF_SHIFT=18
+CONFIG_GENERIC_SCHED_CLOCK=y
 CONFIG_CGROUPS=y
 # CONFIG_CGROUP_DEBUG is not set
 CONFIG_CGROUP_FREEZER=y
@@ -133,6 +138,7 @@ CONFIG_BLK_CGROUP=y
 CONFIG_NAMESPACES=y
 CONFIG_UTS_NS=y
 CONFIG_IPC_NS=y
+CONFIG_USER_NS=y
 CONFIG_PID_NS=y
 CONFIG_NET_NS=y
 CONFIG_SCHED_AUTOGROUP=y
@@ -146,11 +152,11 @@ CONFIG_RD_BZIP2=y
 CONFIG_RD_LZMA=y
 CONFIG_RD_XZ=y
 CONFIG_RD_LZO=y
+CONFIG_RD_LZ4=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SYSCTL=y
 CONFIG_ANON_INODES=y
 CONFIG_HAVE_UID16=y
-CONFIG_HOTPLUG=y
 CONFIG_EXPERT=y
 CONFIG_UID16=y
 # CONFIG_SYSCTL_SYSCALL is not set
@@ -183,6 +189,8 @@ CONFIG_VM_EVENT_COUNTERS=y
 # CONFIG_SLAB is not set
 CONFIG_SLUB=y
 # CONFIG_SLOB is not set
+CONFIG_SLUB_CPU_PARTIAL=y
+# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
 CONFIG_PROFILING=y
 CONFIG_TRACEPOINTS=y
 CONFIG_OPROFILE=m
@@ -190,22 +198,31 @@ CONFIG_HAVE_OPROFILE=y
 # CONFIG_KPROBES is not set
 CONFIG_JUMP_LABEL=y
 # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_ARCH_USE_BUILTIN_BSWAP=y
 CONFIG_HAVE_KPROBES=y
 CONFIG_HAVE_KRETPROBES=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_ATTRS=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
-CONFIG_USE_GENERIC_SMP_HELPERS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
 CONFIG_GENERIC_IDLE_POLL_SETUP=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
 CONFIG_HAVE_DMA_API_DEBUG=y
 CONFIG_HAVE_HW_BREAKPOINT=y
+CONFIG_HAVE_PERF_REGS=y
+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
 CONFIG_HAVE_ARCH_JUMP_LABEL=y
 CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
+CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR_NONE is not set
+CONFIG_CC_STACKPROTECTOR_REGULAR=y
+# CONFIG_CC_STACKPROTECTOR_STRONG is not set
 CONFIG_HAVE_CONTEXT_TRACKING=y
+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
 CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
 CONFIG_MODULES_USE_ELF_REL=y
@@ -224,7 +241,7 @@ CONFIG_MODULES=y
 # CONFIG_MODULE_FORCE_LOAD is not set
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
+CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_SIG is not set
 CONFIG_STOP_MACHINE=y
@@ -234,12 +251,14 @@ CONFIG_BLK_DEV_BSG=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_THROTTLING=y
+# CONFIG_BLK_CMDLINE_PARSER is not set
 
 #
 # Partition Types
 #
 CONFIG_PARTITION_ADVANCED=y
 # CONFIG_ACORN_PARTITION is not set
+# CONFIG_AIX_PARTITION is not set
 # CONFIG_OSF_PARTITION is not set
 # CONFIG_AMIGA_PARTITION is not set
 # CONFIG_ATARI_PARTITION is not set
@@ -257,6 +276,7 @@ CONFIG_LDM_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 CONFIG_EFI_PARTITION=y
 # CONFIG_SYSV68_PARTITION is not set
+# CONFIG_CMDLINE_PARTITION is not set
 
 #
 # IO Schedulers
@@ -276,6 +296,7 @@ CONFIG_INLINE_READ_UNLOCK=y
 CONFIG_INLINE_READ_UNLOCK_IRQ=y
 CONFIG_INLINE_WRITE_UNLOCK=y
 CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
 CONFIG_MUTEX_SPIN_ON_OWNER=y
 CONFIG_FREEZER=y
 
@@ -307,8 +328,8 @@ CONFIG_ARCH_MULTIPLATFORM=y
 # CONFIG_ARCH_W90X900 is not set
 # CONFIG_ARCH_LPC32XX is not set
 # CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_SHMOBILE is not set
+# CONFIG_ARCH_MSM_NODT is not set
+# CONFIG_ARCH_SHMOBILE_LEGACY is not set
 # CONFIG_ARCH_RPC is not set
 # CONFIG_ARCH_SA1100 is not set
 # CONFIG_ARCH_S3C24XX is not set
@@ -317,8 +338,6 @@ CONFIG_ARCH_MULTIPLATFORM=y
 # CONFIG_ARCH_S5PC100 is not set
 # CONFIG_ARCH_S5PV210 is not set
 # CONFIG_ARCH_EXYNOS is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_U300 is not set
 # CONFIG_ARCH_DAVINCI is not set
 # CONFIG_ARCH_OMAP1 is not set
 
@@ -342,15 +361,18 @@ CONFIG_MACH_ARMADA_370_XP=y
 CONFIG_MACH_ARMADA_370=y
 CONFIG_MACH_ARMADA_XP=y
 # CONFIG_ARCH_BCM is not set
+# CONFIG_ARCH_BERLIN is not set
 # CONFIG_GPIO_PCA953X is not set
 CONFIG_KEYBOARD_GPIO_POLLED=m
 # CONFIG_ARCH_HIGHBANK is not set
+# CONFIG_ARCH_HI3xxx is not set
+# CONFIG_ARCH_KEYSTONE is not set
+# CONFIG_ARCH_MSM_DT is not set
 CONFIG_ARCH_MXC=y
 
 #
 # Freescale i.MX support
 #
-# CONFIG_MXC_IRQ_PRIOR is not set
 CONFIG_MXC_TZIC=y
 # CONFIG_MXC_DEBUG_BOARD is not set
 CONFIG_HAVE_IMX_ANATOP=y
@@ -371,12 +393,14 @@ CONFIG_MACH_IMX51_DT=y
 #
 # Device tree only
 #
+# CONFIG_SOC_IMX50 is not set
 CONFIG_SOC_IMX53=y
 CONFIG_SOC_IMX6Q=y
+CONFIG_SOC_IMX6SL=y
+# CONFIG_SOC_VF610 is not set
 CONFIG_IMX_HAVE_PLATFORM_FEC=y
 CONFIG_IMX_HAVE_PLATFORM_GPIO_KEYS=y
 CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT=y
-CONFIG_WAND_RFKILL=m
 
 #
 # TI OMAP Common Features
@@ -396,6 +420,12 @@ CONFIG_OMAP_DM_TIMER=y
 CONFIG_OMAP_PM_NOOP=y
 CONFIG_MACH_OMAP_GENERIC=y
 CONFIG_ARCH_OMAP=y
+CONFIG_ARCH_OMAP3=y
+CONFIG_ARCH_OMAP4=y
+CONFIG_SOC_OMAP5=y
+CONFIG_SOC_AM33XX=y
+CONFIG_SOC_AM43XX=y
+CONFIG_SOC_DRA7XX=y
 CONFIG_ARCH_OMAP2PLUS=y
 
 #
@@ -404,20 +434,13 @@ CONFIG_ARCH_OMAP2PLUS=y
 CONFIG_ARCH_OMAP2PLUS_TYPICAL=y
 CONFIG_SOC_HAS_OMAP2_SDRC=y
 CONFIG_SOC_HAS_REALTIME_COUNTER=y
-CONFIG_ARCH_OMAP3=y
-CONFIG_ARCH_OMAP4=y
-CONFIG_SOC_OMAP5=y
 CONFIG_SOC_OMAP3430=y
 CONFIG_SOC_TI81XX=y
-CONFIG_SOC_AM33XX=y
 CONFIG_OMAP_PACKAGE_CBB=y
 CONFIG_OMAP_PACKAGE_CUS=y
-CONFIG_OMAP_PACKAGE_CBP=y
-CONFIG_OMAP_PACKAGE_CBL=y
-CONFIG_OMAP_PACKAGE_CBS=y
 
 #
-# OMAP Board Type
+# OMAP Legacy Platform Data Board Type
 #
 CONFIG_MACH_OMAP3_BEAGLE=y
 CONFIG_MACH_DEVKIT8000=y
@@ -425,31 +448,25 @@ CONFIG_MACH_OMAP_LDP=y
 CONFIG_MACH_OMAP3530_LV_SOM=y
 CONFIG_MACH_OMAP3_TORPEDO=y
 CONFIG_MACH_OVERO=y
-CONFIG_MACH_OMAP3EVM=y
 CONFIG_MACH_OMAP3517EVM=y
 # CONFIG_MACH_CRANEBOARD is not set
 CONFIG_MACH_OMAP3_PANDORA=y
 CONFIG_MACH_TOUCHBOOK=y
 CONFIG_MACH_OMAP_3430SDP=y
-CONFIG_MACH_NOKIA_RM680=y
 CONFIG_MACH_NOKIA_RX51=y
-CONFIG_MACH_OMAP_ZOOM2=y
-CONFIG_MACH_OMAP_ZOOM3=y
 CONFIG_MACH_CM_T35=y
 CONFIG_MACH_CM_T3517=y
 CONFIG_MACH_CM_T3730=y
-CONFIG_MACH_IGEP0020=y
-CONFIG_MACH_IGEP0030=y
 CONFIG_MACH_SBC3530=y
-CONFIG_MACH_OMAP_3630SDP=y
 CONFIG_MACH_TI8168EVM=y
 CONFIG_MACH_TI8148EVM=y
-CONFIG_MACH_OMAP_4430SDP=y
-CONFIG_MACH_OMAP4_PANDA=y
 # CONFIG_OMAP3_EMU is not set
 # CONFIG_OMAP3_SDRC_AC_TIMING is not set
+CONFIG_ARCH_ROCKCHIP=y
 # CONFIG_ARCH_SOCFPGA is not set
 # CONFIG_PLAT_SPEAR is not set
+# CONFIG_ARCH_STI is not set
+# CONFIG_ARCH_SHMOBILE_MULTI is not set
 CONFIG_ARCH_SUNXI=y
 # CONFIG_ARCH_SIRF is not set
 # CONFIG_ARCH_TEGRA is not set
@@ -461,6 +478,7 @@ CONFIG_ARCH_VEXPRESS=y
 #
 CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y
 CONFIG_ARCH_VEXPRESS_CA9X4=y
+# CONFIG_ARCH_VEXPRESS_SPC is not set
 CONFIG_PLAT_VERSATILE_CLCD=y
 CONFIG_PLAT_VERSATILE_SCHED_CLOCK=y
 CONFIG_ARCH_VIRT=y
@@ -497,6 +515,7 @@ CONFIG_ARM_THUMB=y
 CONFIG_ARM_THUMBEE=y
 CONFIG_ARM_VIRT_EXT=y
 CONFIG_SWP_EMULATE=y
+# CONFIG_CPU_BIG_ENDIAN is not set
 # CONFIG_CPU_ICACHE_DISABLE is not set
 # CONFIG_CPU_DCACHE_DISABLE is not set
 # CONFIG_CPU_BPREDICT_DISABLE is not set
@@ -509,6 +528,7 @@ CONFIG_CACHE_PL310=y
 CONFIG_ARM_L1_CACHE_SHIFT_6=y
 CONFIG_ARM_L1_CACHE_SHIFT=6
 CONFIG_ARM_DMA_MEM_BUFFERABLE=y
+CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
 CONFIG_ARM_NR_BANKS=8
 CONFIG_MULTI_IRQ_HANDLER=y
 CONFIG_PJ4B_ERRATA_4742=y
@@ -523,8 +543,10 @@ CONFIG_ARM_ERRATA_754327=y
 CONFIG_ARM_ERRATA_764369=y
 CONFIG_PL310_ERRATA_769419=y
 CONFIG_ARM_ERRATA_775420=y
-# CONFIG_ARM_ERRATA_798181 is not set
+CONFIG_ARM_ERRATA_798181=y
+CONFIG_ARM_ERRATA_773022=y
 CONFIG_ICST=y
+CONFIG_TI_PRIV_EDMA=y
 
 #
 # Bus support
@@ -533,6 +555,7 @@ CONFIG_ARM_AMBA=y
 CONFIG_PCI=y
 CONFIG_PCI_DOMAINS=y
 CONFIG_PCI_SYSCALL=y
+CONFIG_PCI_MSI=y
 # CONFIG_PCI_DEBUG is not set
 # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set
 # CONFIG_PCI_STUB is not set
@@ -543,8 +566,19 @@ CONFIG_PCI_SYSCALL=y
 #
 # PCI host controller drivers
 #
+CONFIG_PCI_MVEBU=y
 CONFIG_PCIE_DW=y
 CONFIG_PCI_IMX6=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIEAER=y
+# CONFIG_PCIE_ECRC is not set
+# CONFIG_PCIEAER_INJECT is not set
+CONFIG_PCIEASPM=y
+# CONFIG_PCIEASPM_DEBUG is not set
+CONFIG_PCIEASPM_DEFAULT=y
+# CONFIG_PCIEASPM_POWERSAVE is not set
+# CONFIG_PCIEASPM_PERFORMANCE is not set
+CONFIG_PCIE_PME=y
 # CONFIG_PCCARD is not set
 
 #
@@ -560,6 +594,7 @@ CONFIG_HAVE_ARM_SCU=y
 CONFIG_HAVE_ARM_ARCH_TIMER=y
 CONFIG_HAVE_ARM_TWD=y
 # CONFIG_MCPM is not set
+# CONFIG_BIG_LITTLE is not set
 CONFIG_VMSPLIT_3G=y
 # CONFIG_VMSPLIT_2G is not set
 # CONFIG_VMSPLIT_1G is not set
@@ -567,11 +602,17 @@ CONFIG_PAGE_OFFSET=0xC0000000
 CONFIG_NR_CPUS=8
 CONFIG_HOTPLUG_CPU=y
 CONFIG_ARM_PSCI=y
-CONFIG_LOCAL_TIMERS=y
 CONFIG_ARCH_NR_GPIO=512
 CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT_VOLUNTARY is not set
 # CONFIG_PREEMPT is not set
+CONFIG_HZ_FIXED=0
+CONFIG_HZ_100=y
+# CONFIG_HZ_200 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_500 is not set
+# CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
 CONFIG_SCHED_HRTICK=y
 # CONFIG_THUMB2_KERNEL is not set
@@ -584,9 +625,11 @@ CONFIG_HAVE_ARCH_PFN_VALID=y
 CONFIG_HIGHMEM=y
 CONFIG_HIGHPTE=y
 CONFIG_HW_PERF_EVENTS=y
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_HAVE_MEMBLOCK=y
+CONFIG_NO_BOOTMEM=y
 CONFIG_MEMORY_ISOLATION=y
 # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
 CONFIG_PAGEFLAGS_EXTENDED=y
@@ -601,10 +644,15 @@ CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
 CONFIG_CROSS_MEMORY_ATTACH=y
 CONFIG_CLEANCACHE=y
 # CONFIG_FRONTSWAP is not set
+CONFIG_CMA=y
+CONFIG_CMA_DEBUG=y
+# CONFIG_ZBUD is not set
+# CONFIG_ZSMALLOC is not set
 CONFIG_FORCE_MAX_ZONEORDER=12
 CONFIG_ALIGNMENT_TRAP=y
 # CONFIG_SECCOMP is not set
-CONFIG_CC_STACKPROTECTOR=y
+CONFIG_SWIOTLB=y
+CONFIG_IOMMU_HELPER=y
 # CONFIG_XEN is not set
 
 #
@@ -635,7 +683,6 @@ CONFIG_AUTO_ZRELADDR=y
 # CPU Frequency scaling
 #
 CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
 CONFIG_CPU_FREQ_GOV_COMMON=y
 CONFIG_CPU_FREQ_STAT=y
 CONFIG_CPU_FREQ_STAT_DETAILS=y
@@ -654,14 +701,13 @@ CONFIG_GENERIC_CPUFREQ_CPU0=y
 #
 # ARM CPU frequency scaling drivers
 #
-# CONFIG_ARM_BIG_LITTLE_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS5440_CPUFREQ is not set
 CONFIG_ARM_IMX6Q_CPUFREQ=m
 # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set
 CONFIG_ARM_OMAP2PLUS_CPUFREQ=y
+
+#
+# CPU Idle
+#
 # CONFIG_CPU_IDLE is not set
 CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED=y
 
@@ -675,6 +721,7 @@ CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED=y
 CONFIG_VFP=y
 CONFIG_VFPv3=y
 CONFIG_NEON=y
+# CONFIG_KERNEL_MODE_NEON is not set
 
 #
 # Userspace binary formats
@@ -703,6 +750,7 @@ CONFIG_APM_EMULATION=y
 CONFIG_ARCH_HAS_OPP=y
 CONFIG_PM_OPP=y
 CONFIG_PM_CLK=y
+# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
 CONFIG_CPU_PM=y
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_ARM_CPU_SUSPEND=y
@@ -742,7 +790,6 @@ CONFIG_IP_MROUTE=y
 CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
 CONFIG_IP_PIMSM_V1=y
 CONFIG_IP_PIMSM_V2=y
-# CONFIG_ARPD is not set
 CONFIG_SYN_COOKIES=y
 CONFIG_NET_IPVTI=m
 CONFIG_INET_AH=m
@@ -775,7 +822,6 @@ CONFIG_DEFAULT_CUBIC=y
 CONFIG_DEFAULT_TCP_CONG="cubic"
 CONFIG_TCP_MD5SIG=y
 CONFIG_IPV6=y
-CONFIG_IPV6_PRIVACY=y
 CONFIG_IPV6_ROUTER_PREF=y
 CONFIG_IPV6_ROUTE_INFO=y
 CONFIG_IPV6_OPTIMISTIC_DAD=y
@@ -789,6 +835,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m
 CONFIG_INET6_XFRM_MODE_TUNNEL=m
 CONFIG_INET6_XFRM_MODE_BEET=m
 CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_VTI=m
 CONFIG_IPV6_SIT=m
 CONFIG_IPV6_SIT_6RD=y
 CONFIG_IPV6_NDISC_NODETYPE=y
@@ -852,7 +899,22 @@ CONFIG_NF_NAT_FTP=m
 CONFIG_NF_NAT_IRC=m
 CONFIG_NF_NAT_SIP=m
 CONFIG_NF_NAT_TFTP=m
-CONFIG_NETFILTER_TPROXY=m
+CONFIG_NETFILTER_SYNPROXY=m
+CONFIG_NF_TABLES=m
+CONFIG_NF_TABLES_INET=m
+CONFIG_NFT_EXTHDR=m
+CONFIG_NFT_META=m
+CONFIG_NFT_CT=m
+CONFIG_NFT_RBTREE=m
+CONFIG_NFT_HASH=m
+CONFIG_NFT_COUNTER=m
+CONFIG_NFT_LOG=m
+CONFIG_NFT_LIMIT=m
+CONFIG_NFT_NAT=m
+CONFIG_NFT_QUEUE=m
+CONFIG_NFT_REJECT=m
+CONFIG_NFT_REJECT_INET=m
+CONFIG_NFT_COMPAT=m
 CONFIG_NETFILTER_XTABLES=y
 
 #
@@ -897,6 +959,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 #
 CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
 CONFIG_NETFILTER_XT_MATCH_BPF=m
+CONFIG_NETFILTER_XT_MATCH_CGROUP=m
 CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
@@ -913,8 +976,12 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m
 CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 CONFIG_NETFILTER_XT_MATCH_HELPER=m
 CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
 CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
-# CONFIG_NETFILTER_XT_MATCH_IPVS is not set
+CONFIG_NETFILTER_XT_MATCH_IPVS=m
+CONFIG_NETFILTER_XT_MATCH_L2TP=m
+CONFIG_NETFILTER_XT_MATCH_LAYER7=m
+# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
 CONFIG_NETFILTER_XT_MATCH_LENGTH=m
 CONFIG_NETFILTER_XT_MATCH_LIMIT=m
 CONFIG_NETFILTER_XT_MATCH_MAC=m
@@ -933,8 +1000,6 @@ CONFIG_NETFILTER_XT_MATCH_RECENT=m
 CONFIG_NETFILTER_XT_MATCH_SCTP=m
 CONFIG_NETFILTER_XT_MATCH_SOCKET=m
 CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_LAYER7=m
-# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
 CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
 CONFIG_NETFILTER_XT_MATCH_STRING=m
 CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
@@ -949,7 +1014,9 @@ CONFIG_IP_SET_HASH_IP=m
 CONFIG_IP_SET_HASH_IPPORT=m
 CONFIG_IP_SET_HASH_IPPORTIP=m
 CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_NETPORTNET=m
 CONFIG_IP_SET_HASH_NET=m
+CONFIG_IP_SET_HASH_NETNET=m
 CONFIG_IP_SET_HASH_NETPORT=m
 CONFIG_IP_SET_HASH_NETIFACE=m
 CONFIG_IP_SET_LIST_SET=m
@@ -1000,6 +1067,11 @@ CONFIG_IP_VS_PE_SIP=m
 CONFIG_NF_DEFRAG_IPV4=y
 CONFIG_NF_CONNTRACK_IPV4=y
 # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_TABLES_IPV4=m
+CONFIG_NFT_CHAIN_ROUTE_IPV4=m
+CONFIG_NFT_CHAIN_NAT_IPV4=m
+CONFIG_NFT_REJECT_IPV4=m
+CONFIG_NF_TABLES_ARP=m
 CONFIG_IP_NF_IPTABLES=y
 CONFIG_IP_NF_MATCH_AH=m
 CONFIG_IP_NF_MATCH_ECN=m
@@ -1007,6 +1079,7 @@ CONFIG_IP_NF_MATCH_RPFILTER=m
 CONFIG_IP_NF_MATCH_TTL=m
 CONFIG_IP_NF_FILTER=m
 CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_SYNPROXY=m
 # CONFIG_IP_NF_TARGET_ULOG is not set
 CONFIG_NF_NAT_IPV4=m
 CONFIG_IP_NF_TARGET_MASQUERADE=m
@@ -1032,6 +1105,10 @@ CONFIG_IP_NF_MATCH_IPP2P=m
 #
 CONFIG_NF_DEFRAG_IPV6=y
 CONFIG_NF_CONNTRACK_IPV6=y
+CONFIG_NF_TABLES_IPV6=m
+CONFIG_NFT_CHAIN_ROUTE_IPV6=m
+CONFIG_NFT_CHAIN_NAT_IPV6=m
+CONFIG_NFT_REJECT_IPV6=m
 CONFIG_IP6_NF_IPTABLES=y
 CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
@@ -1045,12 +1122,14 @@ CONFIG_IP6_NF_MATCH_RT=m
 CONFIG_IP6_NF_TARGET_HL=m
 CONFIG_IP6_NF_FILTER=m
 CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_TARGET_SYNPROXY=m
 CONFIG_IP6_NF_MANGLE=m
 CONFIG_IP6_NF_RAW=m
 CONFIG_IP6_NF_SECURITY=m
 CONFIG_NF_NAT_IPV6=m
 CONFIG_IP6_NF_TARGET_MASQUERADE=m
 CONFIG_IP6_NF_TARGET_NPT=m
+CONFIG_NF_TABLES_BRIDGE=m
 CONFIG_BRIDGE_NF_EBTABLES=m
 CONFIG_BRIDGE_EBT_BROUTE=m
 CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -1075,7 +1154,6 @@ CONFIG_BRIDGE_EBT_LOG=m
 CONFIG_BRIDGE_EBT_NFLOG=m
 # CONFIG_IP_DCCP is not set
 CONFIG_IP_SCTP=m
-# CONFIG_SCTP_DBG_MSG is not set
 # CONFIG_SCTP_DBG_OBJCNT is not set
 # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
 CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
@@ -1117,6 +1195,7 @@ CONFIG_LLC=y
 # CONFIG_LAPB is not set
 # CONFIG_PHONET is not set
 # CONFIG_IEEE802154 is not set
+CONFIG_6LOWPAN_IPHC=m
 CONFIG_NET_SCHED=y
 
 #
@@ -1142,6 +1221,8 @@ CONFIG_NET_SCH_CHOKE=m
 CONFIG_NET_SCH_QFQ=m
 CONFIG_NET_SCH_CODEL=m
 CONFIG_NET_SCH_FQ_CODEL=m
+CONFIG_NET_SCH_FQ=m
+CONFIG_NET_SCH_HHF=m
 CONFIG_NET_SCH_PIE=m
 CONFIG_NET_SCH_INGRESS=m
 CONFIG_NET_SCH_PLUG=m
@@ -1161,6 +1242,7 @@ CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
 CONFIG_NET_CLS_FLOW=m
 CONFIG_NET_CLS_CGROUP=m
+CONFIG_NET_CLS_BPF=m
 CONFIG_NET_EMATCH=y
 CONFIG_NET_EMATCH_STACK=32
 CONFIG_NET_EMATCH_CMP=m
@@ -1190,15 +1272,22 @@ CONFIG_BATMAN_ADV_DAT=y
 CONFIG_BATMAN_ADV_NC=y
 # CONFIG_BATMAN_ADV_DEBUG is not set
 CONFIG_OPENVSWITCH=m
+CONFIG_OPENVSWITCH_GRE=y
+CONFIG_OPENVSWITCH_VXLAN=y
 CONFIG_VSOCKETS=m
 CONFIG_NETLINK_MMAP=y
 CONFIG_NETLINK_DIAG=m
+CONFIG_NET_MPLS_GSO=m
+CONFIG_HSR=m
 CONFIG_RPS=y
 CONFIG_RFS_ACCEL=y
 CONFIG_XPS=y
-CONFIG_NETPRIO_CGROUP=m
+CONFIG_CGROUP_NET_PRIO=m
+CONFIG_CGROUP_NET_CLASSID=y
+CONFIG_NET_RX_BUSY_POLL=y
 CONFIG_BQL=y
 CONFIG_BPF_JIT=y
+CONFIG_NET_FLOW_LIMIT=y
 
 #
 # Network testing
@@ -1308,26 +1397,16 @@ CONFIG_REGMAP_I2C=y
 CONFIG_REGMAP_MMIO=y
 CONFIG_REGMAP_IRQ=y
 CONFIG_DMA_SHARED_BUFFER=y
-CONFIG_CMA=y
-CONFIG_CMA_DEBUG=y
-
-#
-# Default contiguous memory area size:
-#
-CONFIG_CMA_SIZE_MBYTES=16
-CONFIG_CMA_SIZE_SEL_MBYTES=y
-# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
-# CONFIG_CMA_SIZE_SEL_MIN is not set
-# CONFIG_CMA_SIZE_SEL_MAX is not set
-CONFIG_CMA_ALIGNMENT=8
-CONFIG_CMA_AREAS=7
+# CONFIG_DMA_CMA is not set
 
 #
 # Bus devices
 #
+# CONFIG_IMX_WEIM is not set
 CONFIG_MVEBU_MBUS=y
 CONFIG_OMAP_OCP2SCP=y
 CONFIG_OMAP_INTERCONNECT=y
+# CONFIG_ARM_CCI is not set
 CONFIG_CONNECTOR=y
 CONFIG_PROC_EVENTS=y
 CONFIG_MTD=y
@@ -1341,7 +1420,6 @@ CONFIG_MTD_OF_PARTS=y
 #
 # User Modules And Translation Layers
 #
-# CONFIG_MTD_BLKDEVS is not set
 # CONFIG_MTD_BLOCK is not set
 # CONFIG_MTD_BLOCK_RO is not set
 # CONFIG_FTL is not set
@@ -1392,8 +1470,6 @@ CONFIG_MTD_CFI_I2=y
 # Disk-On-Chip Device Drivers
 #
 # CONFIG_MTD_DOCG3 is not set
-CONFIG_BCH_CONST_M=13
-CONFIG_BCH_CONST_T=8
 CONFIG_MTD_NAND_ECC=y
 CONFIG_MTD_NAND_ECC_SMC=y
 CONFIG_MTD_NAND=y
@@ -1403,17 +1479,15 @@ CONFIG_MTD_NAND=y
 # CONFIG_MTD_NAND_GPIO is not set
 CONFIG_MTD_NAND_OMAP2=y
 CONFIG_MTD_NAND_OMAP_BCH=m
-CONFIG_MTD_NAND_OMAP_BCH8=y
-# CONFIG_MTD_NAND_OMAP_BCH4 is not set
 CONFIG_MTD_NAND_IDS=y
 # CONFIG_MTD_NAND_RICOH is not set
 # CONFIG_MTD_NAND_DISKONCHIP is not set
 # CONFIG_MTD_NAND_DOCG4 is not set
 # CONFIG_MTD_NAND_CAFE is not set
+CONFIG_MTD_NAND_PXA3xx=y
 # CONFIG_MTD_NAND_NANDSIM is not set
 CONFIG_MTD_NAND_GPMI_NAND=m
 # CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ALAUDA is not set
 CONFIG_MTD_NAND_ORION=y
 CONFIG_MTD_NAND_MXC=m
 # CONFIG_MTD_ONENAND is not set
@@ -1439,13 +1513,12 @@ CONFIG_OF_FLATTREE=y
 CONFIG_OF_EARLY_FLATTREE=y
 CONFIG_OF_ADDRESS=y
 CONFIG_OF_IRQ=y
-CONFIG_OF_DEVICE=y
-CONFIG_OF_I2C=y
 CONFIG_OF_NET=y
 CONFIG_OF_MDIO=y
 CONFIG_OF_PCI=y
 CONFIG_OF_PCI_IRQ=y
 CONFIG_OF_MTD=y
+CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
 CONFIG_PARPORT=m
 # CONFIG_PARPORT_PC is not set
 # CONFIG_PARPORT_GSC is not set
@@ -1453,6 +1526,7 @@ CONFIG_PARPORT=m
 CONFIG_PARPORT_1284=y
 CONFIG_PARPORT_NOT_PC=y
 CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_NULL_BLK is not set
 # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
@@ -1484,7 +1558,6 @@ CONFIG_BLK_DEV_RAM_SIZE=16384
 # CONFIG_ATMEL_PWM is not set
 CONFIG_DUMMY_IRQ=m
 # CONFIG_PHANTOM is not set
-# CONFIG_INTEL_MID_PTI is not set
 # CONFIG_SGI_IOC4 is not set
 # CONFIG_TIFM_CORE is not set
 CONFIG_ICS932S401=m
@@ -1515,6 +1588,7 @@ CONFIG_EEPROM_AT24=m
 CONFIG_EEPROM_LEGACY=m
 CONFIG_EEPROM_MAX6875=m
 CONFIG_EEPROM_93CX6=m
+CONFIG_EEPROM_SUNXI_SID=y
 # CONFIG_CB710_CORE is not set
 
 #
@@ -1527,6 +1601,14 @@ CONFIG_TI_ST=m
 # Altera FPGA firmware download module
 #
 CONFIG_ALTERA_STAPL=m
+
+#
+# Intel MIC Host Driver
+#
+
+#
+# Intel MIC Card Driver
+#
 CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
@@ -1590,7 +1672,6 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=5000
 CONFIG_AIC7XXX_DEBUG_ENABLE=y
 CONFIG_AIC7XXX_DEBUG_MASK=0
 CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
-# CONFIG_SCSI_AIC7XXX_OLD is not set
 CONFIG_SCSI_AIC79XX=m
 CONFIG_AIC79XX_CMDS_PER_DEVICE=32
 CONFIG_AIC79XX_RESET_DELAY_MS=5000
@@ -1604,6 +1685,7 @@ CONFIG_SCSI_MVSAS_DEBUG=y
 # CONFIG_SCSI_MVSAS_TASKLET is not set
 CONFIG_SCSI_MVUMI=m
 CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ESAS2R=m
 CONFIG_MEGARAID_NEWGEN=y
 # CONFIG_MEGARAID_MM is not set
 CONFIG_MEGARAID_LEGACY=m
@@ -1647,7 +1729,7 @@ CONFIG_SCSI_DEBUG=m
 CONFIG_SCSI_PMCRAID=m
 CONFIG_SCSI_PM8001=m
 CONFIG_SCSI_SRP=m
-CONFIG_SCSI_BFA_FC=m
+# CONFIG_SCSI_BFA_FC is not set
 CONFIG_SCSI_CHELSIO_FCOE=m
 CONFIG_SCSI_DH=y
 CONFIG_SCSI_DH_RDAC=m
@@ -1670,6 +1752,7 @@ CONFIG_SATA_PMP=y
 # CONFIG_SATA_AHCI is not set
 CONFIG_SATA_AHCI_PLATFORM=m
 CONFIG_AHCI_IMX=m
+CONFIG_AHCI_SUNXI=m
 # CONFIG_SATA_INIC162X is not set
 # CONFIG_SATA_ACARD_AHCI is not set
 # CONFIG_SATA_SIL24 is not set
@@ -1691,6 +1774,7 @@ CONFIG_SATA_HIGHBANK=m
 CONFIG_SATA_MV=m
 # CONFIG_SATA_NV is not set
 # CONFIG_SATA_PROMISE is not set
+CONFIG_SATA_RCAR=m
 # CONFIG_SATA_SIL is not set
 # CONFIG_SATA_SIS is not set
 # CONFIG_SATA_SVW is not set
@@ -1768,14 +1852,14 @@ CONFIG_MD_MULTIPATH=m
 CONFIG_MD_FAULTY=m
 CONFIG_BCACHE=m
 # CONFIG_BCACHE_DEBUG is not set
-# CONFIG_BCACHE_EDEBUG is not set
 # CONFIG_BCACHE_CLOSURES_DEBUG is not set
 CONFIG_BLK_DEV_DM_BUILTIN=y
 CONFIG_BLK_DEV_DM=y
 # CONFIG_DM_DEBUG is not set
-CONFIG_DM_BUFIO=m
+CONFIG_DM_BUFIO=y
 CONFIG_DM_BIO_PRISON=m
 CONFIG_DM_PERSISTENT_DATA=m
+# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
 CONFIG_DM_CRYPT=m
 CONFIG_DM_SNAPSHOT=y
 # CONFIG_DM_THIN_PROVISIONING is not set
@@ -1783,8 +1867,8 @@ CONFIG_DM_CACHE=m
 CONFIG_DM_CACHE_MQ=m
 CONFIG_DM_CACHE_CLEANER=m
 CONFIG_DM_MIRROR=y
-CONFIG_DM_RAID=m
 CONFIG_DM_LOG_USERSPACE=m
+CONFIG_DM_RAID=m
 CONFIG_DM_ZERO=y
 CONFIG_DM_MULTIPATH=m
 CONFIG_DM_MULTIPATH_QL=m
@@ -1793,6 +1877,7 @@ CONFIG_DM_MULTIPATH_ST=m
 CONFIG_DM_UEVENT=y
 # CONFIG_DM_FLAKEY is not set
 CONFIG_DM_VERITY=m
+CONFIG_DM_SWITCH=m
 # CONFIG_TARGET_CORE is not set
 # CONFIG_FUSION is not set
 
@@ -1806,12 +1891,12 @@ CONFIG_FIREWIRE_SBP2=m
 # CONFIG_FIREWIRE_NOSY is not set
 # CONFIG_I2O is not set
 CONFIG_NETDEVICES=y
+CONFIG_MII=m
 CONFIG_NET_CORE=y
 CONFIG_BONDING=m
 CONFIG_DUMMY=m
 # CONFIG_EQUALIZER is not set
 # CONFIG_NET_FC is not set
-CONFIG_MII=m
 CONFIG_IFB=m
 # CONFIG_NET_TEAM is not set
 CONFIG_MACVLAN=m
@@ -1830,6 +1915,7 @@ CONFIG_IMQ_BEHAVIOR_AB=y
 CONFIG_IMQ_NUM_DEVS=2
 CONFIG_TUN=m
 CONFIG_VETH=m
+CONFIG_NLMON=m
 CONFIG_SUNGEM_PHY=m
 # CONFIG_ARCNET is not set
 CONFIG_ATM_DRIVERS=y
@@ -1874,12 +1960,16 @@ CONFIG_NET_VENDOR_3COM=y
 CONFIG_TYPHOON=m
 CONFIG_NET_VENDOR_ADAPTEC=y
 CONFIG_ADAPTEC_STARFIRE=m
+CONFIG_NET_VENDOR_ALLWINNER=y
+CONFIG_SUN4I_EMAC=m
 CONFIG_NET_VENDOR_ALTEON=y
 CONFIG_ACENIC=m
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
 CONFIG_NET_VENDOR_AMD=y
 CONFIG_AMD8111_ETH=m
 CONFIG_PCNET32=m
+CONFIG_NET_VENDOR_ARC=y
+CONFIG_ARC_EMAC=m
 CONFIG_NET_VENDOR_ATHEROS=y
 CONFIG_ATL2=m
 CONFIG_ATL1=m
@@ -1954,6 +2044,10 @@ CONFIG_IGBVF=m
 CONFIG_IXGB=m
 CONFIG_IXGBE=m
 CONFIG_IXGBE_HWMON=y
+CONFIG_IXGBEVF=m
+CONFIG_I40E=m
+CONFIG_I40E_VXLAN=y
+CONFIG_I40EVF=m
 CONFIG_NET_VENDOR_I825XX=y
 CONFIG_IP1000=m
 CONFIG_JME=m
@@ -1970,6 +2064,7 @@ CONFIG_NET_VENDOR_MELLANOX=y
 CONFIG_MLX4_EN=m
 CONFIG_MLX4_CORE=m
 CONFIG_MLX4_DEBUG=y
+# CONFIG_MLX5_CORE is not set
 CONFIG_NET_VENDOR_MICREL=y
 CONFIG_KS8842=m
 CONFIG_KS8851_MLL=m
@@ -1987,7 +2082,6 @@ CONFIG_NE2K_PCI=m
 CONFIG_NET_VENDOR_NVIDIA=y
 CONFIG_FORCEDETH=m
 CONFIG_NET_VENDOR_OKI=y
-CONFIG_PCH_GBE=m
 CONFIG_ETHOC=m
 CONFIG_NET_PACKET_ENGINE=y
 CONFIG_HAMACHI=m
@@ -2005,6 +2099,7 @@ CONFIG_8139TOO=m
 CONFIG_8139TOO_8129=y
 # CONFIG_8139_OLD_RX_RESET is not set
 CONFIG_R8169=m
+CONFIG_SH_ETH=m
 CONFIG_NET_VENDOR_RDC=y
 CONFIG_R6040=m
 CONFIG_NET_VENDOR_SEEQ=y
@@ -2026,6 +2121,7 @@ CONFIG_SMSC9420=m
 CONFIG_NET_VENDOR_STMICRO=y
 CONFIG_STMMAC_ETH=m
 CONFIG_STMMAC_PLATFORM=y
+CONFIG_DWMAC_SUNXI=y
 # CONFIG_STMMAC_PCI is not set
 # CONFIG_STMMAC_DEBUG_FS is not set
 # CONFIG_STMMAC_DA is not set
@@ -2040,6 +2136,7 @@ CONFIG_NET_VENDOR_TI=y
 CONFIG_TI_DAVINCI_EMAC=m
 CONFIG_TI_DAVINCI_MDIO=m
 CONFIG_TI_DAVINCI_CPDMA=m
+CONFIG_TI_CPSW_PHY_SEL=y
 CONFIG_TI_CPSW=m
 CONFIG_TI_CPTS=y
 CONFIG_TLAN=m
@@ -2053,6 +2150,8 @@ CONFIG_WIZNET_W5300=m
 # CONFIG_WIZNET_BUS_DIRECT is not set
 # CONFIG_WIZNET_BUS_INDIRECT is not set
 CONFIG_WIZNET_BUS_ANY=y
+CONFIG_NET_VENDOR_XILINX=y
+CONFIG_XILINX_EMACLITE=m
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
 CONFIG_PHYLIB=y
@@ -2080,9 +2179,11 @@ CONFIG_MICREL_PHY=m
 CONFIG_FIXED_PHY=y
 CONFIG_MDIO_BITBANG=m
 # CONFIG_MDIO_GPIO is not set
+CONFIG_MDIO_SUN4I=m
 CONFIG_MDIO_BUS_MUX=m
 CONFIG_MDIO_BUS_MUX_GPIO=m
 CONFIG_MDIO_BUS_MUX_MMIOREG=m
+CONFIG_GATEWORKS_GW16083=m
 # CONFIG_PLIP is not set
 CONFIG_PPP=m
 CONFIG_PPP_BSDCOMP=m
@@ -2113,8 +2214,11 @@ CONFIG_USB_NET_AX88179_178A=m
 CONFIG_USB_NET_CDCETHER=m
 CONFIG_USB_NET_CDC_EEM=m
 CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_HUAWEI_CDC_NCM=m
 CONFIG_USB_NET_CDC_MBIM=m
 CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9700=m
+CONFIG_USB_NET_SR9800=m
 CONFIG_USB_NET_SMSC75XX=m
 CONFIG_USB_NET_SMSC95XX=m
 CONFIG_USB_NET_GL620A=m
@@ -2167,24 +2271,36 @@ CONFIG_ATH9K=m
 CONFIG_ATH9K_PCI=y
 CONFIG_ATH9K_AHB=y
 # CONFIG_ATH9K_DEBUGFS is not set
+# CONFIG_ATH9K_WOW is not set
 # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
+CONFIG_ATH9K_RFKILL=y
 CONFIG_ATH9K_HTC=m
 # CONFIG_ATH9K_HTC_DEBUGFS is not set
 CONFIG_CARL9170=m
 CONFIG_CARL9170_LEDS=y
 CONFIG_CARL9170_WPC=y
-# CONFIG_CARL9170_HWRNG is not set
+CONFIG_CARL9170_HWRNG=y
 # CONFIG_ATH6KL is not set
 CONFIG_AR5523=m
 # CONFIG_WIL6210 is not set
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+# CONFIG_ATH10K_DEBUG is not set
+# CONFIG_ATH10K_DEBUGFS is not set
+# CONFIG_ATH10K_TRACING is not set
+CONFIG_WCN36XX=m
+# CONFIG_WCN36XX_DEBUGFS is not set
 CONFIG_B43=m
+CONFIG_B43_BCMA=y
 CONFIG_B43_SSB=y
 CONFIG_B43_PCI_AUTOSELECT=y
 CONFIG_B43_PCICORE_AUTOSELECT=y
 CONFIG_B43_SDIO=y
+CONFIG_B43_BCMA_PIO=y
 CONFIG_B43_PIO=y
 CONFIG_B43_PHY_N=y
 CONFIG_B43_PHY_LP=y
+CONFIG_B43_PHY_HT=y
 CONFIG_B43_LEDS=y
 CONFIG_B43_HWRNG=y
 # CONFIG_B43_DEBUG is not set
@@ -2200,6 +2316,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
 # CONFIG_B43LEGACY_DMA_MODE is not set
 # CONFIG_B43LEGACY_PIO_MODE is not set
 CONFIG_BRCMUTIL=m
+CONFIG_BRCMSMAC=m
 CONFIG_BRCMFMAC=m
 CONFIG_BRCMFMAC_SDIO=y
 # CONFIG_BRCMFMAC_USB is not set
@@ -2231,7 +2348,6 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y
 #
 # CONFIG_IWLWIFI_DEBUG is not set
 # CONFIG_IWLWIFI_DEVICE_TRACING is not set
-CONFIG_IWLWIFI_P2P=y
 CONFIG_IWLEGACY=m
 CONFIG_IWL4965=m
 CONFIG_IWL3945=m
@@ -2266,6 +2382,7 @@ CONFIG_RT73USB=m
 CONFIG_RT2800USB=m
 CONFIG_RT2800USB_RT33XX=y
 CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_RT3573=y
 CONFIG_RT2800USB_RT53XX=y
 CONFIG_RT2800USB_RT55XX=y
 CONFIG_RT2800USB_UNKNOWN=y
@@ -2276,14 +2393,17 @@ CONFIG_RT2X00_LIB_FIRMWARE=y
 CONFIG_RT2X00_LIB_CRYPTO=y
 CONFIG_RT2X00_LIB_LEDS=y
 # CONFIG_RT2X00_DEBUG is not set
-CONFIG_RTLWIFI=m
-# CONFIG_RTLWIFI_DEBUG is not set
+CONFIG_RTL_CARDS=m
 CONFIG_RTL8192CE=m
 CONFIG_RTL8192SE=m
 CONFIG_RTL8192DE=m
 CONFIG_RTL8723AE=m
 CONFIG_RTL8188EE=m
 CONFIG_RTL8192CU=m
+CONFIG_RTLWIFI=m
+CONFIG_RTLWIFI_PCI=m
+CONFIG_RTLWIFI_USB=m
+# CONFIG_RTLWIFI_DEBUG is not set
 CONFIG_RTL8192C_COMMON=m
 CONFIG_WL_TI=y
 CONFIG_WL1251=m
@@ -2299,6 +2419,8 @@ CONFIG_MWIFIEX=m
 CONFIG_MWIFIEX_SDIO=m
 CONFIG_MWIFIEX_PCIE=m
 CONFIG_MWIFIEX_USB=m
+CONFIG_CW1200=m
+CONFIG_CW1200_WLAN_SDIO=m
 
 #
 # Enable WiMAX (Networking options) to see the WiMAX drivers
@@ -2379,8 +2501,8 @@ CONFIG_HISAX_HFC4S8S=m
 CONFIG_ISDN_CAPI=m
 CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
 CONFIG_CAPI_TRACE=y
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPIDRV=m
 
 #
@@ -2443,6 +2565,7 @@ CONFIG_KEYBOARD_IMX=m
 # CONFIG_KEYBOARD_SAMSUNG is not set
 # CONFIG_KEYBOARD_STOWAWAY is not set
 # CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_SUN4I_LRADC is not set
 CONFIG_KEYBOARD_OMAP4=m
 CONFIG_KEYBOARD_TWL4030=m
 # CONFIG_KEYBOARD_XTKBD is not set
@@ -2475,6 +2598,7 @@ CONFIG_INPUT_MISC=y
 # CONFIG_INPUT_MMA8450 is not set
 # CONFIG_INPUT_MPU3050 is not set
 # CONFIG_INPUT_GP2A is not set
+CONFIG_INPUT_GPIO_BEEPER=m
 # CONFIG_INPUT_GPIO_TILT_POLLED is not set
 CONFIG_INPUT_ATI_REMOTE2=m
 CONFIG_INPUT_KEYSPAN_REMOTE=m
@@ -2483,11 +2607,12 @@ CONFIG_INPUT_POWERMATE=m
 CONFIG_INPUT_YEALINK=m
 CONFIG_INPUT_CM109=m
 CONFIG_INPUT_RETU_PWRBUTTON=m
+CONFIG_INPUT_AXP20X_PEK=y
 CONFIG_INPUT_TWL4030_PWRBUTTON=m
 CONFIG_INPUT_TWL4030_VIBRA=m
+CONFIG_INPUT_TWL6040_VIBRA=m
 CONFIG_INPUT_UINPUT=m
 # CONFIG_INPUT_PCF8574 is not set
-CONFIG_INPUT_PWM_BEEPER=m
 CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 # CONFIG_INPUT_ADXL34X is not set
 # CONFIG_INPUT_IMS_PCU is not set
@@ -2507,6 +2632,7 @@ CONFIG_SERIO_ALTERA_PS2=m
 # CONFIG_SERIO_PS2MULT is not set
 CONFIG_SERIO_ARC_PS2=m
 CONFIG_SERIO_APBPS2=m
+CONFIG_SERIO_OLPC_APSP=m
 # CONFIG_GAMEPORT is not set
 
 #
@@ -2535,7 +2661,6 @@ CONFIG_N_HDLC=m
 CONFIG_N_GSM=m
 # CONFIG_TRACE_SINK is not set
 # CONFIG_DEVKMEM is not set
-# CONFIG_STALDRV is not set
 
 #
 # Serial drivers
@@ -2565,6 +2690,9 @@ CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
 # CONFIG_SERIAL_MFD_HSU is not set
 CONFIG_SERIAL_IMX=y
 CONFIG_SERIAL_IMX_CONSOLE=y
+CONFIG_SERIAL_UARTLITE=m
+CONFIG_SERIAL_SH_SCI=m
+CONFIG_SERIAL_SH_SCI_NR_UARTS=2
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
 # CONFIG_SERIAL_JSM is not set
@@ -2581,6 +2709,8 @@ CONFIG_SERIAL_SCCNXP=m
 CONFIG_SERIAL_ARC=m
 CONFIG_SERIAL_ARC_NR_PORTS=1
 # CONFIG_SERIAL_RP2 is not set
+CONFIG_SERIAL_FSL_LPUART=m
+CONFIG_SERIAL_ST_ASC=m
 # CONFIG_TTY_PRINTK is not set
 CONFIG_PRINTER=m
 CONFIG_LP_CONSOLE=y
@@ -2595,6 +2725,8 @@ CONFIG_IPMI_POWEROFF=m
 CONFIG_HW_RANDOM=y
 CONFIG_HW_RANDOM_TIMERIOMEM=m
 CONFIG_HW_RANDOM_ATMEL=m
+CONFIG_HW_RANDOM_OMAP=y
+CONFIG_HW_RANDOM_OMAP3_ROM=y
 CONFIG_HW_RANDOM_EXYNOS=m
 CONFIG_NVRAM=y
 CONFIG_R3964=m
@@ -2607,7 +2739,16 @@ CONFIG_I2C=y
 CONFIG_I2C_BOARDINFO=y
 CONFIG_I2C_COMPAT=y
 CONFIG_I2C_CHARDEV=m
-# CONFIG_I2C_MUX is not set
+CONFIG_I2C_MUX=y
+
+#
+# Multiplexer I2C Chip support
+#
+CONFIG_I2C_ARB_GPIO_CHALLENGE=m
+CONFIG_I2C_MUX_GPIO=m
+CONFIG_I2C_MUX_PCA9541=m
+CONFIG_I2C_MUX_PCA954x=m
+CONFIG_I2C_MUX_PINCTRL=m
 CONFIG_I2C_HELPER_AUTO=y
 CONFIG_I2C_SMBUS=m
 CONFIG_I2C_ALGOBIT=m
@@ -2644,7 +2785,6 @@ CONFIG_I2C_CBUS_GPIO=m
 # CONFIG_I2C_EG20T is not set
 CONFIG_I2C_GPIO=m
 CONFIG_I2C_IMX=m
-# CONFIG_I2C_INTEL_MID is not set
 CONFIG_I2C_MV64XXX=y
 CONFIG_I2C_NOMADIK=y
 # CONFIG_I2C_OCORES is not set
@@ -2653,6 +2793,7 @@ CONFIG_I2C_PCA_PLATFORM=m
 # CONFIG_I2C_PXA_PCI is not set
 CONFIG_I2C_SIMTEC=m
 CONFIG_I2C_VERSATILE=m
+CONFIG_I2C_WMT=m
 # CONFIG_I2C_XILINX is not set
 
 #
@@ -2661,6 +2802,7 @@ CONFIG_I2C_VERSATILE=m
 CONFIG_I2C_DIOLAN_U2C=m
 CONFIG_I2C_PARPORT=m
 CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_ROBOTFUZZ_OSIF=m
 # CONFIG_I2C_TAOS_EVM is not set
 CONFIG_I2C_TINY_USB=m
 CONFIG_I2C_VIPERBOARD=m
@@ -2673,11 +2815,6 @@ CONFIG_I2C_STUB=m
 # CONFIG_I2C_DEBUG_ALGO is not set
 # CONFIG_I2C_DEBUG_BUS is not set
 # CONFIG_SPI is not set
-
-#
-# Qualcomm MSM SSBI bus support
-#
-# CONFIG_SSBI is not set
 CONFIG_HSI=m
 CONFIG_HSI_BOARDINFO=y
 
@@ -2712,7 +2849,6 @@ CONFIG_PTP_1588_CLOCK=m
 #
 # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
 #
-CONFIG_PTP_1588_CLOCK_PCH=m
 CONFIG_PINCTRL=y
 
 #
@@ -2722,14 +2858,17 @@ CONFIG_PINMUX=y
 CONFIG_PINCONF=y
 CONFIG_GENERIC_PINCONF=y
 # CONFIG_DEBUG_PINCTRL is not set
+# CONFIG_PINCTRL_CAPRI is not set
 CONFIG_PINCTRL_IMX=y
 CONFIG_PINCTRL_IMX51=y
 CONFIG_PINCTRL_IMX53=y
 CONFIG_PINCTRL_IMX6Q=y
+CONFIG_PINCTRL_IMX6SL=y
+CONFIG_PINCTRL_MSM=y
+CONFIG_PINCTRL_MSM8X74=m
+CONFIG_PINCTRL_ROCKCHIP=y
 CONFIG_PINCTRL_SINGLE=y
 CONFIG_PINCTRL_SUNXI=y
-# CONFIG_PINCTRL_EXYNOS is not set
-# CONFIG_PINCTRL_EXYNOS5440 is not set
 CONFIG_PINCTRL_MVEBU=y
 CONFIG_PINCTRL_ARMADA_370=y
 CONFIG_PINCTRL_ARMADA_XP=y
@@ -2738,8 +2877,8 @@ CONFIG_PINCTRL_WM8850=y
 CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
 CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
 CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIO_DEVRES=y
 CONFIG_GPIOLIB=y
+CONFIG_GPIO_DEVRES=y
 CONFIG_OF_GPIO=y
 # CONFIG_DEBUG_GPIO is not set
 CONFIG_GPIO_SYSFS=y
@@ -2754,7 +2893,9 @@ CONFIG_GPIO_MVEBU=y
 CONFIG_GPIO_MXC=y
 CONFIG_GPIO_PL061=y
 # CONFIG_GPIO_RCAR is not set
+CONFIG_GPIO_SCH311X=m
 CONFIG_GPIO_TS5500=m
+# CONFIG_GPIO_XILINX is not set
 # CONFIG_GPIO_VX855 is not set
 # CONFIG_GPIO_GRGPIO is not set
 
@@ -2766,6 +2907,7 @@ CONFIG_GPIO_TS5500=m
 # CONFIG_GPIO_PCF857X is not set
 # CONFIG_GPIO_SX150X is not set
 CONFIG_GPIO_TWL4030=y
+CONFIG_GPIO_TWL6040=y
 # CONFIG_GPIO_ADP5588 is not set
 CONFIG_GPIO_ADNP=m
 
@@ -2785,9 +2927,14 @@ CONFIG_GPIO_MCP23S08=m
 # AC97 GPIO expanders:
 #
 
+#
+# LPC GPIO expanders:
+#
+
 #
 # MODULbus GPIO expanders:
 #
+# CONFIG_GPIO_BCM_KONA is not set
 
 #
 # USB GPIO expanders:
@@ -2839,6 +2986,7 @@ CONFIG_BATTERY_88PM860X=m
 # CONFIG_BATTERY_BQ27x00 is not set
 # CONFIG_BATTERY_MAX17040 is not set
 # CONFIG_BATTERY_MAX17042 is not set
+CONFIG_BATTERY_TWL4030_MADC=m
 CONFIG_CHARGER_88PM860X=m
 # CONFIG_BATTERY_RX51 is not set
 # CONFIG_CHARGER_ISP1704 is not set
@@ -2848,8 +2996,9 @@ CONFIG_CHARGER_TWL4030=y
 # CONFIG_CHARGER_GPIO is not set
 # CONFIG_CHARGER_MANAGER is not set
 # CONFIG_CHARGER_BQ2415X is not set
+# CONFIG_CHARGER_BQ24190 is not set
+# CONFIG_CHARGER_BQ24735 is not set
 # CONFIG_CHARGER_SMB347 is not set
-# CONFIG_BATTERY_GOLDFISH is not set
 CONFIG_POWER_RESET=y
 CONFIG_POWER_RESET_GPIO=y
 CONFIG_POWER_RESET_QNAP=y
@@ -2882,18 +3031,20 @@ CONFIG_SENSORS_ATXP1=m
 CONFIG_SENSORS_DS620=m
 CONFIG_SENSORS_DS1621=m
 # CONFIG_SENSORS_I5K_AMB is not set
-CONFIG_SENSORS_F71805F=m
-CONFIG_SENSORS_F71882FG=m
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
 CONFIG_SENSORS_F75375S=m
 CONFIG_SENSORS_G760A=m
+CONFIG_SENSORS_G762=m
 CONFIG_SENSORS_GL518SM=m
 CONFIG_SENSORS_GL520SM=m
 # CONFIG_SENSORS_GPIO_FAN is not set
 CONFIG_SENSORS_HIH6130=m
+CONFIG_SENSORS_HTU21=m
 CONFIG_SENSORS_IBMAEM=m
 CONFIG_SENSORS_IBMPEX=m
 # CONFIG_SENSORS_IIO_HWMON is not set
-CONFIG_SENSORS_IT87=m
+# CONFIG_SENSORS_IT87 is not set
 # CONFIG_SENSORS_JC42 is not set
 CONFIG_SENSORS_LINEAGE=m
 CONFIG_SENSORS_LM63=y
@@ -2924,10 +3075,10 @@ CONFIG_SENSORS_MAX6642=m
 CONFIG_SENSORS_MAX6650=m
 CONFIG_SENSORS_MAX6697=m
 CONFIG_SENSORS_MCP3021=m
-CONFIG_SENSORS_NCT6775=m
+# CONFIG_SENSORS_NCT6775 is not set
 CONFIG_SENSORS_NTC_THERMISTOR=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_PC87427=m
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
 CONFIG_SENSORS_PCF8591=m
 CONFIG_PMBUS=m
 CONFIG_SENSORS_PMBUS=m
@@ -2944,16 +3095,16 @@ CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 # CONFIG_SENSORS_SIS5595 is not set
 # CONFIG_SENSORS_SMM665 is not set
-CONFIG_SENSORS_DME1737=m
+# CONFIG_SENSORS_DME1737 is not set
 CONFIG_SENSORS_EMC1403=m
 # CONFIG_SENSORS_EMC2103 is not set
 CONFIG_SENSORS_EMC6W201=m
-CONFIG_SENSORS_SMSC47M1=m
+# CONFIG_SENSORS_SMSC47M1 is not set
 CONFIG_SENSORS_SMSC47M192=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SCH56XX_COMMON=m
-CONFIG_SENSORS_SCH5627=m
-CONFIG_SENSORS_SCH5636=m
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SCH56XX_COMMON is not set
+# CONFIG_SENSORS_SCH5627 is not set
+# CONFIG_SENSORS_SCH5636 is not set
 CONFIG_SENSORS_ADS1015=m
 CONFIG_SENSORS_ADS7828=m
 CONFIG_SENSORS_AMC6821=m
@@ -2966,7 +3117,7 @@ CONFIG_SENSORS_TMP421=m
 CONFIG_SENSORS_TWL4030_MADC=m
 CONFIG_SENSORS_VEXPRESS=m
 # CONFIG_SENSORS_VIA686A is not set
-CONFIG_SENSORS_VT1211=m
+# CONFIG_SENSORS_VT1211 is not set
 # CONFIG_SENSORS_VT8231 is not set
 CONFIG_SENSORS_W83781D=m
 CONFIG_SENSORS_W83791D=m
@@ -2976,10 +3127,11 @@ CONFIG_SENSORS_W83795=m
 # CONFIG_SENSORS_W83795_FANCTRL is not set
 CONFIG_SENSORS_W83L785TS=m
 CONFIG_SENSORS_W83L786NG=m
-CONFIG_SENSORS_W83627HF=m
-CONFIG_SENSORS_W83627EHF=m
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
 CONFIG_THERMAL=y
 CONFIG_THERMAL_HWMON=y
+CONFIG_THERMAL_OF=y
 CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
 # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
 # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
@@ -2990,6 +3142,15 @@ CONFIG_CPU_THERMAL=y
 CONFIG_THERMAL_EMULATION=y
 CONFIG_IMX_THERMAL=m
 CONFIG_ARMADA_THERMAL=m
+
+#
+# Texas Instruments thermal drivers
+#
+CONFIG_TI_SOC_THERMAL=y
+CONFIG_TI_THERMAL=y
+CONFIG_OMAP4_THERMAL=y
+CONFIG_OMAP5_THERMAL=y
+CONFIG_DRA752_THERMAL=y
 CONFIG_WATCHDOG=y
 CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_NOWAYOUT=y
@@ -2998,16 +3159,18 @@ CONFIG_WATCHDOG_NOWAYOUT=y
 # Watchdog Device Drivers
 #
 CONFIG_SOFT_WATCHDOG=m
+CONFIG_GPIO_WATCHDOG=m
 CONFIG_ARM_SP805_WATCHDOG=m
 # CONFIG_DW_WATCHDOG is not set
-CONFIG_MPCORE_WATCHDOG=m
 CONFIG_OMAP_WATCHDOG=m
+CONFIG_SUNXI_WATCHDOG=m
 CONFIG_TWL4030_WATCHDOG=m
 # CONFIG_MAX63XX_WATCHDOG is not set
 CONFIG_IMX2_WDT=m
 CONFIG_RETU_WATCHDOG=m
 # CONFIG_ALIM7101_WDT is not set
 # CONFIG_I6300ESB_WDT is not set
+CONFIG_MEN_A21_WDT=m
 
 #
 # PCI-based Watchdog Cards
@@ -3042,20 +3205,30 @@ CONFIG_BCMA_POSSIBLE=y
 #
 # Broadcom specific AMBA
 #
-# CONFIG_BCMA is not set
+CONFIG_BCMA=m
+CONFIG_BCMA_BLOCKIO=y
+CONFIG_BCMA_HOST_PCI_POSSIBLE=y
+CONFIG_BCMA_HOST_PCI=y
+CONFIG_BCMA_HOST_SOC=y
+CONFIG_BCMA_DRIVER_GMAC_CMN=y
+CONFIG_BCMA_DRIVER_GPIO=y
+# CONFIG_BCMA_DEBUG is not set
 
 #
 # Multifunction device drivers
 #
 CONFIG_MFD_CORE=y
 # CONFIG_MFD_AS3711 is not set
+# CONFIG_MFD_AS3722 is not set
 # CONFIG_PMIC_ADP5520 is not set
 # CONFIG_MFD_AAT2870_CORE is not set
+CONFIG_MFD_AXP20X=y
 # CONFIG_MFD_CROS_EC is not set
 # CONFIG_MFD_ASIC3 is not set
 # CONFIG_PMIC_DA903X is not set
 # CONFIG_MFD_DA9052_I2C is not set
 # CONFIG_MFD_DA9055 is not set
+# CONFIG_MFD_DA9063 is not set
 # CONFIG_MFD_MC13XXX_I2C is not set
 # CONFIG_HTC_EGPIO is not set
 # CONFIG_HTC_PASIC3 is not set
@@ -3063,9 +3236,11 @@ CONFIG_MFD_CORE=y
 # CONFIG_LPC_ICH is not set
 # CONFIG_LPC_SCH is not set
 # CONFIG_MFD_JANZ_CMODIO is not set
+# CONFIG_MFD_KEMPLD is not set
 CONFIG_MFD_88PM800=y
 CONFIG_MFD_88PM805=y
 CONFIG_MFD_88PM860X=y
+# CONFIG_MFD_MAX14577 is not set
 # CONFIG_MFD_MAX77686 is not set
 # CONFIG_MFD_MAX77693 is not set
 # CONFIG_MFD_MAX8907 is not set
@@ -3089,6 +3264,7 @@ CONFIG_ABX500_CORE=y
 # CONFIG_MFD_STMPE is not set
 CONFIG_MFD_SYSCON=y
 # CONFIG_MFD_TI_AM335X_TSCADC is not set
+# CONFIG_MFD_LP3943 is not set
 # CONFIG_MFD_LP8788 is not set
 CONFIG_MFD_OMAP_USB_HOST=y
 # CONFIG_MFD_PALMAS is not set
@@ -3106,7 +3282,7 @@ CONFIG_TWL4030_CORE=y
 CONFIG_TWL4030_MADC=y
 CONFIG_TWL4030_POWER=y
 CONFIG_MFD_TWL4030_AUDIO=y
-# CONFIG_TWL6040_CORE is not set
+CONFIG_TWL6040_CORE=y
 CONFIG_MFD_WL1273_CORE=m
 CONFIG_MFD_LM3533=m
 # CONFIG_MFD_TIMBERDALE is not set
@@ -3124,25 +3300,30 @@ CONFIG_MFD_LM3533=m
 CONFIG_VEXPRESS_CONFIG=y
 CONFIG_REGULATOR=y
 # CONFIG_REGULATOR_DEBUG is not set
-# CONFIG_REGULATOR_DUMMY is not set
 CONFIG_REGULATOR_FIXED_VOLTAGE=y
 # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
 # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
-# CONFIG_REGULATOR_GPIO is not set
+CONFIG_REGULATOR_88PM800=m
+CONFIG_REGULATOR_88PM8607=y
+# CONFIG_REGULATOR_ACT8865 is not set
 # CONFIG_REGULATOR_AD5398 is not set
-# CONFIG_REGULATOR_FAN53555 is not set
 CONFIG_REGULATOR_ANATOP=m
+CONFIG_REGULATOR_AXP20X=y
+# CONFIG_REGULATOR_DA9210 is not set
+# CONFIG_REGULATOR_FAN53555 is not set
+CONFIG_REGULATOR_GPIO=y
 # CONFIG_REGULATOR_ISL6271A is not set
-CONFIG_REGULATOR_88PM8607=y
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_LP3972 is not set
+# CONFIG_REGULATOR_LP872X is not set
+CONFIG_REGULATOR_LP8755=m
 # CONFIG_REGULATOR_MAX1586 is not set
 # CONFIG_REGULATOR_MAX8649 is not set
 # CONFIG_REGULATOR_MAX8660 is not set
 # CONFIG_REGULATOR_MAX8952 is not set
 # CONFIG_REGULATOR_MAX8973 is not set
-# CONFIG_REGULATOR_LP3971 is not set
-# CONFIG_REGULATOR_LP3972 is not set
-# CONFIG_REGULATOR_LP872X is not set
-CONFIG_REGULATOR_LP8755=m
+CONFIG_REGULATOR_PFUZE100=y
+CONFIG_REGULATOR_TI_ABB=y
 # CONFIG_REGULATOR_TPS51632 is not set
 # CONFIG_REGULATOR_TPS62360 is not set
 # CONFIG_REGULATOR_TPS65023 is not set
@@ -3176,7 +3357,6 @@ CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_MEMOPS=m
 CONFIG_VIDEOBUF2_DMA_CONTIG=m
 CONFIG_VIDEOBUF2_VMALLOC=m
-CONFIG_VIDEO_V4L2_INT_DEVICE=m
 CONFIG_DVB_CORE=y
 CONFIG_DVB_NET=y
 CONFIG_TTPCI_EEPROM=m
@@ -3209,6 +3389,7 @@ CONFIG_IR_IGUANA=m
 CONFIG_IR_TTUSBIR=m
 CONFIG_RC_LOOPBACK=m
 CONFIG_IR_GPIO_CIR=m
+CONFIG_IR_SUNXI=m
 CONFIG_MEDIA_USB_SUPPORT=y
 
 #
@@ -3254,6 +3435,7 @@ CONFIG_USB_GSPCA_SQ905=m
 CONFIG_USB_GSPCA_SQ905C=m
 CONFIG_USB_GSPCA_SQ930X=m
 CONFIG_USB_GSPCA_STK014=m
+CONFIG_USB_GSPCA_STK1135=m
 CONFIG_USB_GSPCA_STV0680=m
 CONFIG_USB_GSPCA_SUNPLUS=m
 CONFIG_USB_GSPCA_T613=m
@@ -3270,7 +3452,7 @@ CONFIG_VIDEO_CPIA2=m
 CONFIG_USB_ZR364XX=m
 CONFIG_USB_STKWEBCAM=m
 CONFIG_USB_S2255=m
-CONFIG_USB_SN9C102=m
+CONFIG_VIDEO_USBTV=m
 
 #
 # Analog TV USB devices
@@ -3282,8 +3464,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_HDPVR=m
 CONFIG_VIDEO_TLG2300=m
 CONFIG_VIDEO_USBVISION=m
-CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_STK1160_COMMON=m
 # CONFIG_VIDEO_STK1160_AC97 is not set
+CONFIG_VIDEO_STK1160=m
 
 #
 # Analog/digital TV USB devices
@@ -3352,6 +3535,7 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m
 # Webcam, TV (analog/digital) USB devices
 #
 CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_V4L2=m
 CONFIG_VIDEO_EM28XX_ALSA=m
 CONFIG_VIDEO_EM28XX_DVB=m
 CONFIG_VIDEO_EM28XX_RC=m
@@ -3384,6 +3568,7 @@ CONFIG_VIDEO_CX88=m
 CONFIG_VIDEO_CX88_ALSA=m
 CONFIG_VIDEO_CX88_BLACKBIRD=m
 CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_ENABLE_VP3054=y
 CONFIG_VIDEO_CX88_VP3054=m
 CONFIG_VIDEO_CX88_MPEG=m
 CONFIG_VIDEO_BT848=m
@@ -3421,15 +3606,19 @@ CONFIG_VIDEO_OMAP2_VOUT_VRFB=y
 CONFIG_VIDEO_OMAP2_VOUT=y
 CONFIG_VIDEO_TIMBERDALE=m
 CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_SCALE_CROP=m
 CONFIG_SOC_CAMERA_PLATFORM=m
-CONFIG_MX3_VIDEO=y
 CONFIG_VIDEO_MX3=m
+CONFIG_VIDEO_RCAR_VIN=m
 # CONFIG_VIDEO_SH_MOBILE_CSI2 is not set
 # CONFIG_VIDEO_SH_MOBILE_CEU is not set
 CONFIG_V4L_MEM2MEM_DRIVERS=y
 # CONFIG_VIDEO_CODA is not set
 CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
 CONFIG_VIDEO_SH_VEU=m
+CONFIG_VIDEO_RENESAS_VSP1=m
+CONFIG_VIDEO_TI_VPE=m
+# CONFIG_VIDEO_TI_VPE_DEBUG is not set
 # CONFIG_V4L_TEST_DRIVERS is not set
 
 #
@@ -3456,7 +3645,6 @@ CONFIG_VIDEO_SAA7146=m
 CONFIG_VIDEO_SAA7146_VV=m
 CONFIG_SMS_SIANO_MDTV=m
 CONFIG_SMS_SIANO_RC=y
-# CONFIG_SMS_SIANO_DEBUGFS is not set
 
 #
 # Media ancillary drivers (tuners, sensors, i2c, frontends)
@@ -3519,7 +3707,12 @@ CONFIG_VIDEO_UPD64031A=m
 CONFIG_VIDEO_UPD64083=m
 
 #
-# Miscelaneous helper chips
+# Audio/Video compression chips
+#
+CONFIG_VIDEO_SAA6752HS=m
+
+#
+# Miscellaneous helper chips
 #
 CONFIG_VIDEO_M52790=m
 
@@ -3570,6 +3763,7 @@ CONFIG_MEDIA_TUNER_FC0013=m
 CONFIG_MEDIA_TUNER_TDA18212=m
 CONFIG_MEDIA_TUNER_E4000=m
 CONFIG_MEDIA_TUNER_FC2580=m
+CONFIG_MEDIA_TUNER_M88TS2022=m
 CONFIG_MEDIA_TUNER_TUA9001=m
 CONFIG_MEDIA_TUNER_IT913X=m
 CONFIG_MEDIA_TUNER_R820T=m
@@ -3581,6 +3775,7 @@ CONFIG_DVB_STB0899=m
 CONFIG_DVB_STB6100=m
 CONFIG_DVB_STV090x=m
 CONFIG_DVB_STV6110x=m
+CONFIG_DVB_M88DS3103=m
 
 #
 # Multistandard (cable + terrestrial) frontends
@@ -3611,8 +3806,7 @@ CONFIG_DVB_TUNER_CX24113=m
 CONFIG_DVB_TDA826X=m
 CONFIG_DVB_TUA6100=m
 CONFIG_DVB_CX24116=m
-CONFIG_DVB_M88DS3103=m
-CONFIG_DVB_M88DC2800=m
+CONFIG_DVB_CX24117=m
 CONFIG_DVB_SI21XX=m
 CONFIG_DVB_TS2020=m
 CONFIG_DVB_DS3000=m
@@ -3693,6 +3887,8 @@ CONFIG_DVB_A8293=m
 CONFIG_DVB_LGS8GXX=m
 CONFIG_DVB_ATBM8830=m
 CONFIG_DVB_TDA665x=m
+CONFIG_DVB_DVBSKY_M88DS3103=m
+CONFIG_DVB_M88DC2800=m
 CONFIG_DVB_IX2505V=m
 CONFIG_DVB_IT913X_FE=m
 CONFIG_DVB_M88RS2000=m
@@ -3711,6 +3907,7 @@ CONFIG_VGA_ARB_MAX_GPUS=16
 CONFIG_DRM=m
 CONFIG_DRM_USB=m
 CONFIG_DRM_KMS_HELPER=m
+CONFIG_DRM_KMS_FB_HELPER=y
 # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
 CONFIG_DRM_GEM_CMA_HELPER=y
 CONFIG_DRM_KMS_CMA_HELPER=y
@@ -3733,16 +3930,23 @@ CONFIG_DRM_EXYNOS_DMABUF=y
 CONFIG_DRM_EXYNOS_HDMI=y
 CONFIG_DRM_EXYNOS_VIDI=y
 CONFIG_DRM_EXYNOS_G2D=y
+CONFIG_DRM_EXYNOS_IPP=y
+CONFIG_DRM_EXYNOS_FIMC=y
+CONFIG_DRM_EXYNOS_ROTATOR=y
 # CONFIG_DRM_VMWGFX is not set
 CONFIG_DRM_UDL=m
 # CONFIG_DRM_AST is not set
 # CONFIG_DRM_MGAG200 is not set
 # CONFIG_DRM_CIRRUS_QEMU is not set
+CONFIG_DRM_ARMADA=m
+CONFIG_DRM_RCAR_DU=m
+CONFIG_DRM_RCAR_LVDS=y
+CONFIG_DRM_SHMOBILE=m
 CONFIG_DRM_OMAP=m
 CONFIG_DRM_OMAP_NUM_CRTCS=2
 CONFIG_DRM_TILCDC=m
 # CONFIG_DRM_QXL is not set
-# CONFIG_TEGRA_HOST1X is not set
+# CONFIG_DRM_BOCHS is not set
 # CONFIG_VGASTATE is not set
 # CONFIG_VIDEO_OUTPUT_CONTROL is not set
 CONFIG_VIDEOMODE_HELPERS=y
@@ -3754,7 +3958,7 @@ CONFIG_FIRMWARE_EDID=y
 CONFIG_FB_CFB_FILLRECT=m
 CONFIG_FB_CFB_COPYAREA=m
 CONFIG_FB_CFB_IMAGEBLIT=m
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+CONFIG_FB_CFB_REV_PIXELS_IN_BYTE=y
 CONFIG_FB_SYS_FILLRECT=y
 CONFIG_FB_SYS_COPYAREA=y
 CONFIG_FB_SYS_IMAGEBLIT=y
@@ -3773,10 +3977,12 @@ CONFIG_FB_TILEBLITTING=y
 # CONFIG_FB_CIRRUS is not set
 # CONFIG_FB_PM2 is not set
 CONFIG_FB_ARMCLCD=m
+CONFIG_FB_IMX=m
 # CONFIG_FB_CYBER2000 is not set
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_IMSTT is not set
 # CONFIG_FB_UVESA is not set
+CONFIG_FB_OPENCORES=m
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_NVIDIA is not set
 # CONFIG_FB_RIVA is not set
@@ -3803,7 +4009,9 @@ CONFIG_FB_ARMCLCD=m
 # CONFIG_FB_SM501 is not set
 CONFIG_FB_SMSCUFX=m
 # CONFIG_FB_UDL is not set
+CONFIG_FB_XILINX=m
 # CONFIG_FB_GOLDFISH is not set
+CONFIG_FB_DA8XX=m
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_FB_METRONOME is not set
 # CONFIG_FB_MB862XX is not set
@@ -3816,7 +4024,6 @@ CONFIG_OMAP2_DSS=y
 # CONFIG_OMAP2_DSS_DEBUG is not set
 # CONFIG_OMAP2_DSS_DEBUGFS is not set
 CONFIG_OMAP2_DSS_DPI=y
-CONFIG_OMAP2_DSS_RFBI=y
 CONFIG_OMAP2_DSS_VENC=y
 CONFIG_OMAP4_DSS_HDMI=y
 CONFIG_OMAP4_DSS_HDMI_AUDIO=y
@@ -3829,13 +4036,16 @@ CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
 CONFIG_FB_OMAP2_NUM_FBS=3
 
 #
-# OMAP2/3 Display Device Drivers
+# OMAP Display Device Drivers (new device model)
 #
-CONFIG_PANEL_GENERIC_DPI=m
-CONFIG_PANEL_TFP410=m
-CONFIG_PANEL_SHARP_LS037V7DW01=m
-CONFIG_PANEL_PICODLP=m
-CONFIG_PANEL_TAAL=m
+CONFIG_DISPLAY_ENCODER_TFP410=m
+CONFIG_DISPLAY_ENCODER_TPD12S015=m
+CONFIG_DISPLAY_CONNECTOR_DVI=m
+CONFIG_DISPLAY_CONNECTOR_HDMI=m
+CONFIG_DISPLAY_CONNECTOR_ANALOG_TV=m
+CONFIG_DISPLAY_PANEL_DPI=m
+CONFIG_DISPLAY_PANEL_DSI_CM=m
+CONFIG_DISPLAY_PANEL_SHARP_LS037V7DW01=m
 # CONFIG_EXYNOS_VIDEO is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
 CONFIG_LCD_CLASS_DEVICE=m
@@ -3847,11 +4057,13 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
 # CONFIG_BACKLIGHT_ADP8860 is not set
 # CONFIG_BACKLIGHT_ADP8870 is not set
 # CONFIG_BACKLIGHT_88PM860X is not set
-# CONFIG_BACKLIGHT_LM3630 is not set
+# CONFIG_BACKLIGHT_LM3630A is not set
 # CONFIG_BACKLIGHT_LM3639 is not set
 # CONFIG_BACKLIGHT_LP855X is not set
 # CONFIG_BACKLIGHT_PANDORA is not set
-# CONFIG_BACKLIGHT_TLC59108 is not set
+# CONFIG_BACKLIGHT_GPIO is not set
+# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_BD6107 is not set
 
 #
 # Console display driver support
@@ -3860,9 +4072,6 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
 CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
 CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_MONO is not set
 # CONFIG_LOGO_LINUX_VGA16 is not set
@@ -3874,6 +4083,7 @@ CONFIG_SOUND_OSS_CORE_PRECLAIM=y
 CONFIG_SND=m
 CONFIG_SND_TIMER=m
 CONFIG_SND_PCM=m
+CONFIG_SND_DMAENGINE_PCM=m
 CONFIG_SND_HWDEP=m
 CONFIG_SND_RAWMIDI=m
 CONFIG_SND_COMPRESS_OFFLOAD=m
@@ -3888,6 +4098,7 @@ CONFIG_SND_SEQUENCER_OSS=y
 CONFIG_SND_HRTIMER=m
 CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
 CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_MAX_CARDS=32
 # CONFIG_SND_SUPPORT_OLD_API is not set
 CONFIG_SND_VERBOSE_PROCFS=y
 CONFIG_SND_VERBOSE_PRINTK=y
@@ -3916,7 +4127,6 @@ CONFIG_SND_MPU401=m
 CONFIG_SND_PORTMAN2X4=m
 CONFIG_SND_AC97_POWER_SAVE=y
 CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
-CONFIG_SND_TEA575X=m
 CONFIG_SND_PCI=y
 CONFIG_SND_AD1889=m
 CONFIG_SND_ALS300=m
@@ -3960,28 +4170,26 @@ CONFIG_SND_ENS1371=m
 CONFIG_SND_ES1938=m
 CONFIG_SND_ES1968=m
 CONFIG_SND_ES1968_INPUT=y
-CONFIG_SND_ES1968_RADIO=y
 CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X_BOOL=y
 CONFIG_SND_HDA_INTEL=m
 CONFIG_SND_HDA_PREALLOC_SIZE=64
 # CONFIG_SND_HDA_HWDEP is not set
 # CONFIG_SND_HDA_INPUT_BEEP is not set
 # CONFIG_SND_HDA_INPUT_JACK is not set
 # CONFIG_SND_HDA_PATCH_LOADER is not set
-CONFIG_SND_HDA_CODEC_REALTEK=y
-CONFIG_SND_HDA_CODEC_ANALOG=y
-CONFIG_SND_HDA_CODEC_SIGMATEL=y
-CONFIG_SND_HDA_CODEC_VIA=y
-CONFIG_SND_HDA_CODEC_HDMI=y
-CONFIG_SND_HDA_CODEC_CIRRUS=y
-CONFIG_SND_HDA_CODEC_CONEXANT=y
-CONFIG_SND_HDA_CODEC_CA0110=y
-CONFIG_SND_HDA_CODEC_CA0132=y
+CONFIG_SND_HDA_CODEC_REALTEK=m
+CONFIG_SND_HDA_CODEC_ANALOG=m
+CONFIG_SND_HDA_CODEC_SIGMATEL=m
+CONFIG_SND_HDA_CODEC_VIA=m
+CONFIG_SND_HDA_CODEC_HDMI=m
+CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CONEXANT=m
+CONFIG_SND_HDA_CODEC_CA0110=m
+CONFIG_SND_HDA_CODEC_CA0132=m
 # CONFIG_SND_HDA_CODEC_CA0132_DSP is not set
-CONFIG_SND_HDA_CODEC_CMEDIA=y
-CONFIG_SND_HDA_CODEC_SI3054=y
-CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_CODEC_CMEDIA=m
+CONFIG_SND_HDA_CODEC_SI3054=m
+CONFIG_SND_HDA_GENERIC=m
 CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
 CONFIG_SND_HDSP=m
 CONFIG_SND_HDSPM=m
@@ -4015,37 +4223,52 @@ CONFIG_SND_USB_UA101=m
 CONFIG_SND_USB_CAIAQ=m
 CONFIG_SND_USB_CAIAQ_INPUT=y
 CONFIG_SND_USB_6FIRE=m
+CONFIG_SND_USB_HIFACE=m
 CONFIG_SND_FIREWIRE=y
+CONFIG_SND_FIREWIRE_LIB=m
+CONFIG_SND_DICE=m
 # CONFIG_SND_FIREWIRE_SPEAKERS is not set
 # CONFIG_SND_ISIGHT is not set
 # CONFIG_SND_SCS1X is not set
 CONFIG_SND_SOC=m
-CONFIG_SND_SOC_DMAENGINE_PCM=y
 CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
+CONFIG_SND_SOC_ADI=m
+CONFIG_SND_SOC_ADI_AXI_I2S=m
+CONFIG_SND_SOC_ADI_AXI_SPDIF=m
 CONFIG_SND_ATMEL_SOC=m
+CONFIG_SND_DAVINCI_SOC=m
+CONFIG_SND_DAVINCI_SOC_MCASP=m
+CONFIG_SND_DAVINCI_SOC_GENERIC_EVM=m
+CONFIG_SND_AM33XX_SOC_EVM=m
 CONFIG_SND_DESIGNWARE_I2S=m
 CONFIG_SND_SOC_FSL_SSI=m
-CONFIG_SND_SOC_FSL_UTILS=m
+CONFIG_SND_SOC_FSL_SPDIF=m
 CONFIG_SND_IMX_SOC=m
-CONFIG_SND_SOC_IMX_PCM=m
-CONFIG_SND_SOC_IMX_PCM_DMA=y
+CONFIG_SND_SOC_IMX_PCM_DMA=m
 CONFIG_SND_SOC_IMX_AUDMUX=m
+CONFIG_SND_SOC_IMX_WM8962=m
 CONFIG_SND_SOC_IMX_SGTL5000=m
+CONFIG_SND_SOC_IMX_SPDIF=m
 CONFIG_SND_OMAP_SOC=m
+CONFIG_SND_OMAP_SOC_DMIC=m
 CONFIG_SND_OMAP_SOC_MCBSP=m
+CONFIG_SND_OMAP_SOC_MCPDM=m
 CONFIG_SND_OMAP_SOC_HDMI=m
 CONFIG_SND_OMAP_SOC_RX51=m
 CONFIG_SND_OMAP_SOC_AM3517EVM=m
 CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
+CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m
 CONFIG_SND_OMAP_SOC_OMAP_HDMI=m
 CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
 CONFIG_SND_SOC_I2C_AND_SPI=m
-# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_OMAP_HDMI_CODEC=m
+CONFIG_SND_SOC_DMIC=m
+CONFIG_SND_SOC_HDMI_CODEC=m
 CONFIG_SND_SOC_SGTL5000=m
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC3X=m
 CONFIG_SND_SOC_TWL4030=m
+CONFIG_SND_SOC_TWL6040=m
+CONFIG_SND_SOC_WM8962=m
 CONFIG_SND_SOC_TPA6130A2=m
 CONFIG_SND_SIMPLE_CARD=m
 # CONFIG_SOUND_PRIME is not set
@@ -4076,8 +4299,10 @@ CONFIG_HID_CYPRESS=y
 # CONFIG_HID_DRAGONRISE is not set
 # CONFIG_HID_EMS_FF is not set
 # CONFIG_HID_ELECOM is not set
+# CONFIG_HID_ELO is not set
 CONFIG_HID_EZKEY=y
 # CONFIG_HID_HOLTEK is not set
+# CONFIG_HID_HUION is not set
 CONFIG_HID_KEYTOUCH=m
 CONFIG_HID_KYE=y
 # CONFIG_HID_UCLOGIC is not set
@@ -4109,7 +4334,6 @@ CONFIG_HID_PICOLCD_LCD=y
 CONFIG_HID_PICOLCD_LEDS=y
 CONFIG_HID_PICOLCD_CIR=y
 # CONFIG_HID_PRIMAX is not set
-# CONFIG_HID_PS3REMOTE is not set
 CONFIG_HID_ROCCAT=m
 CONFIG_HID_SAITEK=m
 CONFIG_HID_SAMSUNG=m
@@ -4125,6 +4349,7 @@ CONFIG_HID_THINGM=m
 # CONFIG_HID_THRUSTMASTER is not set
 # CONFIG_HID_WACOM is not set
 # CONFIG_HID_WIIMOTE is not set
+# CONFIG_HID_XINMO is not set
 # CONFIG_HID_ZEROPLUS is not set
 CONFIG_HID_ZYDACRON=m
 CONFIG_HID_SENSOR_HUB=m
@@ -4140,9 +4365,8 @@ CONFIG_USB_HIDDEV=y
 # I2C HID support
 #
 CONFIG_I2C_HID=m
-CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB_ARCH_HAS_XHCI=y
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_COMMON=y
 CONFIG_USB_ARCH_HAS_HCD=y
@@ -4166,7 +4390,8 @@ CONFIG_USB_WUSB_CBAF=m
 # USB Host Controller Drivers
 #
 # CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_XHCI_HCD is not set
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_PLATFORM=m
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_EHCI_TT_NEWSCHED=y
@@ -4179,6 +4404,8 @@ CONFIG_USB_EHCI_HCD_PLATFORM=y
 # CONFIG_USB_ISP116X_HCD is not set
 # CONFIG_USB_ISP1760_HCD is not set
 CONFIG_USB_ISP1362_HCD=m
+CONFIG_USB_FUSBH200_HCD=m
+CONFIG_USB_FOTG210_HCD=m
 # CONFIG_USB_OHCI_HCD is not set
 CONFIG_USB_UHCI_HCD=y
 CONFIG_USB_UHCI_SUPPORT_NON_PCI_HC=y
@@ -4187,8 +4414,12 @@ CONFIG_USB_UHCI_PLATFORM=y
 CONFIG_USB_SL811_HCD=m
 CONFIG_USB_SL811_HCD_ISO=y
 # CONFIG_USB_R8A66597_HCD is not set
+CONFIG_USB_RENESAS_USBHS_HCD=m
 CONFIG_USB_IMX21_HCD=y
+CONFIG_USB_HCD_BCMA=m
 CONFIG_USB_HCD_SSB=m
+# CONFIG_USB_HCD_TEST_MODE is not set
+CONFIG_USB_RENESAS_USBHS=m
 
 #
 # USB Device Class drivers
@@ -4227,10 +4458,42 @@ CONFIG_USB_STORAGE_ENE_UB6250=m
 #
 CONFIG_USB_MDC800=m
 CONFIG_USB_MICROTEK=m
+CONFIG_USB_MUSB_HDRC=m
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_GADGET is not set
+CONFIG_USB_MUSB_DUAL_ROLE=y
+CONFIG_USB_MUSB_TUSB6010=m
+CONFIG_USB_MUSB_OMAP2PLUS=m
+CONFIG_USB_MUSB_AM35X=m
+CONFIG_USB_MUSB_DSPS=m
+CONFIG_USB_MUSB_UX500=m
+CONFIG_USB_MUSB_AM335X_CHILD=m
+# CONFIG_USB_UX500_DMA is not set
+# CONFIG_USB_INVENTRA_DMA is not set
+# CONFIG_USB_TI_CPPI41_DMA is not set
+# CONFIG_USB_TUSB_OMAP_DMA is not set
+CONFIG_MUSB_PIO_ONLY=y
 CONFIG_USB_DWC3=m
-CONFIG_USB_DWC3_HOST=y
+# CONFIG_USB_DWC3_HOST is not set
+# CONFIG_USB_DWC3_GADGET is not set
+CONFIG_USB_DWC3_DUAL_ROLE=y
+
+#
+# Platform Glue Driver Support
+#
+CONFIG_USB_DWC3_EXYNOS=m
+CONFIG_USB_DWC3_PCI=m
+CONFIG_USB_DWC3_KEYSTONE=m
+
+#
+# Debugging features
+#
 # CONFIG_USB_DWC3_DEBUG is not set
+CONFIG_USB_DWC2=m
+# CONFIG_USB_DWC2_DEBUG is not set
+# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
 CONFIG_USB_CHIPIDEA=m
+CONFIG_USB_CHIPIDEA_UDC=y
 CONFIG_USB_CHIPIDEA_HOST=y
 # CONFIG_USB_CHIPIDEA_DEBUG is not set
 
@@ -4240,6 +4503,7 @@ CONFIG_USB_CHIPIDEA_HOST=y
 CONFIG_USB_USS720=m
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_SIMPLE=m
 CONFIG_USB_SERIAL_AIRCABLE=m
 CONFIG_USB_SERIAL_ARK3116=m
 CONFIG_USB_SERIAL_BELKIN=m
@@ -4250,7 +4514,6 @@ CONFIG_USB_SERIAL_CP210X=m
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 # CONFIG_USB_SERIAL_EMPEG is not set
 CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
 CONFIG_USB_SERIAL_VISOR=m
 CONFIG_USB_SERIAL_IPAQ=m
 CONFIG_USB_SERIAL_IR=m
@@ -4269,16 +4532,14 @@ CONFIG_USB_SERIAL_MCT_U232=m
 CONFIG_USB_SERIAL_MOS7720=m
 CONFIG_USB_SERIAL_MOS7715_PARPORT=y
 CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_MXUPORT=m
 # CONFIG_USB_SERIAL_NAVMAN is not set
 CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_OTI6858=m
 CONFIG_USB_SERIAL_QCAUX=m
 CONFIG_USB_SERIAL_QUALCOMM=m
 CONFIG_USB_SERIAL_SPCP8X5=m
-# CONFIG_USB_SERIAL_HP4X is not set
 # CONFIG_USB_SERIAL_SAFE is not set
-CONFIG_USB_SERIAL_SIEMENS_MPI=m
 CONFIG_USB_SERIAL_SIERRAWIRELESS=m
 # CONFIG_USB_SERIAL_SYMBOL is not set
 # CONFIG_USB_SERIAL_TI is not set
@@ -4288,9 +4549,7 @@ CONFIG_USB_SERIAL_WWAN=m
 CONFIG_USB_SERIAL_OPTION=m
 # CONFIG_USB_SERIAL_OMNINET is not set
 # CONFIG_USB_SERIAL_OPTICON is not set
-# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
 # CONFIG_USB_SERIAL_XSENS_MT is not set
-# CONFIG_USB_SERIAL_ZIO is not set
 # CONFIG_USB_SERIAL_WISHBONE is not set
 CONFIG_USB_SERIAL_ZTE=m
 CONFIG_USB_SERIAL_SSU100=m
@@ -4319,6 +4578,7 @@ CONFIG_USB_SISUSBVGA_CON=y
 # CONFIG_USB_TRANCEVIBRATOR is not set
 CONFIG_USB_IOWARRIOR=m
 # CONFIG_USB_TEST is not set
+# CONFIG_USB_EHSET_TEST_FIXTURE is not set
 # CONFIG_USB_ISIGHTFW is not set
 CONFIG_USB_YUREX=m
 CONFIG_USB_EZUSB_FX2=m
@@ -4328,20 +4588,78 @@ CONFIG_USB_SPEEDTOUCH=m
 CONFIG_USB_CXACRU=m
 CONFIG_USB_UEAGLEATM=m
 CONFIG_USB_XUSBATM=m
+
+#
+# USB Physical Layer drivers
+#
 CONFIG_USB_PHY=y
-CONFIG_NOP_USB_XCEIV=m
+CONFIG_USB_OTG_FSM=m
+CONFIG_NOP_USB_XCEIV=y
 CONFIG_OMAP_CONTROL_USB=y
-CONFIG_OMAP_USB2=y
 CONFIG_OMAP_USB3=m
+CONFIG_AM335X_CONTROL_USB=m
+CONFIG_AM335X_PHY_USB=m
 CONFIG_SAMSUNG_USBPHY=m
 CONFIG_SAMSUNG_USB2PHY=m
 CONFIG_SAMSUNG_USB3PHY=m
+CONFIG_TWL6030_USB=m
 CONFIG_USB_GPIO_VBUS=m
 CONFIG_USB_ISP1301=m
 CONFIG_USB_MXS_PHY=m
 CONFIG_USB_RCAR_PHY=m
 CONFIG_USB_ULPI=y
-# CONFIG_USB_GADGET is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=500
+CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
+
+#
+# USB Peripheral Controller
+#
+# CONFIG_USB_FSL_USB2 is not set
+# CONFIG_USB_FUSB300 is not set
+# CONFIG_USB_FOTG210_UDC is not set
+# CONFIG_USB_GR_UDC is not set
+# CONFIG_USB_R8A66597 is not set
+# CONFIG_USB_RENESAS_USBHS_UDC is not set
+# CONFIG_USB_PXA27X is not set
+# CONFIG_USB_S3C_HSOTG is not set
+# CONFIG_USB_MV_UDC is not set
+# CONFIG_USB_MV_U3D is not set
+# CONFIG_USB_M66592 is not set
+# CONFIG_USB_AMD5536UDC is not set
+# CONFIG_USB_NET2272 is not set
+# CONFIG_USB_NET2280 is not set
+# CONFIG_USB_GOKU is not set
+# CONFIG_USB_EG20T is not set
+# CONFIG_USB_DUMMY_HCD is not set
+CONFIG_USB_LIBCOMPOSITE=m
+CONFIG_USB_U_ETHER=m
+CONFIG_USB_F_ECM=m
+CONFIG_USB_F_EEM=m
+CONFIG_USB_F_SUBSET=m
+CONFIG_USB_F_RNDIS=m
+# CONFIG_USB_CONFIGFS is not set
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_ETH_EEM=y
+# CONFIG_USB_G_NCM is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FUNCTIONFS is not set
+# CONFIG_USB_MASS_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+# CONFIG_USB_G_ACM_MS is not set
+# CONFIG_USB_G_MULTI is not set
+# CONFIG_USB_G_HID is not set
+# CONFIG_USB_G_DBGP is not set
+# CONFIG_USB_G_WEBCAM is not set
 # CONFIG_UWB is not set
 CONFIG_MMC=y
 # CONFIG_MMC_DEBUG is not set
@@ -4365,6 +4683,7 @@ CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_IO_ACCESSORS=y
 # CONFIG_MMC_SDHCI_PCI is not set
 CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_OF_ARASAN=m
 CONFIG_MMC_SDHCI_ESDHC_IMX=y
 CONFIG_MMC_SDHCI_PXAV3=m
 CONFIG_MMC_SDHCI_PXAV2=m
@@ -4376,13 +4695,16 @@ CONFIG_MMC_MVSDIO=y
 # CONFIG_MMC_CB710 is not set
 # CONFIG_MMC_VIA_SDMMC is not set
 CONFIG_MMC_DW=m
-# CONFIG_MMC_DW_IDMAC is not set
+CONFIG_MMC_DW_IDMAC=y
 CONFIG_MMC_DW_PLTFM=m
 CONFIG_MMC_DW_EXYNOS=m
+CONFIG_MMC_DW_SOCFPGA=m
+CONFIG_MMC_DW_K3=m
 # CONFIG_MMC_DW_PCI is not set
 CONFIG_MMC_VUB300=m
 CONFIG_MMC_USHC=m
 CONFIG_MMC_WMT=m
+CONFIG_MMC_SUNXI=y
 CONFIG_MEMSTICK=m
 # CONFIG_MEMSTICK_DEBUG is not set
 
@@ -4391,6 +4713,7 @@ CONFIG_MEMSTICK=m
 #
 # CONFIG_MEMSTICK_UNSAFE_RESUME is not set
 CONFIG_MSPRO_BLOCK=m
+CONFIG_MS_BLOCK=m
 
 #
 # MemoryStick Host Controller Drivers
@@ -4416,17 +4739,19 @@ CONFIG_LEDS_LP55XX_COMMON=m
 CONFIG_LEDS_LP5521=m
 CONFIG_LEDS_LP5523=m
 CONFIG_LEDS_LP5562=m
+CONFIG_LEDS_LP8501=m
 CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA9633=m
+CONFIG_LEDS_PCA963X=m
+CONFIG_LEDS_PCA9685=m
 CONFIG_LEDS_PWM=m
 CONFIG_LEDS_REGULATOR=m
 CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_LT3593=m
-CONFIG_LEDS_RENESAS_TPU=y
 CONFIG_LEDS_TCA6507=m
 CONFIG_LEDS_LM355x=m
 CONFIG_LEDS_OT200=m
 CONFIG_LEDS_BLINKM=m
+CONFIG_LEDS_TLC59116=m
 
 #
 # LED Triggers
@@ -4434,7 +4759,7 @@ CONFIG_LEDS_BLINKM=m
 CONFIG_LEDS_TRIGGERS=y
 CONFIG_LEDS_TRIGGER_TIMER=m
 CONFIG_LEDS_TRIGGER_ONESHOT=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
 CONFIG_LEDS_TRIGGER_BACKLIGHT=m
 CONFIG_LEDS_TRIGGER_CPU=y
 CONFIG_LEDS_TRIGGER_GPIO=m
@@ -4474,11 +4799,14 @@ CONFIG_RTC_DRV_DS1307=m
 CONFIG_RTC_DRV_DS1374=m
 CONFIG_RTC_DRV_DS1672=m
 CONFIG_RTC_DRV_DS3232=m
+CONFIG_RTC_DRV_HYM8563=m
 CONFIG_RTC_DRV_MAX6900=m
 CONFIG_RTC_DRV_RS5C372=m
 CONFIG_RTC_DRV_ISL1208=m
 CONFIG_RTC_DRV_ISL12022=m
+CONFIG_RTC_DRV_ISL12057=m
 CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF2127=m
 CONFIG_RTC_DRV_PCF8523=m
 CONFIG_RTC_DRV_PCF8563=m
 CONFIG_RTC_DRV_PCF8583=m
@@ -4523,9 +4851,11 @@ CONFIG_RTC_DRV_OMAP=y
 CONFIG_RTC_DRV_PL030=m
 CONFIG_RTC_DRV_PL031=m
 CONFIG_RTC_DRV_VT8500=m
+CONFIG_RTC_DRV_SUNXI=y
 CONFIG_RTC_DRV_MV=m
 CONFIG_RTC_DRV_MXC=m
 CONFIG_RTC_DRV_SNVS=m
+CONFIG_RTC_DRV_MOXART=m
 
 #
 # HID Sensor RTC drivers
@@ -4539,16 +4869,20 @@ CONFIG_DMADEVICES=y
 #
 CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y
 CONFIG_AMBA_PL08X=y
+CONFIG_DW_DMAC_CORE=m
 # CONFIG_DW_DMAC is not set
+CONFIG_DW_DMAC_PCI=m
 CONFIG_MV_XOR=y
 CONFIG_MX3_IPU=y
 CONFIG_MX3_IPU_IRQS=4
 CONFIG_TIMB_DMA=m
+CONFIG_TI_EDMA=y
 CONFIG_PL330_DMA=y
 CONFIG_IMX_SDMA=y
 CONFIG_IMX_DMA=y
 CONFIG_MXS_DMA=y
 CONFIG_DMA_OMAP=y
+CONFIG_TI_CPPI41=m
 CONFIG_DMA_ENGINE=y
 CONFIG_DMA_VIRTUAL_CHANNELS=y
 CONFIG_DMA_OF=y
@@ -4558,16 +4892,17 @@ CONFIG_DMA_OF=y
 #
 CONFIG_ASYNC_TX_DMA=y
 # CONFIG_DMATEST is not set
+CONFIG_DMA_ENGINE_RAID=y
 # CONFIG_AUXDISPLAY is not set
 CONFIG_UIO=m
 # CONFIG_UIO_CIF is not set
-# CONFIG_UIO_PDRV is not set
 # CONFIG_UIO_PDRV_GENIRQ is not set
 # CONFIG_UIO_DMEM_GENIRQ is not set
 # CONFIG_UIO_AEC is not set
 # CONFIG_UIO_SERCOS3 is not set
 # CONFIG_UIO_PCI_GENERIC is not set
 # CONFIG_UIO_NETX is not set
+# CONFIG_UIO_MF624 is not set
 CONFIG_VIRT_DRIVERS=y
 
 #
@@ -4589,14 +4924,16 @@ CONFIG_USBIP_HOST=m
 # CONFIG_PRISM2_USB is not set
 # CONFIG_ECHO is not set
 # CONFIG_COMEDI is not set
-# CONFIG_ASUS_OLED is not set
 # CONFIG_PANEL is not set
 # CONFIG_R8187SE is not set
 # CONFIG_RTL8192U is not set
 # CONFIG_RTLLIB is not set
 # CONFIG_R8712U is not set
+# CONFIG_R8188EU is not set
+# CONFIG_R8821AE is not set
 CONFIG_RTS5139=m
 # CONFIG_RTS5139_DEBUG is not set
+# CONFIG_RTS5208 is not set
 # CONFIG_TRANZPORT is not set
 # CONFIG_IDE_PHISON is not set
 # CONFIG_LINE6_USB is not set
@@ -4671,10 +5008,7 @@ CONFIG_RTS5139=m
 # Triggers - standalone
 #
 # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
-# CONFIG_IIO_GPIO_TRIGGER is not set
-# CONFIG_IIO_SYSFS_TRIGGER is not set
 # CONFIG_IIO_SIMPLE_DUMMY is not set
-# CONFIG_ZSMALLOC is not set
 # CONFIG_FB_SM7XX is not set
 # CONFIG_CRYSTALHD is not set
 # CONFIG_FB_XGI is not set
@@ -4696,7 +5030,7 @@ CONFIG_RTS5139=m
 # CONFIG_ANDROID is not set
 # CONFIG_USB_WPAN_HCD is not set
 # CONFIG_WIMAX_GDM72XX is not set
-# CONFIG_CSR_WIFI is not set
+CONFIG_LTE_GDM724X=m
 CONFIG_NET_VENDOR_SILICOM=y
 # CONFIG_SBYPASS is not set
 # CONFIG_BPCTL is not set
@@ -4705,8 +5039,16 @@ CONFIG_DRM_IMX=m
 # CONFIG_DRM_IMX_FB_HELPER is not set
 CONFIG_DRM_IMX_PARALLEL_DISPLAY=m
 # CONFIG_DRM_IMX_TVE is not set
+CONFIG_DRM_IMX_LDB=m
+CONFIG_DRM_IMX_IPUV3_CORE=m
+CONFIG_DRM_IMX_IPUV3=m
+CONFIG_DRM_IMX_HDMI=m
 # CONFIG_DGRP is not set
 # CONFIG_FIREWIRE_SERIAL is not set
+# CONFIG_LUSTRE_FS is not set
+# CONFIG_XILLYBUS is not set
+# CONFIG_DGNC is not set
+# CONFIG_DGAP is not set
 CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
@@ -4714,13 +5056,22 @@ CONFIG_COMMON_CLK=y
 #
 # Common Clock Framework
 #
-# CONFIG_COMMON_CLK_DEBUG is not set
 CONFIG_COMMON_CLK_VERSATILE=y
 CONFIG_COMMON_CLK_SI5351=m
+CONFIG_COMMON_CLK_SI570=m
+CONFIG_CLK_TWL6040=m
 CONFIG_COMMON_CLK_AXI_CLKGEN=m
-CONFIG_MVEBU_CLK_CORE=y
+CONFIG_COMMON_CLK_QCOM=m
+CONFIG_MSM_GCC_8660=m
+CONFIG_MSM_GCC_8960=m
+CONFIG_MSM_MMCC_8960=m
+CONFIG_MSM_GCC_8974=m
+CONFIG_MSM_MMCC_8974=m
+CONFIG_MVEBU_CLK_COMMON=y
 CONFIG_MVEBU_CLK_CPU=y
-CONFIG_MVEBU_CLK_GATING=y
+CONFIG_MVEBU_CLK_COREDIV=y
+CONFIG_ARMADA_370_CLK=y
+CONFIG_ARMADA_XP_CLK=y
 CONFIG_HWSPINLOCK=y
 
 #
@@ -4729,13 +5080,22 @@ CONFIG_HWSPINLOCK=y
 CONFIG_HWSPINLOCK_OMAP=y
 CONFIG_CLKSRC_OF=y
 CONFIG_CLKSRC_MMIO=y
+CONFIG_DW_APB_TIMER=y
+CONFIG_DW_APB_TIMER_OF=y
 CONFIG_ARMADA_370_XP_TIMER=y
 CONFIG_SUN4I_TIMER=y
+CONFIG_SUN5I_HSTIMER=y
 CONFIG_VT8500_TIMER=y
 CONFIG_CADENCE_TTC_TIMER=y
 CONFIG_ARM_ARCH_TIMER=y
+CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y
+CONFIG_ARM_GLOBAL_TIMER=y
+CONFIG_CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK=y
 CONFIG_MAILBOX=y
 CONFIG_PL320_MBOX=y
+CONFIG_OMAP_MBOX=y
+CONFIG_OMAP2PLUS_MBOX=y
+CONFIG_OMAP_MBOX_KFIFO_SIZE=256
 # CONFIG_IOMMU_SUPPORT is not set
 
 #
@@ -4750,6 +5110,7 @@ CONFIG_PL320_MBOX=y
 # CONFIG_EXTCON is not set
 CONFIG_MEMORY=y
 # CONFIG_TI_EMIF is not set
+CONFIG_MVEBU_DEVBUS=y
 CONFIG_IIO=m
 CONFIG_IIO_BUFFER=y
 CONFIG_IIO_BUFFER_CB=y
@@ -4760,6 +5121,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 # Accelerometers
 #
+# CONFIG_BMA180 is not set
 # CONFIG_HID_SENSOR_ACCEL_3D is not set
 # CONFIG_IIO_ST_ACCEL_3AXIS is not set
 
@@ -4768,7 +5130,10 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 # CONFIG_EXYNOS_ADC is not set
 # CONFIG_MAX1363 is not set
+# CONFIG_MCP3422 is not set
+# CONFIG_NAU7802 is not set
 # CONFIG_TI_ADC081C is not set
+# CONFIG_TWL6030_GPADC is not set
 # CONFIG_VIPERBOARD_ADC is not set
 
 #
@@ -4780,7 +5145,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 CONFIG_HID_SENSOR_IIO_COMMON=m
 CONFIG_HID_SENSOR_IIO_TRIGGER=m
-# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set
 
 #
 # Digital to analog converters
@@ -4810,6 +5174,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
 # CONFIG_IIO_ST_GYRO_3AXIS is not set
 # CONFIG_ITG3200 is not set
 
+#
+# Humidity sensors
+#
+# CONFIG_DHT11 is not set
+
 #
 # Inertial measurement units
 #
@@ -4819,20 +5188,52 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
 # Light sensors
 #
 # CONFIG_ADJD_S311 is not set
+# CONFIG_APDS9300 is not set
+# CONFIG_CM32181 is not set
+# CONFIG_CM36651 is not set
+# CONFIG_GP2AP020A00F is not set
+# CONFIG_HID_SENSOR_ALS is not set
 # CONFIG_SENSORS_LM3533 is not set
+# CONFIG_TCS3472 is not set
 # CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_TSL4531 is not set
 # CONFIG_VCNL4000 is not set
-# CONFIG_HID_SENSOR_ALS is not set
 
 #
 # Magnetometer sensors
 #
 # CONFIG_AK8975 is not set
+# CONFIG_MAG3110 is not set
 # CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set
 # CONFIG_IIO_ST_MAGN_3AXIS is not set
+
+#
+# Inclinometer sensors
+#
+# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set
+
+#
+# Triggers - standalone
+#
+# CONFIG_IIO_INTERRUPT_TRIGGER is not set
+# CONFIG_IIO_SYSFS_TRIGGER is not set
+
+#
+# Pressure sensors
+#
+# CONFIG_MPL3115 is not set
+# CONFIG_IIO_ST_PRESS is not set
+
+#
+# Temperature sensors
+#
+# CONFIG_TMP006 is not set
 # CONFIG_VME_BUS is not set
 CONFIG_PWM=y
+CONFIG_PWM_SYSFS=y
 CONFIG_PWM_IMX=m
+# CONFIG_PWM_PCA9685 is not set
+CONFIG_PWM_SUNXI=m
 # CONFIG_PWM_TIECAP is not set
 # CONFIG_PWM_TIEHRPWM is not set
 CONFIG_PWM_TWL=m
@@ -4842,7 +5243,20 @@ CONFIG_IRQCHIP=y
 CONFIG_ARM_GIC=y
 # CONFIG_IPACK_BUS is not set
 CONFIG_ARCH_HAS_RESET_CONTROLLER=y
-# CONFIG_RESET_CONTROLLER is not set
+CONFIG_RESET_CONTROLLER=y
+# CONFIG_FMC is not set
+
+#
+# PHY Subsystem
+#
+CONFIG_GENERIC_PHY=y
+# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
+CONFIG_OMAP_USB2=y
+CONFIG_TWL4030_USB=m
+# CONFIG_PHY_EXYNOS_DP_VIDEO is not set
+# CONFIG_BCM_KONA_USB2_PHY is not set
+CONFIG_PHY_SUN4I_USB=y
+# CONFIG_POWERCAP is not set
 
 #
 # File systems
@@ -4878,6 +5292,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
 # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
 # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
 # CONFIG_BTRFS_DEBUG is not set
+CONFIG_BTRFS_ASSERT=y
 # CONFIG_NILFS2_FS is not set
 CONFIG_FS_POSIX_ACL=y
 CONFIG_EXPORTFS=y
@@ -4898,7 +5313,6 @@ CONFIG_QUOTACTL=y
 CONFIG_AUTOFS4_FS=y
 CONFIG_FUSE_FS=m
 CONFIG_CUSE=m
-CONFIG_GENERIC_ACL=y
 
 #
 # Caches
@@ -4980,10 +5394,13 @@ CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=m
 # CONFIG_NFS_SWAP is not set
 CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
 CONFIG_PNFS_FILE_LAYOUT=m
 CONFIG_PNFS_BLOCK=m
 CONFIG_PNFS_OBJLAYOUT=m
 CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="ipfire.org"
+CONFIG_NFS_V4_1_MIGRATION=y
+CONFIG_NFS_V4_SECURITY_LABEL=y
 CONFIG_NFS_FSCACHE=y
 # CONFIG_NFS_USE_LEGACY_DNS is not set
 CONFIG_NFS_USE_KERNEL_DNS=y
@@ -4992,6 +5409,7 @@ CONFIG_NFSD_V2_ACL=y
 CONFIG_NFSD_V3=y
 CONFIG_NFSD_V3_ACL=y
 CONFIG_NFSD_V4=y
+CONFIG_NFSD_V4_SECURITY_LABEL=y
 # CONFIG_NFSD_FAULT_INJECTION is not set
 CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
@@ -5075,33 +5493,65 @@ CONFIG_DLM=m
 #
 # Kernel hacking
 #
+
+#
+# printk and dmesg options
+#
 # CONFIG_PRINTK_TIME is not set
 CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+# CONFIG_BOOT_PRINTK_DELAY is not set
+CONFIG_DYNAMIC_DEBUG=y
+
+#
+# Compile-time checks and compiler options
+#
+# CONFIG_DEBUG_INFO is not set
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 CONFIG_ENABLE_MUST_CHECK=y
 CONFIG_FRAME_WARN=2048
-# CONFIG_MAGIC_SYSRQ is not set
 CONFIG_STRIP_ASM_SYMS=y
 # CONFIG_READABLE_ASM is not set
 # CONFIG_UNUSED_SYMBOLS is not set
 CONFIG_DEBUG_FS=y
 CONFIG_HEADERS_CHECK=y
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_MAGIC_SYSRQ is not set
 CONFIG_DEBUG_KERNEL=y
+
+#
+# Memory Debugging
+#
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_STATS is not set
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
+# CONFIG_DEBUG_HIGHMEM is not set
 CONFIG_DEBUG_SHIRQ=y
+
+#
+# Debug Lockups and Hangs
+#
 CONFIG_LOCKUP_DETECTOR=y
 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+# CONFIG_DETECT_HUNG_TASK is not set
 # CONFIG_PANIC_ON_OOPS is not set
 CONFIG_PANIC_ON_OOPS_VALUE=0
-# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_TIMEOUT=0
 CONFIG_SCHED_DEBUG=y
 CONFIG_SCHEDSTATS=y
 CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_HAVE_DEBUG_KMEMLEAK=y
-# CONFIG_DEBUG_KMEMLEAK is not set
+
+#
+# Lock Debugging (spinlocks, mutexes, etc...)
+#
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
 # CONFIG_DEBUG_SPINLOCK is not set
@@ -5109,21 +5559,13 @@ CONFIG_HAVE_DEBUG_KMEMLEAK=y
 # CONFIG_DEBUG_ATOMIC_SLEEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 CONFIG_STACKTRACE=y
-# CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_HIGHMEM is not set
 CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
 # CONFIG_DEBUG_WRITECOUNT is not set
-CONFIG_DEBUG_MEMORY_INIT=y
 CONFIG_DEBUG_LIST=y
-# CONFIG_TEST_LIST_SORT is not set
 # CONFIG_DEBUG_SG is not set
 # CONFIG_DEBUG_NOTIFIERS is not set
 # CONFIG_DEBUG_CREDENTIALS is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
 
 #
 # RCU Debugging
@@ -5133,14 +5575,9 @@ CONFIG_FRAME_POINTER=y
 CONFIG_RCU_CPU_STALL_TIMEOUT=21
 # CONFIG_RCU_CPU_STALL_INFO is not set
 # CONFIG_RCU_TRACE is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-# CONFIG_DEBUG_PER_CPU_MAPS is not set
-# CONFIG_LKDTM is not set
 # CONFIG_NOTIFIER_ERROR_INJECTION is not set
 # CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
 CONFIG_NOP_TRACER=y
 CONFIG_HAVE_FUNCTION_TRACER=y
 CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
@@ -5177,18 +5614,28 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
 # CONFIG_FTRACE_STARTUP_TEST is not set
 CONFIG_RING_BUFFER_BENCHMARK=m
 # CONFIG_RING_BUFFER_STARTUP_TEST is not set
+
+#
+# Runtime Testing
+#
+# CONFIG_LKDTM is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
 CONFIG_RBTREE_TEST=m
 # CONFIG_INTERVAL_TREE_TEST is not set
-# CONFIG_BUILD_DOCSRC is not set
-CONFIG_DYNAMIC_DEBUG=y
-# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_PERCPU_TEST is not set
 # CONFIG_ATOMIC64_SELFTEST is not set
 CONFIG_ASYNC_RAID6_TEST=m
+# CONFIG_TEST_STRING_HELPERS is not set
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_BUILD_DOCSRC is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_TEST_MODULE is not set
+# CONFIG_TEST_USER_COPY is not set
 # CONFIG_SAMPLES is not set
 CONFIG_HAVE_ARCH_KGDB=y
 # CONFIG_KGDB is not set
-# CONFIG_TEST_STRING_HELPERS is not set
-# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_ARM_PTDUMP is not set
 CONFIG_STRICT_DEVMEM=y
 CONFIG_ARM_UNWIND=y
 CONFIG_OLD_MCOUNT=y
@@ -5196,9 +5643,12 @@ CONFIG_OLD_MCOUNT=y
 # CONFIG_DEBUG_LL is not set
 CONFIG_DEBUG_IMX_UART_PORT=1
 CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
+# CONFIG_DEBUG_UART_PL01X is not set
+# CONFIG_DEBUG_UART_8250 is not set
 CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
 CONFIG_OC_ETM=y
 # CONFIG_PID_IN_CONTEXTIDR is not set
+CONFIG_DEBUG_SET_MODULE_RONX=y
 
 #
 # Security options
@@ -5265,14 +5715,16 @@ CONFIG_PAX_USERCOPY=y
 # Memory Protections
 #
 # CONFIG_GRKERNSEC_KMEM is not set
-CONFIG_GRKERNSEC_JIT_HARDEN=y
 # CONFIG_GRKERNSEC_PERF_HARDEN is not set
 CONFIG_GRKERNSEC_RAND_THREADSTACK=y
 CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
+CONFIG_GRKERNSEC_RANDSTRUCT=y
+CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
+CONFIG_GRKERNSEC_OLD_ARM_USERLAND=y
 
 #
 # Role Based Access Control Options
@@ -5331,12 +5783,12 @@ CONFIG_GRKERNSEC_DMESG=y
 CONFIG_GRKERNSEC_HARDEN_PTRACE=y
 CONFIG_GRKERNSEC_PTRACE_READEXEC=y
 CONFIG_GRKERNSEC_SETXID=y
+CONFIG_GRKERNSEC_HARDEN_IPC=y
 # CONFIG_GRKERNSEC_TPE is not set
 
 #
 # Network Protections
 #
-CONFIG_GRKERNSEC_RANDNET=y
 CONFIG_GRKERNSEC_BLACKHOLE=y
 CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 # CONFIG_GRKERNSEC_SOCKET is not set
@@ -5357,6 +5809,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 CONFIG_GRKERNSEC_FLOODTIME=10
 CONFIG_GRKERNSEC_FLOODBURST=6
 CONFIG_KEYS=y
+# CONFIG_PERSISTENT_KEYRINGS is not set
+# CONFIG_BIG_KEYS is not set
 # CONFIG_ENCRYPTED_KEYS is not set
 CONFIG_KEYS_DEBUG_PROC_KEYS=y
 CONFIG_SECURITY_DMESG_RESTRICT=y
@@ -5440,6 +5894,7 @@ CONFIG_CRYPTO_VMAC=m
 #
 CONFIG_CRYPTO_CRC32C=y
 CONFIG_CRYPTO_CRC32=y
+CONFIG_CRYPTO_CRCT10DIF=y
 CONFIG_CRYPTO_GHASH=m
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=y
@@ -5451,7 +5906,7 @@ CONFIG_CRYPTO_RMD320=m
 CONFIG_CRYPTO_SHA1=y
 CONFIG_CRYPTO_SHA1_ARM=y
 CONFIG_CRYPTO_SHA256=y
-CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_SHA512=y
 CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_WP512=m
 
@@ -5468,7 +5923,7 @@ CONFIG_CRYPTO_CAMELLIA=m
 CONFIG_CRYPTO_CAST_COMMON=m
 CONFIG_CRYPTO_CAST5=m
 CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_DES=y
 CONFIG_CRYPTO_FCRYPT=m
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_SALSA20=m
@@ -5484,6 +5939,8 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_ZLIB=m
 CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_LZ4=m
+CONFIG_CRYPTO_LZ4HC=m
 
 #
 # Random Number Generation
@@ -5492,12 +5949,15 @@ CONFIG_CRYPTO_ANSI_CPRNG=m
 CONFIG_CRYPTO_USER_API=y
 CONFIG_CRYPTO_USER_API_HASH=y
 CONFIG_CRYPTO_USER_API_SKCIPHER=y
+CONFIG_CRYPTO_HASH_INFO=y
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_MV_CESA=m
 CONFIG_CRYPTO_DEV_HIFN_795X=m
 CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
 CONFIG_CRYPTO_DEV_OMAP_SHAM=y
 CONFIG_CRYPTO_DEV_OMAP_AES=y
+CONFIG_CRYPTO_DEV_SAHARA=y
+# CONFIG_CRYPTO_DEV_SUNXI_SS is not set
 CONFIG_ASYMMETRIC_KEY_TYPE=m
 CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
 CONFIG_PUBLIC_KEY_ALGO_RSA=m
@@ -5512,9 +5972,11 @@ CONFIG_BITREVERSE=y
 CONFIG_RATIONAL=y
 CONFIG_GENERIC_STRNCPY_FROM_USER=y
 CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_NET_UTILS=y
 CONFIG_GENERIC_PCI_IOMAP=y
 CONFIG_GENERIC_IO=y
 CONFIG_STMP_DEVICE=y
+CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
 CONFIG_CRC_CCITT=y
 CONFIG_CRC16=y
 CONFIG_CRC_T10DIF=y
@@ -5529,10 +5991,14 @@ CONFIG_CRC7=m
 CONFIG_LIBCRC32C=m
 CONFIG_CRC8=m
 CONFIG_AUDIT_GENERIC=y
+# CONFIG_RANDOM32_SELFTEST is not set
 CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
+CONFIG_ZLIB_DEFLATE=y
 CONFIG_LZO_COMPRESS=y
 CONFIG_LZO_DECOMPRESS=y
+CONFIG_LZ4_COMPRESS=m
+CONFIG_LZ4HC_COMPRESS=m
+CONFIG_LZ4_DECOMPRESS=y
 CONFIG_XZ_DEC=y
 CONFIG_XZ_DEC_X86=y
 CONFIG_XZ_DEC_POWERPC=y
@@ -5547,13 +6013,14 @@ CONFIG_DECOMPRESS_BZIP2=y
 CONFIG_DECOMPRESS_LZMA=y
 CONFIG_DECOMPRESS_XZ=y
 CONFIG_DECOMPRESS_LZO=y
+CONFIG_DECOMPRESS_LZ4=y
 CONFIG_GENERIC_ALLOCATOR=y
 CONFIG_BCH=m
-CONFIG_BCH_CONST_PARAMS=y
 CONFIG_TEXTSEARCH=y
 CONFIG_TEXTSEARCH_KMP=m
 CONFIG_TEXTSEARCH_BM=m
 CONFIG_TEXTSEARCH_FSM=m
+CONFIG_ASSOCIATIVE_ARRAY=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_DMA=y
 CONFIG_CHECK_SIGNATURE=y
@@ -5567,9 +6034,8 @@ CONFIG_CORDIC=m
 CONFIG_DDR=y
 CONFIG_MPILIB=m
 CONFIG_OID_REGISTRY=m
+CONFIG_FONT_SUPPORT=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
 CONFIG_VIRTUALIZATION=y
-CONFIG_KVM_ARM_MAX_VCPUS=0
-
-#
-# Virtio drivers
-#
index 2c709ccfca87f5beb40bb6b349828d4de4ca25dc..cfc9dc13065f92dd0531fa899f4a566b3ad7b5d6 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/arm 3.10.38 Kernel Configuration
+# Linux/arm 3.14.22 Kernel Configuration
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -16,7 +16,7 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y
 CONFIG_NEED_DMA_MAP_STATE=y
 CONFIG_FIQ=y
 CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_ARM_PATCH_PHYS_VIRT=y
+# CONFIG_ARM_PATCH_PHYS_VIRT is not set
 CONFIG_NEED_MACH_GPIO_H=y
 CONFIG_NEED_MACH_IO_H=y
 CONFIG_NEED_MACH_MEMORY_H=y
@@ -31,37 +31,38 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y
 CONFIG_BROKEN_ON_SMP=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
 CONFIG_CROSS_COMPILE=""
+# CONFIG_COMPILE_TEST is not set
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
 CONFIG_HAVE_KERNEL_GZIP=y
 CONFIG_HAVE_KERNEL_LZMA=y
 CONFIG_HAVE_KERNEL_XZ=y
 CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_HAVE_KERNEL_LZ4=y
 CONFIG_KERNEL_GZIP=y
 # CONFIG_KERNEL_LZMA is not set
 # CONFIG_KERNEL_XZ is not set
 # CONFIG_KERNEL_LZO is not set
+# CONFIG_KERNEL_LZ4 is not set
 CONFIG_DEFAULT_HOSTNAME="(none)"
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
 CONFIG_SYSVIPC_SYSCTL=y
 CONFIG_POSIX_MQUEUE=y
 CONFIG_POSIX_MQUEUE_SYSCTL=y
-# CONFIG_FHANDLE is not set
+CONFIG_FHANDLE=y
 CONFIG_AUDIT=y
 # CONFIG_AUDITSYSCALL is not set
-# CONFIG_AUDIT_LOGINUID_IMMUTABLE is not set
-CONFIG_HAVE_GENERIC_HARDIRQS=y
 
 #
 # IRQ subsystem
 #
-CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_IRQ_SHOW=y
 CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_CHIP=y
 CONFIG_IRQ_DOMAIN=y
+# CONFIG_IRQ_DOMAIN_DEBUG is not set
+CONFIG_IRQ_FORCED_THREADING=y
 CONFIG_KTIME_SCALAR=y
 CONFIG_GENERIC_CLOCKEVENTS=y
 CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
@@ -80,6 +81,7 @@ CONFIG_HIGH_RES_TIMERS=y
 # CPU/Task time and stats accounting
 #
 CONFIG_TICK_CPU_ACCOUNTING=y
+# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
 # CONFIG_IRQ_TIME_ACCOUNTING is not set
 CONFIG_BSD_PROCESS_ACCT=y
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
@@ -96,7 +98,8 @@ CONFIG_TINY_RCU=y
 # CONFIG_RCU_STALL_COMMON is not set
 # CONFIG_TREE_RCU_TRACE is not set
 # CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=19
+CONFIG_LOG_BUF_SHIFT=17
+CONFIG_GENERIC_SCHED_CLOCK=y
 CONFIG_CGROUPS=y
 # CONFIG_CGROUP_DEBUG is not set
 CONFIG_CGROUP_FREEZER=y
@@ -111,16 +114,17 @@ CONFIG_CGROUP_SCHED=y
 CONFIG_FAIR_GROUP_SCHED=y
 # CONFIG_CFS_BANDWIDTH is not set
 CONFIG_RT_GROUP_SCHED=y
-# CONFIG_BLK_CGROUP is not set
+CONFIG_BLK_CGROUP=y
+# CONFIG_DEBUG_BLK_CGROUP is not set
 CONFIG_NAMESPACES=y
 CONFIG_UTS_NS=y
 CONFIG_IPC_NS=y
-# CONFIG_PID_NS is not set
-# CONFIG_NET_NS is not set
-# CONFIG_SCHED_AUTOGROUP is not set
-CONFIG_SYSFS_DEPRECATED=y
-CONFIG_SYSFS_DEPRECATED_V2=y
-# CONFIG_RELAY is not set
+CONFIG_USER_NS=y
+CONFIG_PID_NS=y
+CONFIG_NET_NS=y
+CONFIG_SCHED_AUTOGROUP=y
+# CONFIG_SYSFS_DEPRECATED is not set
+CONFIG_RELAY=y
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_RD_GZIP=y
@@ -128,16 +132,16 @@ CONFIG_RD_BZIP2=y
 CONFIG_RD_LZMA=y
 CONFIG_RD_XZ=y
 CONFIG_RD_LZO=y
+CONFIG_RD_LZ4=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SYSCTL=y
 CONFIG_ANON_INODES=y
 CONFIG_HAVE_UID16=y
-CONFIG_HOTPLUG=y
-# CONFIG_EXPERT is not set
+CONFIG_EXPERT=y
 CONFIG_UID16=y
 # CONFIG_SYSCTL_SYSCALL is not set
 CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_ALL=y
 CONFIG_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
@@ -149,7 +153,7 @@ CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
 CONFIG_AIO=y
-# CONFIG_EMBEDDED is not set
+CONFIG_EMBEDDED=y
 CONFIG_HAVE_PERF_EVENTS=y
 CONFIG_PERF_USE_VMALLOC=y
 
@@ -163,11 +167,15 @@ CONFIG_SLUB_DEBUG=y
 # CONFIG_COMPAT_BRK is not set
 # CONFIG_SLAB is not set
 CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
 # CONFIG_PROFILING is not set
 CONFIG_HAVE_OPROFILE=y
 # CONFIG_KPROBES is not set
 CONFIG_JUMP_LABEL=y
 # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_ARCH_USE_BUILTIN_BSWAP=y
 CONFIG_HAVE_KPROBES=y
 CONFIG_HAVE_KRETPROBES=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
@@ -179,12 +187,21 @@ CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
 CONFIG_HAVE_DMA_API_DEBUG=y
 CONFIG_HAVE_HW_BREAKPOINT=y
+CONFIG_HAVE_PERF_REGS=y
+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
 CONFIG_HAVE_ARCH_JUMP_LABEL=y
 CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
+CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR_NONE is not set
+CONFIG_CC_STACKPROTECTOR_REGULAR=y
+# CONFIG_CC_STACKPROTECTOR_STRONG is not set
 CONFIG_HAVE_CONTEXT_TRACKING=y
+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
+CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
 CONFIG_MODULES_USE_ELF_REL=y
 CONFIG_CLONE_BACKWARDS=y
 CONFIG_OLD_SIGSUSPEND3=y
@@ -193,6 +210,7 @@ CONFIG_OLD_SIGACTION=y
 #
 # GCOV-based kernel profiling
 #
+# CONFIG_GCOV_KERNEL is not set
 CONFIG_HAVE_GENERIC_DMA_COHERENT=y
 CONFIG_SLABINFO=y
 CONFIG_RT_MUTEXES=y
@@ -200,28 +218,31 @@ CONFIG_BASE_SMALL=0
 CONFIG_MODULES=y
 # CONFIG_MODULE_FORCE_LOAD is not set
 CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_SIG is not set
 CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 CONFIG_LBDAF=y
 CONFIG_BLK_DEV_BSG=y
 CONFIG_BLK_DEV_BSGLIB=y
-# CONFIG_BLK_DEV_INTEGRITY is not set
+CONFIG_BLK_DEV_INTEGRITY=y
+CONFIG_BLK_DEV_THROTTLING=y
+# CONFIG_BLK_CMDLINE_PARSER is not set
 
 #
 # Partition Types
 #
 CONFIG_PARTITION_ADVANCED=y
 # CONFIG_ACORN_PARTITION is not set
+# CONFIG_AIX_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=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
@@ -233,6 +254,7 @@ CONFIG_LDM_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 CONFIG_EFI_PARTITION=y
 # CONFIG_SYSV68_PARTITION is not set
+# CONFIG_CMDLINE_PARTITION is not set
 
 #
 # IO Schedulers
@@ -240,16 +262,17 @@ CONFIG_EFI_PARTITION=y
 CONFIG_IOSCHED_NOOP=y
 CONFIG_IOSCHED_DEADLINE=y
 CONFIG_IOSCHED_CFQ=y
+CONFIG_CFQ_GROUP_IOSCHED=y
 # CONFIG_DEFAULT_DEADLINE is not set
 CONFIG_DEFAULT_CFQ=y
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="cfq"
-CONFIG_ASN1=m
 CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
 CONFIG_INLINE_READ_UNLOCK=y
 CONFIG_INLINE_READ_UNLOCK_IRQ=y
 CONFIG_INLINE_WRITE_UNLOCK=y
 CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
 CONFIG_FREEZER=y
 
 #
@@ -281,8 +304,8 @@ CONFIG_ARCH_BCM2708=y
 # CONFIG_ARCH_W90X900 is not set
 # CONFIG_ARCH_LPC32XX is not set
 # CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_SHMOBILE is not set
+# CONFIG_ARCH_MSM_NODT is not set
+# CONFIG_ARCH_SHMOBILE_LEGACY is not set
 # CONFIG_ARCH_RPC is not set
 # CONFIG_ARCH_SA1100 is not set
 # CONFIG_ARCH_S3C24XX is not set
@@ -291,12 +314,9 @@ CONFIG_ARCH_BCM2708=y
 # CONFIG_ARCH_S5PC100 is not set
 # CONFIG_ARCH_S5PV210 is not set
 # CONFIG_ARCH_EXYNOS is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_U300 is not set
 # CONFIG_ARCH_DAVINCI is not set
 # CONFIG_ARCH_OMAP1 is not set
-CONFIG_GPIO_PCA953X=m
-CONFIG_KEYBOARD_GPIO_POLLED=m
+# CONFIG_GPIO_PCA953X is not set
 # CONFIG_PLAT_SPEAR is not set
 
 #
@@ -307,7 +327,6 @@ CONFIG_BCM2708_GPIO=y
 CONFIG_BCM2708_VCMEM=y
 # CONFIG_BCM2708_NOL2CACHE is not set
 CONFIG_BCM2708_SPIDEV=y
-CONFIG_BCM2708_DMAER=m
 
 #
 # Processor Type
@@ -359,6 +378,13 @@ CONFIG_ARCH_NR_GPIO=0
 CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT_VOLUNTARY is not set
 # CONFIG_PREEMPT is not set
+CONFIG_HZ_FIXED=0
+CONFIG_HZ_100=y
+# CONFIG_HZ_200 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_500 is not set
+# CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
 CONFIG_SCHED_HRTICK=y
 CONFIG_AEABI=y
@@ -368,14 +394,16 @@ CONFIG_AEABI=y
 CONFIG_HAVE_ARCH_PFN_VALID=y
 # CONFIG_HIGHMEM is not set
 CONFIG_HW_PERF_EVENTS=y
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
 CONFIG_FLATMEM=y
 CONFIG_FLAT_NODE_MEM_MAP=y
 CONFIG_HAVE_MEMBLOCK=y
+CONFIG_NO_BOOTMEM=y
 CONFIG_MEMORY_ISOLATION=y
 # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
 CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_COMPACTION is not set
+CONFIG_COMPACTION=y
 CONFIG_MIGRATION=y
 # CONFIG_PHYS_ADDR_T_64BIT is not set
 CONFIG_ZONE_DMA_FLAG=0
@@ -385,27 +413,32 @@ CONFIG_CROSS_MEMORY_ATTACH=y
 CONFIG_NEED_PER_CPU_KM=y
 CONFIG_CLEANCACHE=y
 CONFIG_FRONTSWAP=y
+CONFIG_CMA=y
+# CONFIG_CMA_DEBUG is not set
+# CONFIG_ZBUD is not set
+# CONFIG_ZSWAP is not set
+# CONFIG_ZSMALLOC is not set
 CONFIG_FORCE_MAX_ZONEORDER=11
 CONFIG_ALIGNMENT_TRAP=y
 CONFIG_SECCOMP=y
-CONFIG_CC_STACKPROTECTOR=y
+CONFIG_SWIOTLB=y
+CONFIG_IOMMU_HELPER=y
 
 #
 # Boot options
 #
-CONFIG_USE_OF=y
+# CONFIG_USE_OF is not set
 CONFIG_ATAGS=y
 # CONFIG_DEPRECATED_PARAM_STRUCT is not set
 CONFIG_ZBOOT_ROM_TEXT=0x0
 CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_ARM_APPENDED_DTB is not set
-CONFIG_CMDLINE="dwc_otg.lpm_enable=0 console=ttyAMA0,115200 root=/dev/mmcblk0p3 rootwait"
+CONFIG_CMDLINE="console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait"
 CONFIG_CMDLINE_FROM_BOOTLOADER=y
 # CONFIG_CMDLINE_EXTEND is not set
 # CONFIG_CMDLINE_FORCE is not set
 # CONFIG_XIP_KERNEL is not set
 # CONFIG_KEXEC is not set
-# CONFIG_CRASH_DUMP is not set
+CONFIG_CRASH_DUMP=y
 # CONFIG_AUTO_ZRELADDR is not set
 
 #
@@ -416,13 +449,13 @@ CONFIG_CMDLINE_FROM_BOOTLOADER=y
 # CPU Frequency scaling
 #
 CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
 CONFIG_CPU_FREQ_GOV_COMMON=y
 CONFIG_CPU_FREQ_STAT=m
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
+CONFIG_CPU_FREQ_STAT_DETAILS=y
 # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=y
 # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
 # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
 CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
@@ -433,15 +466,20 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
 #
 # ARM CPU frequency scaling drivers
 #
-# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS4X12_CPUFREQ is not set
-# CONFIG_ARM_EXYNOS5250_CPUFREQ is not set
 # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set
 CONFIG_ARM_BCM2835_CPUFREQ=y
+
+#
+# CPU Idle
+#
 CONFIG_CPU_IDLE=y
 # CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
 CONFIG_CPU_IDLE_GOV_LADDER=y
 CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# ARM CPU Idle Drivers
+#
 # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set
 
 #
@@ -458,10 +496,10 @@ CONFIG_VFP=y
 #
 CONFIG_BINFMT_ELF=y
 CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
 CONFIG_BINFMT_SCRIPT=y
 # CONFIG_HAVE_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
+CONFIG_BINFMT_MISC=y
 CONFIG_COREDUMP=y
 
 #
@@ -472,11 +510,12 @@ CONFIG_SUSPEND_FREEZER=y
 CONFIG_PM_SLEEP=y
 # CONFIG_PM_AUTOSLEEP is not set
 # CONFIG_PM_WAKELOCKS is not set
-CONFIG_PM_RUNTIME=y
+# CONFIG_PM_RUNTIME is not set
 CONFIG_PM=y
 # CONFIG_PM_DEBUG is not set
 # CONFIG_APM_EMULATION is not set
 CONFIG_PM_CLK=y
+# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
 CONFIG_CPU_PM=y
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_ARM_CPU_SUSPEND=y
@@ -486,13 +525,13 @@ CONFIG_NET=y
 # Networking options
 #
 CONFIG_PACKET=y
-# CONFIG_PACKET_DIAG is not set
+CONFIG_PACKET_DIAG=y
 CONFIG_UNIX=y
 CONFIG_UNIX_DIAG=m
 CONFIG_XFRM=y
-CONFIG_XFRM_ALGO=m
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_XFRM_ALGO=y
+CONFIG_XFRM_USER=y
+CONFIG_XFRM_SUB_POLICY=y
 CONFIG_XFRM_MIGRATE=y
 CONFIG_XFRM_STATISTICS=y
 CONFIG_XFRM_IPCOMP=m
@@ -513,10 +552,9 @@ CONFIG_NET_IP_TUNNEL=m
 CONFIG_NET_IPGRE=m
 CONFIG_NET_IPGRE_BROADCAST=y
 CONFIG_IP_MROUTE=y
-# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
+CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
 CONFIG_IP_PIMSM_V1=y
 CONFIG_IP_PIMSM_V2=y
-CONFIG_ARPD=y
 CONFIG_SYN_COOKIES=y
 CONFIG_NET_IPVTI=m
 CONFIG_INET_AH=m
@@ -524,16 +562,16 @@ CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
 CONFIG_INET_XFRM_TUNNEL=m
 CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
 CONFIG_INET_LRO=y
 CONFIG_INET_DIAG=m
 CONFIG_INET_TCP_DIAG=m
 CONFIG_INET_UDP_DIAG=m
 CONFIG_TCP_CONG_ADVANCED=y
 CONFIG_TCP_CONG_BIC=m
-CONFIG_TCP_CONG_CUBIC=m
+CONFIG_TCP_CONG_CUBIC=y
 CONFIG_TCP_CONG_WESTWOOD=m
 CONFIG_TCP_CONG_HTCP=m
 CONFIG_TCP_CONG_HSTCP=m
@@ -544,13 +582,14 @@ CONFIG_TCP_CONG_LP=m
 CONFIG_TCP_CONG_VENO=m
 CONFIG_TCP_CONG_YEAH=m
 CONFIG_TCP_CONG_ILLINOIS=m
-CONFIG_DEFAULT_RENO=y
-CONFIG_DEFAULT_TCP_CONG="reno"
-# CONFIG_TCP_MD5SIG is not set
+CONFIG_DEFAULT_CUBIC=y
+# CONFIG_DEFAULT_RENO is not set
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
 CONFIG_IPV6=y
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
 CONFIG_INET6_AH=m
 CONFIG_INET6_ESP=m
 CONFIG_INET6_IPCOMP=m
@@ -561,17 +600,20 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m
 CONFIG_INET6_XFRM_MODE_TUNNEL=m
 CONFIG_INET6_XFRM_MODE_BEET=m
 CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_VTI=m
 CONFIG_IPV6_SIT=m
-# CONFIG_IPV6_SIT_6RD is not set
+CONFIG_IPV6_SIT_6RD=y
 CONFIG_IPV6_NDISC_NODETYPE=y
 CONFIG_IPV6_TUNNEL=m
 CONFIG_IPV6_GRE=m
 CONFIG_IPV6_MULTIPLE_TABLES=y
-# CONFIG_IPV6_SUBTREES is not set
-# CONFIG_IPV6_MROUTE is not set
+CONFIG_IPV6_SUBTREES=y
+CONFIG_IPV6_MROUTE=y
+CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
+CONFIG_IPV6_PIMSM_V2=y
 # CONFIG_NETLABEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETWORK_PHY_TIMESTAMPING=y
+CONFIG_NETWORK_SECMARK=y
+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
 CONFIG_NETFILTER=y
 # CONFIG_NETFILTER_DEBUG is not set
 CONFIG_NETFILTER_ADVANCED=y
@@ -586,10 +628,11 @@ CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
 CONFIG_NF_CONNTRACK=y
 CONFIG_NF_CONNTRACK_MARK=y
-# CONFIG_NF_CONNTRACK_ZONES is not set
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_ZONES=y
 CONFIG_NF_CONNTRACK_PROCFS=y
 CONFIG_NF_CONNTRACK_EVENTS=y
-# CONFIG_NF_CONNTRACK_TIMEOUT is not set
+CONFIG_NF_CONNTRACK_TIMEOUT=y
 CONFIG_NF_CONNTRACK_TIMESTAMP=y
 CONFIG_NF_CONNTRACK_LABELS=y
 CONFIG_NF_CT_PROTO_DCCP=m
@@ -621,14 +664,30 @@ CONFIG_NF_NAT_FTP=m
 CONFIG_NF_NAT_IRC=m
 CONFIG_NF_NAT_SIP=m
 CONFIG_NF_NAT_TFTP=m
-CONFIG_NETFILTER_TPROXY=m
-CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_SYNPROXY=m
+CONFIG_NF_TABLES=m
+CONFIG_NF_TABLES_INET=m
+CONFIG_NFT_EXTHDR=m
+CONFIG_NFT_META=m
+CONFIG_NFT_CT=m
+CONFIG_NFT_RBTREE=m
+CONFIG_NFT_HASH=m
+CONFIG_NFT_COUNTER=m
+CONFIG_NFT_LOG=m
+CONFIG_NFT_LIMIT=m
+CONFIG_NFT_NAT=m
+CONFIG_NFT_QUEUE=m
+CONFIG_NFT_REJECT=m
+CONFIG_NFT_REJECT_INET=m
+CONFIG_NFT_COMPAT=m
+CONFIG_NETFILTER_XTABLES=y
 
 #
 # Xtables combined modules
 #
 CONFIG_NETFILTER_XT_MARK=m
 CONFIG_NETFILTER_XT_CONNMARK=m
+CONFIG_NETFILTER_XT_SET=m
 
 #
 # Xtables targets
@@ -637,6 +696,7 @@ CONFIG_NETFILTER_XT_TARGET_AUDIT=m
 CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
 CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
 CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
 CONFIG_NETFILTER_XT_TARGET_CT=m
 CONFIG_NETFILTER_XT_TARGET_DSCP=m
 CONFIG_NETFILTER_XT_TARGET_HL=m
@@ -655,6 +715,7 @@ CONFIG_NETFILTER_XT_TARGET_REDIRECT=m
 CONFIG_NETFILTER_XT_TARGET_TEE=m
 CONFIG_NETFILTER_XT_TARGET_TPROXY=m
 CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
 CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
 CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 
@@ -663,6 +724,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 #
 CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
 CONFIG_NETFILTER_XT_MATCH_BPF=m
+CONFIG_NETFILTER_XT_MATCH_CGROUP=m
 CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
@@ -679,8 +741,10 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m
 CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 CONFIG_NETFILTER_XT_MATCH_HELPER=m
 CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
 CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
 CONFIG_NETFILTER_XT_MATCH_IPVS=m
+CONFIG_NETFILTER_XT_MATCH_L2TP=m
 CONFIG_NETFILTER_XT_MATCH_LAYER7=m
 # CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
 CONFIG_NETFILTER_XT_MATCH_LENGTH=m
@@ -706,7 +770,21 @@ CONFIG_NETFILTER_XT_MATCH_STRING=m
 CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
 CONFIG_NETFILTER_XT_MATCH_TIME=m
 CONFIG_NETFILTER_XT_MATCH_U32=m
-# CONFIG_IP_SET is not set
+CONFIG_IP_SET=m
+CONFIG_IP_SET_MAX=256
+CONFIG_IP_SET_BITMAP_IP=m
+CONFIG_IP_SET_BITMAP_IPMAC=m
+CONFIG_IP_SET_BITMAP_PORT=m
+CONFIG_IP_SET_HASH_IP=m
+CONFIG_IP_SET_HASH_IPPORT=m
+CONFIG_IP_SET_HASH_IPPORTIP=m
+CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_NETPORTNET=m
+CONFIG_IP_SET_HASH_NET=m
+CONFIG_IP_SET_HASH_NETNET=m
+CONFIG_IP_SET_HASH_NETPORT=m
+CONFIG_IP_SET_HASH_NETIFACE=m
+CONFIG_IP_SET_LIST_SET=m
 CONFIG_IP_VS=m
 CONFIG_IP_VS_IPV6=y
 # CONFIG_IP_VS_DEBUG is not set
@@ -751,16 +829,22 @@ CONFIG_IP_VS_PE_SIP=m
 #
 # IP: Netfilter Configuration
 #
-CONFIG_NF_DEFRAG_IPV4=m
-CONFIG_NF_CONNTRACK_IPV4=m
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-CONFIG_IP_NF_IPTABLES=m
+CONFIG_NF_DEFRAG_IPV4=y
+CONFIG_NF_CONNTRACK_IPV4=y
+# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_TABLES_IPV4=m
+CONFIG_NFT_CHAIN_ROUTE_IPV4=m
+CONFIG_NFT_CHAIN_NAT_IPV4=m
+CONFIG_NFT_REJECT_IPV4=m
+CONFIG_NF_TABLES_ARP=m
+CONFIG_IP_NF_IPTABLES=y
 CONFIG_IP_NF_MATCH_AH=m
 CONFIG_IP_NF_MATCH_ECN=m
 CONFIG_IP_NF_MATCH_RPFILTER=m
 CONFIG_IP_NF_MATCH_TTL=m
 CONFIG_IP_NF_FILTER=m
 CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_SYNPROXY=m
 CONFIG_IP_NF_TARGET_ULOG=m
 CONFIG_NF_NAT_IPV4=m
 CONFIG_IP_NF_TARGET_MASQUERADE=m
@@ -784,9 +868,13 @@ CONFIG_IP_NF_MATCH_IPP2P=m
 #
 # IPv6: Netfilter Configuration
 #
-CONFIG_NF_DEFRAG_IPV6=m
-CONFIG_NF_CONNTRACK_IPV6=m
-CONFIG_IP6_NF_IPTABLES=m
+CONFIG_NF_DEFRAG_IPV6=y
+CONFIG_NF_CONNTRACK_IPV6=y
+CONFIG_NF_TABLES_IPV6=m
+CONFIG_NFT_CHAIN_ROUTE_IPV6=m
+CONFIG_NFT_CHAIN_NAT_IPV6=m
+CONFIG_NFT_REJECT_IPV6=m
+CONFIG_IP6_NF_IPTABLES=y
 CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
 CONFIG_IP6_NF_MATCH_FRAG=m
@@ -799,10 +887,14 @@ CONFIG_IP6_NF_MATCH_RT=m
 CONFIG_IP6_NF_TARGET_HL=m
 CONFIG_IP6_NF_FILTER=m
 CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_TARGET_SYNPROXY=m
 CONFIG_IP6_NF_MANGLE=m
 CONFIG_IP6_NF_RAW=m
 CONFIG_IP6_NF_SECURITY=m
-# CONFIG_NF_NAT_IPV6 is not set
+CONFIG_NF_NAT_IPV6=m
+CONFIG_IP6_NF_TARGET_MASQUERADE=m
+CONFIG_IP6_NF_TARGET_NPT=m
+CONFIG_NF_TABLES_BRIDGE=m
 CONFIG_BRIDGE_NF_EBTABLES=m
 CONFIG_BRIDGE_EBT_BROUTE=m
 CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -826,43 +918,45 @@ CONFIG_BRIDGE_EBT_LOG=m
 CONFIG_BRIDGE_EBT_ULOG=m
 CONFIG_BRIDGE_EBT_NFLOG=m
 # CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
+CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
+CONFIG_SCTP_COOKIE_HMAC_MD5=y
+CONFIG_SCTP_COOKIE_HMAC_SHA1=y
 # CONFIG_RDS is not set
 # CONFIG_TIPC is not set
 CONFIG_ATM=m
 CONFIG_ATM_CLIP=m
-CONFIG_ATM_CLIP_NO_ICMP=y
+# CONFIG_ATM_CLIP_NO_ICMP is not set
 # CONFIG_ATM_LANE is not set
 CONFIG_ATM_BR2684=m
 # CONFIG_ATM_BR2684_IPFILTER is not set
 CONFIG_L2TP=m
+# CONFIG_L2TP_DEBUGFS is not set
 CONFIG_L2TP_V3=y
 CONFIG_L2TP_IP=m
 CONFIG_L2TP_ETH=m
-CONFIG_STP=m
+CONFIG_STP=y
 CONFIG_GARP=m
-CONFIG_BRIDGE=m
+CONFIG_BRIDGE=y
 CONFIG_BRIDGE_IGMP_SNOOPING=y
 CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_HAVE_NET_DSA=y
-CONFIG_NET_DSA=y
-CONFIG_NET_DSA_TAG_DSA=y
-CONFIG_NET_DSA_TAG_EDSA=y
-CONFIG_NET_DSA_TAG_TRAILER=y
 CONFIG_VLAN_8021Q=m
 CONFIG_VLAN_8021Q_GVRP=y
 # CONFIG_VLAN_8021Q_MVRP is not set
 # CONFIG_DECNET is not set
-CONFIG_LLC=m
+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_PHONET is not set
-CONFIG_IEEE802154=m
-CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_MAC802154=m
+# CONFIG_IEEE802154 is not set
+CONFIG_6LOWPAN_IPHC=m
 CONFIG_NET_SCHED=y
 
 #
@@ -888,6 +982,8 @@ CONFIG_NET_SCH_CHOKE=m
 CONFIG_NET_SCH_QFQ=m
 CONFIG_NET_SCH_CODEL=m
 CONFIG_NET_SCH_FQ_CODEL=m
+CONFIG_NET_SCH_FQ=m
+CONFIG_NET_SCH_HHF=m
 CONFIG_NET_SCH_PIE=m
 CONFIG_NET_SCH_INGRESS=m
 CONFIG_NET_SCH_PLUG=m
@@ -907,6 +1003,7 @@ CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
 CONFIG_NET_CLS_FLOW=m
 CONFIG_NET_CLS_CGROUP=m
+CONFIG_NET_CLS_BPF=m
 CONFIG_NET_EMATCH=y
 CONFIG_NET_EMATCH_STACK=32
 CONFIG_NET_EMATCH_CMP=m
@@ -914,6 +1011,7 @@ CONFIG_NET_EMATCH_NBYTE=m
 CONFIG_NET_EMATCH_U32=m
 CONFIG_NET_EMATCH_META=m
 CONFIG_NET_EMATCH_TEXT=m
+CONFIG_NET_EMATCH_IPSET=m
 CONFIG_NET_CLS_ACT=y
 CONFIG_NET_ACT_POLICE=m
 CONFIG_NET_ACT_GACT=m
@@ -935,10 +1033,15 @@ CONFIG_BATMAN_ADV_DAT=y
 CONFIG_BATMAN_ADV_NC=y
 # CONFIG_BATMAN_ADV_DEBUG is not set
 CONFIG_OPENVSWITCH=m
-# CONFIG_VSOCKETS is not set
-# CONFIG_NETLINK_MMAP is not set
+CONFIG_OPENVSWITCH_GRE=y
+CONFIG_VSOCKETS=m
+CONFIG_NETLINK_MMAP=y
 CONFIG_NETLINK_DIAG=m
-CONFIG_NETPRIO_CGROUP=m
+CONFIG_NET_MPLS_GSO=m
+CONFIG_HSR=m
+CONFIG_CGROUP_NET_PRIO=m
+CONFIG_CGROUP_NET_CLASSID=y
+CONFIG_NET_RX_BUSY_POLL=y
 CONFIG_BQL=y
 CONFIG_BPF_JIT=y
 
@@ -976,9 +1079,8 @@ CONFIG_BT_HCIVHCI=m
 CONFIG_BT_MRVL=m
 CONFIG_BT_MRVL_SDIO=m
 CONFIG_BT_ATH3K=m
-CONFIG_AF_RXRPC=m
-# CONFIG_AF_RXRPC_DEBUG is not set
-CONFIG_RXKAD=m
+CONFIG_BT_WILINK=m
+# CONFIG_AF_RXRPC is not set
 CONFIG_FIB_RULES=y
 CONFIG_WIRELESS=y
 CONFIG_WIRELESS_EXT=y
@@ -990,7 +1092,9 @@ CONFIG_CFG80211=m
 # CONFIG_NL80211_TESTMODE is not set
 # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
 # CONFIG_CFG80211_REG_DEBUG is not set
+# CONFIG_CFG80211_CERTIFICATION_ONUS is not set
 # CONFIG_CFG80211_DEFAULT_PS is not set
+# CONFIG_CFG80211_DEBUGFS is not set
 # CONFIG_CFG80211_INTERNAL_REGDB is not set
 CONFIG_CFG80211_WEXT=y
 CONFIG_LIB80211=m
@@ -1000,25 +1104,25 @@ CONFIG_LIB80211_CRYPT_TKIP=m
 # CONFIG_LIB80211_DEBUG is not set
 CONFIG_MAC80211=m
 CONFIG_MAC80211_HAS_RC=y
+CONFIG_MAC80211_RC_PID=y
 CONFIG_MAC80211_RC_MINSTREL=y
 CONFIG_MAC80211_RC_MINSTREL_HT=y
+# CONFIG_MAC80211_RC_DEFAULT_PID is not set
 CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
 CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
 CONFIG_MAC80211_MESH=y
 CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
 # CONFIG_MAC80211_MESSAGE_TRACING is not set
 # CONFIG_MAC80211_DEBUG_MENU is not set
 # CONFIG_WIMAX is not set
 CONFIG_RFKILL=m
 CONFIG_RFKILL_LEDS=y
 CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_REGULATOR=m
 CONFIG_RFKILL_GPIO=m
 # CONFIG_NET_9P is not set
 # CONFIG_CAIF is not set
-CONFIG_CEPH_LIB=m
-# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
-# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set
+# CONFIG_CEPH_LIB is not set
 # CONFIG_NFC is not set
 CONFIG_HAVE_BPF_JIT=y
 
@@ -1029,11 +1133,11 @@ CONFIG_HAVE_BPF_JIT=y
 #
 # Generic Driver Options
 #
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_UEVENT_HELPER_PATH=""
 CONFIG_DEVTMPFS=y
 CONFIG_DEVTMPFS_MOUNT=y
-# CONFIG_STANDALONE is not set
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
 # CONFIG_FIRMWARE_IN_KERNEL is not set
 CONFIG_EXTRA_FIRMWARE=""
@@ -1047,13 +1151,12 @@ CONFIG_REGMAP_I2C=m
 CONFIG_REGMAP_SPI=m
 CONFIG_REGMAP_MMIO=m
 CONFIG_DMA_SHARED_BUFFER=y
-CONFIG_CMA=y
-# CONFIG_CMA_DEBUG is not set
+CONFIG_DMA_CMA=y
 
 #
 # Default contiguous memory area size:
 #
-CONFIG_CMA_SIZE_MBYTES=16
+CONFIG_CMA_SIZE_MBYTES=5
 CONFIG_CMA_SIZE_SEL_MBYTES=y
 # CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
 # CONFIG_CMA_SIZE_SEL_MIN is not set
@@ -1064,137 +1167,30 @@ CONFIG_CMA_AREAS=7
 #
 # Bus devices
 #
+# CONFIG_ARM_CCI is not set
 CONFIG_CONNECTOR=m
-CONFIG_MTD=m
-# CONFIG_MTD_TESTS is not set
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=m
-# CONFIG_MTD_AFS_PARTS is not set
-CONFIG_MTD_OF_PARTS=m
-# CONFIG_MTD_AR7_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_BLKDEVS=m
-CONFIG_MTD_BLOCK=m
-# CONFIG_MTD_BLOCK_RO is not set
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-# CONFIG_SM_FTL is not set
-# CONFIG_MTD_OOPS is not set
-# CONFIG_MTD_SWAP 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
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_PHYSMAP=m
-# CONFIG_MTD_PHYSMAP_COMPAT is not set
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SST25L 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_DOCG3 is not set
-CONFIG_MTD_NAND_ECC=m
-# CONFIG_MTD_NAND_ECC_SMC is not set
-CONFIG_MTD_NAND=m
-# CONFIG_MTD_NAND_ECC_BCH is not set
-# CONFIG_MTD_SM_COMMON is not set
-# CONFIG_MTD_NAND_DENALI is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=m
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_DOCG4 is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-CONFIG_MTD_NAND_PLATFORM=m
-# CONFIG_MTD_ALAUDA is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# LPDDR flash memory drivers
-#
-CONFIG_MTD_LPDDR=m
-CONFIG_MTD_QINFO_PROBE=m
-CONFIG_MTD_UBI=m
-CONFIG_MTD_UBI_WL_THRESHOLD=4096
-CONFIG_MTD_UBI_BEB_LIMIT=20
-# CONFIG_MTD_UBI_FASTMAP is not set
-# CONFIG_MTD_UBI_GLUEBI is not set
-CONFIG_DTC=y
-CONFIG_OF=y
-
-#
-# Device Tree and Open Firmware support
-#
-CONFIG_PROC_DEVICETREE=y
-# CONFIG_OF_SELFTEST is not set
-CONFIG_OF_FLATTREE=y
-CONFIG_OF_EARLY_FLATTREE=y
-CONFIG_OF_ADDRESS=y
-CONFIG_OF_IRQ=y
-CONFIG_OF_DEVICE=y
-CONFIG_OF_I2C=y
-CONFIG_OF_NET=y
-CONFIG_OF_MDIO=y
-CONFIG_OF_MTD=y
-CONFIG_PARPORT=m
-# CONFIG_PARPORT_PC is not set
-# CONFIG_PARPORT_GSC is not set
-CONFIG_PARPORT_AX88796=m
-CONFIG_PARPORT_1284=y
-CONFIG_PARPORT_NOT_PC=y
+# CONFIG_MTD is not set
+CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
+# CONFIG_PARPORT is not set
 CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_NULL_BLK is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
 CONFIG_BLK_DEV_CRYPTOLOOP=m
-# CONFIG_BLK_DEV_DRBD is not set
+CONFIG_BLK_DEV_DRBD=m
+# CONFIG_DRBD_FAULT_INJECTION is not set
 CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_OSD=m
 CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=8
-CONFIG_BLK_DEV_RAM_SIZE=16384
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
 # CONFIG_BLK_DEV_XIP is not set
-# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
 CONFIG_ATA_OVER_ETH=m
-CONFIG_MG_DISK=m
-CONFIG_MG_DISK_RES=0
-CONFIG_BLK_DEV_RBD=m
+# CONFIG_MG_DISK is not set
+# CONFIG_BLK_DEV_RBD is not set
 
 #
 # Misc devices
@@ -1202,10 +1198,10 @@ CONFIG_BLK_DEV_RBD=m
 # CONFIG_SENSORS_LIS3LV02D is not set
 # CONFIG_AD525X_DPOT is not set
 # CONFIG_ATMEL_PWM is not set
-CONFIG_DUMMY_IRQ=m
+# CONFIG_DUMMY_IRQ is not set
 # CONFIG_ICS932S401 is not set
 # CONFIG_ATMEL_SSC is not set
-CONFIG_ENCLOSURE_SERVICES=m
+# CONFIG_ENCLOSURE_SERVICES is not set
 # CONFIG_APDS9802ALS is not set
 # CONFIG_ISL29003 is not set
 # CONFIG_ISL29020 is not set
@@ -1214,11 +1210,11 @@ CONFIG_ENCLOSURE_SERVICES=m
 # CONFIG_SENSORS_BH1770 is not set
 # CONFIG_SENSORS_APDS990X is not set
 # CONFIG_HMC6352 is not set
-CONFIG_DS1682=m
+# CONFIG_DS1682 is not set
 # CONFIG_TI_DAC7512 is not set
 # CONFIG_BMP085_I2C is not set
 # CONFIG_BMP085_SPI is not set
-CONFIG_USB_SWITCH_FSA9480=m
+# CONFIG_USB_SWITCH_FSA9480 is not set
 # CONFIG_LATTICE_ECP3_CONFIG is not set
 # CONFIG_SRAM is not set
 # CONFIG_C2PORT is not set
@@ -1228,15 +1224,15 @@ CONFIG_USB_SWITCH_FSA9480=m
 #
 CONFIG_EEPROM_AT24=m
 # CONFIG_EEPROM_AT25 is not set
-CONFIG_EEPROM_LEGACY=m
-CONFIG_EEPROM_MAX6875=m
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
 CONFIG_EEPROM_93CX6=m
 # CONFIG_EEPROM_93XX46 is not set
 
 #
 # Texas Instruments shared transport line discipline
 #
-# CONFIG_TI_ST is not set
+CONFIG_TI_ST=m
 # CONFIG_SENSORS_LIS3_SPI is not set
 # CONFIG_SENSORS_LIS3_I2C is not set
 
@@ -1246,28 +1242,35 @@ CONFIG_EEPROM_93CX6=m
 # CONFIG_ALTERA_STAPL is not set
 CONFIG_BCM2708_VCHIQ=y
 
+#
+# Intel MIC Host Driver
+#
+
+#
+# Intel MIC Card Driver
+#
+
 #
 # SCSI device support
 #
 CONFIG_SCSI_MOD=y
-CONFIG_RAID_ATTRS=m
+# CONFIG_RAID_ATTRS is not set
 CONFIG_SCSI=y
 CONFIG_SCSI_DMA=y
 # CONFIG_SCSI_TGT is not set
-CONFIG_SCSI_NETLINK=y
-CONFIG_SCSI_PROC_FS=y
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_SCSI_PROC_FS is not set
 
 #
 # 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_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
 CONFIG_BLK_DEV_SR=m
-CONFIG_BLK_DEV_SR_VENDOR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
 CONFIG_CHR_DEV_SG=m
-CONFIG_CHR_DEV_SCH=m
-CONFIG_SCSI_ENCLOSURE=m
+# CONFIG_CHR_DEV_SCH is not set
 CONFIG_SCSI_MULTI_LUN=y
 # CONFIG_SCSI_CONSTANTS is not set
 # CONFIG_SCSI_LOGGING is not set
@@ -1276,41 +1279,22 @@ CONFIG_SCSI_MULTI_LUN=y
 #
 # SCSI Transports
 #
-CONFIG_SCSI_SPI_ATTRS=m
-CONFIG_SCSI_FC_ATTRS=m
-CONFIG_SCSI_ISCSI_ATTRS=m
-CONFIG_SCSI_SAS_ATTRS=m
-CONFIG_SCSI_SAS_LIBSAS=m
-CONFIG_SCSI_SAS_ATA=y
-CONFIG_SCSI_SAS_HOST_SMP=y
-CONFIG_SCSI_SRP_ATTRS=m
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=y
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
 CONFIG_SCSI_LOWLEVEL=y
 CONFIG_ISCSI_TCP=m
 CONFIG_ISCSI_BOOT_SYSFS=m
-CONFIG_SCSI_UFSHCD=m
-CONFIG_SCSI_UFSHCD_PLATFORM=m
-CONFIG_LIBFC=m
-CONFIG_LIBFCOE=m
+# CONFIG_SCSI_UFSHCD is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
 # CONFIG_SCSI_DEBUG is not set
-CONFIG_SCSI_DH=m
-CONFIG_SCSI_DH_RDAC=m
-CONFIG_SCSI_DH_HP_SW=m
-CONFIG_SCSI_DH_EMC=m
-CONFIG_SCSI_DH_ALUA=m
-CONFIG_SCSI_OSD_INITIATOR=m
-CONFIG_SCSI_OSD_ULD=m
-CONFIG_SCSI_OSD_DPRINT_SENSE=1
-# CONFIG_SCSI_OSD_DEBUG is not set
-CONFIG_ATA=m
-# CONFIG_ATA_NONSTANDARD is not set
-CONFIG_ATA_VERBOSE_ERROR=y
-CONFIG_SATA_PMP=y
-
-#
-# Controllers with non-SFF native interface
-#
-# CONFIG_SATA_AHCI_PLATFORM is not set
-# CONFIG_ATA_SFF is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
 CONFIG_MD=y
 CONFIG_BLK_DEV_MD=m
 CONFIG_MD_LINEAR=m
@@ -1318,56 +1302,43 @@ CONFIG_MD_RAID0=m
 CONFIG_MD_RAID1=m
 CONFIG_MD_RAID10=m
 CONFIG_MD_RAID456=m
-CONFIG_MD_MULTIPATH=m
+# CONFIG_MD_MULTIPATH is not set
 # CONFIG_MD_FAULTY is not set
-CONFIG_BCACHE=m
-# CONFIG_BCACHE_DEBUG is not set
-# CONFIG_BCACHE_EDEBUG is not set
-# CONFIG_BCACHE_CLOSURES_DEBUG is not set
+# CONFIG_BCACHE is not set
 CONFIG_BLK_DEV_DM_BUILTIN=y
 CONFIG_BLK_DEV_DM=m
 # CONFIG_DM_DEBUG is not set
 CONFIG_DM_BUFIO=m
-CONFIG_DM_BIO_PRISON=m
-CONFIG_DM_PERSISTENT_DATA=m
 CONFIG_DM_CRYPT=m
 CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_THIN_PROVISIONING=m
-# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
-CONFIG_DM_CACHE=m
-CONFIG_DM_CACHE_MQ=m
-CONFIG_DM_CACHE_CLEANER=m
+# CONFIG_DM_THIN_PROVISIONING is not set
+# CONFIG_DM_CACHE is not set
 CONFIG_DM_MIRROR=m
-CONFIG_DM_RAID=m
 CONFIG_DM_LOG_USERSPACE=m
+CONFIG_DM_RAID=m
 CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_QL=m
-CONFIG_DM_MULTIPATH_ST=m
+# CONFIG_DM_MULTIPATH is not set
 CONFIG_DM_DELAY=m
-CONFIG_DM_UEVENT=y
-CONFIG_DM_FLAKEY=m
-CONFIG_DM_VERITY=m
+# CONFIG_DM_UEVENT is not set
+# CONFIG_DM_FLAKEY is not set
+# CONFIG_DM_VERITY is not set
+# CONFIG_DM_SWITCH is not set
 # CONFIG_TARGET_CORE is not set
 CONFIG_NETDEVICES=y
+CONFIG_MII=y
 CONFIG_NET_CORE=y
 CONFIG_BONDING=m
 CONFIG_DUMMY=m
-CONFIG_EQUALIZER=m
-CONFIG_MII=m
+# CONFIG_EQUALIZER is not set
 CONFIG_IFB=m
-CONFIG_NET_TEAM=m
-CONFIG_NET_TEAM_MODE_BROADCAST=m
-CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
-CONFIG_NET_TEAM_MODE_RANDOM=m
-CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
-CONFIG_NET_TEAM_MODE_LOADBALANCE=m
+# CONFIG_NET_TEAM is not set
 CONFIG_MACVLAN=m
-CONFIG_MACVTAP=m
-CONFIG_VXLAN=m
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_MACVTAP is not set
+# CONFIG_VXLAN is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
 CONFIG_IMQ=m
 # CONFIG_IMQ_BEHAVIOR_AA is not set
 CONFIG_IMQ_BEHAVIOR_AB=y
@@ -1376,9 +1347,10 @@ CONFIG_IMQ_BEHAVIOR_AB=y
 CONFIG_IMQ_NUM_DEVS=2
 CONFIG_TUN=m
 CONFIG_VETH=m
+# CONFIG_NLMON is not set
 CONFIG_ATM_DRIVERS=y
 # CONFIG_ATM_DUMMY is not set
-CONFIG_ATM_TCP=m
+# CONFIG_ATM_TCP is not set
 
 #
 # CAIF transport drivers
@@ -1387,89 +1359,77 @@ CONFIG_ATM_TCP=m
 #
 # Distributed Switch Architecture drivers
 #
-CONFIG_NET_DSA_MV88E6XXX=y
-CONFIG_NET_DSA_MV88E6060=y
-CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y
-CONFIG_NET_DSA_MV88E6131=y
-CONFIG_NET_DSA_MV88E6123_61_65=y
+# CONFIG_NET_DSA_MV88E6XXX is not set
+# CONFIG_NET_DSA_MV88E6060 is not set
+# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
+# CONFIG_NET_DSA_MV88E6131 is not set
+# CONFIG_NET_DSA_MV88E6123_61_65 is not set
 CONFIG_ETHERNET=y
+CONFIG_NET_VENDOR_ARC=y
 CONFIG_NET_CADENCE=y
-CONFIG_ARM_AT91_ETHER=m
-CONFIG_MACB=m
+# CONFIG_ARM_AT91_ETHER is not set
+# CONFIG_MACB is not set
 CONFIG_NET_VENDOR_BROADCOM=y
-CONFIG_B44=m
-CONFIG_NET_CALXEDA_XGMAC=m
+# CONFIG_B44 is not set
+# CONFIG_NET_CALXEDA_XGMAC is not set
 CONFIG_NET_VENDOR_CIRRUS=y
-CONFIG_CS89x0=m
-CONFIG_CS89x0_PLATFORM=y
-CONFIG_DM9000=m
-# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set
-CONFIG_DNET=m
+# CONFIG_CS89x0 is not set
+# CONFIG_DM9000 is not set
+# CONFIG_DNET is not set
 CONFIG_NET_VENDOR_FARADAY=y
-CONFIG_FTMAC100=m
-CONFIG_FTGMAC100=m
+# CONFIG_FTMAC100 is not set
+# CONFIG_FTGMAC100 is not set
 CONFIG_NET_VENDOR_INTEL=y
 CONFIG_NET_VENDOR_I825XX=y
 CONFIG_NET_VENDOR_MARVELL=y
-CONFIG_MVMDIO=m
+# CONFIG_MVMDIO is not set
 CONFIG_NET_VENDOR_MICREL=y
-CONFIG_KS8842=m
-CONFIG_KS8851=m
-CONFIG_KS8851_MLL=m
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
 CONFIG_NET_VENDOR_MICROCHIP=y
-CONFIG_ENC28J60=m
-# CONFIG_ENC28J60_WRITEVERIFY is not set
+# CONFIG_ENC28J60 is not set
 CONFIG_NET_VENDOR_NATSEMI=y
 CONFIG_NET_VENDOR_8390=y
-CONFIG_AX88796=m
-CONFIG_AX88796_93CX6=y
-CONFIG_ETHOC=m
+# CONFIG_AX88796 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SH_ETH is not set
 CONFIG_NET_VENDOR_SEEQ=y
 CONFIG_NET_VENDOR_SMSC=y
-CONFIG_SMC91X=m
-CONFIG_SMC911X=m
-CONFIG_SMSC911X=m
-# CONFIG_SMSC911X_ARCH_HOOKS is not set
+# CONFIG_SMC91X is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
 CONFIG_NET_VENDOR_STMICRO=y
-CONFIG_STMMAC_ETH=m
-CONFIG_STMMAC_PLATFORM=y
-# CONFIG_STMMAC_DA is not set
+# CONFIG_STMMAC_ETH is not set
+CONFIG_NET_VENDOR_VIA=y
 CONFIG_NET_VENDOR_WIZNET=y
-CONFIG_WIZNET_W5100=m
-CONFIG_WIZNET_W5300=m
-# CONFIG_WIZNET_BUS_DIRECT is not set
-# CONFIG_WIZNET_BUS_INDIRECT is not set
-CONFIG_WIZNET_BUS_ANY=y
-CONFIG_PHYLIB=y
+# CONFIG_WIZNET_W5100 is not set
+# CONFIG_WIZNET_W5300 is not set
+CONFIG_PHYLIB=m
 
 #
 # MII PHY device drivers
 #
-CONFIG_AT803X_PHY=m
-CONFIG_AMD_PHY=m
-CONFIG_MARVELL_PHY=m
-CONFIG_DAVICOM_PHY=m
-CONFIG_QSEMI_PHY=m
-CONFIG_LXT_PHY=m
-CONFIG_CICADA_PHY=m
-CONFIG_VITESSE_PHY=m
-CONFIG_SMSC_PHY=m
-CONFIG_BROADCOM_PHY=m
-CONFIG_BCM87XX_PHY=m
-CONFIG_ICPLUS_PHY=m
-CONFIG_REALTEK_PHY=m
-CONFIG_NATIONAL_PHY=m
-CONFIG_STE10XP=m
-CONFIG_LSI_ET1011C_PHY=m
-CONFIG_MICREL_PHY=m
-# CONFIG_FIXED_PHY is not set
+# CONFIG_AT803X_PHY is not set
+# CONFIG_AMD_PHY is not set
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_BCM87XX_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_MICREL_PHY is not set
 CONFIG_MDIO_BITBANG=m
-CONFIG_MDIO_GPIO=m
-CONFIG_MDIO_BUS_MUX=m
-CONFIG_MDIO_BUS_MUX_GPIO=m
-CONFIG_MDIO_BUS_MUX_MMIOREG=m
-# CONFIG_MICREL_KS8995MA is not set
-# CONFIG_PLIP is not set
+# CONFIG_MDIO_GPIO is not set
+CONFIG_MICREL_KS8995MA=m
 CONFIG_PPP=m
 CONFIG_PPP_BSDCOMP=m
 CONFIG_PPP_DEFLATE=m
@@ -1478,15 +1438,12 @@ CONFIG_PPP_MPPE=m
 CONFIG_PPP_MULTILINK=y
 CONFIG_PPPOATM=m
 CONFIG_PPPOE=m
-CONFIG_PPTP=m
+# CONFIG_PPTP is not set
 CONFIG_PPPOL2TP=m
 CONFIG_PPP_ASYNC=m
 CONFIG_PPP_SYNC_TTY=m
-CONFIG_SLIP=m
+# CONFIG_SLIP is not set
 CONFIG_SLHC=m
-CONFIG_SLIP_COMPRESSED=y
-CONFIG_SLIP_SMART=y
-CONFIG_SLIP_MODE_SLIP6=y
 
 #
 # USB Network Adapters
@@ -1496,16 +1453,19 @@ CONFIG_USB_KAWETH=m
 CONFIG_USB_PEGASUS=m
 CONFIG_USB_RTL8150=m
 CONFIG_USB_RTL8152=m
-CONFIG_USB_USBNET=m
+CONFIG_USB_USBNET=y
 CONFIG_USB_NET_AX8817X=m
 CONFIG_USB_NET_AX88179_178A=m
 CONFIG_USB_NET_CDCETHER=m
 CONFIG_USB_NET_CDC_EEM=m
 CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_HUAWEI_CDC_NCM=m
 CONFIG_USB_NET_CDC_MBIM=m
 CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9700=m
+CONFIG_USB_NET_SR9800=m
 CONFIG_USB_NET_SMSC75XX=m
-CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_SMSC95XX=y
 CONFIG_USB_NET_GL620A=m
 CONFIG_USB_NET_NET1080=m
 CONFIG_USB_NET_PLUSB=m
@@ -1524,7 +1484,7 @@ CONFIG_USB_NET_KALMIA=m
 CONFIG_USB_NET_QMI_WWAN=m
 CONFIG_USB_HSO=m
 CONFIG_USB_NET_INT51X1=m
-# CONFIG_USB_IPHETH is not set
+CONFIG_USB_IPHETH=m
 CONFIG_USB_SIERRA_NET=m
 CONFIG_USB_VL600=m
 CONFIG_WLAN=y
@@ -1537,7 +1497,7 @@ CONFIG_USB_ZD1201=m
 CONFIG_USB_NET_RNDIS_WLAN=m
 CONFIG_RTL8187=m
 CONFIG_RTL8187_LEDS=y
-# CONFIG_MAC80211_HWSIM is not set
+CONFIG_MAC80211_HWSIM=m
 CONFIG_ATH_COMMON=m
 CONFIG_ATH_CARDS=m
 # CONFIG_ATH_DEBUG is not set
@@ -1547,27 +1507,31 @@ CONFIG_ATH9K_BTCOEX_SUPPORT=y
 CONFIG_ATH9K=m
 # CONFIG_ATH9K_AHB is not set
 # CONFIG_ATH9K_DEBUGFS is not set
-CONFIG_ATH9K_LEGACY_RATE_CONTROL=y
+# CONFIG_ATH9K_WOW is not set
+# CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
+CONFIG_ATH9K_RFKILL=y
 CONFIG_ATH9K_HTC=m
+# CONFIG_ATH9K_HTC_DEBUGFS is not set
 CONFIG_CARL9170=m
 CONFIG_CARL9170_LEDS=y
 CONFIG_CARL9170_WPC=y
 CONFIG_CARL9170_HWRNG=y
 CONFIG_ATH6KL=m
-CONFIG_ATH6KL_SDIO=m
+# CONFIG_ATH6KL_SDIO is not set
 CONFIG_ATH6KL_USB=m
 # CONFIG_ATH6KL_DEBUG is not set
 CONFIG_AR5523=m
+# CONFIG_ATH10K is not set
+# CONFIG_WCN36XX is not set
 CONFIG_B43=m
 CONFIG_B43_BCMA=y
-# CONFIG_B43_BCMA_EXTRA is not set
 CONFIG_B43_SSB=y
 # CONFIG_B43_SDIO is not set
 CONFIG_B43_BCMA_PIO=y
 CONFIG_B43_PIO=y
 # CONFIG_B43_PHY_N is not set
 CONFIG_B43_PHY_LP=y
-# CONFIG_B43_PHY_HT is not set
+CONFIG_B43_PHY_HT=y
 CONFIG_B43_LEDS=y
 CONFIG_B43_HWRNG=y
 # CONFIG_B43_DEBUG is not set
@@ -1584,12 +1548,11 @@ CONFIG_BRCMUTIL=m
 CONFIG_BRCMSMAC=m
 CONFIG_BRCMFMAC=m
 CONFIG_BRCMFMAC_SDIO=y
-# CONFIG_BRCMFMAC_USB is not set
+CONFIG_BRCMFMAC_USB=y
 # CONFIG_BRCM_TRACING is not set
 # CONFIG_BRCMDBG is not set
 CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
+# CONFIG_HOSTAP_FIRMWARE is not set
 CONFIG_LIBERTAS=m
 CONFIG_LIBERTAS_USB=m
 CONFIG_LIBERTAS_SDIO=m
@@ -1607,6 +1570,7 @@ CONFIG_RT73USB=m
 CONFIG_RT2800USB=m
 CONFIG_RT2800USB_RT33XX=y
 CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_RT3573=y
 CONFIG_RT2800USB_RT53XX=y
 CONFIG_RT2800USB_RT55XX=y
 CONFIG_RT2800USB_UNKNOWN=y
@@ -1617,14 +1581,20 @@ CONFIG_RT2X00_LIB_FIRMWARE=y
 CONFIG_RT2X00_LIB_CRYPTO=y
 CONFIG_RT2X00_LIB_LEDS=y
 # CONFIG_RT2X00_DEBUG is not set
+CONFIG_RTL_CARDS=m
+CONFIG_RTL8192CU=m
+CONFIG_RTLWIFI=m
+CONFIG_RTLWIFI_USB=m
+CONFIG_RTLWIFI_DEBUG=y
+CONFIG_RTL8192C_COMMON=m
 CONFIG_WL_TI=y
 CONFIG_WL1251=m
 # CONFIG_WL1251_SPI is not set
-CONFIG_WL1251_SDIO=m
+# CONFIG_WL1251_SDIO is not set
 CONFIG_WL12XX=m
 CONFIG_WL18XX=m
 CONFIG_WLCORE=m
-# CONFIG_WLCORE_SPI is not set
+CONFIG_WLCORE_SPI=m
 CONFIG_WLCORE_SDIO=m
 CONFIG_WILINK_PLATFORM_DATA=y
 CONFIG_ZD1211RW=m
@@ -1632,101 +1602,21 @@ CONFIG_ZD1211RW=m
 CONFIG_MWIFIEX=m
 CONFIG_MWIFIEX_SDIO=m
 CONFIG_MWIFIEX_USB=m
-CONFIG_RTL8192CU=m
+CONFIG_CW1200=m
+CONFIG_CW1200_WLAN_SDIO=m
+CONFIG_CW1200_WLAN_SPI=m
 
 #
 # Enable WiMAX (Networking options) to see the WiMAX drivers
 #
-CONFIG_WAN=y
-CONFIG_HDLC=m
-CONFIG_HDLC_RAW=m
-CONFIG_HDLC_RAW_ETH=m
-CONFIG_HDLC_CISCO=m
-CONFIG_HDLC_FR=m
-CONFIG_HDLC_PPP=m
-
-#
-# X.25/LAPB support is disabled
-#
-CONFIG_DLCI=m
-CONFIG_DLCI_MAX=8
-CONFIG_IEEE802154_DRIVERS=m
-CONFIG_IEEE802154_FAKEHARD=m
-CONFIG_IEEE802154_FAKELB=m
-# CONFIG_IEEE802154_AT86RF230 is not set
-# CONFIG_IEEE802154_MRF24J40 is not set
+# CONFIG_WAN is not set
 CONFIG_ISDN=y
-CONFIG_ISDN_I4L=m
-CONFIG_ISDN_PPP=y
-CONFIG_ISDN_PPP_VJ=y
-CONFIG_ISDN_MPP=y
-CONFIG_IPPP_FILTER=y
-CONFIG_ISDN_PPP_BSDCOMP=m
-CONFIG_ISDN_AUDIO=y
-CONFIG_ISDN_TTY_FAX=y
-
-#
-# ISDN feature submodules
-#
-# CONFIG_ISDN_DRV_LOOP is not set
-CONFIG_ISDN_DIVERSION=m
-
-#
-# ISDN4Linux hardware drivers
-#
-
-#
-# Passive cards
-#
-CONFIG_ISDN_DRV_HISAX=m
-
-#
-# D-channel protocol features
-#
-CONFIG_HISAX_EURO=y
-CONFIG_DE_AOC=y
-# CONFIG_HISAX_NO_SENDCOMPLETE is not set
-# CONFIG_HISAX_NO_LLC is not set
-# CONFIG_HISAX_NO_KEYPAD is not set
-CONFIG_HISAX_1TR6=y
-CONFIG_HISAX_NI1=y
-CONFIG_HISAX_MAX_CARDS=8
-
-#
-# HiSax supported cards
-#
-CONFIG_HISAX_16_3=y
-CONFIG_HISAX_S0BOX=y
-CONFIG_HISAX_FRITZPCI=y
-CONFIG_HISAX_AVM_A1_PCMCIA=y
-CONFIG_HISAX_ELSA=y
-CONFIG_HISAX_DIEHLDIVA=y
-CONFIG_HISAX_SEDLBAUER=y
-CONFIG_HISAX_NICCY=y
-CONFIG_HISAX_GAZEL=y
-CONFIG_HISAX_HFC_SX=y
-CONFIG_HISAX_DEBUG=y
-
-#
-# HiSax PCMCIA card service modules
-#
-
-#
-# HiSax sub driver modules
-#
-CONFIG_HISAX_ST5481=m
-CONFIG_HISAX_HFCUSB=m
-CONFIG_HISAX_HFC4S8S=m
-
-#
-# Active cards
-#
+# CONFIG_ISDN_I4L is not set
 CONFIG_ISDN_CAPI=m
 CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
 CONFIG_CAPI_TRACE=y
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPI20=m
-CONFIG_ISDN_CAPI_CAPIDRV=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
 
 #
 # CAPI hardware drivers
@@ -1735,7 +1625,6 @@ CONFIG_CAPI_AVM=y
 CONFIG_CAPI_EICON=y
 CONFIG_ISDN_DRV_GIGASET=m
 CONFIG_GIGASET_CAPI=y
-# CONFIG_GIGASET_I4L is not set
 # CONFIG_GIGASET_DUMMYLL is not set
 CONFIG_GIGASET_BASE=m
 CONFIG_GIGASET_M105=m
@@ -1749,7 +1638,6 @@ CONFIG_MISDN_L1OIP=m
 # mISDN hardware drivers
 #
 CONFIG_MISDN_HFCUSB=m
-CONFIG_ISDN_HDLC=m
 
 #
 # Input device support
@@ -1757,8 +1645,8 @@ CONFIG_ISDN_HDLC=m
 CONFIG_INPUT=y
 CONFIG_INPUT_FF_MEMLESS=m
 CONFIG_INPUT_POLLDEV=m
-CONFIG_INPUT_SPARSEKMAP=m
-CONFIG_INPUT_MATRIXKMAP=m
+# CONFIG_INPUT_SPARSEKMAP is not set
+# CONFIG_INPUT_MATRIXKMAP is not set
 
 #
 # Userland interfaces
@@ -1767,41 +1655,48 @@ CONFIG_INPUT_MOUSEDEV=y
 # CONFIG_INPUT_MOUSEDEV_PSAUX is not set
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_JOYDEV=m
+CONFIG_INPUT_EVDEV=m
 # CONFIG_INPUT_EVBUG is not set
 
 #
 # Input Device Drivers
 #
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ADP5588=m
-CONFIG_KEYBOARD_ADP5589=m
-CONFIG_KEYBOARD_ATKBD=y
-CONFIG_KEYBOARD_QT1070=m
-CONFIG_KEYBOARD_QT2160=m
-CONFIG_KEYBOARD_LKKBD=m
-CONFIG_KEYBOARD_GPIO=m
-CONFIG_KEYBOARD_TCA6416=m
-CONFIG_KEYBOARD_TCA8418=m
-CONFIG_KEYBOARD_MATRIX=m
-CONFIG_KEYBOARD_LM8323=m
-CONFIG_KEYBOARD_LM8333=m
-CONFIG_KEYBOARD_MAX7359=m
-CONFIG_KEYBOARD_MCS=m
-CONFIG_KEYBOARD_MPR121=m
-CONFIG_KEYBOARD_NEWTON=m
-CONFIG_KEYBOARD_OPENCORES=m
-CONFIG_KEYBOARD_SAMSUNG=m
-CONFIG_KEYBOARD_STOWAWAY=m
-CONFIG_KEYBOARD_SUNKBD=m
-CONFIG_KEYBOARD_XTKBD=m
+# CONFIG_INPUT_KEYBOARD is not set
 # CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_JOYSTICK=y
+# CONFIG_JOYSTICK_ANALOG is not set
+# CONFIG_JOYSTICK_A3D is not set
+# CONFIG_JOYSTICK_ADI is not set
+# CONFIG_JOYSTICK_COBRA is not set
+# CONFIG_JOYSTICK_GF2K is not set
+# CONFIG_JOYSTICK_GRIP is not set
+# CONFIG_JOYSTICK_GRIP_MP is not set
+# CONFIG_JOYSTICK_GUILLEMOT is not set
+# CONFIG_JOYSTICK_INTERACT is not set
+# CONFIG_JOYSTICK_SIDEWINDER is not set
+# CONFIG_JOYSTICK_TMDC is not set
+CONFIG_JOYSTICK_IFORCE=m
+CONFIG_JOYSTICK_IFORCE_USB=y
+# CONFIG_JOYSTICK_IFORCE_232 is not set
+# CONFIG_JOYSTICK_WARRIOR is not set
+# CONFIG_JOYSTICK_MAGELLAN is not set
+# CONFIG_JOYSTICK_SPACEORB is not set
+# CONFIG_JOYSTICK_SPACEBALL is not set
+# CONFIG_JOYSTICK_STINGER is not set
+# CONFIG_JOYSTICK_TWIDJOY is not set
+# CONFIG_JOYSTICK_ZHENHUA is not set
+# CONFIG_JOYSTICK_AS5011 is not set
+# CONFIG_JOYSTICK_JOYDUMP is not set
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+# CONFIG_JOYSTICK_XPAD_LEDS is not set
 # CONFIG_INPUT_TABLET is not set
 # CONFIG_INPUT_TOUCHSCREEN is not set
 CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_AD714X is not set
+CONFIG_INPUT_AD714X=m
+CONFIG_INPUT_AD714X_I2C=m
+CONFIG_INPUT_AD714X_SPI=m
 # CONFIG_INPUT_BMA150 is not set
 # CONFIG_INPUT_MMA8450 is not set
 # CONFIG_INPUT_MPU3050 is not set
@@ -1810,31 +1705,33 @@ CONFIG_INPUT_MISC=y
 CONFIG_INPUT_ATI_REMOTE2=m
 CONFIG_INPUT_KEYSPAN_REMOTE=m
 # CONFIG_INPUT_KXTJ9 is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-# CONFIG_INPUT_CM109 is not set
-# CONFIG_INPUT_UINPUT is not set
+CONFIG_INPUT_POWERMATE=m
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_CM109=m
+CONFIG_INPUT_UINPUT=m
 # CONFIG_INPUT_PCF8574 is not set
-CONFIG_INPUT_PWM_BEEPER=m
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-# CONFIG_INPUT_ADXL34X is not set
+CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
+CONFIG_INPUT_ADXL34X=m
+CONFIG_INPUT_ADXL34X_I2C=m
+CONFIG_INPUT_ADXL34X_SPI=m
 # CONFIG_INPUT_IMS_PCU is not set
-# CONFIG_INPUT_CMA3000 is not set
+CONFIG_INPUT_CMA3000=m
+# CONFIG_INPUT_CMA3000_I2C is not set
 
 #
 # Hardware I/O ports
 #
-CONFIG_SERIO=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_PARKBD is not set
-CONFIG_SERIO_AMBAKMI=m
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-CONFIG_SERIO_ALTERA_PS2=m
-CONFIG_SERIO_PS2MULT=m
-CONFIG_SERIO_ARC_PS2=m
-CONFIG_SERIO_APBPS2=m
-# CONFIG_GAMEPORT is not set
+CONFIG_SERIO=m
+CONFIG_SERIO_SERPORT=m
+# CONFIG_SERIO_AMBAKMI is not set
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# CONFIG_SERIO_ALTERA_PS2 is not set
+# CONFIG_SERIO_PS2MULT is not set
+# CONFIG_SERIO_ARC_PS2 is not set
+CONFIG_GAMEPORT=m
+CONFIG_GAMEPORT_NS558=m
+CONFIG_GAMEPORT_L4=m
 
 #
 # Character devices
@@ -1845,76 +1742,54 @@ CONFIG_CONSOLE_TRANSLATIONS=y
 CONFIG_VT_CONSOLE=y
 CONFIG_VT_CONSOLE_SLEEP=y
 CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_VT_HW_CONSOLE_BINDING=y
 CONFIG_UNIX98_PTYS=y
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
 # CONFIG_LEGACY_PTYS is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
-CONFIG_N_GSM=m
+# CONFIG_N_GSM is not set
 # CONFIG_TRACE_SINK is not set
-CONFIG_DEVKMEM=y
+# CONFIG_DEVKMEM is not set
 
 #
 # Serial drivers
 #
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_DMA=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_8250_DETECT_IRQ=y
-CONFIG_SERIAL_8250_RSA=y
-CONFIG_SERIAL_8250_DW=m
-CONFIG_SERIAL_8250_EM=m
+# CONFIG_SERIAL_8250 is not set
 
 #
 # Non-8250 serial port support
 #
-CONFIG_SERIAL_AMBA_PL010=y
-CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
+# CONFIG_SERIAL_AMBA_PL010 is not set
 CONFIG_SERIAL_AMBA_PL011=y
 CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
 # CONFIG_SERIAL_MAX3100 is not set
 # CONFIG_SERIAL_MAX310X is not set
+# CONFIG_SERIAL_SH_SCI is not set
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_SERIAL_OF_PLATFORM=y
-CONFIG_SERIAL_SCCNXP=m
-CONFIG_SERIAL_TIMBERDALE=m
-CONFIG_SERIAL_ALTERA_JTAGUART=m
-CONFIG_SERIAL_ALTERA_UART=m
-CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
-CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200
+# CONFIG_SERIAL_SCCNXP is not set
+# CONFIG_SERIAL_TIMBERDALE is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
 # CONFIG_SERIAL_IFX6X60 is not set
-CONFIG_SERIAL_XILINX_PS_UART=m
-CONFIG_SERIAL_ARC=m
-CONFIG_SERIAL_ARC_NR_PORTS=1
-CONFIG_PRINTER=m
-# CONFIG_LP_CONSOLE is not set
-CONFIG_PPDEV=m
+# CONFIG_SERIAL_ARC is not set
+# CONFIG_SERIAL_FSL_LPUART is not set
+# CONFIG_SERIAL_ST_ASC is not set
+CONFIG_TTY_PRINTK=y
 # CONFIG_HVC_DCC is not set
-CONFIG_IPMI_HANDLER=m
-CONFIG_IPMI_PANIC_EVENT=y
-# CONFIG_IPMI_PANIC_STRING is not set
-CONFIG_IPMI_DEVICE_INTERFACE=m
-CONFIG_IPMI_SI=m
-CONFIG_IPMI_WATCHDOG=m
-CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_HANDLER is not set
 CONFIG_HW_RANDOM=y
 # CONFIG_HW_RANDOM_TIMERIOMEM is not set
 # CONFIG_HW_RANDOM_ATMEL is not set
 # CONFIG_HW_RANDOM_EXYNOS is not set
 CONFIG_HW_RANDOM_BCM2708=y
-CONFIG_NVRAM=m
 # CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
+CONFIG_RAW_DRIVER=y
+CONFIG_MAX_RAW_DEVS=256
 # CONFIG_TCG_TPM is not set
 CONFIG_BRCM_CHAR_DRIVERS=y
 CONFIG_BCM_VC_CMA=y
+# CONFIG_BCM_VC_SM is not set
 CONFIG_I2C=y
 CONFIG_I2C_BOARDINFO=y
 CONFIG_I2C_COMPAT=y
@@ -1924,14 +1799,11 @@ CONFIG_I2C_MUX=m
 #
 # Multiplexer I2C Chip support
 #
-# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
-CONFIG_I2C_MUX_GPIO=m
-CONFIG_I2C_MUX_PCA9541=m
-CONFIG_I2C_MUX_PCA954x=m
+# CONFIG_I2C_MUX_GPIO is not set
+# CONFIG_I2C_MUX_PCA9541 is not set
+# CONFIG_I2C_MUX_PCA954x is not set
 CONFIG_I2C_HELPER_AUTO=y
-CONFIG_I2C_SMBUS=m
 CONFIG_I2C_ALGOBIT=m
-CONFIG_I2C_ALGOPCA=m
 
 #
 # I2C Hardware Bus support
@@ -1940,32 +1812,31 @@ CONFIG_I2C_ALGOPCA=m
 #
 # I2C system bus drivers (mostly embedded / system-on-chip)
 #
-CONFIG_I2C_BCM2708=m
+CONFIG_I2C_BCM2708=y
 CONFIG_I2C_BCM2708_BAUDRATE=100000
-CONFIG_I2C_CBUS_GPIO=m
-CONFIG_I2C_DESIGNWARE_CORE=m
-CONFIG_I2C_DESIGNWARE_PLATFORM=m
-CONFIG_I2C_GPIO=m
-CONFIG_I2C_NOMADIK=m
-CONFIG_I2C_OCORES=m
-CONFIG_I2C_PCA_PLATFORM=m
+# CONFIG_I2C_CBUS_GPIO is not set
+# CONFIG_I2C_DESIGNWARE_PLATFORM is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_NOMADIK is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
 # CONFIG_I2C_PXA_PCI is not set
-CONFIG_I2C_SIMTEC=m
-CONFIG_I2C_XILINX=m
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX is not set
 
 #
 # External I2C/SMBus adapter drivers
 #
-CONFIG_I2C_DIOLAN_U2C=m
-CONFIG_I2C_PARPORT=m
-CONFIG_I2C_PARPORT_LIGHT=m
-CONFIG_I2C_TAOS_EVM=m
-CONFIG_I2C_TINY_USB=m
+# CONFIG_I2C_DIOLAN_U2C is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_ROBOTFUZZ_OSIF is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
 
 #
 # Other I2C/SMBus bus drivers
 #
-CONFIG_I2C_STUB=m
+# CONFIG_I2C_STUB is not set
 # CONFIG_I2C_DEBUG_CORE is not set
 # CONFIG_I2C_DEBUG_ALGO is not set
 # CONFIG_I2C_DEBUG_BUS is not set
@@ -1978,13 +1849,10 @@ CONFIG_SPI_MASTER=y
 #
 # CONFIG_SPI_ALTERA is not set
 CONFIG_SPI_BCM2708=m
-CONFIG_SPI_BITBANG=m
-# CONFIG_SPI_BUTTERFLY is not set
-CONFIG_SPI_GPIO=m
-# CONFIG_SPI_LM70_LLP is not set
-# CONFIG_SPI_FSL_SPI is not set
-CONFIG_SPI_OC_TINY=m
-CONFIG_SPI_PL022=m
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+# CONFIG_SPI_OC_TINY is not set
+# CONFIG_SPI_PL022 is not set
 # CONFIG_SPI_PXA2XX_PCI is not set
 # CONFIG_SPI_SC18IS602 is not set
 # CONFIG_SPI_XCOMM is not set
@@ -1994,74 +1862,51 @@ CONFIG_SPI_PL022=m
 #
 # SPI Protocol Masters
 #
-# CONFIG_SPI_SPIDEV is not set
+CONFIG_SPI_SPIDEV=y
 # CONFIG_SPI_TLE62X0 is not set
-
-#
-# Qualcomm MSM SSBI bus support
-#
-# CONFIG_SSBI is not set
-CONFIG_HSI=m
-CONFIG_HSI_BOARDINFO=y
-
-#
-# HSI clients
-#
-CONFIG_HSI_CHAR=m
+# CONFIG_HSI is not set
 
 #
 # PPS support
 #
-CONFIG_PPS=m
-# CONFIG_PPS_DEBUG is not set
+# CONFIG_PPS is not set
 
 #
-# PPS clients support
+# PPS generators support
 #
-# CONFIG_PPS_CLIENT_KTIMER is not set
-# CONFIG_PPS_CLIENT_LDISC is not set
-# CONFIG_PPS_CLIENT_PARPORT is not set
-# CONFIG_PPS_CLIENT_GPIO is not set
 
 #
-# PPS generators support
+# PTP clock support
 #
+# CONFIG_PTP_1588_CLOCK is not set
 
 #
-# PTP clock support
+# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
 #
-CONFIG_PTP_1588_CLOCK=m
-# CONFIG_DP83640_PHY is not set
-# CONFIG_PTP_1588_CLOCK_PCH is not set
 CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
 CONFIG_ARCH_REQUIRE_GPIOLIB=y
-CONFIG_GPIO_DEVRES=y
 CONFIG_GPIOLIB=y
-CONFIG_OF_GPIO=y
+CONFIG_GPIO_DEVRES=y
 # CONFIG_DEBUG_GPIO is not set
 CONFIG_GPIO_SYSFS=y
-CONFIG_GPIO_GENERIC=m
-CONFIG_GPIO_MAX730X=m
 
 #
 # Memory mapped GPIO drivers:
 #
-CONFIG_GPIO_GENERIC_PLATFORM=m
-# CONFIG_GPIO_EM is not set
-CONFIG_GPIO_PL061=y
-CONFIG_GPIO_RCAR=m
-CONFIG_GPIO_TS5500=m
-CONFIG_GPIO_GRGPIO=m
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_PL061 is not set
+# CONFIG_GPIO_RCAR is not set
+# CONFIG_GPIO_SCH311X is not set
+# CONFIG_GPIO_TS5500 is not set
 
 #
 # I2C GPIO expanders:
 #
-CONFIG_GPIO_MAX7300=m
-CONFIG_GPIO_MAX732X=m
-CONFIG_GPIO_PCF857X=m
+# CONFIG_GPIO_MAX7300 is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCF857X is not set
 # CONFIG_GPIO_SX150X is not set
-CONFIG_GPIO_ADP5588=m
-CONFIG_GPIO_ADNP=m
+# CONFIG_GPIO_ADP5588 is not set
 
 #
 # PCI GPIO expanders:
@@ -2070,15 +1915,17 @@ CONFIG_GPIO_ADNP=m
 #
 # SPI GPIO expanders:
 #
-CONFIG_GPIO_MAX7301=m
-CONFIG_GPIO_MCP23S08=m
-CONFIG_GPIO_MC33880=m
-CONFIG_GPIO_74X164=m
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MC33880 is not set
 
 #
 # AC97 GPIO expanders:
 #
 
+#
+# LPC GPIO expanders:
+#
+
 #
 # MODULbus GPIO expanders:
 #
@@ -2108,7 +1955,7 @@ CONFIG_W1_SLAVE_DS2413=m
 CONFIG_W1_SLAVE_DS2423=m
 CONFIG_W1_SLAVE_DS2431=m
 CONFIG_W1_SLAVE_DS2433=m
-CONFIG_W1_SLAVE_DS2433_CRC=y
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
 CONFIG_W1_SLAVE_DS2760=m
 CONFIG_W1_SLAVE_DS2780=m
 CONFIG_W1_SLAVE_DS2781=m
@@ -2117,9 +1964,8 @@ CONFIG_W1_SLAVE_BQ27000=m
 CONFIG_POWER_SUPPLY=y
 # CONFIG_POWER_SUPPLY_DEBUG is not set
 # CONFIG_PDA_POWER is not set
-# CONFIG_GENERIC_ADC_BATTERY is not set
 # CONFIG_TEST_POWER is not set
-# CONFIG_BATTERY_DS2760 is not set
+CONFIG_BATTERY_DS2760=m
 # CONFIG_BATTERY_DS2780 is not set
 # CONFIG_BATTERY_DS2781 is not set
 # CONFIG_BATTERY_DS2782 is not set
@@ -2130,10 +1976,10 @@ CONFIG_POWER_SUPPLY=y
 # CONFIG_CHARGER_MAX8903 is not set
 # CONFIG_CHARGER_LP8727 is not set
 # CONFIG_CHARGER_GPIO is not set
-# CONFIG_CHARGER_MANAGER is not set
 # CONFIG_CHARGER_BQ2415X is not set
+# CONFIG_CHARGER_BQ24190 is not set
+# CONFIG_CHARGER_BQ24735 is not set
 # CONFIG_CHARGER_SMB347 is not set
-# CONFIG_BATTERY_GOLDFISH is not set
 # CONFIG_POWER_RESET is not set
 # CONFIG_POWER_RESET_RESTART is not set
 # CONFIG_POWER_AVS is not set
@@ -2165,18 +2011,17 @@ CONFIG_SENSORS_ASC7621=m
 CONFIG_SENSORS_ATXP1=m
 CONFIG_SENSORS_DS620=m
 CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_F71805F=m
-CONFIG_SENSORS_F71882FG=m
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
 CONFIG_SENSORS_F75375S=m
 CONFIG_SENSORS_G760A=m
+CONFIG_SENSORS_G762=m
 CONFIG_SENSORS_GL518SM=m
 CONFIG_SENSORS_GL520SM=m
 CONFIG_SENSORS_GPIO_FAN=m
 CONFIG_SENSORS_HIH6130=m
-CONFIG_SENSORS_IBMAEM=m
-CONFIG_SENSORS_IBMPEX=m
-CONFIG_SENSORS_IIO_HWMON=m
-CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_HTU21=m
+# CONFIG_SENSORS_IT87 is not set
 CONFIG_SENSORS_JC42=m
 CONFIG_SENSORS_LINEAGE=m
 CONFIG_SENSORS_LM63=m
@@ -2209,10 +2054,10 @@ CONFIG_SENSORS_MAX6642=m
 CONFIG_SENSORS_MAX6650=m
 CONFIG_SENSORS_MAX6697=m
 CONFIG_SENSORS_MCP3021=m
-CONFIG_SENSORS_NCT6775=m
+# CONFIG_SENSORS_NCT6775 is not set
 CONFIG_SENSORS_NTC_THERMISTOR=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_PC87427=m
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
 CONFIG_SENSORS_PCF8591=m
 CONFIG_PMBUS=m
 CONFIG_SENSORS_PMBUS=m
@@ -2228,16 +2073,16 @@ CONFIG_SENSORS_ZL6100=m
 CONFIG_SENSORS_SHT15=m
 CONFIG_SENSORS_SHT21=m
 CONFIG_SENSORS_SMM665=m
-CONFIG_SENSORS_DME1737=m
+# CONFIG_SENSORS_DME1737 is not set
 CONFIG_SENSORS_EMC1403=m
 CONFIG_SENSORS_EMC2103=m
 CONFIG_SENSORS_EMC6W201=m
-CONFIG_SENSORS_SMSC47M1=m
+# CONFIG_SENSORS_SMSC47M1 is not set
 CONFIG_SENSORS_SMSC47M192=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SCH56XX_COMMON=m
-CONFIG_SENSORS_SCH5627=m
-CONFIG_SENSORS_SCH5636=m
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SCH56XX_COMMON is not set
+# CONFIG_SENSORS_SCH5627 is not set
+# CONFIG_SENSORS_SCH5636 is not set
 CONFIG_SENSORS_ADS1015=m
 CONFIG_SENSORS_ADS7828=m
 CONFIG_SENSORS_ADS7871=m
@@ -2248,7 +2093,7 @@ CONFIG_SENSORS_THMC50=m
 CONFIG_SENSORS_TMP102=m
 CONFIG_SENSORS_TMP401=m
 CONFIG_SENSORS_TMP421=m
-CONFIG_SENSORS_VT1211=m
+# CONFIG_SENSORS_VT1211 is not set
 CONFIG_SENSORS_W83781D=m
 CONFIG_SENSORS_W83791D=m
 CONFIG_SENSORS_W83792D=m
@@ -2257,18 +2102,21 @@ CONFIG_SENSORS_W83795=m
 # CONFIG_SENSORS_W83795_FANCTRL is not set
 CONFIG_SENSORS_W83L785TS=m
 CONFIG_SENSORS_W83L786NG=m
-CONFIG_SENSORS_W83627HF=m
-CONFIG_SENSORS_W83627EHF=m
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
 CONFIG_THERMAL=y
 CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
 # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
 # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
-CONFIG_THERMAL_GOV_FAIR_SHARE=y
+# CONFIG_THERMAL_GOV_FAIR_SHARE is not set
 CONFIG_THERMAL_GOV_STEP_WISE=y
-CONFIG_THERMAL_GOV_USER_SPACE=y
-CONFIG_CPU_THERMAL=y
+# CONFIG_THERMAL_GOV_USER_SPACE is not set
 # CONFIG_THERMAL_EMULATION is not set
 CONFIG_THERMAL_BCM2835=y
+
+#
+# Texas Instruments thermal drivers
+#
 CONFIG_WATCHDOG=y
 CONFIG_WATCHDOG_CORE=y
 # CONFIG_WATCHDOG_NOWAYOUT is not set
@@ -2276,16 +2124,17 @@ CONFIG_WATCHDOG_CORE=y
 #
 # Watchdog Device Drivers
 #
-CONFIG_SOFT_WATCHDOG=m
+# CONFIG_SOFT_WATCHDOG is not set
 # CONFIG_ARM_SP805_WATCHDOG is not set
 # CONFIG_DW_WATCHDOG is not set
 # CONFIG_MAX63XX_WATCHDOG is not set
 CONFIG_BCM2708_WDT=m
+# CONFIG_MEN_A21_WDT is not set
 
 #
 # USB-based Watchdog Cards
 #
-CONFIG_USBPCWATCHDOG=m
+# CONFIG_USBPCWATCHDOG is not set
 CONFIG_SSB_POSSIBLE=y
 
 #
@@ -2294,18 +2143,20 @@ CONFIG_SSB_POSSIBLE=y
 CONFIG_SSB=m
 CONFIG_SSB_BLOCKIO=y
 CONFIG_SSB_SDIOHOST_POSSIBLE=y
-CONFIG_SSB_SDIOHOST=y
+# CONFIG_SSB_SDIOHOST is not set
+# CONFIG_SSB_SILENT is not set
 # CONFIG_SSB_DEBUG is not set
-CONFIG_SSB_DRIVER_GPIO=y
+# CONFIG_SSB_DRIVER_GPIO is not set
 CONFIG_BCMA_POSSIBLE=y
 
 #
 # Broadcom specific AMBA
 #
-CONFIG_BCMA=y
+CONFIG_BCMA=m
 CONFIG_BCMA_BLOCKIO=y
-CONFIG_BCMA_DRIVER_GMAC_CMN=y
-CONFIG_BCMA_DRIVER_GPIO=y
+# CONFIG_BCMA_HOST_SOC is not set
+# CONFIG_BCMA_DRIVER_GMAC_CMN is not set
+# CONFIG_BCMA_DRIVER_GPIO is not set
 # CONFIG_BCMA_DEBUG is not set
 
 #
@@ -2321,14 +2172,17 @@ CONFIG_MFD_CORE=m
 # CONFIG_MFD_DA9052_SPI is not set
 # CONFIG_MFD_DA9052_I2C is not set
 # CONFIG_MFD_DA9055 is not set
+# CONFIG_MFD_DA9063 is not set
 # CONFIG_MFD_MC13XXX_SPI is not set
 # CONFIG_MFD_MC13XXX_I2C is not set
 # CONFIG_HTC_EGPIO is not set
 # CONFIG_HTC_PASIC3 is not set
 # CONFIG_HTC_I2CPLD is not set
+# CONFIG_MFD_KEMPLD is not set
 # CONFIG_MFD_88PM800 is not set
 # CONFIG_MFD_88PM805 is not set
 # CONFIG_MFD_88PM860X is not set
+# CONFIG_MFD_MAX14577 is not set
 # CONFIG_MFD_MAX77686 is not set
 # CONFIG_MFD_MAX77693 is not set
 # CONFIG_MFD_MAX8907 is not set
@@ -2349,6 +2203,7 @@ CONFIG_MFD_CORE=m
 # CONFIG_MFD_STMPE is not set
 # CONFIG_MFD_SYSCON is not set
 # CONFIG_MFD_TI_AM335X_TSCADC is not set
+# CONFIG_MFD_LP3943 is not set
 # CONFIG_MFD_LP8788 is not set
 # CONFIG_MFD_PALMAS is not set
 # CONFIG_TPS6105X is not set
@@ -2364,7 +2219,7 @@ CONFIG_MFD_CORE=m
 # CONFIG_MFD_TPS80031 is not set
 # CONFIG_TWL4030_CORE is not set
 # CONFIG_TWL6040_CORE is not set
-# CONFIG_MFD_WL1273_CORE is not set
+CONFIG_MFD_WL1273_CORE=m
 # CONFIG_MFD_LM3533 is not set
 # CONFIG_MFD_TC3589X is not set
 # CONFIG_MFD_TMIO is not set
@@ -2378,30 +2233,8 @@ CONFIG_MFD_CORE=m
 # CONFIG_MFD_WM831X_SPI is not set
 # CONFIG_MFD_WM8350_I2C is not set
 # CONFIG_MFD_WM8994 is not set
-CONFIG_REGULATOR=y
-# CONFIG_REGULATOR_DEBUG is not set
-# CONFIG_REGULATOR_DUMMY is not set
-CONFIG_REGULATOR_FIXED_VOLTAGE=m
-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
-# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
-CONFIG_REGULATOR_GPIO=m
-# CONFIG_REGULATOR_AD5398 is not set
-# CONFIG_REGULATOR_FAN53555 is not set
-# CONFIG_REGULATOR_ISL6271A is not set
-# CONFIG_REGULATOR_MAX1586 is not set
-# CONFIG_REGULATOR_MAX8649 is not set
-# CONFIG_REGULATOR_MAX8660 is not set
-# CONFIG_REGULATOR_MAX8952 is not set
-# CONFIG_REGULATOR_MAX8973 is not set
-# CONFIG_REGULATOR_LP3971 is not set
-# CONFIG_REGULATOR_LP3972 is not set
-# CONFIG_REGULATOR_LP872X is not set
-# CONFIG_REGULATOR_LP8755 is not set
-# CONFIG_REGULATOR_TPS51632 is not set
-# CONFIG_REGULATOR_TPS62360 is not set
-# CONFIG_REGULATOR_TPS65023 is not set
-# CONFIG_REGULATOR_TPS6507X is not set
-# CONFIG_REGULATOR_TPS6524X is not set
+# CONFIG_VEXPRESS_CONFIG is not set
+# CONFIG_REGULATOR is not set
 CONFIG_MEDIA_SUPPORT=m
 
 #
@@ -2425,7 +2258,6 @@ CONFIG_VIDEOBUF_DVB=m
 CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_MEMOPS=m
 CONFIG_VIDEOBUF2_VMALLOC=m
-CONFIG_VIDEO_V4L2_INT_DEVICE=m
 CONFIG_DVB_CORE=m
 CONFIG_DVB_NET=y
 CONFIG_TTPCI_EEPROM=m
@@ -2503,6 +2335,7 @@ CONFIG_USB_GSPCA_SQ905=m
 CONFIG_USB_GSPCA_SQ905C=m
 CONFIG_USB_GSPCA_SQ930X=m
 CONFIG_USB_GSPCA_STK014=m
+CONFIG_USB_GSPCA_STK1135=m
 CONFIG_USB_GSPCA_STV0680=m
 CONFIG_USB_GSPCA_SUNPLUS=m
 CONFIG_USB_GSPCA_T613=m
@@ -2519,7 +2352,7 @@ CONFIG_VIDEO_CPIA2=m
 CONFIG_USB_ZR364XX=m
 CONFIG_USB_STKWEBCAM=m
 CONFIG_USB_S2255=m
-CONFIG_USB_SN9C102=m
+CONFIG_VIDEO_USBTV=m
 
 #
 # Analog TV USB devices
@@ -2531,8 +2364,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_HDPVR=m
 CONFIG_VIDEO_TLG2300=m
 CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_STK1160_COMMON=m
+# CONFIG_VIDEO_STK1160_AC97 is not set
 CONFIG_VIDEO_STK1160=m
-CONFIG_VIDEO_STK1160_AC97=y
 
 #
 # Analog/digital TV USB devices
@@ -2540,7 +2374,7 @@ CONFIG_VIDEO_STK1160_AC97=y
 CONFIG_VIDEO_AU0828=m
 CONFIG_VIDEO_AU0828_V4L2=y
 CONFIG_VIDEO_CX231XX=m
-# CONFIG_VIDEO_CX231XX_RC is not set
+CONFIG_VIDEO_CX231XX_RC=y
 CONFIG_VIDEO_CX231XX_ALSA=m
 CONFIG_VIDEO_CX231XX_DVB=m
 CONFIG_VIDEO_TM6000=m
@@ -2554,7 +2388,7 @@ CONFIG_DVB_USB=m
 # CONFIG_DVB_USB_DEBUG is not set
 CONFIG_DVB_USB_A800=m
 CONFIG_DVB_USB_DIBUSB_MB=m
-# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
 CONFIG_DVB_USB_DIBUSB_MC=m
 CONFIG_DVB_USB_DIB0700=m
 CONFIG_DVB_USB_UMT_010=m
@@ -2593,12 +2427,13 @@ CONFIG_DVB_USB_RTL28XXU=m
 CONFIG_DVB_USB_DVBSKY=m
 CONFIG_SMS_USB_DRV=m
 CONFIG_DVB_B2C2_FLEXCOP_USB=m
-CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG=y
+# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set
 
 #
 # Webcam, TV (analog/digital) USB devices
 #
 CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_V4L2=m
 CONFIG_VIDEO_EM28XX_ALSA=m
 CONFIG_VIDEO_EM28XX_DVB=m
 CONFIG_VIDEO_EM28XX_RC=m
@@ -2614,7 +2449,6 @@ CONFIG_VIDEO_BCM2835_MMAL=m
 # Supported MMC/SDIO adapters
 #
 # CONFIG_SMS_SDIO_DRV is not set
-# CONFIG_MEDIA_PARPORT_SUPPORT is not set
 # CONFIG_RADIO_ADAPTERS is not set
 CONFIG_MEDIA_COMMON_OPTIONS=y
 
@@ -2625,7 +2459,6 @@ CONFIG_VIDEO_CX2341X=m
 CONFIG_VIDEO_TVEEPROM=m
 CONFIG_CYPRESS_FIRMWARE=m
 CONFIG_DVB_B2C2_FLEXCOP=m
-CONFIG_DVB_B2C2_FLEXCOP_DEBUG=y
 CONFIG_SMS_SIANO_MDTV=m
 CONFIG_SMS_SIANO_RC=y
 
@@ -2676,7 +2509,11 @@ CONFIG_VIDEO_MT9V011=m
 #
 
 #
-# Miscelaneous helper chips
+# Audio/Video compression chips
+#
+
+#
+# Miscellaneous helper chips
 #
 
 #
@@ -2709,6 +2546,7 @@ CONFIG_MEDIA_TUNER_FC0013=m
 CONFIG_MEDIA_TUNER_TDA18212=m
 CONFIG_MEDIA_TUNER_E4000=m
 CONFIG_MEDIA_TUNER_FC2580=m
+CONFIG_MEDIA_TUNER_M88TS2022=m
 CONFIG_MEDIA_TUNER_TUA9001=m
 CONFIG_MEDIA_TUNER_IT913X=m
 CONFIG_MEDIA_TUNER_R820T=m
@@ -2720,6 +2558,7 @@ CONFIG_DVB_STB0899=m
 CONFIG_DVB_STB6100=m
 CONFIG_DVB_STV090x=m
 CONFIG_DVB_STV6110x=m
+CONFIG_DVB_M88DS3103=m
 
 #
 # Multistandard (cable + terrestrial) frontends
@@ -2744,7 +2583,6 @@ CONFIG_DVB_TUNER_ITD1000=m
 CONFIG_DVB_TUNER_CX24113=m
 CONFIG_DVB_TDA826X=m
 CONFIG_DVB_CX24116=m
-CONFIG_DVB_M88DS3103=m
 CONFIG_DVB_SI21XX=m
 CONFIG_DVB_TS2020=m
 CONFIG_DVB_DS3000=m
@@ -2814,6 +2652,7 @@ CONFIG_DVB_ISL6423=m
 CONFIG_DVB_A8293=m
 CONFIG_DVB_LGS8GXX=m
 CONFIG_DVB_ATBM8830=m
+CONFIG_DVB_DVBSKY_M88DS3103=m
 CONFIG_DVB_IX2505V=m
 CONFIG_DVB_IT913X_FE=m
 CONFIG_DVB_M88RS2000=m
@@ -2827,52 +2666,39 @@ CONFIG_DVB_AF9033=m
 #
 # Graphics support
 #
-CONFIG_DRM=m
-CONFIG_DRM_USB=m
-CONFIG_DRM_KMS_HELPER=m
-# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
-
-#
-# I2C encoder or helper chips
-#
-# CONFIG_DRM_I2C_CH7006 is not set
-# CONFIG_DRM_I2C_SIL164 is not set
-CONFIG_DRM_I2C_NXP_TDA998X=m
-CONFIG_DRM_UDL=m
-# CONFIG_DRM_TILCDC is not set
+# CONFIG_DRM is not set
 # CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-CONFIG_HDMI=y
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
 CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
+# CONFIG_FIRMWARE_EDID is not set
 # CONFIG_FB_DDC is not set
 # CONFIG_FB_BOOT_VESA_SUPPORT is not set
 CONFIG_FB_CFB_FILLRECT=y
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
 # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-CONFIG_FB_SYS_FILLRECT=m
-CONFIG_FB_SYS_COPYAREA=m
-CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
 # CONFIG_FB_FOREIGN_ENDIAN is not set
-CONFIG_FB_SYS_FOPS=m
-CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SYS_FOPS is not set
 # CONFIG_FB_SVGALIB is not set
 # CONFIG_FB_MACMODES is not set
 # CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
 
 #
 # Frame buffer hardware drivers
 #
 CONFIG_FB_BCM2708=y
-CONFIG_FB_ARMCLCD=y
-CONFIG_FB_UVESA=m
+# CONFIG_FB_ARMCLCD is not set
+# CONFIG_FB_UVESA is not set
+# CONFIG_FB_OPENCORES is not set
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_TMIO is not set
-CONFIG_FB_SMSCUFX=m
-CONFIG_FB_UDL=m
+# CONFIG_FB_SMSCUFX is not set
+# CONFIG_FB_UDL is not set
 # CONFIG_FB_GOLDFISH is not set
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_FB_METRONOME is not set
@@ -2880,29 +2706,50 @@ CONFIG_FB_UDL=m
 # CONFIG_FB_AUO_K190X is not set
 # CONFIG_FB_SIMPLE is not set
 # CONFIG_EXYNOS_VIDEO is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=m
+# CONFIG_LCD_L4F00242T03 is not set
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI922X is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+# CONFIG_LCD_S6E63M0 is not set
+# CONFIG_LCD_LD9040 is not set
+# CONFIG_LCD_AMS369FG06 is not set
+# CONFIG_LCD_LMS501KF03 is not set
+# CONFIG_LCD_HX8357 is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=m
+# CONFIG_BACKLIGHT_GENERIC is not set
+# CONFIG_BACKLIGHT_ADP8860 is not set
+# CONFIG_BACKLIGHT_ADP8870 is not set
+# CONFIG_BACKLIGHT_LM3630A is not set
+# CONFIG_BACKLIGHT_LM3639 is not set
+# CONFIG_BACKLIGHT_LP855X is not set
+# CONFIG_BACKLIGHT_GPIO is not set
+# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_BD6107 is not set
 
 #
 # Console display driver support
 #
 CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
 # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
 CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
 CONFIG_LOGO_LINUX_CLUT224=y
-# CONFIG_FB_SSD1307 is not set
-CONFIG_SOUND=m
+CONFIG_SOUND=y
 CONFIG_SOUND_OSS_CORE=y
 CONFIG_SOUND_OSS_CORE_PRECLAIM=y
 CONFIG_SND=m
 CONFIG_SND_TIMER=m
 CONFIG_SND_PCM=m
+CONFIG_SND_DMAENGINE_PCM=m
 CONFIG_SND_HWDEP=m
 CONFIG_SND_RAWMIDI=m
 CONFIG_SND_COMPRESS_OFFLOAD=m
@@ -2916,8 +2763,8 @@ CONFIG_SND_PCM_OSS_PLUGINS=y
 CONFIG_SND_SEQUENCER_OSS=y
 CONFIG_SND_HRTIMER=m
 CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
-CONFIG_SND_DYNAMIC_MINORS=y
-# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
 CONFIG_SND_VERBOSE_PROCFS=y
 # CONFIG_SND_VERBOSE_PRINTK is not set
 # CONFIG_SND_DEBUG is not set
@@ -2934,14 +2781,11 @@ CONFIG_SND_DUMMY=m
 CONFIG_SND_ALOOP=m
 CONFIG_SND_VIRMIDI=m
 CONFIG_SND_MTPAV=m
-CONFIG_SND_MTS64=m
 CONFIG_SND_SERIAL_U16550=m
 CONFIG_SND_MPU401=m
-CONFIG_SND_PORTMAN2X4=m
-CONFIG_SND_AC97_POWER_SAVE=y
-CONFIG_SND_AC97_POWER_SAVE_DEFAULT=60
+# CONFIG_SND_AC97_POWER_SAVE is not set
 CONFIG_SND_ARM=y
-CONFIG_SND_ARMAACI=m
+# CONFIG_SND_ARMAACI is not set
 CONFIG_SND_BCM2835=m
 CONFIG_SND_SPI=y
 CONFIG_SND_USB=y
@@ -2950,24 +2794,25 @@ CONFIG_SND_USB_UA101=m
 CONFIG_SND_USB_CAIAQ=m
 CONFIG_SND_USB_CAIAQ_INPUT=y
 CONFIG_SND_USB_6FIRE=m
+# CONFIG_SND_USB_HIFACE is not set
 CONFIG_SND_SOC=m
-CONFIG_SND_SOC_DMAENGINE_PCM=y
 CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
 # CONFIG_SND_ATMEL_SOC is not set
 CONFIG_SND_BCM2708_SOC_I2S=m
 CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC=m
+# CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS is not set
 CONFIG_SND_BCM2708_SOC_HIFIBERRY_DIGI=m
+CONFIG_SND_BCM2708_SOC_HIFIBERRY_AMP=m
 CONFIG_SND_BCM2708_SOC_RPI_DAC=m
 # CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC is not set
-CONFIG_SND_DESIGNWARE_I2S=m
+# CONFIG_SND_DESIGNWARE_I2S is not set
 CONFIG_SND_SOC_I2C_AND_SPI=m
-# CONFIG_SND_SOC_ALL_CODECS is not set
 CONFIG_SND_SOC_PCM1794A=m
 CONFIG_SND_SOC_PCM5102A=m
-# CONFIG_SND_SOC_PCM512x is not set
+CONFIG_SND_SOC_TAS5713=m
 CONFIG_SND_SOC_WM8804=m
 CONFIG_SND_SIMPLE_CARD=m
-# CONFIG_SOUND_PRIME is not set
+CONFIG_SOUND_PRIME=m
 CONFIG_AC97_BUS=m
 
 #
@@ -2975,50 +2820,52 @@ CONFIG_AC97_BUS=m
 #
 CONFIG_HID=y
 # CONFIG_HID_BATTERY_STRENGTH is not set
-# CONFIG_HIDRAW is not set
+CONFIG_HIDRAW=y
 # CONFIG_UHID is not set
 CONFIG_HID_GENERIC=y
 
 #
 # Special HID drivers
 #
-CONFIG_HID_A4TECH=y
+CONFIG_HID_A4TECH=m
 CONFIG_HID_ACRUX=m
 # CONFIG_HID_ACRUX_FF is not set
-CONFIG_HID_APPLE=y
+CONFIG_HID_APPLE=m
 # CONFIG_HID_APPLEIR is not set
-CONFIG_HID_AUREAL=m
-CONFIG_HID_BELKIN=y
-CONFIG_HID_CHERRY=y
-CONFIG_HID_CHICONY=y
-CONFIG_HID_PRODIKEYS=m
-CONFIG_HID_CYPRESS=y
+# CONFIG_HID_AUREAL is not set
+CONFIG_HID_BELKIN=m
+CONFIG_HID_CHERRY=m
+CONFIG_HID_CHICONY=m
+# CONFIG_HID_PRODIKEYS is not set
+CONFIG_HID_CYPRESS=m
 CONFIG_HID_DRAGONRISE=m
 # CONFIG_DRAGONRISE_FF is not set
-# CONFIG_HID_EMS_FF is not set
+CONFIG_HID_EMS_FF=m
 CONFIG_HID_ELECOM=m
-CONFIG_HID_EZKEY=y
+CONFIG_HID_ELO=m
+CONFIG_HID_EZKEY=m
 CONFIG_HID_HOLTEK=m
 # CONFIG_HOLTEK_FF is not set
+# CONFIG_HID_HUION is not set
 CONFIG_HID_KEYTOUCH=m
 CONFIG_HID_KYE=m
 CONFIG_HID_UCLOGIC=m
 CONFIG_HID_WALTOP=m
 CONFIG_HID_GYRATION=m
-CONFIG_HID_ICADE=m
+# CONFIG_HID_ICADE is not set
 CONFIG_HID_TWINHAN=m
-CONFIG_HID_KENSINGTON=y
+CONFIG_HID_KENSINGTON=m
 CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO_TPKBD=m
-CONFIG_HID_LOGITECH=y
-CONFIG_HID_LOGITECH_DJ=m
+# CONFIG_HID_LENOVO_TPKBD is not set
+CONFIG_HID_LOGITECH=m
+# CONFIG_HID_LOGITECH_DJ is not set
 # CONFIG_LOGITECH_FF is not set
 # CONFIG_LOGIRUMBLEPAD2_FF is not set
 # CONFIG_LOGIG940_FF is not set
 # CONFIG_LOGIWHEELS_FF is not set
 CONFIG_HID_MAGICMOUSE=m
-CONFIG_HID_MICROSOFT=y
-CONFIG_HID_MONTEREY=y
+CONFIG_HID_MICROSOFT=m
+CONFIG_HID_MONTEREY=m
 CONFIG_HID_MULTITOUCH=m
 CONFIG_HID_NTRIG=m
 CONFIG_HID_ORTEK=m
@@ -3026,49 +2873,49 @@ CONFIG_HID_PANTHERLORD=m
 # CONFIG_PANTHERLORD_FF is not set
 CONFIG_HID_PETALYNX=m
 CONFIG_HID_PICOLCD=m
-CONFIG_HID_PICOLCD_FB=y
-CONFIG_HID_PICOLCD_LEDS=y
-CONFIG_HID_PICOLCD_CIR=y
-CONFIG_HID_PRIMAX=m
-CONFIG_HID_PS3REMOTE=m
+# CONFIG_HID_PICOLCD_FB is not set
+# CONFIG_HID_PICOLCD_BACKLIGHT is not set
+# CONFIG_HID_PICOLCD_LCD is not set
+# CONFIG_HID_PICOLCD_LEDS is not set
+# CONFIG_HID_PICOLCD_CIR is not set
+# CONFIG_HID_PRIMAX is not set
 CONFIG_HID_ROCCAT=m
-CONFIG_HID_SAITEK=m
+# CONFIG_HID_SAITEK is not set
 CONFIG_HID_SAMSUNG=m
 CONFIG_HID_SONY=m
+# CONFIG_SONY_FF is not set
 CONFIG_HID_SPEEDLINK=m
-CONFIG_HID_STEELSERIES=m
+# CONFIG_HID_STEELSERIES is not set
 CONFIG_HID_SUNPLUS=m
 CONFIG_HID_GREENASIA=m
 # CONFIG_GREENASIA_FF is not set
 CONFIG_HID_SMARTJOYPLUS=m
 # CONFIG_SMARTJOYPLUS_FF is not set
-CONFIG_HID_TIVO=m
+# CONFIG_HID_TIVO is not set
 CONFIG_HID_TOPSEED=m
 CONFIG_HID_THINGM=m
 CONFIG_HID_THRUSTMASTER=m
 # CONFIG_THRUSTMASTER_FF is not set
 CONFIG_HID_WACOM=m
 CONFIG_HID_WIIMOTE=m
-CONFIG_HID_WIIMOTE_EXT=y
+CONFIG_HID_XINMO=m
 CONFIG_HID_ZEROPLUS=m
 # CONFIG_ZEROPLUS_FF is not set
 CONFIG_HID_ZYDACRON=m
-CONFIG_HID_SENSOR_HUB=m
+# CONFIG_HID_SENSOR_HUB is not set
 
 #
 # USB HID support
 #
-CONFIG_USB_HID=m
-# CONFIG_HID_PID is not set
+CONFIG_USB_HID=y
+CONFIG_HID_PID=y
 CONFIG_USB_HIDDEV=y
 
 #
 # I2C HID support
 #
-CONFIG_I2C_HID=m
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB_ARCH_HAS_XHCI is not set
+# CONFIG_I2C_HID is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_COMMON=y
 CONFIG_USB_ARCH_HAS_HCD=y
@@ -3080,25 +2927,32 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 # Miscellaneous USB options
 #
 CONFIG_USB_DEFAULT_PERSIST=y
-CONFIG_USB_DYNAMIC_MINORS=y
-# CONFIG_USB_OTG is not set
-# CONFIG_USB_MON is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=m
 # CONFIG_USB_WUSB_CBAF is not set
 
 #
 # USB Host Controller Drivers
 #
 # CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_XHCI_HCD is not set
+# CONFIG_USB_EHCI_HCD is not set
 # CONFIG_USB_OXU210HP_HCD is not set
 # CONFIG_USB_ISP116X_HCD is not set
 # CONFIG_USB_ISP1760_HCD is not set
 # CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_FUSBH200_HCD is not set
+# CONFIG_USB_FOTG210_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
 # CONFIG_USB_U132_HCD is not set
 # CONFIG_USB_SL811_HCD is not set
 # CONFIG_USB_R8A66597_HCD is not set
 CONFIG_USB_DWCOTG=y
-CONFIG_USB_HCD_BCMA=y
+# CONFIG_USB_HCD_BCMA is not set
 # CONFIG_USB_HCD_SSB is not set
+# CONFIG_USB_HCD_TEST_MODE is not set
 
 #
 # USB Device Class drivers
@@ -3106,7 +2960,7 @@ CONFIG_USB_HCD_BCMA=y
 CONFIG_USB_ACM=m
 CONFIG_USB_PRINTER=m
 CONFIG_USB_WDM=m
-CONFIG_USB_TMC=m
+# CONFIG_USB_TMC is not set
 
 #
 # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
@@ -3115,10 +2969,9 @@ CONFIG_USB_TMC=m
 #
 # also be needed; see USB_STORAGE Help for more info
 #
-CONFIG_USB_STORAGE=m
+CONFIG_USB_STORAGE=y
 # CONFIG_USB_STORAGE_DEBUG is not set
 CONFIG_USB_STORAGE_REALTEK=m
-CONFIG_REALTEK_AUTOPM=y
 CONFIG_USB_STORAGE_DATAFAB=m
 CONFIG_USB_STORAGE_FREECOM=m
 CONFIG_USB_STORAGE_ISD200=m
@@ -3135,17 +2988,18 @@ CONFIG_USB_STORAGE_ENE_UB6250=m
 #
 # USB Imaging devices
 #
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+# CONFIG_USB_MUSB_HDRC is not set
 # CONFIG_USB_DWC3 is not set
-# CONFIG_USB_CHIPIDEA is not set
+# CONFIG_USB_DWC2 is not set
 
 #
 # USB port drivers
 #
-CONFIG_USB_USS720=m
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_SIMPLE is not set
 CONFIG_USB_SERIAL_AIRCABLE=m
 CONFIG_USB_SERIAL_ARK3116=m
 CONFIG_USB_SERIAL_BELKIN=m
@@ -3156,7 +3010,6 @@ CONFIG_USB_SERIAL_CP210X=m
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 CONFIG_USB_SERIAL_EMPEG=m
 CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
 CONFIG_USB_SERIAL_VISOR=m
 CONFIG_USB_SERIAL_IPAQ=m
 CONFIG_USB_SERIAL_IR=m
@@ -3173,19 +3026,16 @@ CONFIG_USB_SERIAL_KOBIL_SCT=m
 CONFIG_USB_SERIAL_MCT_U232=m
 CONFIG_USB_SERIAL_METRO=m
 CONFIG_USB_SERIAL_MOS7720=m
-# CONFIG_USB_SERIAL_MOS7715_PARPORT is not set
 CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MOTOROLA=m
+# CONFIG_USB_SERIAL_MXUPORT is not set
 CONFIG_USB_SERIAL_NAVMAN=m
 CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_OTI6858=m
 CONFIG_USB_SERIAL_QCAUX=m
 CONFIG_USB_SERIAL_QUALCOMM=m
 CONFIG_USB_SERIAL_SPCP8X5=m
-CONFIG_USB_SERIAL_HP4X=m
 CONFIG_USB_SERIAL_SAFE=m
 # CONFIG_USB_SERIAL_SAFE_PADDED is not set
-CONFIG_USB_SERIAL_SIEMENS_MPI=m
 CONFIG_USB_SERIAL_SIERRAWIRELESS=m
 CONFIG_USB_SERIAL_SYMBOL=m
 CONFIG_USB_SERIAL_TI=m
@@ -3195,45 +3045,57 @@ CONFIG_USB_SERIAL_WWAN=m
 CONFIG_USB_SERIAL_OPTION=m
 CONFIG_USB_SERIAL_OMNINET=m
 CONFIG_USB_SERIAL_OPTICON=m
-CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
 CONFIG_USB_SERIAL_XSENS_MT=m
-CONFIG_USB_SERIAL_ZIO=m
 CONFIG_USB_SERIAL_WISHBONE=m
 CONFIG_USB_SERIAL_ZTE=m
 CONFIG_USB_SERIAL_SSU100=m
 CONFIG_USB_SERIAL_QT2=m
-# CONFIG_USB_SERIAL_DEBUG is not set
+CONFIG_USB_SERIAL_DEBUG=m
 
 #
 # USB Miscellaneous drivers
 #
 CONFIG_USB_EMI62=m
 CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_ADUTUX=m
 CONFIG_USB_SEVSEG=m
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_LCD=m
 CONFIG_USB_LED=m
 CONFIG_USB_CYPRESS_CY7C63=m
 CONFIG_USB_CYTHERM=m
-# CONFIG_USB_IDMOUSE is not set
+CONFIG_USB_IDMOUSE=m
 CONFIG_USB_FTDI_ELAN=m
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
+CONFIG_USB_APPLEDISPLAY=m
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
 CONFIG_USB_IOWARRIOR=m
-# CONFIG_USB_TEST is not set
+CONFIG_USB_TEST=m
+# CONFIG_USB_EHSET_TEST_FIXTURE is not set
 CONFIG_USB_ISIGHTFW=m
 CONFIG_USB_YUREX=m
 CONFIG_USB_EZUSB_FX2=m
-CONFIG_USB_HSIC_USB3503=m
+# CONFIG_USB_HSIC_USB3503 is not set
 CONFIG_USB_ATM=m
 CONFIG_USB_SPEEDTOUCH=m
 CONFIG_USB_CXACRU=m
 CONFIG_USB_UEAGLEATM=m
 CONFIG_USB_XUSBATM=m
+
+#
+# USB Physical Layer drivers
+#
 # CONFIG_USB_PHY is not set
+# CONFIG_USB_OTG_FSM is not set
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_AM335X_PHY_USB is not set
+# CONFIG_SAMSUNG_USB2PHY is not set
+# CONFIG_SAMSUNG_USB3PHY is not set
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ISP1301 is not set
+# CONFIG_USB_RCAR_PHY is not set
+# CONFIG_USB_ULPI is not set
 # CONFIG_USB_GADGET is not set
 CONFIG_MMC=y
 # CONFIG_MMC_DEBUG is not set
@@ -3244,80 +3106,65 @@ CONFIG_MMC=y
 # MMC/SD/SDIO Card Drivers
 #
 CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_MINORS=8
+CONFIG_MMC_BLOCK_MINORS=32
 CONFIG_MMC_BLOCK_BOUNCE=y
-CONFIG_SDIO_UART=m
-CONFIG_MMC_TEST=m
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
 
 #
 # MMC/SD/SDIO Host Controller Drivers
 #
-CONFIG_MMC_ARMMMCI=m
+# CONFIG_MMC_ARMMMCI is not set
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_IO_ACCESSORS=y
-CONFIG_MMC_SDHCI_PLTFM=m
-CONFIG_MMC_SDHCI_PXAV3=m
-CONFIG_MMC_SDHCI_PXAV2=m
+CONFIG_MMC_SDHCI_PLTFM=y
+# CONFIG_MMC_SDHCI_PXAV3 is not set
+# CONFIG_MMC_SDHCI_PXAV2 is not set
 CONFIG_MMC_SDHCI_BCM2708=y
-CONFIG_MMC_SDHCI_BCM2708_DMA=y
-# CONFIG_MMC_SPI is not set
-CONFIG_MMC_DW=m
-# CONFIG_MMC_DW_IDMAC is not set
-CONFIG_MMC_DW_PLTFM=m
-CONFIG_MMC_DW_EXYNOS=m
-CONFIG_MMC_VUB300=m
-CONFIG_MMC_USHC=m
-CONFIG_MEMSTICK=m
-# CONFIG_MEMSTICK_DEBUG is not set
-
-#
-# MemoryStick drivers
-#
-# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
-CONFIG_MSPRO_BLOCK=m
-
-#
-# MemoryStick Host Controller Drivers
-#
+# CONFIG_MMC_SDHCI_BCM2708_DMA is not set
+CONFIG_MMC_BCM2835=y
+# CONFIG_MMC_BCM2835_DMA is not set
+CONFIG_MMC_SPI=m
+# CONFIG_MMC_DW is not set
+# CONFIG_MMC_VUB300 is not set
+# CONFIG_MMC_USHC is not set
+# CONFIG_MEMSTICK is not set
 CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS=m
 
 #
 # LED drivers
 #
-CONFIG_LEDS_LM3530=m
-CONFIG_LEDS_LM3642=m
-CONFIG_LEDS_PCA9532=m
-CONFIG_LEDS_PCA9532_GPIO=y
+# CONFIG_LEDS_LM3530 is not set
+# CONFIG_LEDS_LM3642 is not set
+# CONFIG_LEDS_PCA9532 is not set
 CONFIG_LEDS_GPIO=m
-CONFIG_LEDS_LP3944=m
-CONFIG_LEDS_LP55XX_COMMON=m
-CONFIG_LEDS_LP5521=m
-CONFIG_LEDS_LP5523=m
-CONFIG_LEDS_LP5562=m
-CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA9633=m
-CONFIG_LEDS_DAC124S085=m
-CONFIG_LEDS_PWM=m
-CONFIG_LEDS_REGULATOR=m
-CONFIG_LEDS_BD2802=m
-CONFIG_LEDS_LT3593=m
-# CONFIG_LEDS_RENESAS_TPU is not set
-CONFIG_LEDS_TCA6507=m
-CONFIG_LEDS_LM355x=m
-CONFIG_LEDS_OT200=m
-CONFIG_LEDS_BLINKM=m
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_LP5562 is not set
+# CONFIG_LEDS_LP8501 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_PCA963X is not set
+# CONFIG_LEDS_PCA9685 is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+# CONFIG_LEDS_TCA6507 is not set
+# CONFIG_LEDS_LM355x is not set
+# CONFIG_LEDS_OT200 is not set
+# CONFIG_LEDS_BLINKM is not set
 
 #
 # LED Triggers
 #
 CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_ONESHOT=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_ONESHOT=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=y
 CONFIG_LEDS_TRIGGER_CPU=y
-CONFIG_LEDS_TRIGGER_GPIO=m
+CONFIG_LEDS_TRIGGER_GPIO=y
 CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
 
 #
@@ -3331,7 +3178,8 @@ CONFIG_LEDS_TRIGGER_NETDEV=m
 CONFIG_RTC_LIB=y
 CONFIG_RTC_CLASS=y
 # CONFIG_RTC_HCTOSYS is not set
-# CONFIG_RTC_SYSTOHC is not set
+CONFIG_RTC_SYSTOHC=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
 # CONFIG_RTC_DEBUG is not set
 
 #
@@ -3354,12 +3202,14 @@ CONFIG_RTC_DRV_MAX6900=m
 CONFIG_RTC_DRV_RS5C372=m
 CONFIG_RTC_DRV_ISL1208=m
 CONFIG_RTC_DRV_ISL12022=m
+# CONFIG_RTC_DRV_ISL12057 is not set
 CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF2127=m
 CONFIG_RTC_DRV_PCF8523=m
 CONFIG_RTC_DRV_PCF8563=m
 CONFIG_RTC_DRV_PCF8583=m
 CONFIG_RTC_DRV_M41T80=m
-CONFIG_RTC_DRV_M41T80_WDT=y
+# CONFIG_RTC_DRV_M41T80_WDT is not set
 CONFIG_RTC_DRV_BQ32K=m
 CONFIG_RTC_DRV_S35390A=m
 CONFIG_RTC_DRV_FM3130=m
@@ -3385,58 +3235,56 @@ CONFIG_RTC_DRV_RX4581=m
 #
 # Platform RTC drivers
 #
-CONFIG_RTC_DRV_CMOS=m
-CONFIG_RTC_DRV_DS1286=m
-CONFIG_RTC_DRV_DS1511=m
-CONFIG_RTC_DRV_DS1553=m
-CONFIG_RTC_DRV_DS1742=m
-CONFIG_RTC_DRV_STK17TA8=m
-CONFIG_RTC_DRV_M48T86=m
-CONFIG_RTC_DRV_M48T35=m
-CONFIG_RTC_DRV_M48T59=m
-CONFIG_RTC_DRV_MSM6242=m
-CONFIG_RTC_DRV_BQ4802=m
-CONFIG_RTC_DRV_RP5C01=m
-CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_DS2404=m
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+# CONFIG_RTC_DRV_DS2404 is not set
 
 #
 # on-CPU RTC drivers
 #
-CONFIG_RTC_DRV_PL030=m
-CONFIG_RTC_DRV_PL031=m
-CONFIG_RTC_DRV_SNVS=m
+# CONFIG_RTC_DRV_PL030 is not set
+# CONFIG_RTC_DRV_PL031 is not set
+# CONFIG_RTC_DRV_MOXART is not set
 
 #
 # HID Sensor RTC drivers
 #
-CONFIG_RTC_DRV_HID_SENSOR_TIME=m
+# CONFIG_RTC_DRV_HID_SENSOR_TIME is not set
 CONFIG_DMADEVICES=y
 # CONFIG_DMADEVICES_DEBUG is not set
 
 #
 # DMA Devices
 #
-CONFIG_AMBA_PL08X=y
-CONFIG_DW_DMAC=y
-# CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set
+# CONFIG_AMBA_PL08X is not set
+# CONFIG_DW_DMAC_CORE is not set
+# CONFIG_DW_DMAC is not set
 # CONFIG_TIMB_DMA is not set
-CONFIG_PL330_DMA=y
-CONFIG_DMA_BCM2708=y
+# CONFIG_PL330_DMA is not set
+CONFIG_DMA_BCM2835=y
 CONFIG_DMA_ENGINE=y
 CONFIG_DMA_VIRTUAL_CHANNELS=y
-CONFIG_DMA_OF=y
 
 #
 # DMA Clients
 #
-CONFIG_ASYNC_TX_DMA=y
-CONFIG_DMATEST=m
+# CONFIG_ASYNC_TX_DMA is not set
+# CONFIG_DMATEST is not set
 # CONFIG_AUXDISPLAY is not set
 CONFIG_UIO=m
-CONFIG_UIO_PDRV=m
 CONFIG_UIO_PDRV_GENIRQ=m
-CONFIG_UIO_DMEM_GENIRQ=m
+# CONFIG_UIO_DMEM_GENIRQ is not set
 # CONFIG_VIRT_DRIVERS is not set
 
 #
@@ -3448,120 +3296,19 @@ CONFIG_UIO_DMEM_GENIRQ=m
 # Microsoft Hyper-V guest support
 #
 CONFIG_STAGING=y
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-# CONFIG_USBIP_DEBUG is not set
-# CONFIG_W35UND is not set
-# CONFIG_PRISM2_USB is not set
-CONFIG_ECHO=m
+# CONFIG_USBIP_CORE is not set
+CONFIG_W35UND=m
+CONFIG_PRISM2_USB=m
+# CONFIG_ECHO is not set
 # CONFIG_COMEDI is not set
-# CONFIG_ASUS_OLED is not set
-# CONFIG_PANEL is not set
 # CONFIG_RTLLIB is not set
-# CONFIG_R8712U is not set
-CONFIG_RTS5139=m
-# CONFIG_RTS5139_DEBUG is not set
+CONFIG_R8712U=m
+# CONFIG_R8188EU is not set
+# CONFIG_RTS5139 is not set
 # CONFIG_TRANZPORT is not set
 # CONFIG_LINE6_USB is not set
 # CONFIG_USB_SERIAL_QUATECH2 is not set
-# CONFIG_VT6656 is not set
-
-#
-# IIO staging drivers
-#
-
-#
-# Accelerometers
-#
-# CONFIG_ADIS16201 is not set
-# CONFIG_ADIS16203 is not set
-# CONFIG_ADIS16204 is not set
-# CONFIG_ADIS16209 is not set
-# CONFIG_ADIS16220 is not set
-# CONFIG_ADIS16240 is not set
-# CONFIG_LIS3L02DQ is not set
-
-#
-# Analog to digital converters
-#
-# CONFIG_AD7291 is not set
-# CONFIG_AD7606 is not set
-# CONFIG_AD799X is not set
-# CONFIG_AD7780 is not set
-# CONFIG_AD7816 is not set
-# CONFIG_AD7192 is not set
-# CONFIG_AD7280 is not set
-
-#
-# Analog digital bi-direction converters
-#
-# CONFIG_ADT7316 is not set
-
-#
-# Capacitance to digital converters
-#
-# CONFIG_AD7150 is not set
-# CONFIG_AD7152 is not set
-# CONFIG_AD7746 is not set
-
-#
-# Direct Digital Synthesis
-#
-# CONFIG_AD5930 is not set
-# CONFIG_AD9832 is not set
-# CONFIG_AD9834 is not set
-# CONFIG_AD9850 is not set
-# CONFIG_AD9852 is not set
-# CONFIG_AD9910 is not set
-# CONFIG_AD9951 is not set
-
-#
-# Digital gyroscope sensors
-#
-# CONFIG_ADIS16060 is not set
-# CONFIG_ADIS16130 is not set
-# CONFIG_ADIS16260 is not set
-
-#
-# Network Analyzer, Impedance Converters
-#
-# CONFIG_AD5933 is not set
-
-#
-# Light sensors
-#
-# CONFIG_SENSORS_ISL29018 is not set
-# CONFIG_SENSORS_ISL29028 is not set
-# CONFIG_TSL2583 is not set
-# CONFIG_TSL2x7x is not set
-
-#
-# Magnetometer sensors
-#
-# CONFIG_SENSORS_HMC5843 is not set
-
-#
-# Active energy metering IC
-#
-# CONFIG_ADE7753 is not set
-# CONFIG_ADE7754 is not set
-# CONFIG_ADE7758 is not set
-# CONFIG_ADE7759 is not set
-# CONFIG_ADE7854 is not set
-
-#
-# Resolver to digital converters
-#
-# CONFIG_AD2S90 is not set
-# CONFIG_AD2S1200 is not set
-# CONFIG_AD2S1210 is not set
-
-#
-# Triggers - standalone
-#
-# CONFIG_IIO_SIMPLE_DUMMY is not set
-# CONFIG_ZSMALLOC is not set
+CONFIG_VT6656=m
 # CONFIG_USB_ENESTORAGE is not set
 # CONFIG_BCM_WIMAX is not set
 # CONFIG_FT1000 is not set
@@ -3569,10 +3316,35 @@ CONFIG_RTS5139=m
 #
 # Speakup console speech
 #
-# CONFIG_SPEAKUP is not set
+CONFIG_SPEAKUP=m
+# CONFIG_SPEAKUP_SYNTH_ACNTSA is not set
+# CONFIG_SPEAKUP_SYNTH_APOLLO is not set
+# CONFIG_SPEAKUP_SYNTH_AUDPTR is not set
+# CONFIG_SPEAKUP_SYNTH_BNS is not set
+# CONFIG_SPEAKUP_SYNTH_DECTLK is not set
+# CONFIG_SPEAKUP_SYNTH_DECEXT is not set
+# CONFIG_SPEAKUP_SYNTH_LTLK is not set
+CONFIG_SPEAKUP_SYNTH_SOFT=m
+# CONFIG_SPEAKUP_SYNTH_SPKOUT is not set
+# CONFIG_SPEAKUP_SYNTH_TXPRT is not set
+# CONFIG_SPEAKUP_SYNTH_DUMMY is not set
 # CONFIG_TOUCHSCREEN_CLEARPAD_TM1217 is not set
 # CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4 is not set
-# CONFIG_STAGING_MEDIA is not set
+CONFIG_STAGING_MEDIA=y
+CONFIG_DVB_AS102=m
+# CONFIG_VIDEO_GO7007 is not set
+# CONFIG_USB_MSI3101 is not set
+# CONFIG_VIDEO_TCM825X is not set
+CONFIG_USB_SN9C102=m
+CONFIG_LIRC_STAGING=y
+CONFIG_LIRC_IGORPLUGUSB=m
+CONFIG_LIRC_IMON=m
+CONFIG_LIRC_RPI=m
+CONFIG_LIRC_SASEM=m
+CONFIG_LIRC_SERIAL=m
+CONFIG_LIRC_SERIAL_TRANSMITTER=y
+# CONFIG_LIRC_SIR is not set
+# CONFIG_LIRC_ZILOG is not set
 
 #
 # Android
@@ -3580,10 +3352,11 @@ CONFIG_RTS5139=m
 # CONFIG_ANDROID is not set
 # CONFIG_USB_WPAN_HCD is not set
 # CONFIG_WIMAX_GDM72XX is not set
-# CONFIG_CSR_WIFI is not set
+# CONFIG_LTE_GDM724X is not set
 # CONFIG_CED1401 is not set
 # CONFIG_DGRP is not set
-# CONFIG_ZCACHE is not set
+# CONFIG_LUSTRE_FS is not set
+# CONFIG_DGAP is not set
 CONFIG_CLKDEV_LOOKUP=y
 
 #
@@ -3603,110 +3376,18 @@ CONFIG_CLKDEV_LOOKUP=y
 # CONFIG_PM_DEVFREQ is not set
 # CONFIG_EXTCON is not set
 # CONFIG_MEMORY is not set
-CONFIG_IIO=m
-# CONFIG_IIO_BUFFER is not set
-# CONFIG_IIO_TRIGGER is not set
-
-#
-# Accelerometers
-#
-# CONFIG_HID_SENSOR_ACCEL_3D is not set
-# CONFIG_KXSD9 is not set
-# CONFIG_IIO_ST_ACCEL_3AXIS is not set
-
-#
-# Analog to digital converters
-#
-# CONFIG_AD7266 is not set
-# CONFIG_AD7298 is not set
-# CONFIG_AD7923 is not set
-# CONFIG_AD7791 is not set
-# CONFIG_AD7793 is not set
-# CONFIG_AD7476 is not set
-# CONFIG_AD7887 is not set
-# CONFIG_EXYNOS_ADC is not set
-# CONFIG_MAX1363 is not set
-# CONFIG_TI_ADC081C is not set
-
-#
-# Amplifiers
-#
-# CONFIG_AD8366 is not set
-
-#
-# Hid Sensor IIO Common
-#
-CONFIG_HID_SENSOR_IIO_COMMON=m
-# CONFIG_HID_SENSOR_IIO_TRIGGER is not set
-# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set
-
-#
-# Digital to analog converters
-#
-# CONFIG_AD5064 is not set
-# CONFIG_AD5360 is not set
-# CONFIG_AD5380 is not set
-# CONFIG_AD5421 is not set
-# CONFIG_AD5624R_SPI is not set
-# CONFIG_AD5446 is not set
-# CONFIG_AD5449 is not set
-# CONFIG_AD5504 is not set
-# CONFIG_AD5755 is not set
-# CONFIG_AD5764 is not set
-# CONFIG_AD5791 is not set
-# CONFIG_AD5686 is not set
-# CONFIG_MAX517 is not set
-# CONFIG_MCP4725 is not set
-
-#
-# Frequency Synthesizers DDS/PLL
-#
-
-#
-# Clock Generator/Distribution
-#
-# CONFIG_AD9523 is not set
-
-#
-# Phase-Locked Loop (PLL) frequency synthesizers
-#
-# CONFIG_ADF4350 is not set
-
-#
-# Digital gyroscope sensors
-#
-# CONFIG_ADIS16080 is not set
-# CONFIG_ADIS16136 is not set
-# CONFIG_ADXRS450 is not set
-# CONFIG_HID_SENSOR_GYRO_3D is not set
-# CONFIG_IIO_ST_GYRO_3AXIS is not set
-# CONFIG_ITG3200 is not set
-
-#
-# Inertial measurement units
-#
-# CONFIG_ADIS16400 is not set
-# CONFIG_ADIS16480 is not set
-# CONFIG_INV_MPU6050_IIO is not set
-
-#
-# Light sensors
-#
-# CONFIG_ADJD_S311 is not set
-# CONFIG_SENSORS_TSL2563 is not set
-# CONFIG_VCNL4000 is not set
-# CONFIG_HID_SENSOR_ALS is not set
+# CONFIG_IIO is not set
+# CONFIG_PWM is not set
+# CONFIG_IPACK_BUS is not set
+# CONFIG_RESET_CONTROLLER is not set
+# CONFIG_FMC is not set
 
 #
-# Magnetometer sensors
+# PHY Subsystem
 #
-# CONFIG_AK8975 is not set
-# CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set
-# CONFIG_IIO_ST_MAGN_3AXIS is not set
-CONFIG_PWM=y
-CONFIG_IRQCHIP=y
-# CONFIG_IPACK_BUS is not set
-# CONFIG_RESET_CONTROLLER is not set
+# CONFIG_GENERIC_PHY is not set
+# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
+# CONFIG_POWERCAP is not set
 
 #
 # File systems
@@ -3720,6 +3401,7 @@ CONFIG_EXT4_FS_POSIX_ACL=y
 CONFIG_EXT4_FS_SECURITY=y
 # CONFIG_EXT4_DEBUG is not set
 CONFIG_JBD2=y
+# CONFIG_JBD2_DEBUG is not set
 CONFIG_FS_MBCACHE=y
 CONFIG_REISERFS_FS=m
 # CONFIG_REISERFS_CHECK is not set
@@ -3744,9 +3426,10 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
 # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
 # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
 # CONFIG_BTRFS_DEBUG is not set
+# CONFIG_BTRFS_ASSERT is not set
 # CONFIG_NILFS2_FS is not set
 CONFIG_FS_POSIX_ACL=y
-CONFIG_EXPORTFS=m
+CONFIG_EXPORTFS=y
 CONFIG_FILE_LOCKING=y
 CONFIG_FSNOTIFY=y
 CONFIG_DNOTIFY=y
@@ -3764,7 +3447,6 @@ CONFIG_QUOTACTL=y
 CONFIG_AUTOFS4_FS=m
 CONFIG_FUSE_FS=m
 CONFIG_CUSE=m
-CONFIG_GENERIC_ACL=y
 
 #
 # Caches
@@ -3818,22 +3500,6 @@ CONFIG_ECRYPT_FS=m
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_UBIFS_FS is not set
 # CONFIG_LOGFS is not set
 # CONFIG_CRAMFS is not set
 # CONFIG_SQUASHFS is not set
@@ -3849,7 +3515,6 @@ CONFIG_JFFS2_CMODE_PRIORITY=y
 CONFIG_UFS_FS=m
 # CONFIG_UFS_FS_WRITE is not set
 # CONFIG_UFS_DEBUG is not set
-# CONFIG_EXOFS_FS is not set
 # CONFIG_F2FS_FS is not set
 CONFIG_NETWORK_FILESYSTEMS=y
 CONFIG_NFS_FS=m
@@ -3867,6 +3532,7 @@ CONFIG_NFSD_V2_ACL=y
 CONFIG_NFSD_V3=y
 CONFIG_NFSD_V3_ACL=y
 CONFIG_NFSD_V4=y
+CONFIG_NFSD_V4_SECURITY_LABEL=y
 # CONFIG_NFSD_FAULT_INJECTION is not set
 CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
@@ -3948,58 +3614,81 @@ CONFIG_NLS_UTF8=y
 #
 # Kernel hacking
 #
+
+#
+# printk and dmesg options
+#
 # CONFIG_PRINTK_TIME is not set
 CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
+CONFIG_BOOT_PRINTK_DELAY=y
+# CONFIG_DYNAMIC_DEBUG is not set
+
+#
+# Compile-time checks and compiler options
+#
+# CONFIG_DEBUG_INFO is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
 CONFIG_ENABLE_MUST_CHECK=y
 CONFIG_FRAME_WARN=1024
-# CONFIG_MAGIC_SYSRQ is not set
-CONFIG_STRIP_ASM_SYMS=y
+# CONFIG_STRIP_ASM_SYMS is not set
 # CONFIG_READABLE_ASM is not set
 # CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
+CONFIG_DEBUG_FS=y
 # CONFIG_HEADERS_CHECK is not set
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_MAGIC_SYSRQ is not set
 CONFIG_DEBUG_KERNEL=y
+
+#
+# Memory Debugging
+#
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_DEBUG_MEMORY_INIT=y
 # CONFIG_DEBUG_SHIRQ is not set
+
+#
+# Debug Lockups and Hangs
+#
 # CONFIG_LOCKUP_DETECTOR is not set
-# CONFIG_PANIC_ON_OOPS is not set
-CONFIG_PANIC_ON_OOPS_VALUE=0
 CONFIG_DETECT_HUNG_TASK=y
 CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120
 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
 CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+# CONFIG_PANIC_ON_OOPS is not set
+CONFIG_PANIC_ON_OOPS_VALUE=0
+CONFIG_PANIC_TIMEOUT=0
 CONFIG_SCHED_DEBUG=y
-# CONFIG_SCHEDSTATS is not set
+CONFIG_SCHEDSTATS=y
 CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_HAVE_DEBUG_KMEMLEAK=y
-# CONFIG_DEBUG_KMEMLEAK is not set
+
+#
+# Lock Debugging (spinlocks, mutexes, etc...)
+#
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
 # CONFIG_DEBUG_LOCK_ALLOC is not set
 # CONFIG_PROVE_LOCKING is not set
 # CONFIG_LOCK_STAT is not set
 # CONFIG_DEBUG_ATOMIC_SLEEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_KOBJECT is not set
 CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
 # CONFIG_DEBUG_WRITECOUNT is not set
-CONFIG_DEBUG_MEMORY_INIT=y
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_TEST_LIST_SORT is not set
+CONFIG_DEBUG_LIST=y
 # CONFIG_DEBUG_SG is not set
 # CONFIG_DEBUG_NOTIFIERS is not set
 # CONFIG_DEBUG_CREDENTIALS is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
 
 #
 # RCU Debugging
@@ -4007,12 +3696,9 @@ CONFIG_FRAME_POINTER=y
 # CONFIG_SPARSE_RCU_POINTER is not set
 # CONFIG_RCU_TORTURE_TEST is not set
 # CONFIG_RCU_TRACE is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
 # CONFIG_NOTIFIER_ERROR_INJECTION is not set
 # CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
 CONFIG_HAVE_FUNCTION_TRACER=y
 CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
 CONFIG_HAVE_DYNAMIC_FTRACE=y
@@ -4020,30 +3706,51 @@ CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
 CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
 CONFIG_HAVE_C_RECORDMCOUNT=y
 CONFIG_TRACING_SUPPORT=y
-# CONFIG_FTRACE is not set
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_FTRACE_SYSCALLS is not set
+# CONFIG_TRACER_SNAPSHOT is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_PROBE_EVENTS is not set
+
+#
+# Runtime Testing
+#
+# CONFIG_LKDTM is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
 # CONFIG_RBTREE_TEST is not set
 # CONFIG_INTERVAL_TREE_TEST is not set
-# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_PERCPU_TEST is not set
 # CONFIG_ATOMIC64_SELFTEST is not set
-CONFIG_ASYNC_RAID6_TEST=m
+# CONFIG_ASYNC_RAID6_TEST is not set
+# CONFIG_TEST_STRING_HELPERS is not set
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_TEST_MODULE is not set
+# CONFIG_TEST_USER_COPY is not set
 # CONFIG_SAMPLES is not set
 CONFIG_HAVE_ARCH_KGDB=y
 # CONFIG_KGDB is not set
-# CONFIG_TEST_STRING_HELPERS is not set
-# CONFIG_TEST_KSTRTOX is not set
-# CONFIG_STRICT_DEVMEM is not set
-# CONFIG_ARM_UNWIND is not set
+# CONFIG_ARM_PTDUMP is not set
+CONFIG_STRICT_DEVMEM=y
+CONFIG_ARM_UNWIND=y
 # CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_LL=y
-# CONFIG_DEBUG_LL_UART_NONE is not set
-# CONFIG_DEBUG_ICEDCC is not set
-# CONFIG_DEBUG_SEMIHOSTING is not set
-CONFIG_DEBUG_BCM2708_UART0=y
+# CONFIG_DEBUG_LL is not set
 CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
+# CONFIG_DEBUG_UART_PL01X is not set
+# CONFIG_DEBUG_UART_8250 is not set
 CONFIG_UNCOMPRESS_INCLUDE="mach/uncompress.h"
-CONFIG_EARLY_PRINTK=y
 # CONFIG_OC_ETM is not set
 # CONFIG_PID_IN_CONTEXTIDR is not set
+# CONFIG_DEBUG_SET_MODULE_RONX is not set
 
 #
 # Security options
@@ -4109,14 +3816,16 @@ CONFIG_PAX_USERCOPY=y
 # Memory Protections
 #
 # CONFIG_GRKERNSEC_KMEM is not set
-CONFIG_GRKERNSEC_JIT_HARDEN=y
 # CONFIG_GRKERNSEC_PERF_HARDEN is not set
 CONFIG_GRKERNSEC_RAND_THREADSTACK=y
 CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
+CONFIG_GRKERNSEC_RANDSTRUCT=y
+CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
+CONFIG_GRKERNSEC_OLD_ARM_USERLAND=y
 
 #
 # Role Based Access Control Options
@@ -4175,12 +3884,12 @@ CONFIG_GRKERNSEC_DMESG=y
 CONFIG_GRKERNSEC_HARDEN_PTRACE=y
 CONFIG_GRKERNSEC_PTRACE_READEXEC=y
 CONFIG_GRKERNSEC_SETXID=y
+CONFIG_GRKERNSEC_HARDEN_IPC=y
 # CONFIG_GRKERNSEC_TPE is not set
 
 #
 # Network Protections
 #
-CONFIG_GRKERNSEC_RANDNET=y
 CONFIG_GRKERNSEC_BLACKHOLE=y
 CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 # CONFIG_GRKERNSEC_SOCKET is not set
@@ -4201,6 +3910,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 CONFIG_GRKERNSEC_FLOODTIME=10
 CONFIG_GRKERNSEC_FLOODBURST=6
 CONFIG_KEYS=y
+# CONFIG_PERSISTENT_KEYRINGS is not set
+# CONFIG_BIG_KEYS is not set
 # CONFIG_ENCRYPTED_KEYS is not set
 CONFIG_KEYS_DEBUG_PROC_KEYS=y
 CONFIG_SECURITY_DMESG_RESTRICT=y
@@ -4232,7 +3943,7 @@ CONFIG_CRYPTO_ALGAPI=y
 CONFIG_CRYPTO_ALGAPI2=y
 CONFIG_CRYPTO_AEAD=m
 CONFIG_CRYPTO_AEAD2=y
-CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER=y
 CONFIG_CRYPTO_BLKCIPHER2=y
 CONFIG_CRYPTO_HASH=y
 CONFIG_CRYPTO_HASH2=y
@@ -4255,13 +3966,13 @@ CONFIG_CRYPTO_AUTHENC=m
 # Authenticated Encryption with Associated Data
 #
 CONFIG_CRYPTO_CCM=m
-CONFIG_CRYPTO_GCM=m
+# CONFIG_CRYPTO_GCM is not set
 CONFIG_CRYPTO_SEQIV=m
 
 #
 # Block modes
 #
-CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_CBC=y
 CONFIG_CRYPTO_CTR=m
 CONFIG_CRYPTO_CTS=m
 CONFIG_CRYPTO_ECB=m
@@ -4282,15 +3993,16 @@ CONFIG_CRYPTO_VMAC=m
 #
 CONFIG_CRYPTO_CRC32C=y
 CONFIG_CRYPTO_CRC32=m
+CONFIG_CRYPTO_CRCT10DIF=y
 CONFIG_CRYPTO_GHASH=m
 CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_MICHAEL_MIC=m
 CONFIG_CRYPTO_RMD128=m
 CONFIG_CRYPTO_RMD160=m
 CONFIG_CRYPTO_RMD256=m
 CONFIG_CRYPTO_RMD320=m
-CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA1=y
 CONFIG_CRYPTO_SHA1_ARM=m
 CONFIG_CRYPTO_SHA256=y
 CONFIG_CRYPTO_SHA512=m
@@ -4310,7 +4022,7 @@ CONFIG_CRYPTO_CAMELLIA=m
 CONFIG_CRYPTO_CAST_COMMON=m
 CONFIG_CRYPTO_CAST5=m
 CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_DES=y
 CONFIG_CRYPTO_FCRYPT=m
 CONFIG_CRYPTO_KHAZAD=m
 CONFIG_CRYPTO_SALSA20=m
@@ -4323,9 +4035,11 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m
 #
 # Compression
 #
-CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_ZLIB=m
 CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_LZ4=m
+CONFIG_CRYPTO_LZ4HC=m
 
 #
 # Random Number Generation
@@ -4334,11 +4048,10 @@ CONFIG_CRYPTO_ANSI_CPRNG=m
 CONFIG_CRYPTO_USER_API=m
 CONFIG_CRYPTO_USER_API_HASH=m
 CONFIG_CRYPTO_USER_API_SKCIPHER=m
-CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO_HW is not set
 CONFIG_ASYMMETRIC_KEY_TYPE=m
-CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
-CONFIG_PUBLIC_KEY_ALGO_RSA=m
-CONFIG_X509_CERTIFICATE_PARSER=m
+# CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE is not set
+# CONFIG_PUBLIC_KEY_ALGO_RSA is not set
 # CONFIG_BINARY_PRINTF is not set
 
 #
@@ -4348,12 +4061,14 @@ CONFIG_RAID6_PQ=m
 CONFIG_BITREVERSE=y
 CONFIG_GENERIC_STRNCPY_FROM_USER=y
 CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_NET_UTILS=y
 CONFIG_GENERIC_PCI_IOMAP=y
 CONFIG_GENERIC_IO=y
+CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
 CONFIG_CRC_CCITT=m
 CONFIG_CRC16=y
-CONFIG_CRC_T10DIF=m
-CONFIG_CRC_ITU_T=m
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=y
 CONFIG_CRC32=y
 # CONFIG_CRC32_SELFTEST is not set
 CONFIG_CRC32_SLICEBY8=y
@@ -4361,20 +4076,24 @@ CONFIG_CRC32_SLICEBY8=y
 # CONFIG_CRC32_SARWATE is not set
 # CONFIG_CRC32_BIT is not set
 CONFIG_CRC7=m
-CONFIG_LIBCRC32C=m
+CONFIG_LIBCRC32C=y
 CONFIG_CRC8=m
 CONFIG_AUDIT_GENERIC=y
+# CONFIG_RANDOM32_SELFTEST is not set
 CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
+CONFIG_ZLIB_DEFLATE=m
 CONFIG_LZO_COMPRESS=y
 CONFIG_LZO_DECOMPRESS=y
+CONFIG_LZ4_COMPRESS=m
+CONFIG_LZ4HC_COMPRESS=m
+CONFIG_LZ4_DECOMPRESS=y
 CONFIG_XZ_DEC=y
-CONFIG_XZ_DEC_X86=y
-CONFIG_XZ_DEC_POWERPC=y
-CONFIG_XZ_DEC_IA64=y
+# CONFIG_XZ_DEC_X86 is not set
+# CONFIG_XZ_DEC_POWERPC is not set
+# CONFIG_XZ_DEC_IA64 is not set
 CONFIG_XZ_DEC_ARM=y
 CONFIG_XZ_DEC_ARMTHUMB=y
-CONFIG_XZ_DEC_SPARC=y
+# CONFIG_XZ_DEC_SPARC is not set
 CONFIG_XZ_DEC_BCJ=y
 # CONFIG_XZ_DEC_TEST is not set
 CONFIG_DECOMPRESS_GZIP=y
@@ -4382,10 +4101,12 @@ CONFIG_DECOMPRESS_BZIP2=y
 CONFIG_DECOMPRESS_LZMA=y
 CONFIG_DECOMPRESS_XZ=y
 CONFIG_DECOMPRESS_LZO=y
+CONFIG_DECOMPRESS_LZ4=y
 CONFIG_TEXTSEARCH=y
 CONFIG_TEXTSEARCH_KMP=m
 CONFIG_TEXTSEARCH_BM=m
 CONFIG_TEXTSEARCH_FSM=m
+CONFIG_ASSOCIATIVE_ARRAY=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
@@ -4393,10 +4114,13 @@ CONFIG_DQL=y
 CONFIG_NLATTR=y
 CONFIG_GENERIC_ATOMIC64=y
 CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
+CONFIG_LRU_CACHE=m
 CONFIG_AVERAGE=y
-CONFIG_CLZ_TAB=y
 CONFIG_CORDIC=m
 # CONFIG_DDR is not set
-CONFIG_MPILIB=m
 CONFIG_OID_REGISTRY=m
+CONFIG_FONT_SUPPORT=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
 # CONFIG_VIRTUALIZATION is not set
index 329d96d5ff88bfc212facc6868f8f7cf2d7fc4da..5869b8818b7d9a72d247bcafe4064995fc5af4ff 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.10.40-ipfire Kernel Configuration
+# Linux/x86 3.14.22 Kernel Configuration
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
@@ -28,6 +28,8 @@ CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
 CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
 CONFIG_ARCH_HIBERNATION_POSSIBLE=y
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
 # CONFIG_ZONE_DMA32 is not set
 # CONFIG_AUDIT_ARCH is not set
 CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
@@ -36,7 +38,6 @@ CONFIG_HAVE_INTEL_TXT=y
 CONFIG_X86_32_SMP=y
 CONFIG_X86_HT=y
 CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
-CONFIG_ARCH_CPU_PROBE_RELEASE=y
 CONFIG_ARCH_SUPPORTS_UPROBES=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 CONFIG_IRQ_WORK=y
@@ -47,6 +48,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y
 #
 CONFIG_INIT_ENV_ARG_LIMIT=32
 CONFIG_CROSS_COMPILE=""
+# CONFIG_COMPILE_TEST is not set
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
 CONFIG_HAVE_KERNEL_GZIP=y
@@ -54,11 +56,13 @@ CONFIG_HAVE_KERNEL_BZIP2=y
 CONFIG_HAVE_KERNEL_LZMA=y
 CONFIG_HAVE_KERNEL_XZ=y
 CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_HAVE_KERNEL_LZ4=y
 # CONFIG_KERNEL_GZIP is not set
 # CONFIG_KERNEL_BZIP2 is not set
 # CONFIG_KERNEL_LZMA is not set
 CONFIG_KERNEL_XZ=y
 # CONFIG_KERNEL_LZO is not set
+# CONFIG_KERNEL_LZ4 is not set
 CONFIG_DEFAULT_HOSTNAME="(none)"
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
@@ -70,13 +74,10 @@ CONFIG_AUDIT=y
 CONFIG_AUDITSYSCALL=y
 CONFIG_AUDIT_WATCH=y
 CONFIG_AUDIT_TREE=y
-CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
-CONFIG_HAVE_GENERIC_HARDIRQS=y
 
 #
 # IRQ subsystem
 #
-CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_IRQ_SHOW=y
 CONFIG_GENERIC_PENDING_IRQ=y
@@ -153,6 +154,7 @@ CONFIG_BLK_CGROUP=y
 CONFIG_NAMESPACES=y
 CONFIG_UTS_NS=y
 CONFIG_IPC_NS=y
+CONFIG_USER_NS=y
 CONFIG_PID_NS=y
 CONFIG_NET_NS=y
 CONFIG_SCHED_AUTOGROUP=y
@@ -165,12 +167,12 @@ CONFIG_RD_BZIP2=y
 CONFIG_RD_LZMA=y
 CONFIG_RD_XZ=y
 CONFIG_RD_LZO=y
+CONFIG_RD_LZ4=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SYSCTL=y
 CONFIG_ANON_INODES=y
 CONFIG_HAVE_UID16=y
 CONFIG_SYSCTL_EXCEPTION_TRACE=y
-CONFIG_HOTPLUG=y
 CONFIG_HAVE_PCSPKR_PLATFORM=y
 CONFIG_EXPERT=y
 CONFIG_UID16=y
@@ -204,6 +206,8 @@ CONFIG_SLUB_DEBUG=y
 # CONFIG_SLAB is not set
 CONFIG_SLUB=y
 # CONFIG_SLOB is not set
+CONFIG_SLUB_CPU_PARTIAL=y
+# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
 # CONFIG_PROFILING is not set
 CONFIG_TRACEPOINTS=y
 CONFIG_HAVE_OPROFILE=y
@@ -222,7 +226,6 @@ CONFIG_HAVE_KPROBES_ON_FTRACE=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_ATTRS=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
-CONFIG_USE_GENERIC_SMP_HELPERS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
@@ -241,8 +244,14 @@ CONFIG_HAVE_CMPXCHG_DOUBLE=y
 CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
+CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR_NONE is not set
+CONFIG_CC_STACKPROTECTOR_REGULAR=y
+# CONFIG_CC_STACKPROTECTOR_STRONG is not set
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
 CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
+CONFIG_HAVE_ARCH_SOFT_DIRTY=y
 CONFIG_MODULES_USE_ELF_REL=y
 CONFIG_CLONE_BACKWARDS=y
 CONFIG_OLD_SIGSUSPEND3=y
@@ -260,7 +269,7 @@ CONFIG_MODULES=y
 # CONFIG_MODULE_FORCE_LOAD is not set
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
+CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_SIG is not set
 CONFIG_STOP_MACHINE=y
@@ -270,12 +279,14 @@ CONFIG_BLK_DEV_BSG=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_THROTTLING=y
+# CONFIG_BLK_CMDLINE_PARSER is not set
 
 #
 # Partition Types
 #
 CONFIG_PARTITION_ADVANCED=y
 # CONFIG_ACORN_PARTITION is not set
+# CONFIG_AIX_PARTITION is not set
 # CONFIG_OSF_PARTITION is not set
 # CONFIG_AMIGA_PARTITION is not set
 # CONFIG_ATARI_PARTITION is not set
@@ -293,6 +304,7 @@ CONFIG_LDM_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 CONFIG_EFI_PARTITION=y
 # CONFIG_SYSV68_PARTITION is not set
+# CONFIG_CMDLINE_PARTITION is not set
 
 #
 # IO Schedulers
@@ -313,6 +325,7 @@ CONFIG_INLINE_READ_UNLOCK=y
 CONFIG_INLINE_READ_UNLOCK_IRQ=y
 CONFIG_INLINE_WRITE_UNLOCK=y
 CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
 CONFIG_MUTEX_SPIN_ON_OWNER=y
 CONFIG_FREEZER=y
 
@@ -325,7 +338,7 @@ CONFIG_X86_MPPARSE=y
 CONFIG_X86_BIGSMP=y
 CONFIG_X86_EXTENDED_PLATFORM=y
 # CONFIG_X86_GOLDFISH is not set
-# CONFIG_X86_WANT_INTEL_MID is not set
+# CONFIG_X86_INTEL_MID is not set
 CONFIG_X86_INTEL_LPSS=y
 # CONFIG_X86_RDC321X is not set
 CONFIG_X86_32_NON_STANDARD=y
@@ -342,6 +355,7 @@ CONFIG_PARAVIRT=y
 # CONFIG_PARAVIRT_SPINLOCKS is not set
 # CONFIG_XEN_PRIVILEGED_GUEST is not set
 CONFIG_KVM_GUEST=y
+# CONFIG_KVM_DEBUG_FS is not set
 # CONFIG_LGUEST_GUEST is not set
 CONFIG_PARAVIRT_TIME_ACCOUNTING=y
 CONFIG_PARAVIRT_CLOCK=y
@@ -407,6 +421,8 @@ CONFIG_X86_MCE_THRESHOLD=y
 # CONFIG_X86_MCE_INJECT is not set
 CONFIG_X86_THERMAL_VECTOR=y
 CONFIG_VM86=y
+CONFIG_X86_16BIT=y
+CONFIG_X86_ESPFIX32=y
 CONFIG_TOSHIBA=m
 CONFIG_I8K=m
 # CONFIG_X86_REBOOTFIXUPS is not set
@@ -414,9 +430,8 @@ CONFIG_MICROCODE=m
 CONFIG_MICROCODE_INTEL=y
 CONFIG_MICROCODE_AMD=y
 CONFIG_MICROCODE_OLD_INTERFACE=y
-CONFIG_MICROCODE_INTEL_LIB=y
-CONFIG_MICROCODE_INTEL_EARLY=y
-CONFIG_MICROCODE_EARLY=y
+# CONFIG_MICROCODE_INTEL_EARLY is not set
+# CONFIG_MICROCODE_AMD_EARLY is not set
 # CONFIG_X86_MSR is not set
 CONFIG_X86_CPUID=y
 # CONFIG_NOHIGHMEM is not set
@@ -464,6 +479,9 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
 CONFIG_CROSS_MEMORY_ATTACH=y
 CONFIG_CLEANCACHE=y
 # CONFIG_FRONTSWAP is not set
+# CONFIG_CMA is not set
+# CONFIG_ZBUD is not set
+# CONFIG_ZSMALLOC is not set
 CONFIG_HIGHPTE=y
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
@@ -480,7 +498,6 @@ CONFIG_X86_SMAP=y
 CONFIG_EFI=y
 CONFIG_EFI_STUB=y
 CONFIG_SECCOMP=y
-CONFIG_CC_STACKPROTECTOR=y
 # CONFIG_HZ_100 is not set
 # CONFIG_HZ_250 is not set
 CONFIG_HZ_300=y
@@ -491,6 +508,7 @@ CONFIG_SCHED_HRTICK=y
 CONFIG_CRASH_DUMP=y
 CONFIG_PHYSICAL_START=0x400000
 CONFIG_RELOCATABLE=y
+# CONFIG_RANDOMIZE_BASE is not set
 CONFIG_X86_NEED_RELOCS=y
 CONFIG_PHYSICAL_ALIGN=0x400000
 CONFIG_HOTPLUG_CPU=y
@@ -504,9 +522,6 @@ CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
 #
 CONFIG_SUSPEND=y
 CONFIG_SUSPEND_FREEZER=y
-CONFIG_HIBERNATE_CALLBACKS=y
-CONFIG_HIBERNATION=y
-CONFIG_PM_STD_PARTITION=""
 CONFIG_PM_SLEEP=y
 CONFIG_PM_SLEEP_SMP=y
 # CONFIG_PM_AUTOSLEEP is not set
@@ -515,19 +530,18 @@ CONFIG_PM_RUNTIME=y
 CONFIG_PM=y
 # CONFIG_PM_DEBUG is not set
 CONFIG_PM_CLK=y
+# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
 CONFIG_ACPI=y
 CONFIG_ACPI_SLEEP=y
 CONFIG_ACPI_PROCFS=y
 # CONFIG_ACPI_PROCFS_POWER is not set
 CONFIG_ACPI_EC_DEBUGFS=m
-# CONFIG_ACPI_PROC_EVENT is not set
 CONFIG_ACPI_AC=y
 CONFIG_ACPI_BATTERY=y
 CONFIG_ACPI_BUTTON=y
 CONFIG_ACPI_VIDEO=m
 CONFIG_ACPI_FAN=y
 CONFIG_ACPI_DOCK=y
-CONFIG_ACPI_I2C=m
 CONFIG_ACPI_PROCESSOR=y
 CONFIG_ACPI_IPMI=m
 CONFIG_ACPI_HOTPLUG_CPU=y
@@ -535,7 +549,6 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
 CONFIG_ACPI_THERMAL=y
 # CONFIG_ACPI_CUSTOM_DSDT is not set
 CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y
-CONFIG_ACPI_BLACKLIST_YEAR=1999
 # CONFIG_ACPI_DEBUG is not set
 CONFIG_ACPI_PCI_SLOT=y
 CONFIG_X86_PM_TIMER=y
@@ -550,6 +563,7 @@ CONFIG_ACPI_APEI_PCIEAER=y
 CONFIG_ACPI_APEI_MEMORY_FAILURE=y
 # CONFIG_ACPI_APEI_EINJ is not set
 # CONFIG_ACPI_APEI_ERST_DEBUG is not set
+CONFIG_ACPI_EXTLOG=m
 CONFIG_SFI=y
 CONFIG_X86_APM_BOOT=y
 CONFIG_APM=y
@@ -563,7 +577,6 @@ CONFIG_APM_CPU_IDLE=y
 # CPU Frequency scaling
 #
 CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
 CONFIG_CPU_FREQ_GOV_COMMON=y
 CONFIG_CPU_FREQ_STAT=m
 CONFIG_CPU_FREQ_STAT_DETAILS=y
@@ -605,6 +618,10 @@ CONFIG_X86_LONGHAUL=m
 #
 CONFIG_X86_SPEEDSTEP_LIB=m
 CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
+
+#
+# CPU Idle
+#
 CONFIG_CPU_IDLE=y
 # CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
 CONFIG_CPU_IDLE_GOV_LADDER=y
@@ -636,7 +653,6 @@ CONFIG_PCIEASPM_DEFAULT=y
 # CONFIG_PCIEASPM_POWERSAVE is not set
 # CONFIG_PCIEASPM_PERFORMANCE is not set
 CONFIG_PCIE_PME=y
-CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_PCI_MSI=y
 # CONFIG_PCI_DEBUG is not set
 # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set
@@ -648,6 +664,10 @@ CONFIG_PCI_IOV=y
 # CONFIG_PCI_PASID is not set
 CONFIG_PCI_IOAPIC=y
 CONFIG_PCI_LABEL=y
+
+#
+# PCI host controller drivers
+#
 CONFIG_ISA_DMA_API=y
 CONFIG_ISA=y
 CONFIG_EISA=y
@@ -691,6 +711,7 @@ CONFIG_HOTPLUG_PCI_ACPI_IBM=m
 # CONFIG_HOTPLUG_PCI_CPCI is not set
 # CONFIG_HOTPLUG_PCI_SHPC is not set
 # CONFIG_RAPIDIO is not set
+CONFIG_X86_SYSFB=y
 
 #
 # Executable file formats / Emulations
@@ -703,7 +724,6 @@ CONFIG_HAVE_AOUT=y
 CONFIG_BINFMT_MISC=y
 CONFIG_COREDUMP=y
 CONFIG_HAVE_ATOMIC_IOMAP=y
-CONFIG_HAVE_TEXT_POKE_SMP=y
 CONFIG_NET=y
 
 #
@@ -740,7 +760,6 @@ CONFIG_IP_MROUTE=y
 CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
 CONFIG_IP_PIMSM_V1=y
 CONFIG_IP_PIMSM_V2=y
-# CONFIG_ARPD is not set
 CONFIG_SYN_COOKIES=y
 CONFIG_NET_IPVTI=m
 CONFIG_INET_AH=m
@@ -773,7 +792,6 @@ CONFIG_DEFAULT_CUBIC=y
 CONFIG_DEFAULT_TCP_CONG="cubic"
 CONFIG_TCP_MD5SIG=y
 CONFIG_IPV6=y
-CONFIG_IPV6_PRIVACY=y
 CONFIG_IPV6_ROUTER_PREF=y
 CONFIG_IPV6_ROUTE_INFO=y
 CONFIG_IPV6_OPTIMISTIC_DAD=y
@@ -787,6 +805,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m
 CONFIG_INET6_XFRM_MODE_TUNNEL=m
 CONFIG_INET6_XFRM_MODE_BEET=m
 CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_VTI=m
 CONFIG_IPV6_SIT=m
 CONFIG_IPV6_SIT_6RD=y
 CONFIG_IPV6_NDISC_NODETYPE=y
@@ -850,7 +869,22 @@ CONFIG_NF_NAT_FTP=m
 CONFIG_NF_NAT_IRC=m
 CONFIG_NF_NAT_SIP=m
 CONFIG_NF_NAT_TFTP=m
-CONFIG_NETFILTER_TPROXY=m
+CONFIG_NETFILTER_SYNPROXY=m
+CONFIG_NF_TABLES=m
+CONFIG_NF_TABLES_INET=m
+CONFIG_NFT_EXTHDR=m
+CONFIG_NFT_META=m
+CONFIG_NFT_CT=m
+CONFIG_NFT_RBTREE=m
+CONFIG_NFT_HASH=m
+CONFIG_NFT_COUNTER=m
+CONFIG_NFT_LOG=m
+CONFIG_NFT_LIMIT=m
+CONFIG_NFT_NAT=m
+CONFIG_NFT_QUEUE=m
+CONFIG_NFT_REJECT=m
+CONFIG_NFT_REJECT_INET=m
+CONFIG_NFT_COMPAT=m
 CONFIG_NETFILTER_XTABLES=y
 
 #
@@ -895,6 +929,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 #
 CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
 CONFIG_NETFILTER_XT_MATCH_BPF=m
+CONFIG_NETFILTER_XT_MATCH_CGROUP=m
 CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
@@ -911,8 +946,10 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m
 CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 CONFIG_NETFILTER_XT_MATCH_HELPER=m
 CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
 CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
 # CONFIG_NETFILTER_XT_MATCH_IPVS is not set
+CONFIG_NETFILTER_XT_MATCH_L2TP=m
 CONFIG_NETFILTER_XT_MATCH_LAYER7=m
 # CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
 CONFIG_NETFILTER_XT_MATCH_LENGTH=m
@@ -947,7 +984,9 @@ CONFIG_IP_SET_HASH_IP=m
 CONFIG_IP_SET_HASH_IPPORT=m
 CONFIG_IP_SET_HASH_IPPORTIP=m
 CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_NETPORTNET=m
 CONFIG_IP_SET_HASH_NET=m
+CONFIG_IP_SET_HASH_NETNET=m
 CONFIG_IP_SET_HASH_NETPORT=m
 CONFIG_IP_SET_HASH_NETIFACE=m
 CONFIG_IP_SET_LIST_SET=m
@@ -998,6 +1037,11 @@ CONFIG_IP_VS_PE_SIP=m
 CONFIG_NF_DEFRAG_IPV4=y
 CONFIG_NF_CONNTRACK_IPV4=y
 # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_TABLES_IPV4=m
+CONFIG_NFT_CHAIN_ROUTE_IPV4=m
+CONFIG_NFT_CHAIN_NAT_IPV4=m
+CONFIG_NFT_REJECT_IPV4=m
+CONFIG_NF_TABLES_ARP=m
 CONFIG_IP_NF_IPTABLES=y
 CONFIG_IP_NF_MATCH_AH=m
 CONFIG_IP_NF_MATCH_ECN=m
@@ -1005,6 +1049,7 @@ CONFIG_IP_NF_MATCH_RPFILTER=m
 CONFIG_IP_NF_MATCH_TTL=m
 CONFIG_IP_NF_FILTER=m
 CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_SYNPROXY=m
 # CONFIG_IP_NF_TARGET_ULOG is not set
 CONFIG_NF_NAT_IPV4=m
 CONFIG_IP_NF_TARGET_MASQUERADE=m
@@ -1030,6 +1075,10 @@ CONFIG_IP_NF_MATCH_IPP2P=m
 #
 CONFIG_NF_DEFRAG_IPV6=y
 CONFIG_NF_CONNTRACK_IPV6=y
+CONFIG_NF_TABLES_IPV6=m
+CONFIG_NFT_CHAIN_ROUTE_IPV6=m
+CONFIG_NFT_CHAIN_NAT_IPV6=m
+CONFIG_NFT_REJECT_IPV6=m
 CONFIG_IP6_NF_IPTABLES=y
 CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
@@ -1043,12 +1092,14 @@ CONFIG_IP6_NF_MATCH_RT=m
 CONFIG_IP6_NF_TARGET_HL=m
 CONFIG_IP6_NF_FILTER=m
 CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_TARGET_SYNPROXY=m
 CONFIG_IP6_NF_MANGLE=m
 CONFIG_IP6_NF_RAW=m
 CONFIG_IP6_NF_SECURITY=m
 CONFIG_NF_NAT_IPV6=m
 CONFIG_IP6_NF_TARGET_MASQUERADE=m
 CONFIG_IP6_NF_TARGET_NPT=m
+CONFIG_NF_TABLES_BRIDGE=m
 CONFIG_BRIDGE_NF_EBTABLES=m
 CONFIG_BRIDGE_EBT_BROUTE=m
 CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -1073,7 +1124,6 @@ CONFIG_BRIDGE_EBT_LOG=m
 CONFIG_BRIDGE_EBT_NFLOG=m
 # CONFIG_IP_DCCP is not set
 CONFIG_IP_SCTP=m
-# CONFIG_SCTP_DBG_MSG is not set
 # CONFIG_SCTP_DBG_OBJCNT is not set
 # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
 CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
@@ -1115,6 +1165,7 @@ CONFIG_LLC=y
 # CONFIG_LAPB is not set
 # CONFIG_PHONET is not set
 # CONFIG_IEEE802154 is not set
+CONFIG_6LOWPAN_IPHC=m
 CONFIG_NET_SCHED=y
 
 #
@@ -1140,6 +1191,8 @@ CONFIG_NET_SCH_CHOKE=m
 CONFIG_NET_SCH_QFQ=m
 CONFIG_NET_SCH_CODEL=m
 CONFIG_NET_SCH_FQ_CODEL=m
+CONFIG_NET_SCH_FQ=m
+CONFIG_NET_SCH_HHF=m
 CONFIG_NET_SCH_PIE=m
 CONFIG_NET_SCH_INGRESS=m
 CONFIG_NET_SCH_PLUG=m
@@ -1159,6 +1212,7 @@ CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
 CONFIG_NET_CLS_FLOW=m
 CONFIG_NET_CLS_CGROUP=m
+CONFIG_NET_CLS_BPF=m
 CONFIG_NET_EMATCH=y
 CONFIG_NET_EMATCH_STACK=32
 CONFIG_NET_EMATCH_CMP=m
@@ -1188,15 +1242,22 @@ CONFIG_BATMAN_ADV_DAT=y
 CONFIG_BATMAN_ADV_NC=y
 # CONFIG_BATMAN_ADV_DEBUG is not set
 CONFIG_OPENVSWITCH=m
+CONFIG_OPENVSWITCH_GRE=y
+CONFIG_OPENVSWITCH_VXLAN=y
 CONFIG_VSOCKETS=m
 CONFIG_VMWARE_VMCI_VSOCKETS=m
 CONFIG_NETLINK_MMAP=y
 CONFIG_NETLINK_DIAG=m
+CONFIG_NET_MPLS_GSO=m
+CONFIG_HSR=m
 CONFIG_RPS=y
 CONFIG_RFS_ACCEL=y
 CONFIG_XPS=y
-CONFIG_NETPRIO_CGROUP=m
+CONFIG_CGROUP_NET_PRIO=m
+CONFIG_CGROUP_NET_CLASSID=y
+CONFIG_NET_RX_BUSY_POLL=y
 CONFIG_BQL=y
+CONFIG_NET_FLOW_LIMIT=y
 
 #
 # Network testing
@@ -1306,7 +1367,6 @@ CONFIG_REGMAP=y
 CONFIG_REGMAP_I2C=m
 CONFIG_REGMAP_IRQ=y
 CONFIG_DMA_SHARED_BUFFER=y
-# CONFIG_CMA is not set
 
 #
 # Bus devices
@@ -1314,6 +1374,7 @@ CONFIG_DMA_SHARED_BUFFER=y
 CONFIG_CONNECTOR=y
 CONFIG_PROC_EVENTS=y
 # CONFIG_MTD is not set
+CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
 CONFIG_PARPORT_SERIAL=m
@@ -1335,10 +1396,10 @@ CONFIG_PNPBIOS=y
 # CONFIG_PNPBIOS_PROC_FS is not set
 CONFIG_PNPACPI=y
 CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_NULL_BLK is not set
 CONFIG_BLK_DEV_FD=m
 # CONFIG_PARIDE is not set
 CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
-CONFIG_BLK_CPQ_DA=m
 CONFIG_BLK_CPQ_CISS_DA=m
 # CONFIG_CISS_SCSI_TAPE is not set
 CONFIG_BLK_DEV_DAC960=m
@@ -1372,7 +1433,6 @@ CONFIG_SENSORS_LIS3LV02D=m
 CONFIG_DUMMY_IRQ=m
 CONFIG_IBM_ASM=m
 # CONFIG_PHANTOM is not set
-# CONFIG_INTEL_MID_PTI is not set
 # CONFIG_SGI_IOC4 is not set
 CONFIG_TIFM_CORE=m
 CONFIG_TIFM_7XX1=m
@@ -1424,6 +1484,14 @@ CONFIG_ALTERA_STAPL=m
 # CONFIG_INTEL_MEI is not set
 # CONFIG_INTEL_MEI_ME is not set
 CONFIG_VMWARE_VMCI=m
+
+#
+# Intel MIC Host Driver
+#
+
+#
+# Intel MIC Card Driver
+#
 CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
@@ -1491,7 +1559,6 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=5000
 CONFIG_AIC7XXX_DEBUG_ENABLE=y
 CONFIG_AIC7XXX_DEBUG_MASK=0
 CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
-# CONFIG_SCSI_AIC7XXX_OLD is not set
 CONFIG_SCSI_AIC79XX=m
 CONFIG_AIC79XX_CMDS_PER_DEVICE=32
 CONFIG_AIC79XX_RESET_DELAY_MS=4000
@@ -1508,6 +1575,7 @@ CONFIG_SCSI_DPT_I2O=m
 CONFIG_SCSI_ADVANSYS=m
 CONFIG_SCSI_IN2000=m
 CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ESAS2R=m
 CONFIG_MEGARAID_NEWGEN=y
 CONFIG_MEGARAID_MM=m
 CONFIG_MEGARAID_MAILBOX=m
@@ -1633,6 +1701,7 @@ CONFIG_SATA_HIGHBANK=m
 CONFIG_SATA_MV=m
 CONFIG_SATA_NV=m
 CONFIG_SATA_PROMISE=m
+CONFIG_SATA_RCAR=m
 CONFIG_SATA_SIL=m
 CONFIG_SATA_SIS=m
 CONFIG_SATA_SVW=m
@@ -1716,14 +1785,14 @@ CONFIG_MD_MULTIPATH=m
 CONFIG_MD_FAULTY=m
 CONFIG_BCACHE=m
 # CONFIG_BCACHE_DEBUG is not set
-# CONFIG_BCACHE_EDEBUG is not set
 # CONFIG_BCACHE_CLOSURES_DEBUG is not set
 CONFIG_BLK_DEV_DM_BUILTIN=y
 CONFIG_BLK_DEV_DM=y
 # CONFIG_DM_DEBUG is not set
-CONFIG_DM_BUFIO=m
+CONFIG_DM_BUFIO=y
 CONFIG_DM_BIO_PRISON=m
 CONFIG_DM_PERSISTENT_DATA=m
+# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
 CONFIG_DM_CRYPT=m
 CONFIG_DM_SNAPSHOT=y
 # CONFIG_DM_THIN_PROVISIONING is not set
@@ -1731,8 +1800,8 @@ CONFIG_DM_CACHE=m
 CONFIG_DM_CACHE_MQ=m
 CONFIG_DM_CACHE_CLEANER=m
 CONFIG_DM_MIRROR=y
-CONFIG_DM_RAID=m
 CONFIG_DM_LOG_USERSPACE=m
+CONFIG_DM_RAID=m
 CONFIG_DM_ZERO=y
 CONFIG_DM_MULTIPATH=m
 CONFIG_DM_MULTIPATH_QL=m
@@ -1741,6 +1810,7 @@ CONFIG_DM_MULTIPATH_ST=m
 CONFIG_DM_UEVENT=y
 # CONFIG_DM_FLAKEY is not set
 CONFIG_DM_VERITY=m
+CONFIG_DM_SWITCH=m
 # CONFIG_TARGET_CORE is not set
 CONFIG_FUSION=y
 CONFIG_FUSION_SPI=m
@@ -1770,12 +1840,12 @@ CONFIG_I2O_PROC=m
 CONFIG_MACINTOSH_DRIVERS=y
 # CONFIG_MAC_EMUMOUSEBTN is not set
 CONFIG_NETDEVICES=y
+CONFIG_MII=m
 CONFIG_NET_CORE=y
 CONFIG_BONDING=m
 CONFIG_DUMMY=m
 # CONFIG_EQUALIZER is not set
 # CONFIG_NET_FC is not set
-CONFIG_MII=m
 CONFIG_IFB=m
 # CONFIG_NET_TEAM is not set
 CONFIG_MACVLAN=m
@@ -1795,6 +1865,7 @@ CONFIG_IMQ_NUM_DEVS=2
 CONFIG_TUN=m
 CONFIG_VETH=m
 CONFIG_VIRTIO_NET=m
+CONFIG_NLMON=m
 CONFIG_SUNGEM_PHY=m
 # CONFIG_ARCNET is not set
 CONFIG_ATM_DRIVERS=y
@@ -1833,6 +1904,7 @@ CONFIG_ATM_SOLOS=m
 #
 CONFIG_VHOST_NET=m
 CONFIG_VHOST_RING=m
+CONFIG_VHOST=m
 
 #
 # Distributed Switch Architecture drivers
@@ -1862,6 +1934,7 @@ CONFIG_LANCE=m
 CONFIG_PCNET32=m
 CONFIG_PCMCIA_NMCLAN=m
 CONFIG_NI65=m
+CONFIG_NET_VENDOR_ARC=y
 CONFIG_NET_VENDOR_ATHEROS=y
 CONFIG_ATL2=m
 CONFIG_ATL1=m
@@ -1937,6 +2010,9 @@ CONFIG_IXGBE=m
 CONFIG_IXGBE_HWMON=y
 CONFIG_IXGBE_DCA=y
 CONFIG_IXGBEVF=m
+CONFIG_I40E=m
+CONFIG_I40E_VXLAN=y
+CONFIG_I40EVF=m
 CONFIG_NET_VENDOR_I825XX=y
 CONFIG_IP1000=m
 CONFIG_JME=m
@@ -1951,6 +2027,7 @@ CONFIG_NET_VENDOR_MELLANOX=y
 CONFIG_MLX4_EN=m
 CONFIG_MLX4_CORE=m
 CONFIG_MLX4_DEBUG=y
+# CONFIG_MLX5_CORE is not set
 CONFIG_NET_VENDOR_MICREL=y
 CONFIG_KS8842=m
 CONFIG_KS8851_MLL=m
@@ -1990,6 +2067,7 @@ CONFIG_8139TOO=m
 CONFIG_8139TOO_8129=y
 # CONFIG_8139_OLD_RX_RESET is not set
 CONFIG_R8169=m
+CONFIG_SH_ETH=m
 CONFIG_NET_VENDOR_RDC=y
 CONFIG_R6040=m
 CONFIG_NET_VENDOR_SEEQ=y
@@ -2005,6 +2083,8 @@ CONFIG_NET_VENDOR_SMSC=y
 CONFIG_SMC9194=m
 CONFIG_PCMCIA_SMC91C92=m
 CONFIG_EPIC100=m
+CONFIG_SMSC911X=m
+# CONFIG_SMSC911X_ARCH_HOOKS is not set
 CONFIG_SMSC9420=m
 CONFIG_NET_VENDOR_STMICRO=y
 CONFIG_STMMAC_ETH=m
@@ -2091,8 +2171,11 @@ CONFIG_USB_NET_AX88179_178A=m
 CONFIG_USB_NET_CDCETHER=m
 CONFIG_USB_NET_CDC_EEM=m
 CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_HUAWEI_CDC_NCM=m
 CONFIG_USB_NET_CDC_MBIM=m
 CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9700=m
+CONFIG_USB_NET_SR9800=m
 CONFIG_USB_NET_SMSC75XX=m
 CONFIG_USB_NET_SMSC95XX=m
 CONFIG_USB_NET_GL620A=m
@@ -2152,26 +2235,39 @@ CONFIG_ATH9K=m
 CONFIG_ATH9K_PCI=y
 CONFIG_ATH9K_AHB=y
 # CONFIG_ATH9K_DEBUGFS is not set
+# CONFIG_ATH9K_WOW is not set
 # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
+CONFIG_ATH9K_RFKILL=y
 CONFIG_ATH9K_HTC=m
 # CONFIG_ATH9K_HTC_DEBUGFS is not set
 CONFIG_CARL9170=m
 CONFIG_CARL9170_LEDS=y
 CONFIG_CARL9170_WPC=y
-# CONFIG_CARL9170_HWRNG is not set
+CONFIG_CARL9170_HWRNG=y
 # CONFIG_ATH6KL is not set
 CONFIG_AR5523=m
 CONFIG_WIL6210=m
 CONFIG_WIL6210_ISR_COR=y
+CONFIG_WIL6210_TRACING=y
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+# CONFIG_ATH10K_DEBUG is not set
+# CONFIG_ATH10K_DEBUGFS is not set
+# CONFIG_ATH10K_TRACING is not set
+CONFIG_WCN36XX=m
+# CONFIG_WCN36XX_DEBUGFS is not set
 CONFIG_B43=m
+CONFIG_B43_BCMA=y
 CONFIG_B43_SSB=y
 CONFIG_B43_PCI_AUTOSELECT=y
 CONFIG_B43_PCICORE_AUTOSELECT=y
 # CONFIG_B43_PCMCIA is not set
 CONFIG_B43_SDIO=y
+CONFIG_B43_BCMA_PIO=y
 CONFIG_B43_PIO=y
 CONFIG_B43_PHY_N=y
 CONFIG_B43_PHY_LP=y
+CONFIG_B43_PHY_HT=y
 CONFIG_B43_LEDS=y
 CONFIG_B43_HWRNG=y
 # CONFIG_B43_DEBUG is not set
@@ -2187,6 +2283,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
 # CONFIG_B43LEGACY_DMA_MODE is not set
 # CONFIG_B43LEGACY_PIO_MODE is not set
 CONFIG_BRCMUTIL=m
+CONFIG_BRCMSMAC=m
 CONFIG_BRCMFMAC=m
 CONFIG_BRCMFMAC_SDIO=y
 # CONFIG_BRCMFMAC_USB is not set
@@ -2219,7 +2316,6 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y
 #
 # CONFIG_IWLWIFI_DEBUG is not set
 # CONFIG_IWLWIFI_DEVICE_TRACING is not set
-CONFIG_IWLWIFI_P2P=y
 CONFIG_IWLEGACY=m
 CONFIG_IWL4965=m
 CONFIG_IWL3945=m
@@ -2261,10 +2357,12 @@ CONFIG_RT73USB=m
 CONFIG_RT2800USB=m
 CONFIG_RT2800USB_RT33XX=y
 CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_RT3573=y
 CONFIG_RT2800USB_RT53XX=y
 CONFIG_RT2800USB_RT55XX=y
 CONFIG_RT2800USB_UNKNOWN=y
 CONFIG_RT2800_LIB=m
+CONFIG_RT2800_LIB_MMIO=m
 CONFIG_RT2X00_LIB_MMIO=m
 CONFIG_RT2X00_LIB_PCI=m
 CONFIG_RT2X00_LIB_USB=m
@@ -2273,14 +2371,17 @@ CONFIG_RT2X00_LIB_FIRMWARE=y
 CONFIG_RT2X00_LIB_CRYPTO=y
 CONFIG_RT2X00_LIB_LEDS=y
 # CONFIG_RT2X00_DEBUG is not set
-CONFIG_RTLWIFI=m
-# CONFIG_RTLWIFI_DEBUG is not set
+CONFIG_RTL_CARDS=m
 CONFIG_RTL8192CE=m
 CONFIG_RTL8192SE=m
 CONFIG_RTL8192DE=m
 CONFIG_RTL8723AE=m
 CONFIG_RTL8188EE=m
 CONFIG_RTL8192CU=m
+CONFIG_RTLWIFI=m
+CONFIG_RTLWIFI_PCI=m
+CONFIG_RTLWIFI_USB=m
+# CONFIG_RTLWIFI_DEBUG is not set
 CONFIG_RTL8192C_COMMON=m
 CONFIG_WL_TI=y
 CONFIG_WL1251=m
@@ -2296,6 +2397,8 @@ CONFIG_MWIFIEX=m
 CONFIG_MWIFIEX_SDIO=m
 CONFIG_MWIFIEX_PCIE=m
 CONFIG_MWIFIEX_USB=m
+CONFIG_CW1200=m
+CONFIG_CW1200_WLAN_SDIO=m
 
 #
 # Enable WiMAX (Networking options) to see the WiMAX drivers
@@ -2398,8 +2501,8 @@ CONFIG_HISAX_FRITZ_PCIPNP=m
 CONFIG_ISDN_CAPI=m
 CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
 CONFIG_CAPI_TRACE=y
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPIDRV=m
 
 #
@@ -2544,11 +2647,13 @@ CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 # CONFIG_INPUT_ADXL34X is not set
 # CONFIG_INPUT_IMS_PCU is not set
 # CONFIG_INPUT_CMA3000 is not set
+CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
 
 #
 # Hardware I/O ports
 #
 CONFIG_SERIO=y
+CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
 CONFIG_SERIO_I8042=y
 CONFIG_SERIO_SERPORT=y
 # CONFIG_SERIO_CT82C710 is not set
@@ -2559,6 +2664,7 @@ CONFIG_SERIO_RAW=m
 CONFIG_SERIO_ALTERA_PS2=m
 # CONFIG_SERIO_PS2MULT is not set
 CONFIG_SERIO_ARC_PS2=m
+CONFIG_HYPERV_KEYBOARD=m
 # CONFIG_GAMEPORT is not set
 
 #
@@ -2589,7 +2695,6 @@ CONFIG_N_HDLC=m
 CONFIG_N_GSM=m
 # CONFIG_TRACE_SINK is not set
 # CONFIG_DEVKMEM is not set
-# CONFIG_STALDRV is not set
 
 #
 # Serial drivers
@@ -2632,6 +2737,7 @@ CONFIG_SERIAL_ARC=m
 CONFIG_SERIAL_ARC_NR_PORTS=1
 CONFIG_SERIAL_RP2=m
 CONFIG_SERIAL_RP2_NR_UARTS=32
+CONFIG_SERIAL_FSL_LPUART=m
 # CONFIG_TTY_PRINTK is not set
 CONFIG_PRINTER=m
 CONFIG_LP_CONSOLE=y
@@ -2682,7 +2788,15 @@ CONFIG_I2C=m
 CONFIG_I2C_BOARDINFO=y
 CONFIG_I2C_COMPAT=y
 CONFIG_I2C_CHARDEV=m
-# CONFIG_I2C_MUX is not set
+CONFIG_I2C_MUX=m
+
+#
+# Multiplexer I2C Chip support
+#
+CONFIG_I2C_MUX_GPIO=m
+CONFIG_I2C_MUX_PCA9541=m
+CONFIG_I2C_MUX_PCA954x=m
+CONFIG_I2C_MUX_PINCTRL=m
 CONFIG_I2C_HELPER_AUTO=y
 CONFIG_I2C_SMBUS=m
 CONFIG_I2C_ALGOBIT=m
@@ -2727,7 +2841,6 @@ CONFIG_I2C_DESIGNWARE_PLATFORM=m
 # CONFIG_I2C_DESIGNWARE_PCI is not set
 # CONFIG_I2C_EG20T is not set
 # CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_INTEL_MID is not set
 # CONFIG_I2C_OCORES is not set
 CONFIG_I2C_PCA_PLATFORM=m
 # CONFIG_I2C_PXA_PCI is not set
@@ -2740,6 +2853,7 @@ CONFIG_I2C_SIMTEC=m
 CONFIG_I2C_DIOLAN_U2C=m
 CONFIG_I2C_PARPORT=m
 CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_ROBOTFUZZ_OSIF=m
 # CONFIG_I2C_TAOS_EVM is not set
 CONFIG_I2C_TINY_USB=m
 CONFIG_I2C_VIPERBOARD=m
@@ -2754,11 +2868,6 @@ CONFIG_SCx200_ACB=m
 # CONFIG_I2C_DEBUG_ALGO is not set
 # CONFIG_I2C_DEBUG_BUS is not set
 # CONFIG_SPI is not set
-
-#
-# Qualcomm MSM SSBI bus support
-#
-# CONFIG_SSBI is not set
 CONFIG_HSI=m
 CONFIG_HSI_BOARDINFO=y
 
@@ -2794,9 +2903,18 @@ CONFIG_PTP_1588_CLOCK=m
 # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
 #
 CONFIG_PTP_1588_CLOCK_PCH=m
+CONFIG_PINCTRL=y
+
+#
+# Pin controllers
+#
+# CONFIG_PINMUX is not set
+# CONFIG_PINCONF is not set
+# CONFIG_DEBUG_PINCTRL is not set
+CONFIG_PINCTRL_BAYTRAIL=y
 CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
-CONFIG_GPIO_DEVRES=y
 CONFIG_GPIOLIB=y
+CONFIG_GPIO_DEVRES=y
 CONFIG_GPIO_ACPI=y
 # CONFIG_DEBUG_GPIO is not set
 CONFIG_GPIO_SYSFS=y
@@ -2806,6 +2924,8 @@ CONFIG_GPIO_SYSFS=y
 #
 # CONFIG_GPIO_GENERIC_PLATFORM is not set
 # CONFIG_GPIO_IT8761E is not set
+# CONFIG_GPIO_F7188X is not set
+# CONFIG_GPIO_SCH311X is not set
 CONFIG_GPIO_TS5500=m
 CONFIG_GPIO_SCH=m
 CONFIG_GPIO_ICH=m
@@ -2826,7 +2946,7 @@ CONFIG_GPIO_ICH=m
 #
 CONFIG_GPIO_CS5535=m
 # CONFIG_GPIO_AMD8111 is not set
-# CONFIG_GPIO_LANGWELL is not set
+# CONFIG_GPIO_INTEL_MID is not set
 # CONFIG_GPIO_PCH is not set
 # CONFIG_GPIO_ML_IOH is not set
 # CONFIG_GPIO_RDC321X is not set
@@ -2834,12 +2954,15 @@ CONFIG_GPIO_CS5535=m
 #
 # SPI GPIO expanders:
 #
-# CONFIG_GPIO_MCP23S08 is not set
 
 #
 # AC97 GPIO expanders:
 #
 
+#
+# LPC GPIO expanders:
+#
+
 #
 # MODULbus GPIO expanders:
 #
@@ -2890,12 +3013,14 @@ CONFIG_GENERIC_ADC_BATTERY=m
 # CONFIG_BATTERY_BQ27x00 is not set
 # CONFIG_BATTERY_MAX17040 is not set
 # CONFIG_BATTERY_MAX17042 is not set
+# CONFIG_CHARGER_ISP1704 is not set
 # CONFIG_CHARGER_MAX8903 is not set
 # CONFIG_CHARGER_LP8727 is not set
 # CONFIG_CHARGER_GPIO is not set
 # CONFIG_CHARGER_BQ2415X is not set
+# CONFIG_CHARGER_BQ24190 is not set
+# CONFIG_CHARGER_BQ24735 is not set
 # CONFIG_CHARGER_SMB347 is not set
-# CONFIG_BATTERY_GOLDFISH is not set
 CONFIG_POWER_RESET=y
 CONFIG_POWER_AVS=y
 CONFIG_HWMON=y
@@ -2935,10 +3060,12 @@ CONFIG_SENSORS_F71882FG=m
 CONFIG_SENSORS_F75375S=m
 CONFIG_SENSORS_FSCHMD=m
 CONFIG_SENSORS_G760A=m
+CONFIG_SENSORS_G762=m
 CONFIG_SENSORS_GL518SM=m
 CONFIG_SENSORS_GL520SM=m
 # CONFIG_SENSORS_GPIO_FAN is not set
 CONFIG_SENSORS_HIH6130=m
+CONFIG_SENSORS_HTU21=m
 CONFIG_SENSORS_CORETEMP=m
 CONFIG_SENSORS_IBMAEM=m
 CONFIG_SENSORS_IBMPEX=m
@@ -3042,9 +3169,14 @@ CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
 CONFIG_THERMAL_GOV_FAIR_SHARE=y
 CONFIG_THERMAL_GOV_STEP_WISE=y
 CONFIG_THERMAL_GOV_USER_SPACE=y
-CONFIG_CPU_THERMAL=y
 CONFIG_THERMAL_EMULATION=y
 CONFIG_INTEL_POWERCLAMP=m
+CONFIG_X86_PKG_TEMP_THERMAL=m
+CONFIG_ACPI_INT3403_THERMAL=m
+
+#
+# Texas Instruments thermal drivers
+#
 CONFIG_WATCHDOG=y
 CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_NOWAYOUT=y
@@ -3053,6 +3185,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
 # Watchdog Device Drivers
 #
 CONFIG_SOFT_WATCHDOG=m
+CONFIG_DW_WATCHDOG=m
 CONFIG_RETU_WATCHDOG=m
 CONFIG_ACQUIRE_WDT=m
 CONFIG_ADVANTECH_WDT=m
@@ -3093,6 +3226,7 @@ CONFIG_W83877F_WDT=m
 CONFIG_W83977F_WDT=m
 CONFIG_MACHZ_WDT=m
 CONFIG_SBC_EPX_C3_WATCHDOG=m
+CONFIG_MEN_A21_WDT=m
 
 #
 # ISA-based Watchdog Cards
@@ -3135,7 +3269,14 @@ CONFIG_BCMA_POSSIBLE=y
 #
 # Broadcom specific AMBA
 #
-# CONFIG_BCMA is not set
+CONFIG_BCMA=m
+CONFIG_BCMA_BLOCKIO=y
+CONFIG_BCMA_HOST_PCI_POSSIBLE=y
+CONFIG_BCMA_HOST_PCI=y
+CONFIG_BCMA_HOST_SOC=y
+CONFIG_BCMA_DRIVER_GMAC_CMN=y
+CONFIG_BCMA_DRIVER_GPIO=y
+# CONFIG_BCMA_DEBUG is not set
 
 #
 # Multifunction device drivers
@@ -3148,6 +3289,7 @@ CONFIG_MFD_CS5535=m
 CONFIG_LPC_ICH=m
 CONFIG_LPC_SCH=m
 # CONFIG_MFD_JANZ_CMODIO is not set
+# CONFIG_MFD_KEMPLD is not set
 CONFIG_MFD_VIPERBOARD=m
 CONFIG_MFD_RETU=m
 # CONFIG_MFD_PCF50633 is not set
@@ -3160,6 +3302,7 @@ CONFIG_MFD_SM501_GPIO=y
 # CONFIG_ABX500_CORE is not set
 # CONFIG_MFD_SYSCON is not set
 # CONFIG_MFD_TI_AM335X_TSCADC is not set
+# CONFIG_MFD_LP3943 is not set
 # CONFIG_TPS6105X is not set
 # CONFIG_TPS65010 is not set
 # CONFIG_TPS6507X is not set
@@ -3199,7 +3342,6 @@ CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_MEMOPS=m
 CONFIG_VIDEOBUF2_DMA_CONTIG=m
 CONFIG_VIDEOBUF2_VMALLOC=m
-CONFIG_VIDEO_V4L2_INT_DEVICE=m
 CONFIG_DVB_CORE=m
 CONFIG_DVB_NET=y
 CONFIG_TTPCI_EEPROM=m
@@ -3282,6 +3424,7 @@ CONFIG_USB_GSPCA_SQ905=m
 CONFIG_USB_GSPCA_SQ905C=m
 CONFIG_USB_GSPCA_SQ930X=m
 CONFIG_USB_GSPCA_STK014=m
+CONFIG_USB_GSPCA_STK1135=m
 CONFIG_USB_GSPCA_STV0680=m
 CONFIG_USB_GSPCA_SUNPLUS=m
 CONFIG_USB_GSPCA_T613=m
@@ -3298,7 +3441,7 @@ CONFIG_VIDEO_CPIA2=m
 CONFIG_USB_ZR364XX=m
 CONFIG_USB_STKWEBCAM=m
 CONFIG_USB_S2255=m
-CONFIG_USB_SN9C102=m
+CONFIG_VIDEO_USBTV=m
 
 #
 # Analog TV USB devices
@@ -3310,8 +3453,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_HDPVR=m
 CONFIG_VIDEO_TLG2300=m
 CONFIG_VIDEO_USBVISION=m
-CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_STK1160_COMMON=m
 CONFIG_VIDEO_STK1160_AC97=y
+CONFIG_VIDEO_STK1160=m
 
 #
 # Analog/digital TV USB devices
@@ -3380,6 +3524,7 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m
 # Webcam, TV (analog/digital) USB devices
 #
 CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_V4L2=m
 CONFIG_VIDEO_EM28XX_ALSA=m
 CONFIG_VIDEO_EM28XX_DVB=m
 CONFIG_VIDEO_EM28XX_RC=m
@@ -3421,6 +3566,7 @@ CONFIG_VIDEO_CX88=m
 CONFIG_VIDEO_CX88_ALSA=m
 CONFIG_VIDEO_CX88_BLACKBIRD=m
 CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_ENABLE_VP3054=y
 CONFIG_VIDEO_CX88_VP3054=m
 CONFIG_VIDEO_CX88_MPEG=m
 CONFIG_VIDEO_BT848=m
@@ -3456,12 +3602,15 @@ CONFIG_VIDEO_CAFE_CCIC=m
 # CONFIG_VIDEO_VIA_CAMERA is not set
 CONFIG_VIDEO_TIMBERDALE=m
 CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_SCALE_CROP=m
 CONFIG_SOC_CAMERA_PLATFORM=m
+CONFIG_VIDEO_RCAR_VIN=m
 CONFIG_VIDEO_SH_MOBILE_CSI2=m
 CONFIG_VIDEO_SH_MOBILE_CEU=m
 CONFIG_V4L_MEM2MEM_DRIVERS=y
 CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
 CONFIG_VIDEO_SH_VEU=m
+CONFIG_VIDEO_RENESAS_VSP1=m
 # CONFIG_V4L_TEST_DRIVERS is not set
 
 #
@@ -3489,7 +3638,6 @@ CONFIG_VIDEO_SAA7146=m
 CONFIG_VIDEO_SAA7146_VV=m
 CONFIG_SMS_SIANO_MDTV=m
 CONFIG_SMS_SIANO_RC=y
-# CONFIG_SMS_SIANO_DEBUGFS is not set
 
 #
 # Media ancillary drivers (tuners, sensors, i2c, frontends)
@@ -3562,7 +3710,12 @@ CONFIG_VIDEO_UPD64031A=m
 CONFIG_VIDEO_UPD64083=m
 
 #
-# Miscelaneous helper chips
+# Audio/Video compression chips
+#
+CONFIG_VIDEO_SAA6752HS=m
+
+#
+# Miscellaneous helper chips
 #
 CONFIG_VIDEO_M52790=m
 
@@ -3613,6 +3766,7 @@ CONFIG_MEDIA_TUNER_FC0013=m
 CONFIG_MEDIA_TUNER_TDA18212=m
 CONFIG_MEDIA_TUNER_E4000=m
 CONFIG_MEDIA_TUNER_FC2580=m
+CONFIG_MEDIA_TUNER_M88TS2022=m
 CONFIG_MEDIA_TUNER_TUA9001=m
 CONFIG_MEDIA_TUNER_IT913X=m
 CONFIG_MEDIA_TUNER_R820T=m
@@ -3624,6 +3778,7 @@ CONFIG_DVB_STB0899=m
 CONFIG_DVB_STB6100=m
 CONFIG_DVB_STV090x=m
 CONFIG_DVB_STV6110x=m
+CONFIG_DVB_M88DS3103=m
 
 #
 # Multistandard (cable + terrestrial) frontends
@@ -3654,8 +3809,7 @@ CONFIG_DVB_TUNER_CX24113=m
 CONFIG_DVB_TDA826X=m
 CONFIG_DVB_TUA6100=m
 CONFIG_DVB_CX24116=m
-CONFIG_DVB_M88DS3103=m
-CONFIG_DVB_M88DC2800=m
+CONFIG_DVB_CX24117=m
 CONFIG_DVB_SI21XX=m
 CONFIG_DVB_TS2020=m
 CONFIG_DVB_DS3000=m
@@ -3737,6 +3891,8 @@ CONFIG_DVB_A8293=m
 CONFIG_DVB_LGS8GXX=m
 CONFIG_DVB_ATBM8830=m
 CONFIG_DVB_TDA665x=m
+CONFIG_DVB_DVBSKY_M88DS3103=m
+CONFIG_DVB_M88DC2800=m
 CONFIG_DVB_IX2505V=m
 CONFIG_DVB_IT913X_FE=m
 CONFIG_DVB_M88RS2000=m
@@ -3761,12 +3917,14 @@ CONFIG_AGP_SIS=y
 # CONFIG_AGP_SWORKS is not set
 CONFIG_AGP_VIA=y
 # CONFIG_AGP_EFFICEON is not set
+CONFIG_INTEL_GTT=y
 CONFIG_VGA_ARB=y
 CONFIG_VGA_ARB_MAX_GPUS=16
 CONFIG_VGA_SWITCHEROO=y
 CONFIG_DRM=m
 CONFIG_DRM_USB=m
 CONFIG_DRM_KMS_HELPER=m
+CONFIG_DRM_KMS_FB_HELPER=y
 # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
 CONFIG_DRM_TTM=m
 
@@ -3787,6 +3945,9 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
 CONFIG_DRM_I810=m
 CONFIG_DRM_I915=m
 CONFIG_DRM_I915_KMS=y
+CONFIG_DRM_I915_FBDEV=y
+CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y
+# CONFIG_DRM_I915_UMS is not set
 CONFIG_DRM_MGA=m
 CONFIG_DRM_SIS=m
 CONFIG_DRM_VIA=m
@@ -3801,6 +3962,7 @@ CONFIG_DRM_AST=m
 CONFIG_DRM_MGAG200=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_QXL=m
+CONFIG_DRM_BOCHS=m
 CONFIG_VGASTATE=m
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_HDMI=y
@@ -3841,6 +4003,7 @@ CONFIG_FB_VESA=y
 CONFIG_FB_EFI=y
 # CONFIG_FB_N411 is not set
 CONFIG_FB_HGA=m
+CONFIG_FB_OPENCORES=m
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_NVIDIA is not set
 CONFIG_FB_RIVA=m
@@ -3897,6 +4060,7 @@ CONFIG_FB_UDL=m
 # CONFIG_FB_BROADSHEET is not set
 # CONFIG_FB_AUO_K190X is not set
 CONFIG_FB_HYPERV=m
+CONFIG_FB_SIMPLE=y
 # CONFIG_EXYNOS_VIDEO is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
 CONFIG_LCD_CLASS_DEVICE=m
@@ -3909,10 +4073,13 @@ CONFIG_BACKLIGHT_APPLE=m
 # CONFIG_BACKLIGHT_SAHARA is not set
 # CONFIG_BACKLIGHT_ADP8860 is not set
 # CONFIG_BACKLIGHT_ADP8870 is not set
-# CONFIG_BACKLIGHT_LM3630 is not set
+# CONFIG_BACKLIGHT_LM3630A is not set
 # CONFIG_BACKLIGHT_LM3639 is not set
 # CONFIG_BACKLIGHT_LP855X is not set
 # CONFIG_BACKLIGHT_OT200 is not set
+# CONFIG_BACKLIGHT_GPIO is not set
+# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_BD6107 is not set
 
 #
 # Console display driver support
@@ -3924,9 +4091,6 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
 # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
 CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_MONO is not set
 # CONFIG_LOGO_LINUX_VGA16 is not set
@@ -3950,6 +4114,7 @@ CONFIG_SND_SEQUENCER_OSS=y
 CONFIG_SND_HRTIMER=m
 CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
 CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_MAX_CARDS=32
 # CONFIG_SND_SUPPORT_OLD_API is not set
 CONFIG_SND_VERBOSE_PROCFS=y
 CONFIG_SND_VERBOSE_PRINTK=y
@@ -4019,7 +4184,6 @@ CONFIG_SND_SSCAPE=m
 CONFIG_SND_WAVEFRONT=m
 CONFIG_SND_MSND_PINNACLE=m
 CONFIG_SND_MSND_CLASSIC=m
-CONFIG_SND_TEA575X=m
 CONFIG_SND_PCI=y
 CONFIG_SND_AD1889=m
 CONFIG_SND_ALS300=m
@@ -4066,9 +4230,7 @@ CONFIG_SND_ENS1371=m
 CONFIG_SND_ES1938=m
 CONFIG_SND_ES1968=m
 CONFIG_SND_ES1968_INPUT=y
-CONFIG_SND_ES1968_RADIO=y
 CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X_BOOL=y
 CONFIG_SND_HDA_INTEL=m
 CONFIG_SND_HDA_PREALLOC_SIZE=64
 CONFIG_SND_HDA_HWDEP=y
@@ -4077,19 +4239,20 @@ CONFIG_SND_HDA_INPUT_BEEP=y
 CONFIG_SND_HDA_INPUT_BEEP_MODE=1
 CONFIG_SND_HDA_INPUT_JACK=y
 # CONFIG_SND_HDA_PATCH_LOADER is not set
-CONFIG_SND_HDA_CODEC_REALTEK=y
-CONFIG_SND_HDA_CODEC_ANALOG=y
-CONFIG_SND_HDA_CODEC_SIGMATEL=y
-CONFIG_SND_HDA_CODEC_VIA=y
-CONFIG_SND_HDA_CODEC_HDMI=y
-CONFIG_SND_HDA_CODEC_CIRRUS=y
-CONFIG_SND_HDA_CODEC_CONEXANT=y
-CONFIG_SND_HDA_CODEC_CA0110=y
-CONFIG_SND_HDA_CODEC_CA0132=y
+CONFIG_SND_HDA_CODEC_REALTEK=m
+CONFIG_SND_HDA_CODEC_ANALOG=m
+CONFIG_SND_HDA_CODEC_SIGMATEL=m
+CONFIG_SND_HDA_CODEC_VIA=m
+CONFIG_SND_HDA_CODEC_HDMI=m
+CONFIG_SND_HDA_I915=y
+CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CONEXANT=m
+CONFIG_SND_HDA_CODEC_CA0110=m
+CONFIG_SND_HDA_CODEC_CA0132=m
 # CONFIG_SND_HDA_CODEC_CA0132_DSP is not set
-CONFIG_SND_HDA_CODEC_CMEDIA=y
-CONFIG_SND_HDA_CODEC_SI3054=y
-CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_CODEC_CMEDIA=m
+CONFIG_SND_HDA_CODEC_SI3054=m
+CONFIG_SND_HDA_GENERIC=m
 CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
 CONFIG_SND_HDSP=m
 CONFIG_SND_HDSPM=m
@@ -4125,8 +4288,10 @@ CONFIG_SND_USB_CAIAQ=m
 CONFIG_SND_USB_CAIAQ_INPUT=y
 CONFIG_SND_USB_US122L=m
 CONFIG_SND_USB_6FIRE=m
+CONFIG_SND_USB_HIFACE=m
 CONFIG_SND_FIREWIRE=y
 CONFIG_SND_FIREWIRE_LIB=m
+CONFIG_SND_DICE=m
 CONFIG_SND_FIREWIRE_SPEAKERS=m
 # CONFIG_SND_ISIGHT is not set
 # CONFIG_SND_SCS1X is not set
@@ -4162,8 +4327,10 @@ CONFIG_HID_CYPRESS=y
 # CONFIG_HID_DRAGONRISE is not set
 # CONFIG_HID_EMS_FF is not set
 # CONFIG_HID_ELECOM is not set
+# CONFIG_HID_ELO is not set
 CONFIG_HID_EZKEY=y
 # CONFIG_HID_HOLTEK is not set
+# CONFIG_HID_HUION is not set
 CONFIG_HID_KEYTOUCH=m
 CONFIG_HID_KYE=y
 # CONFIG_HID_UCLOGIC is not set
@@ -4195,7 +4362,6 @@ CONFIG_HID_PICOLCD_LCD=y
 CONFIG_HID_PICOLCD_LEDS=y
 CONFIG_HID_PICOLCD_CIR=y
 # CONFIG_HID_PRIMAX is not set
-# CONFIG_HID_PS3REMOTE is not set
 CONFIG_HID_ROCCAT=m
 CONFIG_HID_SAITEK=m
 CONFIG_HID_SAMSUNG=m
@@ -4212,6 +4378,7 @@ CONFIG_HID_THINGM=m
 # CONFIG_HID_THRUSTMASTER is not set
 # CONFIG_HID_WACOM is not set
 # CONFIG_HID_WIIMOTE is not set
+# CONFIG_HID_XINMO is not set
 # CONFIG_HID_ZEROPLUS is not set
 CONFIG_HID_ZYDACRON=m
 CONFIG_HID_SENSOR_HUB=m
@@ -4227,9 +4394,7 @@ CONFIG_USB_HIDDEV=y
 # I2C HID support
 #
 CONFIG_I2C_HID=m
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB_ARCH_HAS_XHCI=y
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_COMMON=y
 CONFIG_USB_ARCH_HAS_HCD=y
@@ -4242,7 +4407,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 #
 CONFIG_USB_DEFAULT_PERSIST=y
 # CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
+CONFIG_USB_OTG=y
 # CONFIG_USB_OTG_WHITELIST is not set
 # CONFIG_USB_OTG_BLACKLIST_HUB is not set
 CONFIG_USB_MON=m
@@ -4256,7 +4421,6 @@ CONFIG_USB_WUSB_CBAF=m
 # CONFIG_USB_C67X00_HCD is not set
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_PLATFORM=m
-# CONFIG_USB_XHCI_HCD_DEBUGGING is not set
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_EHCI_TT_NEWSCHED=y
@@ -4266,11 +4430,11 @@ CONFIG_USB_EHCI_HCD_PLATFORM=y
 # CONFIG_USB_ISP116X_HCD is not set
 # CONFIG_USB_ISP1760_HCD is not set
 CONFIG_USB_ISP1362_HCD=m
+# CONFIG_USB_FUSBH200_HCD is not set
+# CONFIG_USB_FOTG210_HCD is not set
 CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PCI=y
 CONFIG_USB_OHCI_HCD_PLATFORM=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_UHCI_HCD=y
 # CONFIG_USB_U132_HCD is not set
 CONFIG_USB_SL811_HCD=m
@@ -4279,7 +4443,9 @@ CONFIG_USB_SL811_HCD_ISO=y
 # CONFIG_USB_R8A66597_HCD is not set
 CONFIG_USB_WHCI_HCD=m
 CONFIG_USB_HWA_HCD=m
+CONFIG_USB_HCD_BCMA=m
 CONFIG_USB_HCD_SSB=m
+# CONFIG_USB_HCD_TEST_MODE is not set
 
 #
 # USB Device Class drivers
@@ -4318,9 +4484,22 @@ CONFIG_USB_STORAGE_ENE_UB6250=m
 #
 CONFIG_USB_MDC800=m
 CONFIG_USB_MICROTEK=m
+# CONFIG_USB_MUSB_HDRC is not set
 CONFIG_USB_DWC3=m
 CONFIG_USB_DWC3_HOST=y
+
+#
+# Platform Glue Driver Support
+#
+# CONFIG_USB_DWC3_EXYNOS is not set
+CONFIG_USB_DWC3_PCI=m
+CONFIG_USB_DWC3_KEYSTONE=m
+
+#
+# Debugging features
+#
 # CONFIG_USB_DWC3_DEBUG is not set
+# CONFIG_USB_DWC2 is not set
 CONFIG_USB_CHIPIDEA=m
 # CONFIG_USB_CHIPIDEA_HOST is not set
 # CONFIG_USB_CHIPIDEA_DEBUG is not set
@@ -4331,6 +4510,7 @@ CONFIG_USB_CHIPIDEA=m
 CONFIG_USB_USS720=m
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_SIMPLE=m
 CONFIG_USB_SERIAL_AIRCABLE=m
 CONFIG_USB_SERIAL_ARK3116=m
 CONFIG_USB_SERIAL_BELKIN=m
@@ -4341,7 +4521,6 @@ CONFIG_USB_SERIAL_CP210X=m
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 # CONFIG_USB_SERIAL_EMPEG is not set
 CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
 CONFIG_USB_SERIAL_VISOR=m
 CONFIG_USB_SERIAL_IPAQ=m
 CONFIG_USB_SERIAL_IR=m
@@ -4360,16 +4539,14 @@ CONFIG_USB_SERIAL_MCT_U232=m
 CONFIG_USB_SERIAL_MOS7720=m
 CONFIG_USB_SERIAL_MOS7715_PARPORT=y
 CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_MXUPORT=m
 # CONFIG_USB_SERIAL_NAVMAN is not set
 CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_OTI6858=m
 CONFIG_USB_SERIAL_QCAUX=m
 CONFIG_USB_SERIAL_QUALCOMM=m
 CONFIG_USB_SERIAL_SPCP8X5=m
-# CONFIG_USB_SERIAL_HP4X is not set
 # CONFIG_USB_SERIAL_SAFE is not set
-CONFIG_USB_SERIAL_SIEMENS_MPI=m
 CONFIG_USB_SERIAL_SIERRAWIRELESS=m
 # CONFIG_USB_SERIAL_SYMBOL is not set
 # CONFIG_USB_SERIAL_TI is not set
@@ -4379,9 +4556,7 @@ CONFIG_USB_SERIAL_WWAN=m
 CONFIG_USB_SERIAL_OPTION=m
 # CONFIG_USB_SERIAL_OMNINET is not set
 # CONFIG_USB_SERIAL_OPTICON is not set
-# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
 # CONFIG_USB_SERIAL_XSENS_MT is not set
-# CONFIG_USB_SERIAL_ZIO is not set
 # CONFIG_USB_SERIAL_WISHBONE is not set
 CONFIG_USB_SERIAL_ZTE=m
 CONFIG_USB_SERIAL_SSU100=m
@@ -4410,6 +4585,7 @@ CONFIG_USB_SISUSBVGA_CON=y
 # CONFIG_USB_TRANCEVIBRATOR is not set
 CONFIG_USB_IOWARRIOR=m
 # CONFIG_USB_TEST is not set
+CONFIG_USB_EHSET_TEST_FIXTURE=m
 # CONFIG_USB_ISIGHTFW is not set
 CONFIG_USB_YUREX=m
 CONFIG_USB_EZUSB_FX2=m
@@ -4419,7 +4595,18 @@ CONFIG_USB_SPEEDTOUCH=m
 CONFIG_USB_CXACRU=m
 CONFIG_USB_UEAGLEATM=m
 CONFIG_USB_XUSBATM=m
-# CONFIG_USB_PHY is not set
+
+#
+# USB Physical Layer drivers
+#
+CONFIG_USB_PHY=y
+CONFIG_USB_OTG_FSM=m
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_SAMSUNG_USB2PHY is not set
+# CONFIG_SAMSUNG_USB3PHY is not set
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ISP1301 is not set
+# CONFIG_USB_RCAR_PHY is not set
 # CONFIG_USB_GADGET is not set
 CONFIG_UWB=m
 CONFIG_UWB_HWA=m
@@ -4465,6 +4652,7 @@ CONFIG_MEMSTICK=m
 #
 # CONFIG_MEMSTICK_UNSAFE_RESUME is not set
 CONFIG_MSPRO_BLOCK=m
+CONFIG_MS_BLOCK=m
 
 #
 # MemoryStick Host Controller Drivers
@@ -4490,14 +4678,15 @@ CONFIG_LEDS_LP55XX_COMMON=m
 CONFIG_LEDS_LP5521=m
 CONFIG_LEDS_LP5523=m
 CONFIG_LEDS_LP5562=m
+CONFIG_LEDS_LP8501=m
 CONFIG_LEDS_CLEVO_MAIL=m
 CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA9633=m
+CONFIG_LEDS_PCA963X=m
+CONFIG_LEDS_PCA9685=m
 CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_INTEL_SS4200=m
 CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_DELL_NETBOOKS=m
-# CONFIG_LEDS_RENESAS_TPU is not set
 CONFIG_LEDS_TCA6507=m
 CONFIG_LEDS_LM355x=m
 CONFIG_LEDS_OT200=m
@@ -4571,7 +4760,9 @@ CONFIG_RTC_DRV_MAX6900=m
 CONFIG_RTC_DRV_RS5C372=m
 CONFIG_RTC_DRV_ISL1208=m
 CONFIG_RTC_DRV_ISL12022=m
+CONFIG_RTC_DRV_ISL12057=m
 CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF2127=m
 CONFIG_RTC_DRV_PCF8523=m
 CONFIG_RTC_DRV_PCF8563=m
 CONFIG_RTC_DRV_PCF8583=m
@@ -4610,6 +4801,7 @@ CONFIG_RTC_DRV_DS2404=m
 #
 # on-CPU RTC drivers
 #
+CONFIG_RTC_DRV_MOXART=m
 
 #
 # HID Sensor RTC drivers
@@ -4623,8 +4815,9 @@ CONFIG_DMADEVICES=y
 #
 # CONFIG_INTEL_MID_DMAC is not set
 CONFIG_INTEL_IOATDMA=m
+CONFIG_DW_DMAC_CORE=m
 CONFIG_DW_DMAC=m
-# CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set
+CONFIG_DW_DMAC_PCI=m
 CONFIG_TIMB_DMA=m
 CONFIG_PCH_DMA=m
 CONFIG_DMA_ENGINE=y
@@ -4635,17 +4828,18 @@ CONFIG_DMA_ACPI=y
 #
 CONFIG_ASYNC_TX_DMA=y
 # CONFIG_DMATEST is not set
+CONFIG_DMA_ENGINE_RAID=y
 CONFIG_DCA=m
 # CONFIG_AUXDISPLAY is not set
 CONFIG_UIO=m
 # CONFIG_UIO_CIF is not set
-# CONFIG_UIO_PDRV is not set
 # CONFIG_UIO_PDRV_GENIRQ is not set
 # CONFIG_UIO_DMEM_GENIRQ is not set
 CONFIG_UIO_AEC=m
 CONFIG_UIO_SERCOS3=m
 CONFIG_UIO_PCI_GENERIC=m
 # CONFIG_UIO_NETX is not set
+# CONFIG_UIO_MF624 is not set
 # CONFIG_VFIO is not set
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VIRTIO=y
@@ -4675,14 +4869,16 @@ CONFIG_USBIP_HOST=m
 # CONFIG_PRISM2_USB is not set
 CONFIG_ECHO=m
 # CONFIG_COMEDI is not set
-# CONFIG_ASUS_OLED is not set
 # CONFIG_PANEL is not set
 # CONFIG_R8187SE is not set
 # CONFIG_RTL8192U is not set
 # CONFIG_RTLLIB is not set
 # CONFIG_R8712U is not set
+# CONFIG_R8188EU is not set
+# CONFIG_R8821AE is not set
 CONFIG_RTS5139=m
 # CONFIG_RTS5139_DEBUG is not set
+# CONFIG_RTS5208 is not set
 # CONFIG_TRANZPORT is not set
 # CONFIG_IDE_PHISON is not set
 # CONFIG_LINE6_USB is not set
@@ -4757,10 +4953,7 @@ CONFIG_RTS5139=m
 # Triggers - standalone
 #
 # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
-# CONFIG_IIO_GPIO_TRIGGER is not set
-# CONFIG_IIO_SYSFS_TRIGGER is not set
 # CONFIG_IIO_SIMPLE_DUMMY is not set
-# CONFIG_ZSMALLOC is not set
 # CONFIG_WLAGS49_H2 is not set
 # CONFIG_WLAGS49_H25 is not set
 # CONFIG_FB_SM7XX is not set
@@ -4785,17 +4978,19 @@ CONFIG_RTS5139=m
 # CONFIG_ANDROID is not set
 # CONFIG_USB_WPAN_HCD is not set
 # CONFIG_WIMAX_GDM72XX is not set
-# CONFIG_CSR_WIFI is not set
+CONFIG_LTE_GDM724X=m
 # CONFIG_NET_VENDOR_SILICOM is not set
 # CONFIG_CED1401 is not set
 # CONFIG_DGRP is not set
 # CONFIG_FIREWIRE_SERIAL is not set
-# CONFIG_USB_DWC2 is not set
+# CONFIG_LUSTRE_FS is not set
+# CONFIG_XILLYBUS is not set
+# CONFIG_DGNC is not set
+# CONFIG_DGAP is not set
 CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACER_WMI=m
 CONFIG_ACERHDF=m
 CONFIG_ASUS_LAPTOP=m
-CONFIG_CHROMEOS_LAPTOP=m
 CONFIG_DELL_LAPTOP=m
 CONFIG_DELL_WMI=m
 CONFIG_DELL_WMI_AIO=m
@@ -4805,6 +5000,7 @@ CONFIG_FUJITSU_LAPTOP=m
 CONFIG_AMILO_RFKILL=m
 CONFIG_TC1100_WMI=m
 CONFIG_HP_ACCEL=m
+# CONFIG_HP_WIRELESS is not set
 CONFIG_HP_WMI=m
 CONFIG_MSI_LAPTOP=m
 CONFIG_PANASONIC_LAPTOP=m
@@ -4839,7 +5035,10 @@ CONFIG_MXM_WMI=m
 CONFIG_INTEL_OAKTRAIL=m
 CONFIG_SAMSUNG_Q10=m
 # CONFIG_APPLE_GMUX is not set
+CONFIG_INTEL_RST=m
+# CONFIG_INTEL_SMARTCONNECT is not set
 CONFIG_PVPANIC=m
+# CONFIG_CHROME_PLATFORMS is not set
 CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
@@ -4847,7 +5046,7 @@ CONFIG_COMMON_CLK=y
 #
 # Common Clock Framework
 #
-# CONFIG_COMMON_CLK_DEBUG is not set
+# CONFIG_COMMON_CLK_SI5351 is not set
 
 #
 # Hardware Spinlock drivers
@@ -4885,6 +5084,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 # Accelerometers
 #
+# CONFIG_BMA180 is not set
 # CONFIG_HID_SENSOR_ACCEL_3D is not set
 # CONFIG_IIO_ST_ACCEL_3AXIS is not set
 
@@ -4892,6 +5092,8 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 # Analog to digital converters
 #
 # CONFIG_MAX1363 is not set
+# CONFIG_MCP3422 is not set
+# CONFIG_NAU7802 is not set
 # CONFIG_TI_ADC081C is not set
 # CONFIG_VIPERBOARD_ADC is not set
 
@@ -4904,7 +5106,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 CONFIG_HID_SENSOR_IIO_COMMON=m
 CONFIG_HID_SENSOR_IIO_TRIGGER=m
-# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set
 
 #
 # Digital to analog converters
@@ -4934,6 +5135,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
 # CONFIG_IIO_ST_GYRO_3AXIS is not set
 # CONFIG_ITG3200 is not set
 
+#
+# Humidity sensors
+#
+# CONFIG_DHT11 is not set
+
 #
 # Inertial measurement units
 #
@@ -4943,21 +5149,60 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
 # Light sensors
 #
 # CONFIG_ADJD_S311 is not set
+# CONFIG_APDS9300 is not set
+# CONFIG_CM32181 is not set
+# CONFIG_CM36651 is not set
+# CONFIG_GP2AP020A00F is not set
+# CONFIG_HID_SENSOR_ALS is not set
 # CONFIG_SENSORS_LM3533 is not set
+# CONFIG_TCS3472 is not set
 # CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_TSL4531 is not set
 # CONFIG_VCNL4000 is not set
-# CONFIG_HID_SENSOR_ALS is not set
 
 #
 # Magnetometer sensors
 #
 # CONFIG_AK8975 is not set
+# CONFIG_MAG3110 is not set
 # CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set
 # CONFIG_IIO_ST_MAGN_3AXIS is not set
+
+#
+# Inclinometer sensors
+#
+# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set
+
+#
+# Triggers - standalone
+#
+# CONFIG_IIO_INTERRUPT_TRIGGER is not set
+# CONFIG_IIO_SYSFS_TRIGGER is not set
+
+#
+# Pressure sensors
+#
+# CONFIG_MPL3115 is not set
+# CONFIG_IIO_ST_PRESS is not set
+
+#
+# Temperature sensors
+#
+# CONFIG_TMP006 is not set
+# CONFIG_NTB is not set
 # CONFIG_VME_BUS is not set
 # CONFIG_PWM is not set
 # CONFIG_IPACK_BUS is not set
-# CONFIG_RESET_CONTROLLER is not set
+CONFIG_RESET_CONTROLLER=y
+# CONFIG_FMC is not set
+
+#
+# PHY Subsystem
+#
+CONFIG_GENERIC_PHY=y
+# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
+# CONFIG_BCM_KONA_USB2_PHY is not set
+# CONFIG_POWERCAP is not set
 
 #
 # Firmware Drivers
@@ -4969,6 +5214,7 @@ CONFIG_DELL_RBU=m
 CONFIG_DCDBAS=m
 CONFIG_DMIID=y
 CONFIG_DMI_SYSFS=y
+CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
 CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 # CONFIG_GOOGLE_FIRMWARE is not set
@@ -4979,6 +5225,7 @@ CONFIG_ISCSI_IBFT=m
 CONFIG_EFI_VARS=y
 CONFIG_EFI_VARS_PSTORE=y
 # CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
+CONFIG_UEFI_CPER=y
 
 #
 # File systems
@@ -5014,6 +5261,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
 # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
 # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
 # CONFIG_BTRFS_DEBUG is not set
+CONFIG_BTRFS_ASSERT=y
 # CONFIG_NILFS2_FS is not set
 CONFIG_FS_POSIX_ACL=y
 CONFIG_EXPORTFS=y
@@ -5034,7 +5282,6 @@ CONFIG_QUOTACTL=y
 CONFIG_AUTOFS4_FS=y
 CONFIG_FUSE_FS=m
 CONFIG_CUSE=m
-CONFIG_GENERIC_ACL=y
 
 #
 # Caches
@@ -5117,10 +5364,13 @@ CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=m
 # CONFIG_NFS_SWAP is not set
 CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
 CONFIG_PNFS_FILE_LAYOUT=m
 CONFIG_PNFS_BLOCK=m
 CONFIG_PNFS_OBJLAYOUT=m
 CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="ipfire.org"
+CONFIG_NFS_V4_1_MIGRATION=y
+CONFIG_NFS_V4_SECURITY_LABEL=y
 CONFIG_NFS_FSCACHE=y
 # CONFIG_NFS_USE_LEGACY_DNS is not set
 CONFIG_NFS_USE_KERNEL_DNS=y
@@ -5129,6 +5379,7 @@ CONFIG_NFSD_V2_ACL=y
 CONFIG_NFSD_V3=y
 CONFIG_NFSD_V3_ACL=y
 CONFIG_NFSD_V4=y
+CONFIG_NFSD_V4_SECURITY_LABEL=y
 # CONFIG_NFSD_FAULT_INJECTION is not set
 CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
@@ -5213,64 +5464,92 @@ CONFIG_DLM=m
 # Kernel hacking
 #
 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+
+#
+# printk and dmesg options
+#
 # CONFIG_PRINTK_TIME is not set
 CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+# CONFIG_BOOT_PRINTK_DELAY is not set
+CONFIG_DYNAMIC_DEBUG=y
+
+#
+# Compile-time checks and compiler options
+#
+# CONFIG_DEBUG_INFO is not set
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 CONFIG_ENABLE_MUST_CHECK=y
 CONFIG_FRAME_WARN=2048
-# CONFIG_MAGIC_SYSRQ is not set
 CONFIG_STRIP_ASM_SYMS=y
 # CONFIG_READABLE_ASM is not set
 # CONFIG_UNUSED_SYMBOLS is not set
 CONFIG_DEBUG_FS=y
 CONFIG_HEADERS_CHECK=y
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_MAGIC_SYSRQ is not set
 CONFIG_DEBUG_KERNEL=y
+
+#
+# Memory Debugging
+#
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_VIRTUAL is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
+# CONFIG_DEBUG_HIGHMEM is not set
+CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
+CONFIG_DEBUG_STACKOVERFLOW=y
+CONFIG_HAVE_ARCH_KMEMCHECK=y
 CONFIG_DEBUG_SHIRQ=y
+
+#
+# Debug Lockups and Hangs
+#
 CONFIG_LOCKUP_DETECTOR=y
 CONFIG_HARDLOCKUP_DETECTOR=y
 # CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
 CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0
 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+# CONFIG_DETECT_HUNG_TASK is not set
 # CONFIG_PANIC_ON_OOPS is not set
 CONFIG_PANIC_ON_OOPS_VALUE=0
-# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_TIMEOUT=0
 CONFIG_SCHED_DEBUG=y
 CONFIG_SCHEDSTATS=y
 CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_HAVE_DEBUG_KMEMLEAK=y
-# CONFIG_DEBUG_KMEMLEAK is not set
+
+#
+# Lock Debugging (spinlocks, mutexes, etc...)
+#
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
 # CONFIG_DEBUG_LOCK_ALLOC is not set
 # CONFIG_PROVE_LOCKING is not set
 # CONFIG_LOCK_STAT is not set
 # CONFIG_DEBUG_ATOMIC_SLEEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 CONFIG_STACKTRACE=y
-# CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_HIGHMEM is not set
 CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_VIRTUAL is not set
 # CONFIG_DEBUG_WRITECOUNT is not set
-CONFIG_DEBUG_MEMORY_INIT=y
 CONFIG_DEBUG_LIST=y
-# CONFIG_TEST_LIST_SORT is not set
 # CONFIG_DEBUG_SG is not set
 # CONFIG_DEBUG_NOTIFIERS is not set
 # CONFIG_DEBUG_CREDENTIALS is not set
-CONFIG_ARCH_WANT_FRAME_POINTERS=y
-CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
 
 #
 # RCU Debugging
@@ -5280,16 +5559,11 @@ CONFIG_FRAME_POINTER=y
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_CPU_STALL_INFO is not set
 # CONFIG_RCU_TRACE is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-# CONFIG_DEBUG_PER_CPU_MAPS is not set
-# CONFIG_LKDTM is not set
 # CONFIG_NOTIFIER_ERROR_INJECTION is not set
 # CONFIG_FAULT_INJECTION is not set
 CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y
 # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
 CONFIG_USER_STACKTRACE_SUPPORT=y
 CONFIG_NOP_TRACER=y
 CONFIG_HAVE_FUNCTION_TRACER=y
@@ -5332,24 +5606,32 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
 # CONFIG_MMIOTRACE is not set
 CONFIG_RING_BUFFER_BENCHMARK=m
 # CONFIG_RING_BUFFER_STARTUP_TEST is not set
+
+#
+# Runtime Testing
+#
+# CONFIG_LKDTM is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
 CONFIG_RBTREE_TEST=m
 # CONFIG_INTERVAL_TREE_TEST is not set
-# CONFIG_BUILD_DOCSRC is not set
-CONFIG_DYNAMIC_DEBUG=y
-# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_PERCPU_TEST is not set
 # CONFIG_ATOMIC64_SELFTEST is not set
 CONFIG_ASYNC_RAID6_TEST=m
+# CONFIG_TEST_STRING_HELPERS is not set
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_BUILD_DOCSRC is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_TEST_MODULE is not set
+# CONFIG_TEST_USER_COPY is not set
 # CONFIG_SAMPLES is not set
 CONFIG_HAVE_ARCH_KGDB=y
 # CONFIG_KGDB is not set
-CONFIG_HAVE_ARCH_KMEMCHECK=y
-# CONFIG_TEST_STRING_HELPERS is not set
-# CONFIG_TEST_KSTRTOX is not set
 CONFIG_STRICT_DEVMEM=y
 # CONFIG_X86_VERBOSE_BOOTUP is not set
 CONFIG_EARLY_PRINTK=y
 # CONFIG_EARLY_PRINTK_DBGP is not set
-CONFIG_DEBUG_STACKOVERFLOW=y
+CONFIG_EARLY_PRINTK_EFI=y
 # CONFIG_X86_PTDUMP is not set
 CONFIG_DEBUG_NX_TEST=m
 CONFIG_DOUBLEFAULT=y
@@ -5369,6 +5651,7 @@ CONFIG_DEBUG_BOOT_PARAMS=y
 # CONFIG_CPA_DEBUG is not set
 CONFIG_OPTIMIZE_INLINING=y
 # CONFIG_DEBUG_NMI_SELFTEST is not set
+# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set
 
 #
 # Security options
@@ -5427,6 +5710,7 @@ CONFIG_PAX_RANDMMAP=y
 #
 # Miscellaneous hardening features
 #
+CONFIG_PAX_MEMORY_SANITIZE=y
 CONFIG_PAX_MEMORY_STACKLEAK=y
 CONFIG_PAX_MEMORY_STRUCTLEAK=y
 # CONFIG_PAX_MEMORY_UDEREF is not set
@@ -5448,6 +5732,8 @@ CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
+CONFIG_GRKERNSEC_RANDSTRUCT=y
+CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
 
 #
@@ -5507,12 +5793,12 @@ CONFIG_GRKERNSEC_DMESG=y
 CONFIG_GRKERNSEC_HARDEN_PTRACE=y
 CONFIG_GRKERNSEC_PTRACE_READEXEC=y
 CONFIG_GRKERNSEC_SETXID=y
+CONFIG_GRKERNSEC_HARDEN_IPC=y
 # CONFIG_GRKERNSEC_TPE is not set
 
 #
 # Network Protections
 #
-CONFIG_GRKERNSEC_RANDNET=y
 CONFIG_GRKERNSEC_BLACKHOLE=y
 CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 # CONFIG_GRKERNSEC_SOCKET is not set
@@ -5533,6 +5819,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 CONFIG_GRKERNSEC_FLOODTIME=10
 CONFIG_GRKERNSEC_FLOODBURST=6
 CONFIG_KEYS=y
+# CONFIG_PERSISTENT_KEYRINGS is not set
+# CONFIG_BIG_KEYS is not set
 # CONFIG_ENCRYPTED_KEYS is not set
 CONFIG_KEYS_DEBUG_PROC_KEYS=y
 CONFIG_SECURITY_DMESG_RESTRICT=y
@@ -5585,7 +5873,7 @@ CONFIG_CRYPTO_WORKQUEUE=y
 CONFIG_CRYPTO_CRYPTD=y
 CONFIG_CRYPTO_AUTHENC=m
 CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_ABLK_HELPER_X86=y
+CONFIG_CRYPTO_ABLK_HELPER=y
 CONFIG_CRYPTO_GLUE_HELPER_X86=m
 
 #
@@ -5621,6 +5909,7 @@ CONFIG_CRYPTO_CRC32C=y
 CONFIG_CRYPTO_CRC32C_INTEL=y
 CONFIG_CRYPTO_CRC32=y
 CONFIG_CRYPTO_CRC32_PCLMUL=m
+CONFIG_CRYPTO_CRCT10DIF=y
 CONFIG_CRYPTO_GHASH=m
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=y
@@ -5668,6 +5957,8 @@ CONFIG_CRYPTO_TWOFISH_586=m
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_ZLIB=m
 CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_LZ4=m
+CONFIG_CRYPTO_LZ4HC=m
 
 #
 # Random Number Generation
@@ -5676,6 +5967,7 @@ CONFIG_CRYPTO_ANSI_CPRNG=m
 CONFIG_CRYPTO_USER_API=y
 CONFIG_CRYPTO_USER_API_HASH=y
 CONFIG_CRYPTO_USER_API_SKCIPHER=y
+CONFIG_CRYPTO_HASH_INFO=y
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_PADLOCK=m
 CONFIG_CRYPTO_DEV_PADLOCK_AES=m
@@ -5683,6 +5975,9 @@ CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
 CONFIG_CRYPTO_DEV_GEODE=m
 CONFIG_CRYPTO_DEV_HIFN_795X=m
 CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+CONFIG_CRYPTO_DEV_CCP=y
+CONFIG_CRYPTO_DEV_CCP_DD=m
+CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
 CONFIG_ASYMMETRIC_KEY_TYPE=m
 CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
 CONFIG_PUBLIC_KEY_ALGO_RSA=m
@@ -5696,6 +5991,7 @@ CONFIG_KVM_MMIO=y
 CONFIG_KVM_ASYNC_PF=y
 CONFIG_HAVE_KVM_MSI=y
 CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
+CONFIG_KVM_VFIO=y
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
@@ -5712,10 +6008,12 @@ CONFIG_RAID6_PQ=m
 CONFIG_BITREVERSE=y
 CONFIG_GENERIC_STRNCPY_FROM_USER=y
 CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_NET_UTILS=y
 CONFIG_GENERIC_FIND_FIRST_BIT=y
 CONFIG_GENERIC_PCI_IOMAP=y
 CONFIG_GENERIC_IOMAP=y
 CONFIG_GENERIC_IO=y
+CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
 CONFIG_CRC_CCITT=y
 CONFIG_CRC16=y
 CONFIG_CRC_T10DIF=y
@@ -5730,10 +6028,14 @@ CONFIG_CRC7=m
 CONFIG_LIBCRC32C=m
 CONFIG_CRC8=m
 CONFIG_AUDIT_GENERIC=y
+# CONFIG_RANDOM32_SELFTEST is not set
 CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
+CONFIG_ZLIB_DEFLATE=y
 CONFIG_LZO_COMPRESS=y
 CONFIG_LZO_DECOMPRESS=y
+CONFIG_LZ4_COMPRESS=m
+CONFIG_LZ4HC_COMPRESS=m
+CONFIG_LZ4_DECOMPRESS=y
 CONFIG_XZ_DEC=y
 CONFIG_XZ_DEC_X86=y
 CONFIG_XZ_DEC_POWERPC=y
@@ -5748,11 +6050,13 @@ CONFIG_DECOMPRESS_BZIP2=y
 CONFIG_DECOMPRESS_LZMA=y
 CONFIG_DECOMPRESS_XZ=y
 CONFIG_DECOMPRESS_LZO=y
+CONFIG_DECOMPRESS_LZ4=y
 CONFIG_GENERIC_ALLOCATOR=y
 CONFIG_TEXTSEARCH=y
 CONFIG_TEXTSEARCH_KMP=m
 CONFIG_TEXTSEARCH_BM=m
 CONFIG_TEXTSEARCH_FSM=m
+CONFIG_ASSOCIATIVE_ARRAY=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
@@ -5768,3 +6072,7 @@ CONFIG_CORDIC=m
 CONFIG_MPILIB=m
 CONFIG_OID_REGISTRY=m
 CONFIG_UCS2_STRING=y
+CONFIG_FONT_SUPPORT=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
index f395f3116ed774983ea6d964d9ba1799346ec595..54cfb0642b3a130b4ef1dad6ff12d42e66a1306b 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.10.40-ipfire Kernel Configuration
+# Linux/x86 3.14.22 Kernel Configuration
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
@@ -28,6 +28,8 @@ CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
 CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
 CONFIG_ARCH_HIBERNATION_POSSIBLE=y
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
 # CONFIG_ZONE_DMA32 is not set
 # CONFIG_AUDIT_ARCH is not set
 CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
@@ -36,7 +38,6 @@ CONFIG_HAVE_INTEL_TXT=y
 CONFIG_X86_32_SMP=y
 CONFIG_X86_HT=y
 CONFIG_ARCH_HWEIGHT_CFLAGS="-fcall-saved-ecx -fcall-saved-edx"
-CONFIG_ARCH_CPU_PROBE_RELEASE=y
 CONFIG_ARCH_SUPPORTS_UPROBES=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 CONFIG_IRQ_WORK=y
@@ -47,6 +48,7 @@ CONFIG_BUILDTIME_EXTABLE_SORT=y
 #
 CONFIG_INIT_ENV_ARG_LIMIT=32
 CONFIG_CROSS_COMPILE=""
+# CONFIG_COMPILE_TEST is not set
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
 CONFIG_HAVE_KERNEL_GZIP=y
@@ -54,11 +56,13 @@ CONFIG_HAVE_KERNEL_BZIP2=y
 CONFIG_HAVE_KERNEL_LZMA=y
 CONFIG_HAVE_KERNEL_XZ=y
 CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_HAVE_KERNEL_LZ4=y
 # CONFIG_KERNEL_GZIP is not set
 # CONFIG_KERNEL_BZIP2 is not set
 # CONFIG_KERNEL_LZMA is not set
 CONFIG_KERNEL_XZ=y
 # CONFIG_KERNEL_LZO is not set
+# CONFIG_KERNEL_LZ4 is not set
 CONFIG_DEFAULT_HOSTNAME="(none)"
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
@@ -70,13 +74,10 @@ CONFIG_AUDIT=y
 CONFIG_AUDITSYSCALL=y
 CONFIG_AUDIT_WATCH=y
 CONFIG_AUDIT_TREE=y
-CONFIG_AUDIT_LOGINUID_IMMUTABLE=y
-CONFIG_HAVE_GENERIC_HARDIRQS=y
 
 #
 # IRQ subsystem
 #
-CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_IRQ_SHOW=y
 CONFIG_GENERIC_PENDING_IRQ=y
@@ -153,6 +154,7 @@ CONFIG_BLK_CGROUP=y
 CONFIG_NAMESPACES=y
 CONFIG_UTS_NS=y
 CONFIG_IPC_NS=y
+CONFIG_USER_NS=y
 CONFIG_PID_NS=y
 CONFIG_NET_NS=y
 CONFIG_SCHED_AUTOGROUP=y
@@ -165,12 +167,12 @@ CONFIG_RD_BZIP2=y
 CONFIG_RD_LZMA=y
 CONFIG_RD_XZ=y
 CONFIG_RD_LZO=y
+CONFIG_RD_LZ4=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SYSCTL=y
 CONFIG_ANON_INODES=y
 CONFIG_HAVE_UID16=y
 CONFIG_SYSCTL_EXCEPTION_TRACE=y
-CONFIG_HOTPLUG=y
 CONFIG_HAVE_PCSPKR_PLATFORM=y
 CONFIG_EXPERT=y
 CONFIG_UID16=y
@@ -204,6 +206,8 @@ CONFIG_SLUB_DEBUG=y
 # CONFIG_SLAB is not set
 CONFIG_SLUB=y
 # CONFIG_SLOB is not set
+CONFIG_SLUB_CPU_PARTIAL=y
+# CONFIG_SYSTEM_TRUSTED_KEYRING is not set
 # CONFIG_PROFILING is not set
 CONFIG_TRACEPOINTS=y
 CONFIG_HAVE_OPROFILE=y
@@ -221,7 +225,6 @@ CONFIG_HAVE_OPTPROBES=y
 CONFIG_HAVE_KPROBES_ON_FTRACE=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_ATTRS=y
-CONFIG_USE_GENERIC_SMP_HELPERS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
@@ -240,8 +243,14 @@ CONFIG_HAVE_CMPXCHG_DOUBLE=y
 CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
+CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR_NONE is not set
+CONFIG_CC_STACKPROTECTOR_REGULAR=y
+# CONFIG_CC_STACKPROTECTOR_STRONG is not set
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
 CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
+CONFIG_HAVE_ARCH_SOFT_DIRTY=y
 CONFIG_MODULES_USE_ELF_REL=y
 CONFIG_CLONE_BACKWARDS=y
 CONFIG_OLD_SIGSUSPEND3=y
@@ -259,7 +268,7 @@ CONFIG_MODULES=y
 # CONFIG_MODULE_FORCE_LOAD is not set
 CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
+CONFIG_MODVERSIONS=y
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_SIG is not set
 CONFIG_STOP_MACHINE=y
@@ -269,12 +278,14 @@ CONFIG_BLK_DEV_BSG=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
 CONFIG_BLK_DEV_THROTTLING=y
+# CONFIG_BLK_CMDLINE_PARSER is not set
 
 #
 # Partition Types
 #
 CONFIG_PARTITION_ADVANCED=y
 # CONFIG_ACORN_PARTITION is not set
+# CONFIG_AIX_PARTITION is not set
 # CONFIG_OSF_PARTITION is not set
 # CONFIG_AMIGA_PARTITION is not set
 # CONFIG_ATARI_PARTITION is not set
@@ -292,6 +303,7 @@ CONFIG_LDM_PARTITION=y
 # CONFIG_KARMA_PARTITION is not set
 CONFIG_EFI_PARTITION=y
 # CONFIG_SYSV68_PARTITION is not set
+# CONFIG_CMDLINE_PARTITION is not set
 
 #
 # IO Schedulers
@@ -312,6 +324,7 @@ CONFIG_INLINE_READ_UNLOCK=y
 CONFIG_INLINE_READ_UNLOCK_IRQ=y
 CONFIG_INLINE_WRITE_UNLOCK=y
 CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
 CONFIG_MUTEX_SPIN_ON_OWNER=y
 CONFIG_FREEZER=y
 
@@ -324,7 +337,7 @@ CONFIG_X86_MPPARSE=y
 CONFIG_X86_BIGSMP=y
 CONFIG_X86_EXTENDED_PLATFORM=y
 # CONFIG_X86_GOLDFISH is not set
-# CONFIG_X86_WANT_INTEL_MID is not set
+# CONFIG_X86_INTEL_MID is not set
 CONFIG_X86_INTEL_LPSS=y
 # CONFIG_X86_RDC321X is not set
 CONFIG_X86_32_NON_STANDARD=y
@@ -347,6 +360,7 @@ CONFIG_XEN_MAX_DOMAIN_MEMORY=64
 CONFIG_XEN_SAVE_RESTORE=y
 CONFIG_XEN_DEBUG_FS=y
 CONFIG_KVM_GUEST=y
+# CONFIG_KVM_DEBUG_FS is not set
 # CONFIG_LGUEST_GUEST is not set
 CONFIG_PARAVIRT_TIME_ACCOUNTING=y
 CONFIG_PARAVIRT_CLOCK=y
@@ -417,6 +431,8 @@ CONFIG_X86_MCE_THRESHOLD=y
 # CONFIG_X86_MCE_INJECT is not set
 CONFIG_X86_THERMAL_VECTOR=y
 CONFIG_VM86=y
+CONFIG_X86_16BIT=y
+CONFIG_X86_ESPFIX32=y
 CONFIG_TOSHIBA=m
 CONFIG_I8K=m
 # CONFIG_X86_REBOOTFIXUPS is not set
@@ -424,9 +440,8 @@ CONFIG_MICROCODE=m
 CONFIG_MICROCODE_INTEL=y
 CONFIG_MICROCODE_AMD=y
 CONFIG_MICROCODE_OLD_INTERFACE=y
-CONFIG_MICROCODE_INTEL_LIB=y
-CONFIG_MICROCODE_INTEL_EARLY=y
-CONFIG_MICROCODE_EARLY=y
+# CONFIG_MICROCODE_INTEL_EARLY is not set
+# CONFIG_MICROCODE_AMD_EARLY is not set
 # CONFIG_X86_MSR is not set
 CONFIG_X86_CPUID=y
 # CONFIG_NOHIGHMEM is not set
@@ -458,6 +473,7 @@ CONFIG_MEMORY_ISOLATION=y
 # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
 CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
 CONFIG_BALLOON_COMPACTION=y
 CONFIG_COMPACTION=y
 CONFIG_MIGRATION=y
@@ -476,6 +492,9 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
 CONFIG_CROSS_MEMORY_ATTACH=y
 CONFIG_CLEANCACHE=y
 # CONFIG_FRONTSWAP is not set
+# CONFIG_CMA is not set
+# CONFIG_ZBUD is not set
+# CONFIG_ZSMALLOC is not set
 CONFIG_HIGHPTE=y
 CONFIG_X86_CHECK_BIOS_CORRUPTION=y
 CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
@@ -492,7 +511,6 @@ CONFIG_X86_SMAP=y
 CONFIG_EFI=y
 CONFIG_EFI_STUB=y
 CONFIG_SECCOMP=y
-CONFIG_CC_STACKPROTECTOR=y
 # CONFIG_HZ_100 is not set
 # CONFIG_HZ_250 is not set
 CONFIG_HZ_300=y
@@ -503,6 +521,7 @@ CONFIG_SCHED_HRTICK=y
 CONFIG_CRASH_DUMP=y
 CONFIG_PHYSICAL_START=0x400000
 CONFIG_RELOCATABLE=y
+# CONFIG_RANDOMIZE_BASE is not set
 CONFIG_X86_NEED_RELOCS=y
 CONFIG_PHYSICAL_ALIGN=0x400000
 CONFIG_HOTPLUG_CPU=y
@@ -517,8 +536,6 @@ CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
 CONFIG_SUSPEND=y
 CONFIG_SUSPEND_FREEZER=y
 CONFIG_HIBERNATE_CALLBACKS=y
-CONFIG_HIBERNATION=y
-CONFIG_PM_STD_PARTITION=""
 CONFIG_PM_SLEEP=y
 CONFIG_PM_SLEEP_SMP=y
 # CONFIG_PM_AUTOSLEEP is not set
@@ -527,19 +544,18 @@ CONFIG_PM_RUNTIME=y
 CONFIG_PM=y
 # CONFIG_PM_DEBUG is not set
 CONFIG_PM_CLK=y
+# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
 CONFIG_ACPI=y
 CONFIG_ACPI_SLEEP=y
 CONFIG_ACPI_PROCFS=y
 # CONFIG_ACPI_PROCFS_POWER is not set
 CONFIG_ACPI_EC_DEBUGFS=m
-# CONFIG_ACPI_PROC_EVENT is not set
 CONFIG_ACPI_AC=y
 CONFIG_ACPI_BATTERY=y
 CONFIG_ACPI_BUTTON=y
 CONFIG_ACPI_VIDEO=m
 CONFIG_ACPI_FAN=y
 CONFIG_ACPI_DOCK=y
-CONFIG_ACPI_I2C=m
 CONFIG_ACPI_PROCESSOR=y
 CONFIG_ACPI_IPMI=m
 CONFIG_ACPI_HOTPLUG_CPU=y
@@ -547,7 +563,6 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
 CONFIG_ACPI_THERMAL=y
 # CONFIG_ACPI_CUSTOM_DSDT is not set
 CONFIG_ACPI_INITRD_TABLE_OVERRIDE=y
-CONFIG_ACPI_BLACKLIST_YEAR=1999
 # CONFIG_ACPI_DEBUG is not set
 CONFIG_ACPI_PCI_SLOT=y
 CONFIG_X86_PM_TIMER=y
@@ -562,6 +577,7 @@ CONFIG_ACPI_APEI_PCIEAER=y
 CONFIG_ACPI_APEI_MEMORY_FAILURE=y
 # CONFIG_ACPI_APEI_EINJ is not set
 # CONFIG_ACPI_APEI_ERST_DEBUG is not set
+CONFIG_ACPI_EXTLOG=m
 CONFIG_SFI=y
 CONFIG_X86_APM_BOOT=y
 CONFIG_APM=y
@@ -575,7 +591,6 @@ CONFIG_APM_CPU_IDLE=y
 # CPU Frequency scaling
 #
 CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
 CONFIG_CPU_FREQ_GOV_COMMON=y
 CONFIG_CPU_FREQ_STAT=m
 CONFIG_CPU_FREQ_STAT_DETAILS=y
@@ -617,6 +632,10 @@ CONFIG_X86_LONGHAUL=m
 #
 CONFIG_X86_SPEEDSTEP_LIB=m
 CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
+
+#
+# CPU Idle
+#
 CONFIG_CPU_IDLE=y
 # CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set
 CONFIG_CPU_IDLE_GOV_LADDER=y
@@ -649,7 +668,6 @@ CONFIG_PCIEASPM_DEFAULT=y
 # CONFIG_PCIEASPM_POWERSAVE is not set
 # CONFIG_PCIEASPM_PERFORMANCE is not set
 CONFIG_PCIE_PME=y
-CONFIG_ARCH_SUPPORTS_MSI=y
 CONFIG_PCI_MSI=y
 # CONFIG_PCI_DEBUG is not set
 # CONFIG_PCI_REALLOC_ENABLE_AUTO is not set
@@ -662,6 +680,10 @@ CONFIG_PCI_IOV=y
 # CONFIG_PCI_PASID is not set
 CONFIG_PCI_IOAPIC=y
 CONFIG_PCI_LABEL=y
+
+#
+# PCI host controller drivers
+#
 CONFIG_ISA_DMA_API=y
 CONFIG_ISA=y
 CONFIG_EISA=y
@@ -703,6 +725,7 @@ CONFIG_HOTPLUG_PCI_ACPI_IBM=m
 # CONFIG_HOTPLUG_PCI_CPCI is not set
 # CONFIG_HOTPLUG_PCI_SHPC is not set
 # CONFIG_RAPIDIO is not set
+CONFIG_X86_SYSFB=y
 
 #
 # Executable file formats / Emulations
@@ -715,7 +738,6 @@ CONFIG_HAVE_AOUT=y
 CONFIG_BINFMT_MISC=y
 CONFIG_COREDUMP=y
 CONFIG_HAVE_ATOMIC_IOMAP=y
-CONFIG_HAVE_TEXT_POKE_SMP=y
 CONFIG_NET=y
 
 #
@@ -752,7 +774,6 @@ CONFIG_IP_MROUTE=y
 CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
 CONFIG_IP_PIMSM_V1=y
 CONFIG_IP_PIMSM_V2=y
-# CONFIG_ARPD is not set
 CONFIG_SYN_COOKIES=y
 CONFIG_NET_IPVTI=m
 CONFIG_INET_AH=m
@@ -785,7 +806,6 @@ CONFIG_DEFAULT_CUBIC=y
 CONFIG_DEFAULT_TCP_CONG="cubic"
 CONFIG_TCP_MD5SIG=y
 CONFIG_IPV6=y
-CONFIG_IPV6_PRIVACY=y
 CONFIG_IPV6_ROUTER_PREF=y
 CONFIG_IPV6_ROUTE_INFO=y
 CONFIG_IPV6_OPTIMISTIC_DAD=y
@@ -799,6 +819,7 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=m
 CONFIG_INET6_XFRM_MODE_TUNNEL=m
 CONFIG_INET6_XFRM_MODE_BEET=m
 CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_VTI=m
 CONFIG_IPV6_SIT=m
 CONFIG_IPV6_SIT_6RD=y
 CONFIG_IPV6_NDISC_NODETYPE=y
@@ -820,7 +841,7 @@ CONFIG_BRIDGE_NETFILTER=y
 #
 # Core Netfilter Configuration
 #
-CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK=y
 CONFIG_NETFILTER_NETLINK_ACCT=m
 CONFIG_NETFILTER_NETLINK_QUEUE=m
 CONFIG_NETFILTER_NETLINK_LOG=m
@@ -862,7 +883,22 @@ CONFIG_NF_NAT_FTP=m
 CONFIG_NF_NAT_IRC=m
 CONFIG_NF_NAT_SIP=m
 CONFIG_NF_NAT_TFTP=m
-CONFIG_NETFILTER_TPROXY=m
+CONFIG_NETFILTER_SYNPROXY=m
+CONFIG_NF_TABLES=y
+CONFIG_NF_TABLES_INET=m
+CONFIG_NFT_EXTHDR=m
+CONFIG_NFT_META=m
+CONFIG_NFT_CT=m
+CONFIG_NFT_RBTREE=m
+CONFIG_NFT_HASH=m
+CONFIG_NFT_COUNTER=m
+CONFIG_NFT_LOG=m
+CONFIG_NFT_LIMIT=m
+CONFIG_NFT_NAT=m
+CONFIG_NFT_QUEUE=m
+CONFIG_NFT_REJECT=m
+CONFIG_NFT_REJECT_INET=m
+CONFIG_NFT_COMPAT=m
 CONFIG_NETFILTER_XTABLES=y
 
 #
@@ -907,6 +943,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 #
 CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
 CONFIG_NETFILTER_XT_MATCH_BPF=m
+CONFIG_NETFILTER_XT_MATCH_CGROUP=m
 CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
@@ -923,8 +960,10 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m
 CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 CONFIG_NETFILTER_XT_MATCH_HELPER=m
 CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
 CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
-# CONFIG_NETFILTER_XT_MATCH_IPVS is not set
+CONFIG_NETFILTER_XT_MATCH_IPVS=m
+CONFIG_NETFILTER_XT_MATCH_L2TP=m
 CONFIG_NETFILTER_XT_MATCH_LAYER7=m
 # CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
 CONFIG_NETFILTER_XT_MATCH_LENGTH=m
@@ -959,7 +998,9 @@ CONFIG_IP_SET_HASH_IP=m
 CONFIG_IP_SET_HASH_IPPORT=m
 CONFIG_IP_SET_HASH_IPPORTIP=m
 CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_NETPORTNET=m
 CONFIG_IP_SET_HASH_NET=m
+CONFIG_IP_SET_HASH_NETNET=m
 CONFIG_IP_SET_HASH_NETPORT=m
 CONFIG_IP_SET_HASH_NETIFACE=m
 CONFIG_IP_SET_LIST_SET=m
@@ -1010,6 +1051,11 @@ CONFIG_IP_VS_PE_SIP=m
 CONFIG_NF_DEFRAG_IPV4=y
 CONFIG_NF_CONNTRACK_IPV4=y
 # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+CONFIG_NF_TABLES_IPV4=m
+CONFIG_NFT_CHAIN_ROUTE_IPV4=m
+CONFIG_NFT_CHAIN_NAT_IPV4=m
+CONFIG_NFT_REJECT_IPV4=m
+CONFIG_NF_TABLES_ARP=m
 CONFIG_IP_NF_IPTABLES=y
 CONFIG_IP_NF_MATCH_AH=m
 CONFIG_IP_NF_MATCH_ECN=m
@@ -1017,6 +1063,7 @@ CONFIG_IP_NF_MATCH_RPFILTER=m
 CONFIG_IP_NF_MATCH_TTL=m
 CONFIG_IP_NF_FILTER=m
 CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_SYNPROXY=m
 # CONFIG_IP_NF_TARGET_ULOG is not set
 CONFIG_NF_NAT_IPV4=m
 CONFIG_IP_NF_TARGET_MASQUERADE=m
@@ -1042,6 +1089,10 @@ CONFIG_IP_NF_MATCH_IPP2P=m
 #
 CONFIG_NF_DEFRAG_IPV6=y
 CONFIG_NF_CONNTRACK_IPV6=y
+CONFIG_NF_TABLES_IPV6=m
+CONFIG_NFT_CHAIN_ROUTE_IPV6=m
+CONFIG_NFT_CHAIN_NAT_IPV6=m
+CONFIG_NFT_REJECT_IPV6=m
 CONFIG_IP6_NF_IPTABLES=y
 CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
@@ -1055,12 +1106,14 @@ CONFIG_IP6_NF_MATCH_RT=m
 CONFIG_IP6_NF_TARGET_HL=m
 CONFIG_IP6_NF_FILTER=m
 CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_TARGET_SYNPROXY=m
 CONFIG_IP6_NF_MANGLE=m
 CONFIG_IP6_NF_RAW=m
 CONFIG_IP6_NF_SECURITY=m
 CONFIG_NF_NAT_IPV6=m
 CONFIG_IP6_NF_TARGET_MASQUERADE=m
 CONFIG_IP6_NF_TARGET_NPT=m
+CONFIG_NF_TABLES_BRIDGE=m
 CONFIG_BRIDGE_NF_EBTABLES=m
 CONFIG_BRIDGE_EBT_BROUTE=m
 CONFIG_BRIDGE_EBT_T_FILTER=m
@@ -1085,7 +1138,6 @@ CONFIG_BRIDGE_EBT_LOG=m
 CONFIG_BRIDGE_EBT_NFLOG=m
 # CONFIG_IP_DCCP is not set
 CONFIG_IP_SCTP=m
-# CONFIG_SCTP_DBG_MSG is not set
 # CONFIG_SCTP_DBG_OBJCNT is not set
 # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
 CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
@@ -1127,6 +1179,7 @@ CONFIG_LLC=y
 # CONFIG_LAPB is not set
 # CONFIG_PHONET is not set
 # CONFIG_IEEE802154 is not set
+CONFIG_6LOWPAN_IPHC=m
 CONFIG_NET_SCHED=y
 
 #
@@ -1152,6 +1205,8 @@ CONFIG_NET_SCH_CHOKE=m
 CONFIG_NET_SCH_QFQ=m
 CONFIG_NET_SCH_CODEL=m
 CONFIG_NET_SCH_FQ_CODEL=m
+CONFIG_NET_SCH_FQ=m
+CONFIG_NET_SCH_HHF=m
 CONFIG_NET_SCH_PIE=m
 CONFIG_NET_SCH_INGRESS=m
 CONFIG_NET_SCH_PLUG=m
@@ -1171,6 +1226,7 @@ CONFIG_NET_CLS_RSVP=m
 CONFIG_NET_CLS_RSVP6=m
 CONFIG_NET_CLS_FLOW=m
 CONFIG_NET_CLS_CGROUP=m
+CONFIG_NET_CLS_BPF=m
 CONFIG_NET_EMATCH=y
 CONFIG_NET_EMATCH_STACK=32
 CONFIG_NET_EMATCH_CMP=m
@@ -1200,15 +1256,22 @@ CONFIG_BATMAN_ADV_DAT=y
 CONFIG_BATMAN_ADV_NC=y
 # CONFIG_BATMAN_ADV_DEBUG is not set
 CONFIG_OPENVSWITCH=m
+CONFIG_OPENVSWITCH_GRE=y
+CONFIG_OPENVSWITCH_VXLAN=y
 CONFIG_VSOCKETS=m
 CONFIG_VMWARE_VMCI_VSOCKETS=m
 CONFIG_NETLINK_MMAP=y
 CONFIG_NETLINK_DIAG=m
+CONFIG_NET_MPLS_GSO=m
+CONFIG_HSR=m
 CONFIG_RPS=y
 CONFIG_RFS_ACCEL=y
 CONFIG_XPS=y
-CONFIG_NETPRIO_CGROUP=m
+CONFIG_CGROUP_NET_PRIO=m
+CONFIG_CGROUP_NET_CLASSID=y
+CONFIG_NET_RX_BUSY_POLL=y
 CONFIG_BQL=y
+CONFIG_NET_FLOW_LIMIT=y
 
 #
 # Network testing
@@ -1325,6 +1388,7 @@ CONFIG_DMA_SHARED_BUFFER=y
 CONFIG_CONNECTOR=y
 CONFIG_PROC_EVENTS=y
 # CONFIG_MTD is not set
+CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
 CONFIG_PARPORT_SERIAL=m
@@ -1346,10 +1410,10 @@ CONFIG_PNPBIOS=y
 # CONFIG_PNPBIOS_PROC_FS is not set
 CONFIG_PNPACPI=y
 CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_NULL_BLK is not set
 CONFIG_BLK_DEV_FD=m
 # CONFIG_PARIDE is not set
 CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
-CONFIG_BLK_CPQ_DA=m
 CONFIG_BLK_CPQ_CISS_DA=m
 # CONFIG_CISS_SCSI_TAPE is not set
 CONFIG_BLK_DEV_DAC960=m
@@ -1385,7 +1449,6 @@ CONFIG_SENSORS_LIS3LV02D=m
 CONFIG_DUMMY_IRQ=m
 CONFIG_IBM_ASM=m
 # CONFIG_PHANTOM is not set
-# CONFIG_INTEL_MID_PTI is not set
 # CONFIG_SGI_IOC4 is not set
 CONFIG_TIFM_CORE=m
 CONFIG_TIFM_7XX1=m
@@ -1437,6 +1500,14 @@ CONFIG_ALTERA_STAPL=m
 # CONFIG_INTEL_MEI is not set
 # CONFIG_INTEL_MEI_ME is not set
 CONFIG_VMWARE_VMCI=m
+
+#
+# Intel MIC Host Driver
+#
+
+#
+# Intel MIC Card Driver
+#
 CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
@@ -1504,7 +1575,6 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=5000
 CONFIG_AIC7XXX_DEBUG_ENABLE=y
 CONFIG_AIC7XXX_DEBUG_MASK=0
 CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
-# CONFIG_SCSI_AIC7XXX_OLD is not set
 CONFIG_SCSI_AIC79XX=m
 CONFIG_AIC79XX_CMDS_PER_DEVICE=32
 CONFIG_AIC79XX_RESET_DELAY_MS=4000
@@ -1521,6 +1591,7 @@ CONFIG_SCSI_DPT_I2O=m
 CONFIG_SCSI_ADVANSYS=m
 CONFIG_SCSI_IN2000=m
 CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ESAS2R=m
 CONFIG_MEGARAID_NEWGEN=y
 CONFIG_MEGARAID_MM=m
 CONFIG_MEGARAID_MAILBOX=m
@@ -1646,6 +1717,7 @@ CONFIG_SATA_HIGHBANK=m
 CONFIG_SATA_MV=m
 CONFIG_SATA_NV=m
 CONFIG_SATA_PROMISE=m
+CONFIG_SATA_RCAR=m
 CONFIG_SATA_SIL=m
 CONFIG_SATA_SIS=m
 CONFIG_SATA_SVW=m
@@ -1729,14 +1801,14 @@ CONFIG_MD_MULTIPATH=m
 CONFIG_MD_FAULTY=m
 CONFIG_BCACHE=m
 # CONFIG_BCACHE_DEBUG is not set
-# CONFIG_BCACHE_EDEBUG is not set
 # CONFIG_BCACHE_CLOSURES_DEBUG is not set
 CONFIG_BLK_DEV_DM_BUILTIN=y
 CONFIG_BLK_DEV_DM=y
 # CONFIG_DM_DEBUG is not set
-CONFIG_DM_BUFIO=m
+CONFIG_DM_BUFIO=y
 CONFIG_DM_BIO_PRISON=m
 CONFIG_DM_PERSISTENT_DATA=m
+# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
 CONFIG_DM_CRYPT=m
 CONFIG_DM_SNAPSHOT=y
 # CONFIG_DM_THIN_PROVISIONING is not set
@@ -1744,8 +1816,8 @@ CONFIG_DM_CACHE=m
 CONFIG_DM_CACHE_MQ=m
 CONFIG_DM_CACHE_CLEANER=m
 CONFIG_DM_MIRROR=y
-CONFIG_DM_RAID=m
 CONFIG_DM_LOG_USERSPACE=m
+CONFIG_DM_RAID=m
 CONFIG_DM_ZERO=y
 CONFIG_DM_MULTIPATH=m
 CONFIG_DM_MULTIPATH_QL=m
@@ -1754,6 +1826,7 @@ CONFIG_DM_MULTIPATH_ST=m
 CONFIG_DM_UEVENT=y
 # CONFIG_DM_FLAKEY is not set
 CONFIG_DM_VERITY=m
+CONFIG_DM_SWITCH=m
 # CONFIG_TARGET_CORE is not set
 CONFIG_FUSION=y
 CONFIG_FUSION_SPI=m
@@ -1784,12 +1857,12 @@ CONFIG_I2O_PROC=m
 CONFIG_MACINTOSH_DRIVERS=y
 # CONFIG_MAC_EMUMOUSEBTN is not set
 CONFIG_NETDEVICES=y
+CONFIG_MII=m
 CONFIG_NET_CORE=y
 CONFIG_BONDING=m
 CONFIG_DUMMY=m
 # CONFIG_EQUALIZER is not set
 # CONFIG_NET_FC is not set
-CONFIG_MII=m
 CONFIG_IFB=m
 # CONFIG_NET_TEAM is not set
 CONFIG_MACVLAN=m
@@ -1809,6 +1882,7 @@ CONFIG_IMQ_NUM_DEVS=2
 CONFIG_TUN=m
 CONFIG_VETH=m
 CONFIG_VIRTIO_NET=m
+CONFIG_NLMON=m
 CONFIG_SUNGEM_PHY=m
 # CONFIG_ARCNET is not set
 CONFIG_ATM_DRIVERS=y
@@ -1847,6 +1921,7 @@ CONFIG_ATM_SOLOS=m
 #
 CONFIG_VHOST_NET=m
 CONFIG_VHOST_RING=m
+CONFIG_VHOST=m
 
 #
 # Distributed Switch Architecture drivers
@@ -1876,6 +1951,7 @@ CONFIG_LANCE=m
 CONFIG_PCNET32=m
 CONFIG_PCMCIA_NMCLAN=m
 CONFIG_NI65=m
+CONFIG_NET_VENDOR_ARC=y
 CONFIG_NET_VENDOR_ATHEROS=y
 CONFIG_ATL2=m
 CONFIG_ATL1=m
@@ -1951,6 +2027,9 @@ CONFIG_IXGBE=m
 CONFIG_IXGBE_HWMON=y
 CONFIG_IXGBE_DCA=y
 CONFIG_IXGBEVF=m
+CONFIG_I40E=m
+CONFIG_I40E_VXLAN=y
+CONFIG_I40EVF=m
 CONFIG_NET_VENDOR_I825XX=y
 CONFIG_IP1000=m
 CONFIG_JME=m
@@ -1965,6 +2044,7 @@ CONFIG_NET_VENDOR_MELLANOX=y
 CONFIG_MLX4_EN=m
 CONFIG_MLX4_CORE=m
 CONFIG_MLX4_DEBUG=y
+# CONFIG_MLX5_CORE is not set
 CONFIG_NET_VENDOR_MICREL=y
 CONFIG_KS8842=m
 CONFIG_KS8851_MLL=m
@@ -2004,6 +2084,7 @@ CONFIG_8139TOO=m
 CONFIG_8139TOO_8129=y
 # CONFIG_8139_OLD_RX_RESET is not set
 CONFIG_R8169=m
+CONFIG_SH_ETH=m
 CONFIG_NET_VENDOR_RDC=y
 CONFIG_R6040=m
 CONFIG_NET_VENDOR_SEEQ=y
@@ -2019,6 +2100,8 @@ CONFIG_NET_VENDOR_SMSC=y
 CONFIG_SMC9194=m
 CONFIG_PCMCIA_SMC91C92=m
 CONFIG_EPIC100=m
+CONFIG_SMSC911X=m
+# CONFIG_SMSC911X_ARCH_HOOKS is not set
 CONFIG_SMSC9420=m
 CONFIG_NET_VENDOR_STMICRO=y
 CONFIG_STMMAC_ETH=m
@@ -2105,8 +2188,11 @@ CONFIG_USB_NET_AX88179_178A=m
 CONFIG_USB_NET_CDCETHER=m
 CONFIG_USB_NET_CDC_EEM=m
 CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_HUAWEI_CDC_NCM=m
 CONFIG_USB_NET_CDC_MBIM=m
 CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9700=m
+CONFIG_USB_NET_SR9800=m
 CONFIG_USB_NET_SMSC75XX=m
 CONFIG_USB_NET_SMSC95XX=m
 CONFIG_USB_NET_GL620A=m
@@ -2166,26 +2252,39 @@ CONFIG_ATH9K=m
 CONFIG_ATH9K_PCI=y
 CONFIG_ATH9K_AHB=y
 # CONFIG_ATH9K_DEBUGFS is not set
+# CONFIG_ATH9K_WOW is not set
 # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
+CONFIG_ATH9K_RFKILL=y
 CONFIG_ATH9K_HTC=m
 # CONFIG_ATH9K_HTC_DEBUGFS is not set
 CONFIG_CARL9170=m
 CONFIG_CARL9170_LEDS=y
 CONFIG_CARL9170_WPC=y
-# CONFIG_CARL9170_HWRNG is not set
+CONFIG_CARL9170_HWRNG=y
 # CONFIG_ATH6KL is not set
 CONFIG_AR5523=m
 CONFIG_WIL6210=m
 CONFIG_WIL6210_ISR_COR=y
+CONFIG_WIL6210_TRACING=y
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+# CONFIG_ATH10K_DEBUG is not set
+# CONFIG_ATH10K_DEBUGFS is not set
+# CONFIG_ATH10K_TRACING is not set
+CONFIG_WCN36XX=m
+# CONFIG_WCN36XX_DEBUGFS is not set
 CONFIG_B43=m
+CONFIG_B43_BCMA=y
 CONFIG_B43_SSB=y
 CONFIG_B43_PCI_AUTOSELECT=y
 CONFIG_B43_PCICORE_AUTOSELECT=y
 # CONFIG_B43_PCMCIA is not set
 CONFIG_B43_SDIO=y
+CONFIG_B43_BCMA_PIO=y
 CONFIG_B43_PIO=y
 CONFIG_B43_PHY_N=y
 CONFIG_B43_PHY_LP=y
+CONFIG_B43_PHY_HT=y
 CONFIG_B43_LEDS=y
 CONFIG_B43_HWRNG=y
 # CONFIG_B43_DEBUG is not set
@@ -2201,6 +2300,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
 # CONFIG_B43LEGACY_DMA_MODE is not set
 # CONFIG_B43LEGACY_PIO_MODE is not set
 CONFIG_BRCMUTIL=m
+CONFIG_BRCMSMAC=m
 CONFIG_BRCMFMAC=m
 CONFIG_BRCMFMAC_SDIO=y
 # CONFIG_BRCMFMAC_USB is not set
@@ -2233,7 +2333,6 @@ CONFIG_IWLWIFI_OPMODE_MODULAR=y
 #
 # CONFIG_IWLWIFI_DEBUG is not set
 # CONFIG_IWLWIFI_DEVICE_TRACING is not set
-CONFIG_IWLWIFI_P2P=y
 CONFIG_IWLEGACY=m
 CONFIG_IWL4965=m
 CONFIG_IWL3945=m
@@ -2275,10 +2374,12 @@ CONFIG_RT73USB=m
 CONFIG_RT2800USB=m
 CONFIG_RT2800USB_RT33XX=y
 CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_RT3573=y
 CONFIG_RT2800USB_RT53XX=y
 CONFIG_RT2800USB_RT55XX=y
 CONFIG_RT2800USB_UNKNOWN=y
 CONFIG_RT2800_LIB=m
+CONFIG_RT2800_LIB_MMIO=m
 CONFIG_RT2X00_LIB_MMIO=m
 CONFIG_RT2X00_LIB_PCI=m
 CONFIG_RT2X00_LIB_USB=m
@@ -2287,14 +2388,17 @@ CONFIG_RT2X00_LIB_FIRMWARE=y
 CONFIG_RT2X00_LIB_CRYPTO=y
 CONFIG_RT2X00_LIB_LEDS=y
 # CONFIG_RT2X00_DEBUG is not set
-CONFIG_RTLWIFI=m
-# CONFIG_RTLWIFI_DEBUG is not set
+CONFIG_RTL_CARDS=m
 CONFIG_RTL8192CE=m
 CONFIG_RTL8192SE=m
 CONFIG_RTL8192DE=m
 CONFIG_RTL8723AE=m
 CONFIG_RTL8188EE=m
 CONFIG_RTL8192CU=m
+CONFIG_RTLWIFI=m
+CONFIG_RTLWIFI_PCI=m
+CONFIG_RTLWIFI_USB=m
+# CONFIG_RTLWIFI_DEBUG is not set
 CONFIG_RTL8192C_COMMON=m
 CONFIG_WL_TI=y
 CONFIG_WL1251=m
@@ -2310,6 +2414,8 @@ CONFIG_MWIFIEX=m
 CONFIG_MWIFIEX_SDIO=m
 CONFIG_MWIFIEX_PCIE=m
 CONFIG_MWIFIEX_USB=m
+CONFIG_CW1200=m
+CONFIG_CW1200_WLAN_SDIO=m
 
 #
 # Enable WiMAX (Networking options) to see the WiMAX drivers
@@ -2414,8 +2520,8 @@ CONFIG_HISAX_FRITZ_PCIPNP=m
 CONFIG_ISDN_CAPI=m
 CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
 CONFIG_CAPI_TRACE=y
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPIDRV=m
 
 #
@@ -2561,11 +2667,13 @@ CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 # CONFIG_INPUT_IMS_PCU is not set
 # CONFIG_INPUT_CMA3000 is not set
 CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y
+CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
 
 #
 # Hardware I/O ports
 #
 CONFIG_SERIO=y
+CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
 CONFIG_SERIO_I8042=y
 CONFIG_SERIO_SERPORT=y
 # CONFIG_SERIO_CT82C710 is not set
@@ -2576,6 +2684,7 @@ CONFIG_SERIO_RAW=m
 CONFIG_SERIO_ALTERA_PS2=m
 # CONFIG_SERIO_PS2MULT is not set
 CONFIG_SERIO_ARC_PS2=m
+CONFIG_HYPERV_KEYBOARD=m
 # CONFIG_GAMEPORT is not set
 
 #
@@ -2606,7 +2715,6 @@ CONFIG_N_HDLC=m
 CONFIG_N_GSM=m
 # CONFIG_TRACE_SINK is not set
 # CONFIG_DEVKMEM is not set
-# CONFIG_STALDRV is not set
 
 #
 # Serial drivers
@@ -2649,6 +2757,7 @@ CONFIG_SERIAL_ARC=m
 CONFIG_SERIAL_ARC_NR_PORTS=1
 CONFIG_SERIAL_RP2=m
 CONFIG_SERIAL_RP2_NR_UARTS=32
+CONFIG_SERIAL_FSL_LPUART=m
 # CONFIG_TTY_PRINTK is not set
 CONFIG_PRINTER=m
 CONFIG_LP_CONSOLE=y
@@ -2701,7 +2810,15 @@ CONFIG_I2C=m
 CONFIG_I2C_BOARDINFO=y
 CONFIG_I2C_COMPAT=y
 CONFIG_I2C_CHARDEV=m
-# CONFIG_I2C_MUX is not set
+CONFIG_I2C_MUX=m
+
+#
+# Multiplexer I2C Chip support
+#
+CONFIG_I2C_MUX_GPIO=m
+CONFIG_I2C_MUX_PCA9541=m
+CONFIG_I2C_MUX_PCA954x=m
+CONFIG_I2C_MUX_PINCTRL=m
 CONFIG_I2C_HELPER_AUTO=y
 CONFIG_I2C_SMBUS=m
 CONFIG_I2C_ALGOBIT=m
@@ -2746,7 +2863,6 @@ CONFIG_I2C_DESIGNWARE_PLATFORM=m
 # CONFIG_I2C_DESIGNWARE_PCI is not set
 # CONFIG_I2C_EG20T is not set
 # CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_INTEL_MID is not set
 # CONFIG_I2C_OCORES is not set
 CONFIG_I2C_PCA_PLATFORM=m
 # CONFIG_I2C_PXA_PCI is not set
@@ -2759,6 +2875,7 @@ CONFIG_I2C_SIMTEC=m
 CONFIG_I2C_DIOLAN_U2C=m
 CONFIG_I2C_PARPORT=m
 CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_ROBOTFUZZ_OSIF=m
 # CONFIG_I2C_TAOS_EVM is not set
 CONFIG_I2C_TINY_USB=m
 CONFIG_I2C_VIPERBOARD=m
@@ -2773,11 +2890,6 @@ CONFIG_SCx200_ACB=m
 # CONFIG_I2C_DEBUG_ALGO is not set
 # CONFIG_I2C_DEBUG_BUS is not set
 # CONFIG_SPI is not set
-
-#
-# Qualcomm MSM SSBI bus support
-#
-# CONFIG_SSBI is not set
 CONFIG_HSI=m
 CONFIG_HSI_BOARDINFO=y
 
@@ -2813,9 +2925,18 @@ CONFIG_PTP_1588_CLOCK=m
 # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
 #
 CONFIG_PTP_1588_CLOCK_PCH=m
+CONFIG_PINCTRL=y
+
+#
+# Pin controllers
+#
+# CONFIG_PINMUX is not set
+# CONFIG_PINCONF is not set
+# CONFIG_DEBUG_PINCTRL is not set
+CONFIG_PINCTRL_BAYTRAIL=y
 CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
-CONFIG_GPIO_DEVRES=y
 CONFIG_GPIOLIB=y
+CONFIG_GPIO_DEVRES=y
 CONFIG_GPIO_ACPI=y
 # CONFIG_DEBUG_GPIO is not set
 CONFIG_GPIO_SYSFS=y
@@ -2825,6 +2946,8 @@ CONFIG_GPIO_SYSFS=y
 #
 # CONFIG_GPIO_GENERIC_PLATFORM is not set
 # CONFIG_GPIO_IT8761E is not set
+CONFIG_GPIO_F7188X=m
+CONFIG_GPIO_SCH311X=m
 CONFIG_GPIO_TS5500=m
 CONFIG_GPIO_SCH=m
 CONFIG_GPIO_ICH=m
@@ -2845,7 +2968,7 @@ CONFIG_GPIO_ICH=m
 #
 # CONFIG_GPIO_CS5535 is not set
 # CONFIG_GPIO_AMD8111 is not set
-# CONFIG_GPIO_LANGWELL is not set
+# CONFIG_GPIO_INTEL_MID is not set
 # CONFIG_GPIO_PCH is not set
 # CONFIG_GPIO_ML_IOH is not set
 # CONFIG_GPIO_RDC321X is not set
@@ -2853,12 +2976,15 @@ CONFIG_GPIO_ICH=m
 #
 # SPI GPIO expanders:
 #
-# CONFIG_GPIO_MCP23S08 is not set
 
 #
 # AC97 GPIO expanders:
 #
 
+#
+# LPC GPIO expanders:
+#
+
 #
 # MODULbus GPIO expanders:
 #
@@ -2909,12 +3035,14 @@ CONFIG_GENERIC_ADC_BATTERY=m
 # CONFIG_BATTERY_BQ27x00 is not set
 # CONFIG_BATTERY_MAX17040 is not set
 # CONFIG_BATTERY_MAX17042 is not set
+# CONFIG_CHARGER_ISP1704 is not set
 # CONFIG_CHARGER_MAX8903 is not set
 # CONFIG_CHARGER_LP8727 is not set
 # CONFIG_CHARGER_GPIO is not set
 # CONFIG_CHARGER_BQ2415X is not set
+# CONFIG_CHARGER_BQ24190 is not set
+# CONFIG_CHARGER_BQ24735 is not set
 # CONFIG_CHARGER_SMB347 is not set
-# CONFIG_BATTERY_GOLDFISH is not set
 CONFIG_POWER_RESET=y
 CONFIG_POWER_AVS=y
 CONFIG_HWMON=y
@@ -2954,10 +3082,12 @@ CONFIG_SENSORS_F71882FG=m
 CONFIG_SENSORS_F75375S=m
 CONFIG_SENSORS_FSCHMD=m
 CONFIG_SENSORS_G760A=m
+CONFIG_SENSORS_G762=m
 CONFIG_SENSORS_GL518SM=m
 CONFIG_SENSORS_GL520SM=m
 # CONFIG_SENSORS_GPIO_FAN is not set
 CONFIG_SENSORS_HIH6130=m
+CONFIG_SENSORS_HTU21=m
 CONFIG_SENSORS_CORETEMP=m
 CONFIG_SENSORS_IBMAEM=m
 CONFIG_SENSORS_IBMPEX=m
@@ -3061,9 +3191,14 @@ CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
 CONFIG_THERMAL_GOV_FAIR_SHARE=y
 CONFIG_THERMAL_GOV_STEP_WISE=y
 CONFIG_THERMAL_GOV_USER_SPACE=y
-CONFIG_CPU_THERMAL=y
 CONFIG_THERMAL_EMULATION=y
 CONFIG_INTEL_POWERCLAMP=m
+CONFIG_X86_PKG_TEMP_THERMAL=m
+CONFIG_ACPI_INT3403_THERMAL=m
+
+#
+# Texas Instruments thermal drivers
+#
 CONFIG_WATCHDOG=y
 CONFIG_WATCHDOG_CORE=y
 CONFIG_WATCHDOG_NOWAYOUT=y
@@ -3072,6 +3207,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
 # Watchdog Device Drivers
 #
 CONFIG_SOFT_WATCHDOG=m
+CONFIG_DW_WATCHDOG=m
 CONFIG_RETU_WATCHDOG=m
 CONFIG_ACQUIRE_WDT=m
 CONFIG_ADVANTECH_WDT=m
@@ -3111,6 +3247,7 @@ CONFIG_W83877F_WDT=m
 CONFIG_W83977F_WDT=m
 CONFIG_MACHZ_WDT=m
 CONFIG_SBC_EPX_C3_WATCHDOG=m
+CONFIG_MEN_A21_WDT=m
 CONFIG_XEN_WDT=m
 
 #
@@ -3154,7 +3291,14 @@ CONFIG_BCMA_POSSIBLE=y
 #
 # Broadcom specific AMBA
 #
-# CONFIG_BCMA is not set
+CONFIG_BCMA=m
+CONFIG_BCMA_BLOCKIO=y
+CONFIG_BCMA_HOST_PCI_POSSIBLE=y
+CONFIG_BCMA_HOST_PCI=y
+CONFIG_BCMA_HOST_SOC=y
+CONFIG_BCMA_DRIVER_GMAC_CMN=y
+CONFIG_BCMA_DRIVER_GPIO=y
+# CONFIG_BCMA_DEBUG is not set
 
 #
 # Multifunction device drivers
@@ -3167,6 +3311,7 @@ CONFIG_MFD_CS5535=m
 CONFIG_LPC_ICH=m
 CONFIG_LPC_SCH=m
 # CONFIG_MFD_JANZ_CMODIO is not set
+# CONFIG_MFD_KEMPLD is not set
 CONFIG_MFD_VIPERBOARD=m
 CONFIG_MFD_RETU=m
 # CONFIG_MFD_PCF50633 is not set
@@ -3179,6 +3324,7 @@ CONFIG_MFD_SM501_GPIO=y
 # CONFIG_ABX500_CORE is not set
 # CONFIG_MFD_SYSCON is not set
 # CONFIG_MFD_TI_AM335X_TSCADC is not set
+# CONFIG_MFD_LP3943 is not set
 # CONFIG_TPS6105X is not set
 # CONFIG_TPS65010 is not set
 # CONFIG_TPS6507X is not set
@@ -3218,7 +3364,6 @@ CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_MEMOPS=m
 CONFIG_VIDEOBUF2_DMA_CONTIG=m
 CONFIG_VIDEOBUF2_VMALLOC=m
-CONFIG_VIDEO_V4L2_INT_DEVICE=m
 CONFIG_DVB_CORE=m
 CONFIG_DVB_NET=y
 CONFIG_TTPCI_EEPROM=m
@@ -3301,6 +3446,7 @@ CONFIG_USB_GSPCA_SQ905=m
 CONFIG_USB_GSPCA_SQ905C=m
 CONFIG_USB_GSPCA_SQ930X=m
 CONFIG_USB_GSPCA_STK014=m
+CONFIG_USB_GSPCA_STK1135=m
 CONFIG_USB_GSPCA_STV0680=m
 CONFIG_USB_GSPCA_SUNPLUS=m
 CONFIG_USB_GSPCA_T613=m
@@ -3317,7 +3463,7 @@ CONFIG_VIDEO_CPIA2=m
 CONFIG_USB_ZR364XX=m
 CONFIG_USB_STKWEBCAM=m
 CONFIG_USB_S2255=m
-CONFIG_USB_SN9C102=m
+CONFIG_VIDEO_USBTV=m
 
 #
 # Analog TV USB devices
@@ -3329,8 +3475,9 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_HDPVR=m
 CONFIG_VIDEO_TLG2300=m
 CONFIG_VIDEO_USBVISION=m
-CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_STK1160_COMMON=m
 CONFIG_VIDEO_STK1160_AC97=y
+CONFIG_VIDEO_STK1160=m
 
 #
 # Analog/digital TV USB devices
@@ -3399,6 +3546,7 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m
 # Webcam, TV (analog/digital) USB devices
 #
 CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_V4L2=m
 CONFIG_VIDEO_EM28XX_ALSA=m
 CONFIG_VIDEO_EM28XX_DVB=m
 CONFIG_VIDEO_EM28XX_RC=m
@@ -3440,6 +3588,7 @@ CONFIG_VIDEO_CX88=m
 CONFIG_VIDEO_CX88_ALSA=m
 CONFIG_VIDEO_CX88_BLACKBIRD=m
 CONFIG_VIDEO_CX88_DVB=m
+CONFIG_VIDEO_CX88_ENABLE_VP3054=y
 CONFIG_VIDEO_CX88_VP3054=m
 CONFIG_VIDEO_CX88_MPEG=m
 CONFIG_VIDEO_BT848=m
@@ -3475,12 +3624,15 @@ CONFIG_VIDEO_CAFE_CCIC=m
 # CONFIG_VIDEO_VIA_CAMERA is not set
 CONFIG_VIDEO_TIMBERDALE=m
 CONFIG_SOC_CAMERA=m
+CONFIG_SOC_CAMERA_SCALE_CROP=m
 CONFIG_SOC_CAMERA_PLATFORM=m
+CONFIG_VIDEO_RCAR_VIN=m
 CONFIG_VIDEO_SH_MOBILE_CSI2=m
 CONFIG_VIDEO_SH_MOBILE_CEU=m
 CONFIG_V4L_MEM2MEM_DRIVERS=y
 CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
 CONFIG_VIDEO_SH_VEU=m
+CONFIG_VIDEO_RENESAS_VSP1=m
 # CONFIG_V4L_TEST_DRIVERS is not set
 
 #
@@ -3508,7 +3660,6 @@ CONFIG_VIDEO_SAA7146=m
 CONFIG_VIDEO_SAA7146_VV=m
 CONFIG_SMS_SIANO_MDTV=m
 CONFIG_SMS_SIANO_RC=y
-# CONFIG_SMS_SIANO_DEBUGFS is not set
 
 #
 # Media ancillary drivers (tuners, sensors, i2c, frontends)
@@ -3581,7 +3732,12 @@ CONFIG_VIDEO_UPD64031A=m
 CONFIG_VIDEO_UPD64083=m
 
 #
-# Miscelaneous helper chips
+# Audio/Video compression chips
+#
+CONFIG_VIDEO_SAA6752HS=m
+
+#
+# Miscellaneous helper chips
 #
 CONFIG_VIDEO_M52790=m
 
@@ -3632,6 +3788,7 @@ CONFIG_MEDIA_TUNER_FC0013=m
 CONFIG_MEDIA_TUNER_TDA18212=m
 CONFIG_MEDIA_TUNER_E4000=m
 CONFIG_MEDIA_TUNER_FC2580=m
+CONFIG_MEDIA_TUNER_M88TS2022=m
 CONFIG_MEDIA_TUNER_TUA9001=m
 CONFIG_MEDIA_TUNER_IT913X=m
 CONFIG_MEDIA_TUNER_R820T=m
@@ -3643,6 +3800,7 @@ CONFIG_DVB_STB0899=m
 CONFIG_DVB_STB6100=m
 CONFIG_DVB_STV090x=m
 CONFIG_DVB_STV6110x=m
+CONFIG_DVB_M88DS3103=m
 
 #
 # Multistandard (cable + terrestrial) frontends
@@ -3673,7 +3831,7 @@ CONFIG_DVB_TUNER_CX24113=m
 CONFIG_DVB_TDA826X=m
 CONFIG_DVB_TUA6100=m
 CONFIG_DVB_CX24116=m
-CONFIG_DVB_M88DS3103=m
+CONFIG_DVB_CX24117=m
 CONFIG_DVB_M88DC2800=m
 CONFIG_DVB_SI21XX=m
 CONFIG_DVB_TS2020=m
@@ -3780,12 +3938,14 @@ CONFIG_AGP_SIS=y
 # CONFIG_AGP_SWORKS is not set
 CONFIG_AGP_VIA=y
 # CONFIG_AGP_EFFICEON is not set
+CONFIG_INTEL_GTT=y
 CONFIG_VGA_ARB=y
 CONFIG_VGA_ARB_MAX_GPUS=16
 CONFIG_VGA_SWITCHEROO=y
 CONFIG_DRM=m
 CONFIG_DRM_USB=m
 CONFIG_DRM_KMS_HELPER=m
+CONFIG_DRM_KMS_FB_HELPER=y
 # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
 CONFIG_DRM_TTM=m
 
@@ -3806,6 +3966,9 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
 CONFIG_DRM_I810=m
 CONFIG_DRM_I915=m
 CONFIG_DRM_I915_KMS=y
+CONFIG_DRM_I915_FBDEV=y
+CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y
+# CONFIG_DRM_I915_UMS is not set
 CONFIG_DRM_MGA=m
 CONFIG_DRM_SIS=m
 CONFIG_DRM_VIA=m
@@ -3820,6 +3983,7 @@ CONFIG_DRM_AST=m
 CONFIG_DRM_MGAG200=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_QXL=m
+CONFIG_DRM_BOCHS=m
 CONFIG_VGASTATE=m
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 CONFIG_HDMI=y
@@ -3860,6 +4024,7 @@ CONFIG_FB_VESA=y
 CONFIG_FB_EFI=y
 # CONFIG_FB_N411 is not set
 CONFIG_FB_HGA=m
+CONFIG_FB_OPENCORES=m
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_NVIDIA is not set
 CONFIG_FB_RIVA=m
@@ -3917,6 +4082,7 @@ CONFIG_XEN_FBDEV_FRONTEND=m
 # CONFIG_FB_BROADSHEET is not set
 # CONFIG_FB_AUO_K190X is not set
 CONFIG_FB_HYPERV=m
+CONFIG_FB_SIMPLE=y
 # CONFIG_EXYNOS_VIDEO is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
 CONFIG_LCD_CLASS_DEVICE=m
@@ -3929,9 +4095,12 @@ CONFIG_BACKLIGHT_APPLE=m
 # CONFIG_BACKLIGHT_SAHARA is not set
 # CONFIG_BACKLIGHT_ADP8860 is not set
 # CONFIG_BACKLIGHT_ADP8870 is not set
-# CONFIG_BACKLIGHT_LM3630 is not set
+# CONFIG_BACKLIGHT_LM3630A is not set
 # CONFIG_BACKLIGHT_LM3639 is not set
 # CONFIG_BACKLIGHT_LP855X is not set
+# CONFIG_BACKLIGHT_GPIO is not set
+# CONFIG_BACKLIGHT_LV5207LP is not set
+# CONFIG_BACKLIGHT_BD6107 is not set
 
 #
 # Console display driver support
@@ -3943,9 +4112,6 @@ CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
 # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-# CONFIG_FONTS is not set
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
 CONFIG_LOGO=y
 # CONFIG_LOGO_LINUX_MONO is not set
 # CONFIG_LOGO_LINUX_VGA16 is not set
@@ -3969,6 +4135,7 @@ CONFIG_SND_SEQUENCER_OSS=y
 CONFIG_SND_HRTIMER=m
 CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
 CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_MAX_CARDS=32
 # CONFIG_SND_SUPPORT_OLD_API is not set
 CONFIG_SND_VERBOSE_PROCFS=y
 CONFIG_SND_VERBOSE_PRINTK=y
@@ -4038,7 +4205,6 @@ CONFIG_SND_SSCAPE=m
 CONFIG_SND_WAVEFRONT=m
 CONFIG_SND_MSND_PINNACLE=m
 CONFIG_SND_MSND_CLASSIC=m
-CONFIG_SND_TEA575X=m
 CONFIG_SND_PCI=y
 CONFIG_SND_AD1889=m
 CONFIG_SND_ALS300=m
@@ -4085,9 +4251,7 @@ CONFIG_SND_ENS1371=m
 CONFIG_SND_ES1938=m
 CONFIG_SND_ES1968=m
 CONFIG_SND_ES1968_INPUT=y
-CONFIG_SND_ES1968_RADIO=y
 CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X_BOOL=y
 CONFIG_SND_HDA_INTEL=m
 CONFIG_SND_HDA_PREALLOC_SIZE=64
 CONFIG_SND_HDA_HWDEP=y
@@ -4096,19 +4260,20 @@ CONFIG_SND_HDA_INPUT_BEEP=y
 CONFIG_SND_HDA_INPUT_BEEP_MODE=1
 CONFIG_SND_HDA_INPUT_JACK=y
 # CONFIG_SND_HDA_PATCH_LOADER is not set
-CONFIG_SND_HDA_CODEC_REALTEK=y
-CONFIG_SND_HDA_CODEC_ANALOG=y
-CONFIG_SND_HDA_CODEC_SIGMATEL=y
-CONFIG_SND_HDA_CODEC_VIA=y
-CONFIG_SND_HDA_CODEC_HDMI=y
-CONFIG_SND_HDA_CODEC_CIRRUS=y
-CONFIG_SND_HDA_CODEC_CONEXANT=y
-CONFIG_SND_HDA_CODEC_CA0110=y
-CONFIG_SND_HDA_CODEC_CA0132=y
+CONFIG_SND_HDA_CODEC_REALTEK=m
+CONFIG_SND_HDA_CODEC_ANALOG=m
+CONFIG_SND_HDA_CODEC_SIGMATEL=m
+CONFIG_SND_HDA_CODEC_VIA=m
+CONFIG_SND_HDA_CODEC_HDMI=m
+CONFIG_SND_HDA_I915=y
+CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CONEXANT=m
+CONFIG_SND_HDA_CODEC_CA0110=m
+CONFIG_SND_HDA_CODEC_CA0132=m
 # CONFIG_SND_HDA_CODEC_CA0132_DSP is not set
-CONFIG_SND_HDA_CODEC_CMEDIA=y
-CONFIG_SND_HDA_CODEC_SI3054=y
-CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_CODEC_CMEDIA=m
+CONFIG_SND_HDA_CODEC_SI3054=m
+CONFIG_SND_HDA_GENERIC=m
 CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
 CONFIG_SND_HDSP=m
 CONFIG_SND_HDSPM=m
@@ -4144,8 +4309,10 @@ CONFIG_SND_USB_CAIAQ=m
 CONFIG_SND_USB_CAIAQ_INPUT=y
 CONFIG_SND_USB_US122L=m
 CONFIG_SND_USB_6FIRE=m
+CONFIG_SND_USB_HIFACE=m
 CONFIG_SND_FIREWIRE=y
 CONFIG_SND_FIREWIRE_LIB=m
+# CONFIG_SND_DICE is not set
 CONFIG_SND_FIREWIRE_SPEAKERS=m
 # CONFIG_SND_ISIGHT is not set
 # CONFIG_SND_SCS1X is not set
@@ -4181,8 +4348,10 @@ CONFIG_HID_CYPRESS=y
 # CONFIG_HID_DRAGONRISE is not set
 # CONFIG_HID_EMS_FF is not set
 # CONFIG_HID_ELECOM is not set
+# CONFIG_HID_ELO is not set
 CONFIG_HID_EZKEY=y
 # CONFIG_HID_HOLTEK is not set
+# CONFIG_HID_HUION is not set
 CONFIG_HID_KEYTOUCH=m
 CONFIG_HID_KYE=y
 # CONFIG_HID_UCLOGIC is not set
@@ -4214,7 +4383,6 @@ CONFIG_HID_PICOLCD_LCD=y
 CONFIG_HID_PICOLCD_LEDS=y
 CONFIG_HID_PICOLCD_CIR=y
 # CONFIG_HID_PRIMAX is not set
-# CONFIG_HID_PS3REMOTE is not set
 CONFIG_HID_ROCCAT=m
 CONFIG_HID_SAITEK=m
 CONFIG_HID_SAMSUNG=m
@@ -4231,6 +4399,7 @@ CONFIG_HID_THINGM=m
 # CONFIG_HID_THRUSTMASTER is not set
 # CONFIG_HID_WACOM is not set
 # CONFIG_HID_WIIMOTE is not set
+# CONFIG_HID_XINMO is not set
 # CONFIG_HID_ZEROPLUS is not set
 CONFIG_HID_ZYDACRON=m
 CONFIG_HID_SENSOR_HUB=m
@@ -4246,9 +4415,7 @@ CONFIG_USB_HIDDEV=y
 # I2C HID support
 #
 CONFIG_I2C_HID=m
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB_ARCH_HAS_XHCI=y
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_SUPPORT=y
 CONFIG_USB_COMMON=y
 CONFIG_USB_ARCH_HAS_HCD=y
@@ -4261,7 +4428,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 #
 CONFIG_USB_DEFAULT_PERSIST=y
 # CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
+CONFIG_USB_OTG=y
 # CONFIG_USB_OTG_WHITELIST is not set
 # CONFIG_USB_OTG_BLACKLIST_HUB is not set
 CONFIG_USB_MON=m
@@ -4275,7 +4442,6 @@ CONFIG_USB_WUSB_CBAF=m
 # CONFIG_USB_C67X00_HCD is not set
 CONFIG_USB_XHCI_HCD=y
 CONFIG_USB_XHCI_PLATFORM=m
-# CONFIG_USB_XHCI_HCD_DEBUGGING is not set
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_EHCI_TT_NEWSCHED=y
@@ -4285,11 +4451,11 @@ CONFIG_USB_EHCI_HCD_PLATFORM=y
 # CONFIG_USB_ISP116X_HCD is not set
 # CONFIG_USB_ISP1760_HCD is not set
 CONFIG_USB_ISP1362_HCD=m
+# CONFIG_USB_FUSBH200_HCD is not set
+# CONFIG_USB_FOTG210_HCD is not set
 CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PCI=m
 CONFIG_USB_OHCI_HCD_PLATFORM=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
 CONFIG_USB_UHCI_HCD=y
 # CONFIG_USB_U132_HCD is not set
 CONFIG_USB_SL811_HCD=m
@@ -4298,7 +4464,9 @@ CONFIG_USB_SL811_HCD_ISO=y
 # CONFIG_USB_R8A66597_HCD is not set
 CONFIG_USB_WHCI_HCD=m
 CONFIG_USB_HWA_HCD=m
+CONFIG_USB_HCD_BCMA=m
 CONFIG_USB_HCD_SSB=m
+# CONFIG_USB_HCD_TEST_MODE is not set
 
 #
 # USB Device Class drivers
@@ -4337,9 +4505,22 @@ CONFIG_USB_STORAGE_ENE_UB6250=m
 #
 CONFIG_USB_MDC800=m
 CONFIG_USB_MICROTEK=m
+# CONFIG_USB_MUSB_HDRC is not set
 CONFIG_USB_DWC3=m
 CONFIG_USB_DWC3_HOST=y
+
+#
+# Platform Glue Driver Support
+#
+# CONFIG_USB_DWC3_EXYNOS is not set
+CONFIG_USB_DWC3_PCI=m
+CONFIG_USB_DWC3_KEYSTONE=m
+
+#
+# Debugging features
+#
 # CONFIG_USB_DWC3_DEBUG is not set
+# CONFIG_USB_DWC2 is not set
 CONFIG_USB_CHIPIDEA=m
 # CONFIG_USB_CHIPIDEA_HOST is not set
 # CONFIG_USB_CHIPIDEA_DEBUG is not set
@@ -4350,6 +4531,7 @@ CONFIG_USB_CHIPIDEA=m
 CONFIG_USB_USS720=m
 CONFIG_USB_SERIAL=m
 CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_SIMPLE=m
 CONFIG_USB_SERIAL_AIRCABLE=m
 CONFIG_USB_SERIAL_ARK3116=m
 CONFIG_USB_SERIAL_BELKIN=m
@@ -4360,7 +4542,6 @@ CONFIG_USB_SERIAL_CP210X=m
 CONFIG_USB_SERIAL_CYPRESS_M8=m
 # CONFIG_USB_SERIAL_EMPEG is not set
 CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
 CONFIG_USB_SERIAL_VISOR=m
 CONFIG_USB_SERIAL_IPAQ=m
 CONFIG_USB_SERIAL_IR=m
@@ -4379,16 +4560,14 @@ CONFIG_USB_SERIAL_MCT_U232=m
 CONFIG_USB_SERIAL_MOS7720=m
 CONFIG_USB_SERIAL_MOS7715_PARPORT=y
 CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_MXUPORT=m
 # CONFIG_USB_SERIAL_NAVMAN is not set
 CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_OTI6858=m
 CONFIG_USB_SERIAL_QCAUX=m
 CONFIG_USB_SERIAL_QUALCOMM=m
 CONFIG_USB_SERIAL_SPCP8X5=m
-# CONFIG_USB_SERIAL_HP4X is not set
 # CONFIG_USB_SERIAL_SAFE is not set
-CONFIG_USB_SERIAL_SIEMENS_MPI=m
 CONFIG_USB_SERIAL_SIERRAWIRELESS=m
 # CONFIG_USB_SERIAL_SYMBOL is not set
 # CONFIG_USB_SERIAL_TI is not set
@@ -4398,9 +4577,7 @@ CONFIG_USB_SERIAL_WWAN=m
 CONFIG_USB_SERIAL_OPTION=m
 # CONFIG_USB_SERIAL_OMNINET is not set
 # CONFIG_USB_SERIAL_OPTICON is not set
-# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
 # CONFIG_USB_SERIAL_XSENS_MT is not set
-# CONFIG_USB_SERIAL_ZIO is not set
 # CONFIG_USB_SERIAL_WISHBONE is not set
 CONFIG_USB_SERIAL_ZTE=m
 CONFIG_USB_SERIAL_SSU100=m
@@ -4429,6 +4606,7 @@ CONFIG_USB_SISUSBVGA_CON=y
 # CONFIG_USB_TRANCEVIBRATOR is not set
 CONFIG_USB_IOWARRIOR=m
 # CONFIG_USB_TEST is not set
+CONFIG_USB_EHSET_TEST_FIXTURE=m
 # CONFIG_USB_ISIGHTFW is not set
 CONFIG_USB_YUREX=m
 CONFIG_USB_EZUSB_FX2=m
@@ -4438,7 +4616,18 @@ CONFIG_USB_SPEEDTOUCH=m
 CONFIG_USB_CXACRU=m
 CONFIG_USB_UEAGLEATM=m
 CONFIG_USB_XUSBATM=m
-# CONFIG_USB_PHY is not set
+
+#
+# USB Physical Layer drivers
+#
+CONFIG_USB_PHY=y
+CONFIG_USB_OTG_FSM=m
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_SAMSUNG_USB2PHY is not set
+# CONFIG_SAMSUNG_USB3PHY is not set
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ISP1301 is not set
+# CONFIG_USB_RCAR_PHY is not set
 # CONFIG_USB_GADGET is not set
 CONFIG_UWB=m
 CONFIG_UWB_HWA=m
@@ -4484,6 +4673,7 @@ CONFIG_MEMSTICK=m
 #
 # CONFIG_MEMSTICK_UNSAFE_RESUME is not set
 CONFIG_MSPRO_BLOCK=m
+CONFIG_MS_BLOCK=m
 
 #
 # MemoryStick Host Controller Drivers
@@ -4509,14 +4699,15 @@ CONFIG_LEDS_LP55XX_COMMON=m
 CONFIG_LEDS_LP5521=m
 CONFIG_LEDS_LP5523=m
 CONFIG_LEDS_LP5562=m
+CONFIG_LEDS_LP8501=m
 CONFIG_LEDS_CLEVO_MAIL=m
 CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA9633=m
+CONFIG_LEDS_PCA963X=m
+CONFIG_LEDS_PCA9685=m
 CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_INTEL_SS4200=m
 CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_DELL_NETBOOKS=m
-# CONFIG_LEDS_RENESAS_TPU is not set
 CONFIG_LEDS_TCA6507=m
 CONFIG_LEDS_LM355x=m
 CONFIG_LEDS_OT200=m
@@ -4590,7 +4781,9 @@ CONFIG_RTC_DRV_MAX6900=m
 CONFIG_RTC_DRV_RS5C372=m
 CONFIG_RTC_DRV_ISL1208=m
 CONFIG_RTC_DRV_ISL12022=m
+CONFIG_RTC_DRV_ISL12057=m
 CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF2127=m
 CONFIG_RTC_DRV_PCF8523=m
 CONFIG_RTC_DRV_PCF8563=m
 CONFIG_RTC_DRV_PCF8583=m
@@ -4629,6 +4822,7 @@ CONFIG_RTC_DRV_DS2404=m
 #
 # on-CPU RTC drivers
 #
+CONFIG_RTC_DRV_MOXART=m
 
 #
 # HID Sensor RTC drivers
@@ -4642,8 +4836,9 @@ CONFIG_DMADEVICES=y
 #
 # CONFIG_INTEL_MID_DMAC is not set
 CONFIG_INTEL_IOATDMA=m
+CONFIG_DW_DMAC_CORE=m
 CONFIG_DW_DMAC=m
-# CONFIG_DW_DMAC_BIG_ENDIAN_IO is not set
+CONFIG_DW_DMAC_PCI=m
 CONFIG_TIMB_DMA=m
 CONFIG_PCH_DMA=m
 CONFIG_DMA_ENGINE=y
@@ -4654,17 +4849,18 @@ CONFIG_DMA_ACPI=y
 #
 CONFIG_ASYNC_TX_DMA=y
 # CONFIG_DMATEST is not set
+CONFIG_DMA_ENGINE_RAID=y
 CONFIG_DCA=m
 # CONFIG_AUXDISPLAY is not set
 CONFIG_UIO=m
 # CONFIG_UIO_CIF is not set
-# CONFIG_UIO_PDRV is not set
 # CONFIG_UIO_PDRV_GENIRQ is not set
 # CONFIG_UIO_DMEM_GENIRQ is not set
 CONFIG_UIO_AEC=m
 CONFIG_UIO_SERCOS3=m
 CONFIG_UIO_PCI_GENERIC=m
 # CONFIG_UIO_NETX is not set
+# CONFIG_UIO_MF624 is not set
 # CONFIG_VFIO is not set
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VIRTIO=y
@@ -4715,14 +4911,16 @@ CONFIG_USBIP_HOST=m
 # CONFIG_PRISM2_USB is not set
 CONFIG_ECHO=m
 # CONFIG_COMEDI is not set
-# CONFIG_ASUS_OLED is not set
 # CONFIG_PANEL is not set
 # CONFIG_R8187SE is not set
 # CONFIG_RTL8192U is not set
 # CONFIG_RTLLIB is not set
 # CONFIG_R8712U is not set
+# CONFIG_R8188EU is not set
+# CONFIG_R8821AE is not set
 CONFIG_RTS5139=m
 # CONFIG_RTS5139_DEBUG is not set
+# CONFIG_RTS5208 is not set
 # CONFIG_TRANZPORT is not set
 # CONFIG_IDE_PHISON is not set
 # CONFIG_LINE6_USB is not set
@@ -4797,10 +4995,7 @@ CONFIG_RTS5139=m
 # Triggers - standalone
 #
 # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
-# CONFIG_IIO_GPIO_TRIGGER is not set
-# CONFIG_IIO_SYSFS_TRIGGER is not set
 # CONFIG_IIO_SIMPLE_DUMMY is not set
-# CONFIG_ZSMALLOC is not set
 # CONFIG_WLAGS49_H2 is not set
 # CONFIG_WLAGS49_H25 is not set
 # CONFIG_FB_SM7XX is not set
@@ -4825,17 +5020,19 @@ CONFIG_RTS5139=m
 # CONFIG_ANDROID is not set
 # CONFIG_USB_WPAN_HCD is not set
 # CONFIG_WIMAX_GDM72XX is not set
-# CONFIG_CSR_WIFI is not set
+CONFIG_LTE_GDM724X=m
 # CONFIG_NET_VENDOR_SILICOM is not set
 # CONFIG_CED1401 is not set
 # CONFIG_DGRP is not set
 # CONFIG_FIREWIRE_SERIAL is not set
-# CONFIG_USB_DWC2 is not set
+# CONFIG_LUSTRE_FS is not set
+# CONFIG_XILLYBUS is not set
+# CONFIG_DGNC is not set
+# CONFIG_DGAP is not set
 CONFIG_X86_PLATFORM_DEVICES=y
 CONFIG_ACER_WMI=m
 CONFIG_ACERHDF=m
 CONFIG_ASUS_LAPTOP=m
-CONFIG_CHROMEOS_LAPTOP=m
 CONFIG_DELL_LAPTOP=m
 CONFIG_DELL_WMI=m
 CONFIG_DELL_WMI_AIO=m
@@ -4845,6 +5042,7 @@ CONFIG_FUJITSU_LAPTOP=m
 CONFIG_AMILO_RFKILL=m
 CONFIG_TC1100_WMI=m
 CONFIG_HP_ACCEL=m
+# CONFIG_HP_WIRELESS is not set
 CONFIG_HP_WMI=m
 CONFIG_MSI_LAPTOP=m
 CONFIG_PANASONIC_LAPTOP=m
@@ -4879,7 +5077,10 @@ CONFIG_MXM_WMI=m
 CONFIG_INTEL_OAKTRAIL=m
 CONFIG_SAMSUNG_Q10=m
 # CONFIG_APPLE_GMUX is not set
+CONFIG_INTEL_RST=m
+# CONFIG_INTEL_SMARTCONNECT is not set
 CONFIG_PVPANIC=m
+# CONFIG_CHROME_PLATFORMS is not set
 CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
@@ -4887,7 +5088,7 @@ CONFIG_COMMON_CLK=y
 #
 # Common Clock Framework
 #
-# CONFIG_COMMON_CLK_DEBUG is not set
+# CONFIG_COMMON_CLK_SI5351 is not set
 
 #
 # Hardware Spinlock drivers
@@ -4925,6 +5126,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 # Accelerometers
 #
+# CONFIG_BMA180 is not set
 # CONFIG_HID_SENSOR_ACCEL_3D is not set
 # CONFIG_IIO_ST_ACCEL_3AXIS is not set
 
@@ -4932,6 +5134,8 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 # Analog to digital converters
 #
 # CONFIG_MAX1363 is not set
+# CONFIG_MCP3422 is not set
+# CONFIG_NAU7802 is not set
 # CONFIG_TI_ADC081C is not set
 # CONFIG_VIPERBOARD_ADC is not set
 
@@ -4944,7 +5148,6 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 #
 CONFIG_HID_SENSOR_IIO_COMMON=m
 CONFIG_HID_SENSOR_IIO_TRIGGER=m
-# CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS is not set
 
 #
 # Digital to analog converters
@@ -4974,6 +5177,11 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
 # CONFIG_IIO_ST_GYRO_3AXIS is not set
 # CONFIG_ITG3200 is not set
 
+#
+# Humidity sensors
+#
+# CONFIG_DHT11 is not set
+
 #
 # Inertial measurement units
 #
@@ -4983,21 +5191,60 @@ CONFIG_HID_SENSOR_IIO_TRIGGER=m
 # Light sensors
 #
 # CONFIG_ADJD_S311 is not set
+# CONFIG_APDS9300 is not set
+# CONFIG_CM32181 is not set
+# CONFIG_CM36651 is not set
+# CONFIG_GP2AP020A00F is not set
+# CONFIG_HID_SENSOR_ALS is not set
 # CONFIG_SENSORS_LM3533 is not set
+# CONFIG_TCS3472 is not set
 # CONFIG_SENSORS_TSL2563 is not set
+# CONFIG_TSL4531 is not set
 # CONFIG_VCNL4000 is not set
-# CONFIG_HID_SENSOR_ALS is not set
 
 #
 # Magnetometer sensors
 #
 # CONFIG_AK8975 is not set
+# CONFIG_MAG3110 is not set
 # CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set
 # CONFIG_IIO_ST_MAGN_3AXIS is not set
+
+#
+# Inclinometer sensors
+#
+# CONFIG_HID_SENSOR_INCLINOMETER_3D is not set
+
+#
+# Triggers - standalone
+#
+# CONFIG_IIO_INTERRUPT_TRIGGER is not set
+# CONFIG_IIO_SYSFS_TRIGGER is not set
+
+#
+# Pressure sensors
+#
+# CONFIG_MPL3115 is not set
+# CONFIG_IIO_ST_PRESS is not set
+
+#
+# Temperature sensors
+#
+# CONFIG_TMP006 is not set
+# CONFIG_NTB is not set
 # CONFIG_VME_BUS is not set
 # CONFIG_PWM is not set
 # CONFIG_IPACK_BUS is not set
-# CONFIG_RESET_CONTROLLER is not set
+CONFIG_RESET_CONTROLLER=y
+# CONFIG_FMC is not set
+
+#
+# PHY Subsystem
+#
+CONFIG_GENERIC_PHY=y
+# CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set
+# CONFIG_BCM_KONA_USB2_PHY is not set
+# CONFIG_POWERCAP is not set
 
 #
 # Firmware Drivers
@@ -5009,6 +5256,7 @@ CONFIG_DELL_RBU=m
 CONFIG_DCDBAS=m
 CONFIG_DMIID=y
 CONFIG_DMI_SYSFS=y
+CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
 CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 # CONFIG_GOOGLE_FIRMWARE is not set
@@ -5019,6 +5267,7 @@ CONFIG_ISCSI_IBFT=m
 CONFIG_EFI_VARS=y
 CONFIG_EFI_VARS_PSTORE=y
 # CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
+CONFIG_UEFI_CPER=y
 
 #
 # File systems
@@ -5054,6 +5303,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
 # CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
 # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
 # CONFIG_BTRFS_DEBUG is not set
+CONFIG_BTRFS_ASSERT=y
 # CONFIG_NILFS2_FS is not set
 CONFIG_FS_POSIX_ACL=y
 CONFIG_EXPORTFS=y
@@ -5074,7 +5324,6 @@ CONFIG_QUOTACTL=y
 CONFIG_AUTOFS4_FS=y
 CONFIG_FUSE_FS=m
 CONFIG_CUSE=m
-CONFIG_GENERIC_ACL=y
 
 #
 # Caches
@@ -5157,10 +5406,13 @@ CONFIG_NFS_V3_ACL=y
 CONFIG_NFS_V4=m
 # CONFIG_NFS_SWAP is not set
 CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
 CONFIG_PNFS_FILE_LAYOUT=m
 CONFIG_PNFS_BLOCK=m
 CONFIG_PNFS_OBJLAYOUT=m
 CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="ipfire.org"
+CONFIG_NFS_V4_1_MIGRATION=y
+CONFIG_NFS_V4_SECURITY_LABEL=y
 CONFIG_NFS_FSCACHE=y
 # CONFIG_NFS_USE_LEGACY_DNS is not set
 CONFIG_NFS_USE_KERNEL_DNS=y
@@ -5169,6 +5421,7 @@ CONFIG_NFSD_V2_ACL=y
 CONFIG_NFSD_V3=y
 CONFIG_NFSD_V3_ACL=y
 CONFIG_NFSD_V4=y
+CONFIG_NFSD_V4_SECURITY_LABEL=y
 # CONFIG_NFSD_FAULT_INJECTION is not set
 CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
@@ -5253,64 +5506,92 @@ CONFIG_DLM=m
 # Kernel hacking
 #
 CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+
+#
+# printk and dmesg options
+#
 # CONFIG_PRINTK_TIME is not set
 CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+# CONFIG_BOOT_PRINTK_DELAY is not set
+CONFIG_DYNAMIC_DEBUG=y
+
+#
+# Compile-time checks and compiler options
+#
+# CONFIG_DEBUG_INFO is not set
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
 CONFIG_ENABLE_MUST_CHECK=y
 CONFIG_FRAME_WARN=2048
-# CONFIG_MAGIC_SYSRQ is not set
 CONFIG_STRIP_ASM_SYMS=y
 # CONFIG_READABLE_ASM is not set
 # CONFIG_UNUSED_SYMBOLS is not set
 CONFIG_DEBUG_FS=y
 CONFIG_HEADERS_CHECK=y
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_MAGIC_SYSRQ is not set
 CONFIG_DEBUG_KERNEL=y
+
+#
+# Memory Debugging
+#
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_VIRTUAL is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
+# CONFIG_DEBUG_HIGHMEM is not set
+CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
+CONFIG_DEBUG_STACKOVERFLOW=y
+CONFIG_HAVE_ARCH_KMEMCHECK=y
 CONFIG_DEBUG_SHIRQ=y
+
+#
+# Debug Lockups and Hangs
+#
 CONFIG_LOCKUP_DETECTOR=y
 CONFIG_HARDLOCKUP_DETECTOR=y
 # CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
 CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0
 # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+# CONFIG_DETECT_HUNG_TASK is not set
 # CONFIG_PANIC_ON_OOPS is not set
 CONFIG_PANIC_ON_OOPS_VALUE=0
-# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_TIMEOUT=0
 CONFIG_SCHED_DEBUG=y
 CONFIG_SCHEDSTATS=y
 CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_SLUB_DEBUG_ON is not set
-# CONFIG_SLUB_STATS is not set
-CONFIG_HAVE_DEBUG_KMEMLEAK=y
-# CONFIG_DEBUG_KMEMLEAK is not set
+
+#
+# Lock Debugging (spinlocks, mutexes, etc...)
+#
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
 # CONFIG_DEBUG_LOCK_ALLOC is not set
 # CONFIG_PROVE_LOCKING is not set
 # CONFIG_LOCK_STAT is not set
 # CONFIG_DEBUG_ATOMIC_SLEEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 CONFIG_STACKTRACE=y
-# CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_HIGHMEM is not set
 CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_VIRTUAL is not set
 # CONFIG_DEBUG_WRITECOUNT is not set
-CONFIG_DEBUG_MEMORY_INIT=y
 CONFIG_DEBUG_LIST=y
-# CONFIG_TEST_LIST_SORT is not set
 # CONFIG_DEBUG_SG is not set
 # CONFIG_DEBUG_NOTIFIERS is not set
 # CONFIG_DEBUG_CREDENTIALS is not set
-CONFIG_ARCH_WANT_FRAME_POINTERS=y
-CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
 
 #
 # RCU Debugging
@@ -5320,16 +5601,11 @@ CONFIG_FRAME_POINTER=y
 CONFIG_RCU_CPU_STALL_TIMEOUT=60
 # CONFIG_RCU_CPU_STALL_INFO is not set
 # CONFIG_RCU_TRACE is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
 # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-# CONFIG_DEBUG_PER_CPU_MAPS is not set
-# CONFIG_LKDTM is not set
 # CONFIG_NOTIFIER_ERROR_INJECTION is not set
 # CONFIG_FAULT_INJECTION is not set
 CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y
 # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
 CONFIG_USER_STACKTRACE_SUPPORT=y
 CONFIG_NOP_TRACER=y
 CONFIG_HAVE_FUNCTION_TRACER=y
@@ -5372,24 +5648,32 @@ CONFIG_FTRACE_MCOUNT_RECORD=y
 # CONFIG_MMIOTRACE is not set
 CONFIG_RING_BUFFER_BENCHMARK=m
 # CONFIG_RING_BUFFER_STARTUP_TEST is not set
+
+#
+# Runtime Testing
+#
+# CONFIG_LKDTM is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
 CONFIG_RBTREE_TEST=m
 # CONFIG_INTERVAL_TREE_TEST is not set
-# CONFIG_BUILD_DOCSRC is not set
-CONFIG_DYNAMIC_DEBUG=y
-# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_PERCPU_TEST is not set
 # CONFIG_ATOMIC64_SELFTEST is not set
 CONFIG_ASYNC_RAID6_TEST=m
+# CONFIG_TEST_STRING_HELPERS is not set
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_BUILD_DOCSRC is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_TEST_MODULE is not set
+# CONFIG_TEST_USER_COPY is not set
 # CONFIG_SAMPLES is not set
 CONFIG_HAVE_ARCH_KGDB=y
 # CONFIG_KGDB is not set
-CONFIG_HAVE_ARCH_KMEMCHECK=y
-# CONFIG_TEST_STRING_HELPERS is not set
-# CONFIG_TEST_KSTRTOX is not set
 CONFIG_STRICT_DEVMEM=y
 # CONFIG_X86_VERBOSE_BOOTUP is not set
 CONFIG_EARLY_PRINTK=y
 # CONFIG_EARLY_PRINTK_DBGP is not set
-CONFIG_DEBUG_STACKOVERFLOW=y
+CONFIG_EARLY_PRINTK_EFI=y
 # CONFIG_X86_PTDUMP is not set
 CONFIG_DEBUG_NX_TEST=m
 CONFIG_DOUBLEFAULT=y
@@ -5409,6 +5693,7 @@ CONFIG_DEBUG_BOOT_PARAMS=y
 # CONFIG_CPA_DEBUG is not set
 CONFIG_OPTIMIZE_INLINING=y
 # CONFIG_DEBUG_NMI_SELFTEST is not set
+# CONFIG_X86_DEBUG_STATIC_CPU_HAS is not set
 
 #
 # Security options
@@ -5466,6 +5751,7 @@ CONFIG_PAX_RANDMMAP=y
 #
 # Miscellaneous hardening features
 #
+CONFIG_PAX_MEMORY_SANITIZE=y
 CONFIG_PAX_MEMORY_STACKLEAK=y
 CONFIG_PAX_MEMORY_STRUCTLEAK=y
 CONFIG_PAX_REFCOUNT=y
@@ -5486,6 +5772,8 @@ CONFIG_GRKERNSEC_PROC_MEMMAP=y
 CONFIG_GRKERNSEC_BRUTE=y
 CONFIG_GRKERNSEC_MODHARDEN=y
 CONFIG_GRKERNSEC_HIDESYM=y
+CONFIG_GRKERNSEC_RANDSTRUCT=y
+CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE=y
 CONFIG_GRKERNSEC_KERN_LOCKOUT=y
 
 #
@@ -5545,12 +5833,12 @@ CONFIG_GRKERNSEC_DMESG=y
 CONFIG_GRKERNSEC_HARDEN_PTRACE=y
 CONFIG_GRKERNSEC_PTRACE_READEXEC=y
 CONFIG_GRKERNSEC_SETXID=y
+CONFIG_GRKERNSEC_HARDEN_IPC=y
 # CONFIG_GRKERNSEC_TPE is not set
 
 #
 # Network Protections
 #
-CONFIG_GRKERNSEC_RANDNET=y
 CONFIG_GRKERNSEC_BLACKHOLE=y
 CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 # CONFIG_GRKERNSEC_SOCKET is not set
@@ -5571,6 +5859,8 @@ CONFIG_GRKERNSEC_NO_SIMULT_CONNECT=y
 CONFIG_GRKERNSEC_FLOODTIME=10
 CONFIG_GRKERNSEC_FLOODBURST=6
 CONFIG_KEYS=y
+# CONFIG_PERSISTENT_KEYRINGS is not set
+# CONFIG_BIG_KEYS is not set
 # CONFIG_ENCRYPTED_KEYS is not set
 CONFIG_KEYS_DEBUG_PROC_KEYS=y
 CONFIG_SECURITY_DMESG_RESTRICT=y
@@ -5623,7 +5913,7 @@ CONFIG_CRYPTO_WORKQUEUE=y
 CONFIG_CRYPTO_CRYPTD=y
 CONFIG_CRYPTO_AUTHENC=m
 CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_ABLK_HELPER_X86=y
+CONFIG_CRYPTO_ABLK_HELPER=y
 CONFIG_CRYPTO_GLUE_HELPER_X86=m
 
 #
@@ -5659,6 +5949,7 @@ CONFIG_CRYPTO_CRC32C=y
 CONFIG_CRYPTO_CRC32C_INTEL=y
 CONFIG_CRYPTO_CRC32=y
 CONFIG_CRYPTO_CRC32_PCLMUL=m
+CONFIG_CRYPTO_CRCT10DIF=y
 CONFIG_CRYPTO_GHASH=m
 CONFIG_CRYPTO_MD4=m
 CONFIG_CRYPTO_MD5=y
@@ -5706,6 +5997,8 @@ CONFIG_CRYPTO_TWOFISH_586=m
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_ZLIB=m
 CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_LZ4=m
+CONFIG_CRYPTO_LZ4HC=m
 
 #
 # Random Number Generation
@@ -5714,11 +6007,15 @@ CONFIG_CRYPTO_ANSI_CPRNG=m
 CONFIG_CRYPTO_USER_API=y
 CONFIG_CRYPTO_USER_API_HASH=y
 CONFIG_CRYPTO_USER_API_SKCIPHER=y
+CONFIG_CRYPTO_HASH_INFO=y
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_PADLOCK=m
 CONFIG_CRYPTO_DEV_PADLOCK_AES=m
 CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
 CONFIG_CRYPTO_DEV_GEODE=m
+CONFIG_CRYPTO_DEV_CCP=y
+CONFIG_CRYPTO_DEV_CCP_DD=m
+CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
 CONFIG_ASYMMETRIC_KEY_TYPE=m
 CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
 CONFIG_PUBLIC_KEY_ALGO_RSA=m
@@ -5732,6 +6029,7 @@ CONFIG_KVM_MMIO=y
 CONFIG_KVM_ASYNC_PF=y
 CONFIG_HAVE_KVM_MSI=y
 CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
+CONFIG_KVM_VFIO=y
 CONFIG_VIRTUALIZATION=y
 CONFIG_KVM=m
 CONFIG_KVM_INTEL=m
@@ -5748,10 +6046,12 @@ CONFIG_RAID6_PQ=m
 CONFIG_BITREVERSE=y
 CONFIG_GENERIC_STRNCPY_FROM_USER=y
 CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_NET_UTILS=y
 CONFIG_GENERIC_FIND_FIRST_BIT=y
 CONFIG_GENERIC_PCI_IOMAP=y
 CONFIG_GENERIC_IOMAP=y
 CONFIG_GENERIC_IO=y
+CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
 CONFIG_CRC_CCITT=y
 CONFIG_CRC16=y
 CONFIG_CRC_T10DIF=y
@@ -5766,10 +6066,14 @@ CONFIG_CRC7=m
 CONFIG_LIBCRC32C=m
 CONFIG_CRC8=m
 CONFIG_AUDIT_GENERIC=y
+# CONFIG_RANDOM32_SELFTEST is not set
 CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
+CONFIG_ZLIB_DEFLATE=y
 CONFIG_LZO_COMPRESS=y
 CONFIG_LZO_DECOMPRESS=y
+CONFIG_LZ4_COMPRESS=m
+CONFIG_LZ4HC_COMPRESS=m
+CONFIG_LZ4_DECOMPRESS=y
 CONFIG_XZ_DEC=y
 CONFIG_XZ_DEC_X86=y
 CONFIG_XZ_DEC_POWERPC=y
@@ -5784,11 +6088,13 @@ CONFIG_DECOMPRESS_BZIP2=y
 CONFIG_DECOMPRESS_LZMA=y
 CONFIG_DECOMPRESS_XZ=y
 CONFIG_DECOMPRESS_LZO=y
+CONFIG_DECOMPRESS_LZ4=y
 CONFIG_GENERIC_ALLOCATOR=y
 CONFIG_TEXTSEARCH=y
 CONFIG_TEXTSEARCH_KMP=m
 CONFIG_TEXTSEARCH_BM=m
 CONFIG_TEXTSEARCH_FSM=m
+CONFIG_ASSOCIATIVE_ARRAY=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT=y
 CONFIG_HAS_DMA=y
@@ -5804,3 +6110,7 @@ CONFIG_CORDIC=m
 CONFIG_MPILIB=m
 CONFIG_OID_REGISTRY=m
 CONFIG_UCS2_STRING=y
+CONFIG_FONT_SUPPORT=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
diff --git a/config/rootfiles/common/armv5tel/dracut b/config/rootfiles/common/armv5tel/dracut
deleted file mode 100644 (file)
index 9c41aba..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#boot/ipfirerd-KVER-kirkwood.img
-#boot/ipfirerd-KVER-multi.img
-#boot/uInit-ipfire-kirkwood
-#boot/uInit-ipfire-multi
-etc/dracut.conf
-etc/dracut.conf.d
-#etc/dracut.conf.d/dracut.conf
-sbin/dracut
-sbin/dracut-catimages
-sbin/dracut-gencmdline
-sbin/lsinitrd
-sbin/mkinitrd
-usr/share/dracut
-usr/share/dracut/dracut-functions
-usr/share/dracut/modules.d
-usr/share/dracut/modules.d/60xen
-usr/share/dracut/modules.d/60xen/check
-usr/share/dracut/modules.d/60xen/install
-usr/share/dracut/modules.d/60xen/installkernel
-usr/share/dracut/modules.d/60xen/xen-pre-udev.sh
-usr/share/dracut/modules.d/90kernel-modules
-usr/share/dracut/modules.d/90kernel-modules/install
-usr/share/dracut/modules.d/90kernel-modules/installkernel
-usr/share/dracut/modules.d/90kernel-modules/parse-kernel.sh
-usr/share/dracut/modules.d/95debug
-usr/share/dracut/modules.d/95debug/check
-usr/share/dracut/modules.d/95debug/install
-usr/share/dracut/modules.d/95rootfs-block
-usr/share/dracut/modules.d/95rootfs-block/block-genrules.sh
-usr/share/dracut/modules.d/95rootfs-block/install
-usr/share/dracut/modules.d/95rootfs-block/mount-root.sh
-usr/share/dracut/modules.d/95rootfs-block/parse-block.sh
-usr/share/dracut/modules.d/95terminfo
-usr/share/dracut/modules.d/95terminfo/install
-usr/share/dracut/modules.d/95udev-rules
-usr/share/dracut/modules.d/95udev-rules/01-ignore.rules
-usr/share/dracut/modules.d/95udev-rules/59-persistent-storage-volid.rules
-usr/share/dracut/modules.d/95udev-rules/59-persistent-storage.rules
-usr/share/dracut/modules.d/95udev-rules/61-persistent-storage.rules
-usr/share/dracut/modules.d/95udev-rules/install
-usr/share/dracut/modules.d/95udev-rules/load-modules.sh
-usr/share/dracut/modules.d/98syslog
-usr/share/dracut/modules.d/98syslog/README
-usr/share/dracut/modules.d/98syslog/check
-usr/share/dracut/modules.d/98syslog/install
-usr/share/dracut/modules.d/98syslog/parse-syslog-opts.sh
-usr/share/dracut/modules.d/98syslog/rsyslog.conf
-usr/share/dracut/modules.d/98syslog/rsyslogd-start.sh
-usr/share/dracut/modules.d/98syslog/rsyslogd-stop.sh
-usr/share/dracut/modules.d/98syslog/syslog-cleanup.sh
-usr/share/dracut/modules.d/98syslog/syslog-genrules.sh
-usr/share/dracut/modules.d/99base
-usr/share/dracut/modules.d/99base/check
-usr/share/dracut/modules.d/99base/dracut-lib.sh
-usr/share/dracut/modules.d/99base/init
-usr/share/dracut/modules.d/99base/initqueue
-#usr/share/dracut/modules.d/99base/init~
-usr/share/dracut/modules.d/99base/install
-usr/share/dracut/modules.d/99base/loginit
-usr/share/dracut/modules.d/99base/parse-blacklist.sh
-usr/share/dracut/modules.d/99base/parse-root-opts.sh
-#usr/share/man/man5/dracut.conf.5
-#usr/share/man/man8/dracut-catimages.8
-#usr/share/man/man8/dracut-gencmdline.8
-#usr/share/man/man8/dracut.8
-sbin/switch_root
index 596b9511fce85bb15e13816f2e635fe7589ad8e2..d4626a3beef87b899e5c4980319dadfc55515a07 100644 (file)
@@ -7052,6 +7052,7 @@ usr/lib/locale
 #usr/share/i18n/locales/eu_ES@euro
 #usr/share/i18n/locales/fa_IR
 #usr/share/i18n/locales/fi_FI
+#usr/share/i18n/locales/fi_FI.orig
 #usr/share/i18n/locales/fi_FI@euro
 #usr/share/i18n/locales/fil_PH
 #usr/share/i18n/locales/fo_FO
index dfe2e4869e8e472a8fd725d18663c024158fa1ef..980441599ec703d158feed8e74cbddf3b5c33077 100644 (file)
@@ -44,7 +44,6 @@ etc/rc.d/init.d/ipsec
 etc/rc.d/init.d/leds
 etc/rc.d/init.d/localnet
 etc/rc.d/init.d/mISDN
-#etc/rc.d/init.d/mdadm
 #etc/rc.d/init.d/mediatomb
 #etc/rc.d/init.d/messagebus
 #etc/rc.d/init.d/miau
@@ -55,6 +54,7 @@ etc/rc.d/init.d/modules
 #etc/rc.d/init.d/motion
 etc/rc.d/init.d/mountfs
 etc/rc.d/init.d/mountkernfs
+etc/rc.d/init.d/mounttmpfs
 #etc/rc.d/init.d/mpd
 #etc/rc.d/init.d/mysql
 #etc/rc.d/init.d/netsnmpd
@@ -214,8 +214,11 @@ etc/rc.d/rcsysinit.d/S05modules
 etc/rc.d/rcsysinit.d/S10udev
 etc/rc.d/rcsysinit.d/S19waitdrives
 etc/rc.d/rcsysinit.d/S20swap
+etc/rc.d/rcsysinit.d/S25partresize
 etc/rc.d/rcsysinit.d/S30checkfs
 etc/rc.d/rcsysinit.d/S40mountfs
+etc/rc.d/rcsysinit.d/S42fsresize
+etc/rc.d/rcsysinit.d/S43mounttmpfs
 etc/rc.d/rcsysinit.d/S45udev_retry
 etc/rc.d/rcsysinit.d/S50cleanfs
 etc/rc.d/rcsysinit.d/S60setclock
index 7fa9a2463f92150d8ca0df6baf73ce0c028dca7a..28dcf5c7b350d2cff35995e37f742a6af6ed6649 100644 (file)
@@ -49,6 +49,7 @@
 #usr/include/asm/mman.h
 #usr/include/asm/msgbuf.h
 #usr/include/asm/param.h
+#usr/include/asm/perf_regs.h
 #usr/include/asm/poll.h
 #usr/include/asm/posix_types.h
 #usr/include/asm/ptrace.h
@@ -77,6 +78,7 @@
 #usr/include/drm/i810_drm.h
 #usr/include/drm/i915_drm.h
 #usr/include/drm/mga_drm.h
+#usr/include/drm/msm_drm.h
 #usr/include/drm/nouveau_drm.h
 #usr/include/drm/qxl_drm.h
 #usr/include/drm/r128_drm.h
 #usr/include/linux/ax25.h
 #usr/include/linux/b1lli.h
 #usr/include/linux/baycom.h
+#usr/include/linux/bcm933xx_hcs.h
 #usr/include/linux/bfs_fs.h
 #usr/include/linux/binfmts.h
 #usr/include/linux/blkpg.h
 #usr/include/linux/kvm.h
 #usr/include/linux/kvm_para.h
 #usr/include/linux/l2tp.h
+#usr/include/linux/libc-compat.h
 #usr/include/linux/limits.h
 #usr/include/linux/llc.h
 #usr/include/linux/loop.h
 #usr/include/linux/mei.h
 #usr/include/linux/mempolicy.h
 #usr/include/linux/meye.h
+#usr/include/linux/mic_common.h
+#usr/include/linux/mic_ioctl.h
 #usr/include/linux/mii.h
 #usr/include/linux/minix_fs.h
 #usr/include/linux/mman.h
 #usr/include/linux/netfilter/nf_conntrack_tcp.h
 #usr/include/linux/netfilter/nf_conntrack_tuple_common.h
 #usr/include/linux/netfilter/nf_nat.h
+#usr/include/linux/netfilter/nf_tables.h
+#usr/include/linux/netfilter/nf_tables_compat.h
 #usr/include/linux/netfilter/nfnetlink.h
 #usr/include/linux/netfilter/nfnetlink_acct.h
 #usr/include/linux/netfilter/nfnetlink_compat.h
 #usr/include/linux/netfilter/xt_CONNSECMARK.h
 #usr/include/linux/netfilter/xt_CT.h
 #usr/include/linux/netfilter/xt_DSCP.h
+#usr/include/linux/netfilter/xt_HMARK.h
 #usr/include/linux/netfilter/xt_IDLETIMER.h
 #usr/include/linux/netfilter/xt_LED.h
 #usr/include/linux/netfilter/xt_LOG.h
 #usr/include/linux/netfilter/xt_TPROXY.h
 #usr/include/linux/netfilter/xt_addrtype.h
 #usr/include/linux/netfilter/xt_bpf.h
+#usr/include/linux/netfilter/xt_cgroup.h
 #usr/include/linux/netfilter/xt_cluster.h
 #usr/include/linux/netfilter/xt_comment.h
 #usr/include/linux/netfilter/xt_connbytes.h
 #usr/include/linux/netfilter/xt_esp.h
 #usr/include/linux/netfilter/xt_hashlimit.h
 #usr/include/linux/netfilter/xt_helper.h
+#usr/include/linux/netfilter/xt_ipcomp.h
 #usr/include/linux/netfilter/xt_iprange.h
 #usr/include/linux/netfilter/xt_ipvs.h
+#usr/include/linux/netfilter/xt_l2tp.h
 #usr/include/linux/netfilter/xt_layer7.h
 #usr/include/linux/netfilter/xt_length.h
 #usr/include/linux/netfilter/xt_limit.h
 #usr/include/linux/netfilter/xt_rateest.h
 #usr/include/linux/netfilter/xt_realm.h
 #usr/include/linux/netfilter/xt_recent.h
+#usr/include/linux/netfilter/xt_rpfilter.h
 #usr/include/linux/netfilter/xt_sctp.h
 #usr/include/linux/netfilter/xt_set.h
 #usr/include/linux/netfilter/xt_socket.h
 #usr/include/linux/nfsd/stats.h
 #usr/include/linux/nl80211.h
 #usr/include/linux/nubus.h
+#usr/include/linux/nvme.h
 #usr/include/linux/nvram.h
 #usr/include/linux/omap3isp.h
 #usr/include/linux/omapfb.h
 #usr/include/linux/taskstats.h
 #usr/include/linux/tc_act
 #usr/include/linux/tc_act/tc_csum.h
+#usr/include/linux/tc_act/tc_defact.h
 #usr/include/linux/tc_act/tc_gact.h
 #usr/include/linux/tc_act/tc_ipt.h
 #usr/include/linux/tc_act/tc_mirred.h
 #usr/include/linux/x25.h
 #usr/include/linux/xattr.h
 #usr/include/linux/xfrm.h
+#usr/include/linux/zorro.h
+#usr/include/linux/zorro_ids.h
 #usr/include/mtd
 #usr/include/mtd/inftl-user.h
 #usr/include/mtd/mtd-abi.h
 #usr/include/sound/compress_offload.h
 #usr/include/sound/compress_params.h
 #usr/include/sound/emu10k1.h
+#usr/include/sound/firewire.h
 #usr/include/sound/hdsp.h
 #usr/include/sound/hdspm.h
 #usr/include/sound/sb16_csp.h
 #usr/include/video/uvesafb.h
 #usr/include/xen
 #usr/include/xen/evtchn.h
+#usr/include/xen/gntalloc.h
+#usr/include/xen/gntdev.h
 #usr/include/xen/privcmd.h
diff --git a/config/rootfiles/common/armv5tel/linux-initrd-kirkwood b/config/rootfiles/common/armv5tel/linux-initrd-kirkwood
new file mode 100644 (file)
index 0000000..5113731
--- /dev/null
@@ -0,0 +1,2 @@
+#boot/initramfs-KVER-ipfire-kirkwood.img
+#boot/uInit-ipfire-kirkwood
diff --git a/config/rootfiles/common/armv5tel/linux-initrd-multi b/config/rootfiles/common/armv5tel/linux-initrd-multi
new file mode 100644 (file)
index 0000000..ac7a838
--- /dev/null
@@ -0,0 +1,2 @@
+#boot/initramfs-KVER-ipfire-multi.img
+#boot/uInit-ipfire-multi
diff --git a/config/rootfiles/common/armv5tel/linux-initrd-rpi b/config/rootfiles/common/armv5tel/linux-initrd-rpi
new file mode 100644 (file)
index 0000000..e69de29
index 4880b60ffe7a6bd4f18da36d5b0cee16cd14f7be..50ac43471b66c588c34a86d798a9633c931f0bb5 100644 (file)
@@ -1,8 +1,9 @@
 boot/System.map-KVER-ipfire-kirkwood
-#boot/System.map-ipfire-kirkwood
 boot/config-KVER-ipfire-kirkwood
 boot/dtb-KVER-ipfire-kirkwood
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-cloudbox.dtb
+#boot/dtb-KVER-ipfire-kirkwood/kirkwood-db-88f6281.dtb
+#boot/dtb-KVER-ipfire-kirkwood/kirkwood-db-88f6282.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-dns320.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-dns325.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-dockstar.dtb
@@ -14,16 +15,23 @@ boot/dtb-KVER-ipfire-kirkwood
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-iomega_ix2_200.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-is2.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-km_kirkwood.dtb
+#boot/dtb-KVER-ipfire-kirkwood/kirkwood-laplug.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-lschlv2.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-lsxhl.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-mplcec4.dtb
+#boot/dtb-KVER-ipfire-kirkwood/kirkwood-mv88f6281gtw-ge.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-netgear_readynas_duo_v2.dtb
+#boot/dtb-KVER-ipfire-kirkwood/kirkwood-netgear_readynas_nv+_v2.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-ns2.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-ns2lite.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-ns2max.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-ns2mini.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-nsa310.dtb
+#boot/dtb-KVER-ipfire-kirkwood/kirkwood-nsa310a.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-openblocks_a6.dtb
+#boot/dtb-KVER-ipfire-kirkwood/kirkwood-openblocks_a7.dtb
+#boot/dtb-KVER-ipfire-kirkwood/kirkwood-sheevaplug-esata.dtb
+#boot/dtb-KVER-ipfire-kirkwood/kirkwood-sheevaplug.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-topkick.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-ts219-6281.dtb
 #boot/dtb-KVER-ipfire-kirkwood/kirkwood-ts219-6282.dtb
@@ -75,6 +83,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/crypto/ghash-generic.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/crypto/khazad.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/crypto/lrw.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/crypto/lz4.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/crypto/lz4hc.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/crypto/lzo.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/crypto/md4.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/crypto/michael_mic.ko
@@ -151,6 +161,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ata/sata_nv.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ata/sata_promise.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ata/sata_qstor.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ata/sata_rcar.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ata/sata_sil.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ata/sata_sil24.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ata/sata_sis.ko
@@ -167,6 +178,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/atm/nicstar.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/atm/solos-pci.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/atm/suni.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/bcma
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/bcma/bcma.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/block
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/block/DAC960.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/block/cciss.ko
@@ -203,6 +216,10 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/char/ppdev.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/clk
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/clk/clk-si5351.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/cpufreq
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/cpufreq/cpufreq_conservative.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/cpufreq/cpufreq_powersave.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/cpufreq/cpufreq_userspace.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/crypto
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/crypto/hifn_795x.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/dma
@@ -229,6 +246,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/gpu/drm/udl/udl.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-aureal.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-elo.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-gyration.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-keytouch.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-lcpower.ko
@@ -246,6 +264,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-roccat-kovaplus.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-roccat-lua.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-roccat-pyra.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-roccat-ryos.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-roccat-savu.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-roccat.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hid/hid-saitek.ko
@@ -284,25 +303,23 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/amc6821.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/asc7621.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/atxp1.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/dme1737.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/ds1621.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/ds620.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/emc1403.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/emc6w201.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/f71805f.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/f71882fg.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/f75375s.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/g760a.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/g762.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/gl518sm.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/gl520sm.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/hih6130.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/htu21.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/hwmon-vid.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/i5k_amb.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/ibmaem.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/ibmpex.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/ina209.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/ina2xx.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/it87.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/lineage-pem.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/lm73.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/lm75.ko
@@ -331,10 +348,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/max6650.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/max6697.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/mcp3021.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/nct6775.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/ntc_thermistor.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/pc87360.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/pc87427.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/pcf8591.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/pmbus
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/pmbus/adm1275.ko
@@ -346,24 +360,16 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/pmbus/pmbus_core.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/pmbus/ucd9000.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/pmbus/ucd9200.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/sch5627.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/sch5636.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/sch56xx-common.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/sht15.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/sht21.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/sis5595.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/smsc47b397.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/smsc47m1.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/smsc47m192.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/thmc50.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/tmp102.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/tmp401.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/tmp421.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/via686a.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/vt1211.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/vt8231.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/w83627ehf.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/w83627hf.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/w83781d.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/w83791d.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/hwmon/w83792d.ko
@@ -391,6 +397,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/i2c/busses/i2c-parport.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/i2c/busses/i2c-pca-platform.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/i2c/busses/i2c-piix4.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/i2c/busses/i2c-robotfuzz-osif.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/i2c/busses/i2c-simtec.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/i2c/busses/i2c-sis5595.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/i2c/busses/i2c-sis630.ko
@@ -407,6 +414,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/iio/common/hid-sensors
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/iio/common/hid-sensors/hid-sensor-iio-common.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/iio/common/hid-sensors/hid-sensor-trigger.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/iio/humidity
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/iio/humidity/dht11.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/iio/industrialio.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/iio/kfifo_buf.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/input
@@ -418,7 +427,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/input/misc/cm109.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/input/misc/keyspan_remote.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/input/misc/powermate.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/input/misc/pwm-beeper.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/input/misc/retu-pwrbutton.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/input/misc/rotary_encoder.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/input/misc/uinput.ko
@@ -482,11 +490,13 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-lp5523.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-lp5562.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-lp55xx-common.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-lp8501.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-lt3593.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-netxbig.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-ns2.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-ot200.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-pca9633.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-pca963x.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-pca9685.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-pwm.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-regulator.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/leds/leds-tca6507.ko
@@ -503,7 +513,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/bcache
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/bcache/bcache.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-bio-prison.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-bufio.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-cache-cleaner.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-cache-mq.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-cache.ko
@@ -514,6 +523,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-raid.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-round-robin.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-service-time.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-switch.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/dm-verity.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/faulty.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/md/linear.ko
@@ -552,6 +562,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/cx24110.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/cx24113.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/cx24116.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/cx24117.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/cx24123.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/cxd2820r.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/dib0070.ko
@@ -566,6 +577,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/drxk.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/ds3000.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/dvb-pll.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/dvbsky_m88ds3103.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/ec100.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/isl6405.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/dvb-frontends/isl6421.ko
@@ -642,6 +654,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/mt9v011.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/ov7670.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/saa6588.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/saa6752hs.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/saa7115.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/saa7127.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/i2c/saa717x.ko
@@ -714,7 +727,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci/pt1
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci/pt1/earth-pt1.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci/saa7134
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci/saa7134/saa6752hs.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci/saa7134/saa7134-alsa.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci/saa7134/saa7134-dvb.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/pci/saa7134/saa7134-empress.ko
@@ -739,10 +751,14 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/marvell-ccic/cafe_ccic.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/sh_veu.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/soc_camera
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/soc_camera/rcar_vin.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/soc_camera/soc_camera.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/soc_camera/soc_camera_platform.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/soc_camera/soc_mediabus.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/soc_camera/soc_scale_crop.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/timblogiw.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/vsp1
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/platform/vsp1/vsp1.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/gpio-ir-recv.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/iguanair.ko
@@ -779,6 +795,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-budget-ci-old.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-cinergy-1400.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-cinergy.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-delock-61959.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-dib0700-nec.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-dib0700-rc5.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-digitalnow-tinytwin.ko
@@ -841,6 +858,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-reddo.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-snapstream-firefly.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-streamzap.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-su3000.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-tbs-nec.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-technisat-usb2.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/rc/keymaps/rc-terratec-cinergy-xs.ko
@@ -870,6 +888,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/fc0012.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/fc0013.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/fc2580.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/m88ts2022.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/max2165.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/mt2060.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/tuners/mt2063.ko
@@ -942,6 +961,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/em28xx/em28xx-alsa.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/em28xx/em28xx-dvb.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/em28xx/em28xx-rc.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/em28xx/em28xx-v4l.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/em28xx/em28xx.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/gspca
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/gspca/gl860
@@ -981,6 +1001,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/gspca/gspca_sq905c.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/gspca/gspca_sq930x.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/gspca/gspca_stk014.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/gspca/gspca_stk1135.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/gspca/gspca_stv0680.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/gspca/gspca_sunplus.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/gspca/gspca_t613.ko
@@ -1003,8 +1024,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/s2255/s2255drv.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/siano
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/siano/smsusb.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/sn9c102
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/sn9c102/sn9c102.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/stk1160
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/stk1160/stk1160.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/stkwebcam
@@ -1020,6 +1039,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/ttusb-dec
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/ttusb-dec/ttusb_dec.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/ttusb-dec/ttusbdecfe.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/usbtv
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/usbtv/usbtv.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/usbvision
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/usbvision/usbvision.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/uvc
@@ -1028,7 +1049,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/usb/zr364xx/zr364xx.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/tuner.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/v4l2-int-device.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/v4l2-mem2mem.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/videobuf-core.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/media/v4l2-core/videobuf-dma-contig.ko
@@ -1042,6 +1062,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick/core
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick/core/memstick.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick/core/ms_block.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick/core/mspro_block.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick/host
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/memstick/host/jmb38x_ms.ko
@@ -1131,6 +1152,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/amd
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/amd/amd8111e.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/amd/pcnet32.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/arc
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/arc/arc_emac.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/atheros
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/atheros/alx
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/atheros/alx/alx.ko
@@ -1199,6 +1222,10 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/e1000e
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/i40e
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/i40e/i40e.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/i40evf
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/i40evf/i40evf.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/igb
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/igb/igb.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/igbvf
@@ -1207,10 +1234,13 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/ixgb/ixgb.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/ixgbe
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/ixgbevf
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/intel/ixgbevf/ixgbevf.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/jme.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/marvell
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/marvell/mv643xx_eth.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/marvell/mvmdio.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/marvell/mvneta.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/marvell/skge.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/marvell/sky2.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/micrel
@@ -1227,9 +1257,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/neterion/vxge/vxge.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/nvidia
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/nvidia/forcedeth.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/oki-semi
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/oki-semi/pch_gbe
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/qlogic
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/qlogic/netxen
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/qlogic/netxen/netxen_nic.ko
@@ -1244,6 +1271,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/realtek/8139cp.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/realtek/8139too.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/realtek/r8169.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/renesas
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/renesas/sh_eth.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/sfc
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/sfc/sfc.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/ethernet/silan
@@ -1281,6 +1310,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/mdio.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/mii.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/netconsole.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/nlmon.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/phy
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/phy/amd.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/phy/at803x.ko
@@ -1329,6 +1359,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/dm9601.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/gl620a.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/hso.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/huawei_cdc_ncm.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/int51x1.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/ipheth.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/kalmia.ko
@@ -1345,6 +1376,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/sierra_net.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/smsc75xx.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/smsc95xx.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/sr9700.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/sr9800.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/usbnet.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/usb/zaurus.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/veth.ko
@@ -1358,6 +1391,9 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ar5523
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ar5523/ar5523.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ath.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ath10k
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ath5k
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ath9k
@@ -1367,6 +1403,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/carl9170
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/carl9170/carl9170.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/wcn36xx
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/wcn36xx/wcn36xx.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/wil6210
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ath/wil6210/wil6210.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/atmel.ko
@@ -1375,6 +1413,14 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/b43/b43.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/b43legacy
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/b43legacy/b43legacy.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/brcm80211
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/brcm80211/brcmsmac
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/brcm80211/brcmutil
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/cw1200
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/cw1200/cw1200_core.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/cw1200/cw1200_wlan_sdio.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/hostap
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/hostap/hostap.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/hostap/hostap_pci.ko
@@ -1418,6 +1464,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rt2x00/rt2500pci.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rt2x00/rt2500usb.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rt2x00/rt2800lib.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rt2x00/rt2800mmio.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rt2x00/rt2800pci.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rt2x00/rt2800usb.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rt2x00/rt2x00lib.ko
@@ -1446,6 +1493,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rtlwifi/rtl8192se/rtl8192se.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rtlwifi/rtl8723ae
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rtlwifi/rtl8723ae/rtl8723ae.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rtlwifi/rtl_usb.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ti
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/net/wireless/ti/wl1251
@@ -1479,7 +1528,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/pps/pps_core.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ptp
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ptp/ptp.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/ptp/ptp_pch.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/regulator
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/regulator/lp8755.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc
@@ -1499,13 +1547,17 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-em3027.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-fm3130.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-hid-sensor-time.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-hym8563.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-isl12022.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-isl12057.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-isl1208.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-m41t80.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-m48t35.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-m48t59.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-max6900.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-moxart.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-msm6242.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-pcf2127.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-pcf8523.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-pcf8563.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/rtc/rtc-pcf8583.ko
@@ -1534,8 +1586,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/arcmsr/arcmsr.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/be2iscsi
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/be2iscsi/be2iscsi.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/bfa
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/bfa/bfa.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/bnx2fc
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/bnx2fc/bnx2fc.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/bnx2i
@@ -1556,6 +1606,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/device_handler/scsi_dh_hp_sw.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/device_handler/scsi_dh_rdac.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/dmx3191d.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/esas2r
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/esas2r/esas2r.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/fcoe
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/fcoe/fcoe.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/scsi/fcoe/libfcoe.ko
@@ -1626,6 +1678,9 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/staging/et131x/et131x.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/staging/fwserial
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/staging/fwserial/firewire-serial.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/staging/gdm724x
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/staging/gdm724x/gdmtty.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/staging/gdm724x/gdmulte.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/staging/rts5139
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/staging/rts5139/rts5139.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/staging/silicom
@@ -1666,10 +1721,10 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/atm/usbatm.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/atm/xusbatm.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/chipidea
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/chipidea/ci13xxx_imx.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/chipidea/ci13xxx_msm.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/chipidea/ci13xxx_pci.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/chipidea/ci_hdrc.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/chipidea/ci_hdrc_imx.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/chipidea/ci_hdrc_msm.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/chipidea/ci_hdrc_pci.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/chipidea/usbmisc_imx.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/class
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/class/cdc-acm.ko
@@ -1677,8 +1732,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/class/usblp.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/class/usbtmc.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/dwc3
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/dwc3/dwc3-exynos.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/dwc3/dwc3-omap.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/dwc3/dwc3-keystone.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/dwc3/dwc3-pci.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/dwc3/dwc3.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/host
@@ -1718,7 +1772,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/digi_acceleport.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/f81232.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/ftdi_sio.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/funsoft.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/io_edgeport.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/io_ti.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/ipaq.ko
@@ -1730,17 +1783,17 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/mct_u232.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/mos7720.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/mos7840.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/moto_modem.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/mxuport.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/option.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/oti6858.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/pl2303.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/qcaux.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/qcserial.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/quatech2.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/siemens_mpi.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/sierra.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/spcp8x5.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/ssu100.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/usb-serial-simple.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/usb_wwan.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/usbserial.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/usb/serial/visor.ko
@@ -1808,7 +1861,9 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/w1/wire.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/watchdog
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/watchdog/alim7101_wdt.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/watchdog/gpio_wdt.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/watchdog/i6300esb.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/drivers/watchdog/mena21_wdt.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/watchdog/orion_wdt.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/watchdog/pcwd_pci.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/drivers/watchdog/pcwd_usb.ko
@@ -1919,6 +1974,9 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/lib/crc7.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/lib/crc8.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/lib/libcrc32c.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/lib/lz4
+#lib/modules/KVER-ipfire-kirkwood/kernel/lib/lz4/lz4_compress.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/lib/lz4/lz4hc_compress.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/lib/mpi
 #lib/modules/KVER-ipfire-kirkwood/kernel/lib/mpi/mpi.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/lib/oid_registry.ko
@@ -1928,8 +1986,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/lib/ts_bm.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/lib/ts_fsm.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/lib/ts_kmp.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/lib/zlib_deflate
-#lib/modules/KVER-ipfire-kirkwood/kernel/lib/zlib_deflate/zlib_deflate.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/802
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/802/garp.ko
@@ -1975,8 +2031,13 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/bridge/netfilter/ebtable_filter.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/bridge/netfilter/ebtable_nat.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/bridge/netfilter/ebtables.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/bridge/netfilter/nf_tables_bridge.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/core
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/core/netprio_cgroup.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/hsr
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/hsr/hsr.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ieee802154
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ieee802154/6lowpan_iphc.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/ah4.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/esp4.ko
@@ -1995,6 +2056,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/ipt_ECN.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/ipt_MASQUERADE.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/ipt_REJECT.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/ipt_SYNPROXY.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/ipt_ah.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/ipt_rpfilter.ko
@@ -2008,6 +2070,11 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/nf_nat_pptp.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/nf_nat_proto_gre.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/nf_nat_snmp_basic.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/nf_tables_arp.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/nf_tables_ipv4.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/nft_chain_nat_ipv4.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/nft_chain_route_ipv4.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/netfilter/nft_reject_ipv4.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/tcp_bic.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/tcp_diag.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv4/tcp_highspeed.ko
@@ -2031,12 +2098,14 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/esp6.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/ip6_gre.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/ip6_tunnel.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/ip6_vti.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/ipcomp6.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/mip6.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/ip6t_MASQUERADE.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/ip6t_NPT.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/ip6t_REJECT.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/ip6t_SYNPROXY.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/ip6t_ah.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/ip6t_eui64.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/ip6t_frag.ko
@@ -2051,6 +2120,10 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/ip6table_raw.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/ip6table_security.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/nf_nat_ipv6.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/nf_tables_ipv6.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/nft_chain_nat_ipv6.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/nft_chain_route_ipv6.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/netfilter/nft_reject_ipv6.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/sit.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/tunnel6.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/ipv6/xfrm6_mode_beet.ko
@@ -2081,7 +2154,9 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/ipset/ip_set_hash_ipportnet.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/ipset/ip_set_hash_net.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/ipset/ip_set_hash_netiface.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/ipset/ip_set_hash_netnet.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/ipset/ip_set_hash_netport.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/ipset/ip_set_hash_netportnet.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/ipset/ip_set_list_set.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/ipvs
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/ipvs/ip_vs.ko
@@ -2122,13 +2197,28 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nf_nat_proto_udplite.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nf_nat_sip.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nf_nat_tftp.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nf_tproxy_core.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nf_synproxy_core.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nf_tables.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nf_tables_inet.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nfnetlink.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nfnetlink_acct.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nfnetlink_cthelper.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nfnetlink_cttimeout.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nfnetlink_log.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nfnetlink_queue.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_compat.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_counter.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_ct.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_exthdr.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_hash.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_limit.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_log.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_meta.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_nat.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_queue.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_rbtree.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_reject.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/nft_reject_inet.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_AUDIT.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_CHECKSUM.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_CLASSIFY.ko
@@ -2154,6 +2244,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_TRACE.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_addrtype.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_bpf.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_cgroup.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_cluster.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_comment.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_connbytes.ko
@@ -2170,7 +2261,9 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_hashlimit.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_helper.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_hl.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_ipcomp.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_iprange.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_l2tp.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_layer7.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_length.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/netfilter/xt_limit.ko
@@ -2215,6 +2308,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/act_simple.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/act_skbedit.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/cls_basic.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/cls_bpf.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/cls_cgroup.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/cls_flow.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/cls_fw.ko
@@ -2235,9 +2329,11 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_codel.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_drr.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_dsmark.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_fq.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_fq_codel.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_gred.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_hfsc.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_hhf.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_htb.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_ingress.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/net/sched/sch_mqprio.ko
@@ -2290,7 +2386,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/core/snd-compress.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/core/snd-hrtimer.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/core/snd-hwdep.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/sound/core/snd-page-alloc.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/core/snd-pcm.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/core/snd-rawmidi.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/core/snd-timer.ko
@@ -2312,6 +2407,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/drivers/vx
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/drivers/vx/snd-vx-lib.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/firewire
+#lib/modules/KVER-ipfire-kirkwood/kernel/sound/firewire/snd-dice.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/firewire/snd-firewire-lib.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/firewire/snd-firewire-speakers.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/i2c
@@ -2320,7 +2416,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/i2c/other/snd-ak4114.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/i2c/other/snd-ak4xxx-adda.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/i2c/other/snd-pt2258.ko
-#lib/modules/KVER-ipfire-kirkwood/kernel/sound/i2c/other/snd-tea575x-tuner.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/i2c/snd-cs8427.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/i2c/snd-i2c.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/pci
@@ -2368,6 +2463,7 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/pci/hda/snd-hda-codec-cirrus.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/pci/hda/snd-hda-codec-cmedia.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/pci/hda/snd-hda-codec-conexant.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/sound/pci/hda/snd-hda-codec-generic.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/pci/hda/snd-hda-codec-hdmi.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/pci/hda/snd-hda-codec-idt.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/pci/hda/snd-hda-codec-realtek.ko
@@ -2439,7 +2535,6 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/soc/generic
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/soc/generic/snd-soc-simple-card.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/soc/kirkwood
-#lib/modules/KVER-ipfire-kirkwood/kernel/sound/soc/kirkwood/snd-soc-kirkwood-i2s.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/soc/kirkwood/snd-soc-kirkwood.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/soc/kirkwood/snd-soc-openrd.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/soc/kirkwood/snd-soc-t5325.ko
@@ -2454,6 +2549,8 @@ lib/modules/KVER-ipfire-kirkwood
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/usb/6fire/snd-usb-6fire.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/usb/caiaq
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/usb/caiaq/snd-usb-caiaq.ko
+#lib/modules/KVER-ipfire-kirkwood/kernel/sound/usb/hiface
+#lib/modules/KVER-ipfire-kirkwood/kernel/sound/usb/hiface/snd-usb-hiface.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/usb/misc
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/usb/misc/snd-ua101.ko
 #lib/modules/KVER-ipfire-kirkwood/kernel/sound/usb/snd-usb-audio.ko
index 3c20c523634f8b7bdbd6ce1f38f90ccf4d0b2b09..eee6ad22ce6a38b006cbcfcd663cb1f260f7926a 100644 (file)
 boot/System.map-KVER-ipfire-multi
-#boot/System.map-ipfire-multi
 boot/config-KVER-ipfire-multi
 boot/dtb-KVER-ipfire-multi
+#boot/dtb-KVER-ipfire-multi/am335x-base0033.dtb
 #boot/dtb-KVER-ipfire-multi/am335x-bone.dtb
+#boot/dtb-KVER-ipfire-multi/am335x-boneblack.dtb
 #boot/dtb-KVER-ipfire-multi/am335x-evm.dtb
 #boot/dtb-KVER-ipfire-multi/am335x-evmsk.dtb
+#boot/dtb-KVER-ipfire-multi/am335x-nano.dtb
+#boot/dtb-KVER-ipfire-multi/am3517-evm.dtb
+#boot/dtb-KVER-ipfire-multi/am3517_mt_ventoux.dtb
+#boot/dtb-KVER-ipfire-multi/am43x-epos-evm.dtb
 #boot/dtb-KVER-ipfire-multi/armada-370-db.dtb
 #boot/dtb-KVER-ipfire-multi/armada-370-mirabox.dtb
+#boot/dtb-KVER-ipfire-multi/armada-370-netgear-rn102.dtb
+#boot/dtb-KVER-ipfire-multi/armada-370-netgear-rn104.dtb
 #boot/dtb-KVER-ipfire-multi/armada-370-rd.dtb
+#boot/dtb-KVER-ipfire-multi/armada-xp-axpwifiap.dtb
 #boot/dtb-KVER-ipfire-multi/armada-xp-db.dtb
 #boot/dtb-KVER-ipfire-multi/armada-xp-gp.dtb
+#boot/dtb-KVER-ipfire-multi/armada-xp-mamba.dtb
+#boot/dtb-KVER-ipfire-multi/armada-xp-matrix.dtb
+#boot/dtb-KVER-ipfire-multi/armada-xp-netgear-rn2120.dtb
 #boot/dtb-KVER-ipfire-multi/armada-xp-openblocks-ax3-4.dtb
+#boot/dtb-KVER-ipfire-multi/dra7-evm.dtb
 #boot/dtb-KVER-ipfire-multi/imx25-karo-tx25.dtb
 #boot/dtb-KVER-ipfire-multi/imx25-pdk.dtb
 #boot/dtb-KVER-ipfire-multi/imx27-apf27.dtb
 #boot/dtb-KVER-ipfire-multi/imx27-apf27dev.dtb
 #boot/dtb-KVER-ipfire-multi/imx27-pdk.dtb
-#boot/dtb-KVER-ipfire-multi/imx27-phytec-phycore.dtb
+#boot/dtb-KVER-ipfire-multi/imx27-phytec-phycard-s-rdk.dtb
+#boot/dtb-KVER-ipfire-multi/imx27-phytec-phycard-s-som.dtb
+#boot/dtb-KVER-ipfire-multi/imx27-phytec-phycore-rdk.dtb
+#boot/dtb-KVER-ipfire-multi/imx27-phytec-phycore-som.dtb
 #boot/dtb-KVER-ipfire-multi/imx31-bug.dtb
 #boot/dtb-KVER-ipfire-multi/imx51-apf51.dtb
 #boot/dtb-KVER-ipfire-multi/imx51-apf51dev.dtb
 #boot/dtb-KVER-ipfire-multi/imx51-babbage.dtb
 #boot/dtb-KVER-ipfire-multi/imx53-ard.dtb
 #boot/dtb-KVER-ipfire-multi/imx53-evk.dtb
+#boot/dtb-KVER-ipfire-multi/imx53-m53evk.dtb
 #boot/dtb-KVER-ipfire-multi/imx53-mba53.dtb
 #boot/dtb-KVER-ipfire-multi/imx53-qsb.dtb
 #boot/dtb-KVER-ipfire-multi/imx53-smd.dtb
+#boot/dtb-KVER-ipfire-multi/imx6dl-cubox-i.dtb
+#boot/dtb-KVER-ipfire-multi/imx6dl-gw51xx.dtb
+#boot/dtb-KVER-ipfire-multi/imx6dl-gw52xx.dtb
+#boot/dtb-KVER-ipfire-multi/imx6dl-gw53xx.dtb
+#boot/dtb-KVER-ipfire-multi/imx6dl-gw54xx.dtb
+#boot/dtb-KVER-ipfire-multi/imx6dl-gw552x.dtb
+#boot/dtb-KVER-ipfire-multi/imx6dl-hummingboard.dtb
 #boot/dtb-KVER-ipfire-multi/imx6dl-sabreauto.dtb
 #boot/dtb-KVER-ipfire-multi/imx6dl-sabresd.dtb
 #boot/dtb-KVER-ipfire-multi/imx6dl-wandboard.dtb
 #boot/dtb-KVER-ipfire-multi/imx6q-arm2.dtb
-#boot/dtb-KVER-ipfire-multi/imx6q-cm-fx6.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-cubox-i.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-gw51xx.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-gw52xx.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-gw53xx.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-gw5400-a.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-gw54xx.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-gw552x.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-phytec-pbab01.dtb
 #boot/dtb-KVER-ipfire-multi/imx6q-sabreauto.dtb
 #boot/dtb-KVER-ipfire-multi/imx6q-sabrelite.dtb
 #boot/dtb-KVER-ipfire-multi/imx6q-sabresd.dtb
 #boot/dtb-KVER-ipfire-multi/imx6q-sbc6x.dtb
+#boot/dtb-KVER-ipfire-multi/imx6q-udoo.dtb
 #boot/dtb-KVER-ipfire-multi/imx6q-wandboard.dtb
+#boot/dtb-KVER-ipfire-multi/imx6sl-evk.dtb
 #boot/dtb-KVER-ipfire-multi/omap2420-h4.dtb
+#boot/dtb-KVER-ipfire-multi/omap2420-n800.dtb
+#boot/dtb-KVER-ipfire-multi/omap2420-n810-wimax.dtb
+#boot/dtb-KVER-ipfire-multi/omap2420-n810.dtb
+#boot/dtb-KVER-ipfire-multi/omap2430-sdp.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-beagle-xm-ab.dtb
 #boot/dtb-KVER-ipfire-multi/omap3-beagle-xm.dtb
 #boot/dtb-KVER-ipfire-multi/omap3-beagle.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-cm-t3730.dtb
 #boot/dtb-KVER-ipfire-multi/omap3-devkit8000.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-evm-37xx.dtb
 #boot/dtb-KVER-ipfire-multi/omap3-evm.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-gta04.dtb
 #boot/dtb-KVER-ipfire-multi/omap3-igep0020.dtb
 #boot/dtb-KVER-ipfire-multi/omap3-igep0030.dtb
-#boot/dtb-KVER-ipfire-multi/omap3-tobi.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-ldp.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-n9.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-n900.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-n950.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-overo-storm-tobi.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-overo-tobi.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-sbc-t3730.dtb
+#boot/dtb-KVER-ipfire-multi/omap3-zoom3.dtb
 #boot/dtb-KVER-ipfire-multi/omap3430-sdp.dtb
 #boot/dtb-KVER-ipfire-multi/omap4-panda-a4.dtb
 #boot/dtb-KVER-ipfire-multi/omap4-panda-es.dtb
 #boot/dtb-KVER-ipfire-multi/omap4-panda.dtb
+#boot/dtb-KVER-ipfire-multi/omap4-sdp-es23plus.dtb
 #boot/dtb-KVER-ipfire-multi/omap4-sdp.dtb
 #boot/dtb-KVER-ipfire-multi/omap4-var-som.dtb
-#boot/dtb-KVER-ipfire-multi/omap5-evm.dtb
+#boot/dtb-KVER-ipfire-multi/omap5-uevm.dtb
+#boot/dtb-KVER-ipfire-multi/sun4i-a10-a1000.dtb
 #boot/dtb-KVER-ipfire-multi/sun4i-a10-cubieboard.dtb
 #boot/dtb-KVER-ipfire-multi/sun4i-a10-hackberry.dtb
 #boot/dtb-KVER-ipfire-multi/sun4i-a10-mini-xplus.dtb
+#boot/dtb-KVER-ipfire-multi/sun4i-a10-olinuxino-lime.dtb
+#boot/dtb-KVER-ipfire-multi/sun4i-a10-pcduino.dtb
+#boot/dtb-KVER-ipfire-multi/sun5i-a10s-olinuxino-micro.dtb
+#boot/dtb-KVER-ipfire-multi/sun5i-a13-olinuxino-micro.dtb
 #boot/dtb-KVER-ipfire-multi/sun5i-a13-olinuxino.dtb
+#boot/dtb-KVER-ipfire-multi/sun6i-a31-colombus.dtb
+#boot/dtb-KVER-ipfire-multi/sun7i-a20-bananapi.dtb
+#boot/dtb-KVER-ipfire-multi/sun7i-a20-cubieboard2.dtb
+#boot/dtb-KVER-ipfire-multi/sun7i-a20-cubietruck.dtb
+#boot/dtb-KVER-ipfire-multi/sun7i-a20-olinuxino-micro.dtb
+#boot/dtb-KVER-ipfire-multi/sun7i-a20-pcduino3.dtb
 #boot/dtb-KVER-ipfire-multi/vexpress-v2p-ca15-tc1.dtb
 #boot/dtb-KVER-ipfire-multi/vexpress-v2p-ca15_a7.dtb
 #boot/dtb-KVER-ipfire-multi/vexpress-v2p-ca5s.dtb
 #boot/dtb-KVER-ipfire-multi/vexpress-v2p-ca9.dtb
+#boot/dtb-KVER-ipfire-multi/vf610-cosmic.dtb
+#boot/dtb-KVER-ipfire-multi/vf610-twr.dtb
 #boot/dtb-KVER-ipfire-multi/vt8500-bv07.dtb
 #boot/dtb-KVER-ipfire-multi/wm8505-ref.dtb
 #boot/dtb-KVER-ipfire-multi/wm8650-mid.dtb
+#boot/dtb-KVER-ipfire-multi/wm8750-apc8750.dtb
 #boot/dtb-KVER-ipfire-multi/wm8850-w70v2.dtb
 #boot/dtb-KVER-ipfire-multi/xenvm-4.2.dtb
 #boot/dtb-KVER-ipfire-multi/zynq-zc702.dtb
+#boot/dtb-KVER-ipfire-multi/zynq-zc706.dtb
+#boot/dtb-KVER-ipfire-multi/zynq-zed.dtb
 boot/vmlinuz-KVER-ipfire-multi
 boot/zImage-ipfire-multi
 lib/modules/KVER-ipfire-multi
@@ -74,9 +138,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/arch/arm
 #lib/modules/KVER-ipfire-multi/kernel/arch/arm/crypto
 #lib/modules/KVER-ipfire-multi/kernel/arch/arm/crypto/aes-arm.ko
-#lib/modules/KVER-ipfire-multi/kernel/arch/arm/mach-imx
-#lib/modules/KVER-ipfire-multi/kernel/arch/arm/mach-imx/devices
-#lib/modules/KVER-ipfire-multi/kernel/arch/arm/mach-imx/devices/wand-rfkill.ko
 #lib/modules/KVER-ipfire-multi/kernel/arch/arm/oprofile
 #lib/modules/KVER-ipfire-multi/kernel/arch/arm/oprofile/oprofile.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto
@@ -108,13 +169,14 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/crypto/crypto_null.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/cts.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/deflate.ko
-#lib/modules/KVER-ipfire-multi/kernel/crypto/des_generic.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/fcrypt.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/gcm.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/gf128mul.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/ghash-generic.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/khazad.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/lrw.ko
+#lib/modules/KVER-ipfire-multi/kernel/crypto/lz4.ko
+#lib/modules/KVER-ipfire-multi/kernel/crypto/lz4hc.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/lzo.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/md4.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/michael_mic.ko
@@ -127,7 +189,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/crypto/salsa20_generic.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/seed.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/serpent_generic.ko
-#lib/modules/KVER-ipfire-multi/kernel/crypto/sha512_generic.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/tcrypt.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/tea.ko
 #lib/modules/KVER-ipfire-multi/kernel/crypto/tgr192.ko
@@ -143,11 +204,13 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ata
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ata/ahci_imx.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ata/ahci_platform.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/ata/ahci_sunxi.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ata/libahci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ata/pata_arasan_cf.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ata/pata_imx.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ata/sata_highbank.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ata/sata_mv.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/ata/sata_rcar.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/atm
 #lib/modules/KVER-ipfire-multi/kernel/drivers/atm/atmtcp.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/atm/eni.ko
@@ -159,6 +222,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/atm/nicstar.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/atm/solos-pci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/atm/suni.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/bcma
+#lib/modules/KVER-ipfire-multi/kernel/drivers/bcma/bcma.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/block
 #lib/modules/KVER-ipfire-multi/kernel/drivers/block/cryptoloop.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/bluetooth
@@ -189,12 +254,25 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/clk
 #lib/modules/KVER-ipfire-multi/kernel/drivers/clk/clk-axi-clkgen.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/clk/clk-si5351.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/clk/clk-si570.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/clk/clk-twl6040.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/clk/qcom
+#lib/modules/KVER-ipfire-multi/kernel/drivers/clk/qcom/clk-qcom.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/clk/qcom/gcc-msm8660.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/clk/qcom/gcc-msm8960.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/clk/qcom/gcc-msm8974.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/clk/qcom/mmcc-msm8960.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/clk/qcom/mmcc-msm8974.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/cpufreq
 #lib/modules/KVER-ipfire-multi/kernel/drivers/cpufreq/imx6q-cpufreq.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/crypto
 #lib/modules/KVER-ipfire-multi/kernel/drivers/crypto/hifn_795x.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/crypto/mv_cesa.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/dma
+#lib/modules/KVER-ipfire-multi/kernel/drivers/dma/cppi41.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/dma/dw
+#lib/modules/KVER-ipfire-multi/kernel/drivers/dma/dw/dw_dmac_core.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/dma/dw/dw_dmac_pci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/dma/timb_dma.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/firewire
 #lib/modules/KVER-ipfire-multi/kernel/drivers/firewire/firewire-core.ko
@@ -203,10 +281,13 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpio
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpio/gpio-adnp.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpio/gpio-mcp23s08.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/gpio/gpio-sch311x.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpio/gpio-ts5500.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpio/gpio-viperboard.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm
+#lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/armada
+#lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/armada/armada.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/drm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/drm_kms_helper.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/drm_usb.ko
@@ -218,6 +299,10 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/i2c/tda998x.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/omapdrm
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/omapdrm/omapdrm.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/rcar-du
+#lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/rcar-du/rcar-du-drm.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/shmobile
+#lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/shmobile/shmob-drm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/tilcdc
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/tilcdc/tilcdc.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/gpu/drm/udl
@@ -241,6 +326,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hid/hid-roccat-kovaplus.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hid/hid-roccat-lua.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hid/hid-roccat-pyra.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/hid/hid-roccat-ryos.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hid/hid-roccat-savu.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hid/hid-roccat.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hid/hid-saitek.ko
@@ -279,24 +365,22 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/amc6821.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/asc7621.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/atxp1.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/dme1737.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/ds1621.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/ds620.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/emc1403.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/emc6w201.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/f71805f.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/f71882fg.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/f75375s.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/g760a.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/g762.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/gl518sm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/gl520sm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/hih6130.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/htu21.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/hwmon-vid.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/ibmaem.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/ibmpex.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/ina209.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/ina2xx.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/it87.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/lineage-pem.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/lm73.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/lm75.ko
@@ -325,10 +409,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/max6650.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/max6697.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/mcp3021.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/nct6775.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/ntc_thermistor.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/pc87360.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/pc87427.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/pcf8591.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/pmbus
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/pmbus/adm1275.ko
@@ -340,22 +421,14 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/pmbus/pmbus_core.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/pmbus/ucd9000.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/pmbus/ucd9200.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/sch5627.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/sch5636.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/sch56xx-common.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/sht15.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/sht21.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/smsc47b397.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/smsc47m1.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/smsc47m192.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/thmc50.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/tmp102.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/tmp401.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/tmp421.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/twl4030-madc-hwmon.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/vt1211.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/w83627ehf.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/w83627hf.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/w83781d.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/w83791d.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/hwmon/w83792d.ko
@@ -375,13 +448,21 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/busses/i2c-parport-light.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/busses/i2c-parport.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/busses/i2c-pca-platform.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/busses/i2c-robotfuzz-osif.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/busses/i2c-simtec.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/busses/i2c-tiny-usb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/busses/i2c-versatile.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/busses/i2c-viperboard.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/busses/i2c-wmt.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/i2c-dev.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/i2c-smbus.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/i2c-stub.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/muxes
+#lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/muxes/i2c-arb-gpio-challenge.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/muxes/i2c-mux-gpio.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/muxes/i2c-mux-pca9541.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/muxes/i2c-mux-pca954x.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/i2c/muxes/i2c-mux-pinctrl.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/iio
 #lib/modules/KVER-ipfire-multi/kernel/drivers/iio/common
 #lib/modules/KVER-ipfire-multi/kernel/drivers/iio/common/hid-sensors
@@ -402,13 +483,14 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/ati_remote2.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/cm109.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/gpio-beeper.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/keyspan_remote.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/powermate.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/pwm-beeper.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/retu-pwrbutton.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/rotary_encoder.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/twl4030-pwrbutton.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/twl4030-vibra.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/twl6040-vibra.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/uinput.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/misc/yealink.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/mouse
@@ -425,6 +507,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/serio/ambakmi.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/serio/apbps2.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/serio/arc_ps2.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/input/serio/olpc_apsp.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/serio/serio_raw.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/input/sparse-keymap.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/isdn
@@ -455,19 +538,21 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-lp5523.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-lp5562.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-lp55xx-common.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-lp8501.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-lt3593.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-ot200.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-pca9532.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-pca955x.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-pca9633.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-pca963x.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-pca9685.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-pwm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-regulator.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-tca6507.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/leds/leds-tlc59116.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/trigger
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/trigger/ledtrig-backlight.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/trigger/ledtrig-camera.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/trigger/ledtrig-gpio.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/leds/trigger/ledtrig-heartbeat.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/trigger/ledtrig-netdev.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/trigger/ledtrig-oneshot.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/leds/trigger/ledtrig-timer.ko
@@ -476,7 +561,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/bcache
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/bcache/bcache.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-bio-prison.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-bufio.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-cache-cleaner.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-cache-mq.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-cache.ko
@@ -487,6 +571,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-raid.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-round-robin.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-service-time.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-switch.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/dm-verity.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/faulty.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/md/linear.ko
@@ -524,6 +609,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/cx24110.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/cx24113.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/cx24116.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/cx24117.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/cx24123.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/cxd2820r.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/dib0070.ko
@@ -538,6 +624,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/drxk.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/ds3000.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/dvb-pll.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/dvbsky_m88ds3103.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/ec100.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/isl6405.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/dvb-frontends/isl6421.ko
@@ -611,6 +698,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/msp3400.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/mt9v011.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/saa6588.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/saa6752hs.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/saa7115.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/saa7127.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/i2c/saa717x.ko
@@ -685,7 +773,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/pt1
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/pt1/earth-pt1.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/saa7134
-#lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/saa7134/saa6752hs.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/saa7134/saa7134-alsa.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/saa7134/saa7134-dvb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/pci/saa7134/saa7134-empress.ko
@@ -709,10 +796,16 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/sh_veu.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/soc_camera
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/soc_camera/mx3_camera.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/soc_camera/rcar_vin.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/soc_camera/soc_camera.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/soc_camera/soc_camera_platform.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/soc_camera/soc_mediabus.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/soc_camera/soc_scale_crop.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/ti-vpe
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/ti-vpe/ti-vpe.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/timblogiw.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/vsp1
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/platform/vsp1/vsp1.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/gpio-ir-recv.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/iguanair.ko
@@ -749,6 +842,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-budget-ci-old.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-cinergy-1400.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-cinergy.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-delock-61959.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-dib0700-nec.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-dib0700-rc5.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-digitalnow-tinytwin.ko
@@ -811,6 +905,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-reddo.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-snapstream-firefly.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-streamzap.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-su3000.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-tbs-nec.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-technisat-usb2.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/keymaps/rc-terratec-cinergy-xs.ko
@@ -833,6 +928,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/rc-loopback.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/redrat3.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/streamzap.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/sunxi-cir.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/rc/ttusbir.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/e4000.ko
@@ -840,6 +936,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/fc0012.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/fc0013.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/fc2580.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/m88ts2022.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/max2165.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/mt2060.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/tuners/mt2063.ko
@@ -912,6 +1009,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/em28xx/em28xx-alsa.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/em28xx/em28xx-dvb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/em28xx/em28xx-rc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/em28xx/em28xx-v4l.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/em28xx/em28xx.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/gspca
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/gspca/gl860
@@ -951,6 +1049,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/gspca/gspca_sq905c.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/gspca/gspca_sq930x.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/gspca/gspca_stk014.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/gspca/gspca_stk1135.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/gspca/gspca_stv0680.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/gspca/gspca_sunplus.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/gspca/gspca_t613.ko
@@ -973,8 +1072,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/s2255/s2255drv.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/siano
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/siano/smsusb.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/sn9c102
-#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/sn9c102/sn9c102.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/stk1160
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/stk1160/stk1160.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/stkwebcam
@@ -985,6 +1082,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/tm6000/tm6000-alsa.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/tm6000/tm6000-dvb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/tm6000/tm6000.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/usbtv
+#lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/usbtv/usbtv.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/usbvision
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/usbvision/usbvision.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/uvc
@@ -993,7 +1092,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/usb/zr364xx/zr364xx.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/tuner.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/v4l2-int-device.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/v4l2-mem2mem.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf-dma-sg.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/media/v4l2-core/videobuf-dvb.ko
@@ -1005,6 +1103,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/memstick
 #lib/modules/KVER-ipfire-multi/kernel/drivers/memstick/core
 #lib/modules/KVER-ipfire-multi/kernel/drivers/memstick/core/memstick.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/memstick/core/ms_block.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/memstick/core/mspro_block.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mfd
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mfd/lm3533-core.ko
@@ -1032,10 +1131,13 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/dw_mmc-exynos.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/dw_mmc-k3.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/dw_mmc-pltfm.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/dw_mmc-socfpga.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/dw_mmc.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/mmci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/mxcmmc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/sdhci-of-arasan.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/sdhci-pxav2.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/sdhci-pxav3.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/mmc/host/ushc.ko
@@ -1061,11 +1163,15 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/8390/ne2k-pci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/adaptec
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/adaptec/starfire.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/allwinner
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/allwinner/sun4i-emac.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/alteon
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/alteon/acenic.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/amd
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/amd/amd8111e.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/amd/pcnet32.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/arc
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/arc/arc_emac.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/atheros
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/atheros/alx
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/atheros/alx/alx.ko
@@ -1138,6 +1244,10 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/e1000e
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/i40e
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/i40e/i40e.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/i40evf
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/i40evf/i40evf.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/igb
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/igb/igb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/igbvf
@@ -1146,6 +1256,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/ixgb/ixgb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/ixgbe
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/ixgbevf
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/intel/ixgbevf/ixgbevf.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/jme.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/marvell
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/marvell/mv643xx_eth.ko
@@ -1173,9 +1285,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/neterion/vxge/vxge.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/nvidia
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/nvidia/forcedeth.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/oki-semi
-#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/oki-semi/pch_gbe
-#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/packetengines
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/packetengines/hamachi.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/packetengines/yellowfin.ko
@@ -1193,6 +1302,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/realtek/8139cp.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/realtek/8139too.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/realtek/r8169.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/renesas
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/renesas/sh_eth.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/sfc
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/sfc/sfc.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/silan
@@ -1228,6 +1339,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/wiznet
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/wiznet/w5100.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/wiznet/w5300.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/xilinx
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/ethernet/xilinx/xilinx_emaclite.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/ifb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/imq.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/macvlan.ko
@@ -1235,6 +1348,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/mdio.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/mii.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/netconsole.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/nlmon.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/amd.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/at803x.ko
@@ -1243,6 +1357,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/cicada.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/davicom.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/et1011c.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/gw16083.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/icplus.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/lxt.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/marvell.ko
@@ -1250,6 +1365,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/mdio-mux-gpio.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/mdio-mux-mmioreg.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/mdio-mux.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/mdio-sun4i.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/micrel.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/national.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/phy/qsemi.ko
@@ -1284,6 +1400,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/dm9601.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/gl620a.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/hso.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/huawei_cdc_ncm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/int51x1.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/ipheth.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/kalmia.ko
@@ -1300,6 +1417,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/sierra_net.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/smsc75xx.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/smsc95xx.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/sr9700.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/sr9800.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/usbnet.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/usb/zaurus.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/veth.ko
@@ -1313,6 +1432,9 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ar5523
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ar5523/ar5523.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ath.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ath10k
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ath9k
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ath9k/ath9k_common.ko
@@ -1320,6 +1442,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/carl9170
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/carl9170/carl9170.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/wcn36xx
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ath/wcn36xx/wcn36xx.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/atmel.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/atmel_pci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/b43
@@ -1329,8 +1453,13 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/brcm80211
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/brcm80211/brcmfmac
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/brcm80211/brcmsmac
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/brcm80211/brcmutil
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/cw1200
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/cw1200/cw1200_core.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/cw1200/cw1200_wlan_sdio.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/hostap
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/hostap/hostap.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/hostap/hostap_pci.ko
@@ -1405,6 +1534,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/rtlwifi/rtl8192se/rtl8192se.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/rtlwifi/rtl8723ae
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/rtlwifi/rtl8723ae/rtl8723ae.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/rtlwifi/rtl_usb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ti
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/ti/wl1251
@@ -1422,21 +1553,27 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/net/wireless/zd1211rw/zd1211rw.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/parport
 #lib/modules/KVER-ipfire-multi/kernel/drivers/parport/parport.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/phy
+#lib/modules/KVER-ipfire-multi/kernel/drivers/phy/phy-twl4030-usb.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/pinctrl
+#lib/modules/KVER-ipfire-multi/kernel/drivers/pinctrl/pinctrl-msm8x74.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/power
 #lib/modules/KVER-ipfire-multi/kernel/drivers/power/88pm860x_battery.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/power/88pm860x_charger.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/power/generic-adc-battery.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/power/twl4030_madc_battery.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/pps
 #lib/modules/KVER-ipfire-multi/kernel/drivers/pps/pps_core.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ptp
 #lib/modules/KVER-ipfire-multi/kernel/drivers/ptp/ptp.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/ptp/ptp_pch.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/pwm
 #lib/modules/KVER-ipfire-multi/kernel/drivers/pwm/pwm-imx.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/pwm/pwm-sunxi.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/pwm/pwm-twl-led.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/pwm/pwm-twl.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/pwm/pwm-vt8500.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/regulator
+#lib/modules/KVER-ipfire-multi/kernel/drivers/regulator/88pm800.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/regulator/anatop-regulator.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/regulator/lp8755.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/regulator/vexpress.ko
@@ -1457,16 +1594,20 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-em3027.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-fm3130.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-hid-sensor-time.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-hym8563.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-imxdi.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-isl12022.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-isl12057.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-isl1208.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-m41t80.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-m48t35.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-m48t59.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-max6900.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-moxart.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-msm6242.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-mv.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-mxc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-pcf2127.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-pcf8523.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-pcf8563.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/rtc/rtc-pcf8583.ko
@@ -1499,8 +1640,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/atp870u.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/be2iscsi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/be2iscsi/be2iscsi.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/bfa
-#lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/bfa/bfa.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/bnx2fc
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/bnx2fc/bnx2fc.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/bnx2i
@@ -1521,6 +1660,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/device_handler/scsi_dh_hp_sw.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/device_handler/scsi_dh_rdac.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/dmx3191d.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/esas2r
+#lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/esas2r/esas2r.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/fcoe
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/fcoe/fcoe.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/scsi/fcoe/libfcoe.ko
@@ -1587,8 +1728,16 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/staging
 #lib/modules/KVER-ipfire-multi/kernel/drivers/staging/ced1401
 #lib/modules/KVER-ipfire-multi/kernel/drivers/staging/ced1401/cedusb.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/staging/gdm724x
+#lib/modules/KVER-ipfire-multi/kernel/drivers/staging/gdm724x/gdmtty.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/staging/gdm724x/gdmulte.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/staging/imx-drm
+#lib/modules/KVER-ipfire-multi/kernel/drivers/staging/imx-drm/imx-hdmi.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/staging/imx-drm/imx-ipuv3-crtc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/staging/imx-drm/imx-ldb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/staging/imx-drm/imxdrm.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/staging/imx-drm/ipu-v3
+#lib/modules/KVER-ipfire-multi/kernel/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/staging/imx-drm/parallel-display.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/staging/rts5139
 #lib/modules/KVER-ipfire-multi/kernel/drivers/staging/rts5139/rts5139.ko
@@ -1605,7 +1754,11 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/tty/n_r3964.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/tty/serial
 #lib/modules/KVER-ipfire-multi/kernel/drivers/tty/serial/arc_uart.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/tty/serial/fsl_lpuart.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/tty/serial/sccnxp.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/tty/serial/sh-sci.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/tty/serial/st-asc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/tty/serial/uartlite.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/uio
 #lib/modules/KVER-ipfire-multi/kernel/drivers/uio/uio.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb
@@ -1616,23 +1769,38 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/atm/usbatm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/atm/xusbatm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/chipidea
-#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/chipidea/ci13xxx_imx.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/chipidea/ci13xxx_msm.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/chipidea/ci13xxx_pci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/chipidea/ci_hdrc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/chipidea/ci_hdrc_imx.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/chipidea/ci_hdrc_msm.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/chipidea/ci_hdrc_pci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/chipidea/usbmisc_imx.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/class
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/class/cdc-acm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/class/cdc-wdm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/class/usblp.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/class/usbtmc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc2
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc2/dwc2.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc2/dwc2_pci.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc2/dwc2_platform.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc3
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc3/dwc3-exynos.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc3/dwc3-omap.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc3/dwc3-keystone.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc3/dwc3-pci.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/dwc3/dwc3.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/gadget
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/gadget/g_ether.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/gadget/libcomposite.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/gadget/u_ether.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/gadget/usb_f_ecm.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/gadget/usb_f_ecm_subset.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/gadget/usb_f_eem.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/gadget/usb_f_rndis.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/host
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/host/bcma-hcd.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/host/ehci-mxc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/host/fotg210-hcd.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/host/fusbh200-hcd.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/host/isp1362-hcd.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/host/sl811-hcd.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/host/ssb-hcd.ko
@@ -1656,16 +1824,29 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/misc/yurex.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/mon
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/mon/usbmon.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/musb
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/musb/am35x.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/musb/musb_am335x.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/musb/musb_dsps.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/musb/musb_hdrc.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/musb/omap2430.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/musb/tusb6010.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/musb/ux500.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-am335x-control.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-am335x.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-fsm-usb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-gpio-vbus-usb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-isp1301.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-mxs-usb.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-nop.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-omap-usb3.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-rcar-usb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-samsung-usb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-samsung-usb2.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-samsung-usb3.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/phy/phy-twl6030-usb.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/renesas_usbhs
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/renesas_usbhs/renesas_usbhs.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/aircable.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/ark3116.ko
@@ -1676,7 +1857,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/digi_acceleport.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/f81232.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/ftdi_sio.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/funsoft.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/io_edgeport.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/io_ti.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/ipaq.ko
@@ -1688,17 +1868,17 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/mct_u232.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/mos7720.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/mos7840.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/moto_modem.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/mxuport.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/option.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/oti6858.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/pl2303.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/qcaux.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/qcserial.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/quatech2.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/siemens_mpi.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/sierra.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/spcp8x5.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/ssu100.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/usb-serial-simple.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/usb_wwan.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/usbserial.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/usb/serial/visor.ko
@@ -1726,18 +1906,25 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/video/cfbcopyarea.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/video/cfbfillrect.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/video/cfbimgblt.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/da8xx-fb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/video/fb_sys_fops.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/imxfb.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/ocfb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2
-#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays
-#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays/panel-generic-dpi.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays/panel-picodlp.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays/panel-sharp-ls037v7dw01.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays/panel-taal.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays/panel-tfp410.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays-new
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays-new/connector-analog-tv.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays-new/connector-dvi.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays-new/connector-hdmi.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays-new/encoder-tfp410.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays-new/encoder-tpd12s015.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays-new/panel-dpi.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays-new/panel-dsi-cm.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/displays-new/panel-sharp-ls037v7dw01.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/omapfb
 #lib/modules/KVER-ipfire-multi/kernel/drivers/video/omap2/omapfb/omapfb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/video/smscufx.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/video/ssd1307fb.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/video/xilinxfb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/w1
 #lib/modules/KVER-ipfire-multi/kernel/drivers/w1/masters
 #lib/modules/KVER-ipfire-multi/kernel/drivers/w1/masters/ds1wm.ko
@@ -1759,13 +1946,15 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/drivers/w1/slaves/w1_therm.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/w1/wire.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog
+#lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/gpio_wdt.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/imx2_wdt.ko
-#lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/mpcore_wdt.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/mena21_wdt.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/omap_wdt.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/pcwd_usb.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/retu_wdt.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/softdog.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/sp805_wdt.ko
+#lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/sunxi_wdt.ko
 #lib/modules/KVER-ipfire-multi/kernel/drivers/watchdog/twl4030_wdt.ko
 #lib/modules/KVER-ipfire-multi/kernel/fs
 #lib/modules/KVER-ipfire-multi/kernel/fs/btrfs
@@ -1872,6 +2061,9 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/lib/crc7.ko
 #lib/modules/KVER-ipfire-multi/kernel/lib/crc8.ko
 #lib/modules/KVER-ipfire-multi/kernel/lib/libcrc32c.ko
+#lib/modules/KVER-ipfire-multi/kernel/lib/lz4
+#lib/modules/KVER-ipfire-multi/kernel/lib/lz4/lz4_compress.ko
+#lib/modules/KVER-ipfire-multi/kernel/lib/lz4/lz4hc_compress.ko
 #lib/modules/KVER-ipfire-multi/kernel/lib/mpi
 #lib/modules/KVER-ipfire-multi/kernel/lib/mpi/mpi.ko
 #lib/modules/KVER-ipfire-multi/kernel/lib/oid_registry.ko
@@ -1881,8 +2073,6 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/lib/ts_bm.ko
 #lib/modules/KVER-ipfire-multi/kernel/lib/ts_fsm.ko
 #lib/modules/KVER-ipfire-multi/kernel/lib/ts_kmp.ko
-#lib/modules/KVER-ipfire-multi/kernel/lib/zlib_deflate
-#lib/modules/KVER-ipfire-multi/kernel/lib/zlib_deflate/zlib_deflate.ko
 #lib/modules/KVER-ipfire-multi/kernel/net
 #lib/modules/KVER-ipfire-multi/kernel/net/802
 #lib/modules/KVER-ipfire-multi/kernel/net/802/garp.ko
@@ -1928,8 +2118,13 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/bridge/netfilter/ebtable_filter.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/bridge/netfilter/ebtable_nat.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/bridge/netfilter/ebtables.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/bridge/netfilter/nf_tables_bridge.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/core
 #lib/modules/KVER-ipfire-multi/kernel/net/core/netprio_cgroup.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/hsr
+#lib/modules/KVER-ipfire-multi/kernel/net/hsr/hsr.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ieee802154
+#lib/modules/KVER-ipfire-multi/kernel/net/ieee802154/6lowpan_iphc.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/ah4.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/esp4.ko
@@ -1948,6 +2143,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/ipt_ECN.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/ipt_MASQUERADE.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/ipt_REJECT.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/ipt_SYNPROXY.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/ipt_ah.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/ipt_rpfilter.ko
@@ -1961,6 +2157,11 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/nf_nat_pptp.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/nf_nat_proto_gre.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/nf_nat_snmp_basic.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/nf_tables_arp.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/nf_tables_ipv4.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/nft_chain_nat_ipv4.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/nft_chain_route_ipv4.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv4/netfilter/nft_reject_ipv4.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/tcp_bic.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/tcp_diag.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv4/tcp_highspeed.ko
@@ -1984,12 +2185,14 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/esp6.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/ip6_gre.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/ip6_tunnel.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv6/ip6_vti.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/ipcomp6.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/mip6.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/ip6t_MASQUERADE.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/ip6t_NPT.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/ip6t_REJECT.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/ip6t_SYNPROXY.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/ip6t_ah.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/ip6t_eui64.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/ip6t_frag.ko
@@ -2004,6 +2207,10 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/ip6table_raw.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/ip6table_security.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/nf_nat_ipv6.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/nf_tables_ipv6.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/nft_chain_nat_ipv6.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/nft_chain_route_ipv6.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/ipv6/netfilter/nft_reject_ipv6.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/sit.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/tunnel6.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/ipv6/xfrm6_mode_beet.ko
@@ -2034,7 +2241,9 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/ipset/ip_set_hash_ipportnet.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/ipset/ip_set_hash_net.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/ipset/ip_set_hash_netiface.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/ipset/ip_set_hash_netnet.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/ipset/ip_set_hash_netport.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/ipset/ip_set_hash_netportnet.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/ipset/ip_set_list_set.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/ipvs
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/ipvs/ip_vs.ko
@@ -2075,13 +2284,28 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nf_nat_proto_udplite.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nf_nat_sip.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nf_nat_tftp.ko
-#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nf_tproxy_core.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nf_synproxy_core.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nf_tables.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nf_tables_inet.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nfnetlink.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nfnetlink_acct.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nfnetlink_cthelper.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nfnetlink_cttimeout.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nfnetlink_log.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nfnetlink_queue.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_compat.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_counter.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_ct.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_exthdr.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_hash.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_limit.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_log.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_meta.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_nat.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_queue.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_rbtree.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_reject.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/nft_reject_inet.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_AUDIT.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_CHECKSUM.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_CLASSIFY.ko
@@ -2107,6 +2331,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_TRACE.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_addrtype.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_bpf.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_cgroup.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_cluster.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_comment.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_connbytes.ko
@@ -2123,7 +2348,10 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_hashlimit.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_helper.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_hl.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_ipcomp.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_iprange.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_ipvs.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_l2tp.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_layer7.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_length.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/netfilter/xt_limit.ko
@@ -2167,6 +2395,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/act_simple.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/act_skbedit.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/cls_basic.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/sched/cls_bpf.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/cls_cgroup.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/cls_flow.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/cls_fw.ko
@@ -2187,9 +2416,11 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_codel.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_drr.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_dsmark.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_fq.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_fq_codel.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_gred.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_hfsc.ko
+#lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_hhf.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_htb.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_ingress.ko
 #lib/modules/KVER-ipfire-multi/kernel/net/sched/sch_mqprio.ko
@@ -2244,7 +2475,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/sound/core/snd-compress.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/core/snd-hrtimer.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/core/snd-hwdep.ko
-#lib/modules/KVER-ipfire-multi/kernel/sound/core/snd-page-alloc.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/core/snd-pcm-dmaengine.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/core/snd-pcm.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/core/snd-rawmidi.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/core/snd-timer.ko
@@ -2265,13 +2496,15 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/sound/drivers/snd-virmidi.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/drivers/vx
 #lib/modules/KVER-ipfire-multi/kernel/sound/drivers/vx/snd-vx-lib.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/firewire
+#lib/modules/KVER-ipfire-multi/kernel/sound/firewire/snd-dice.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/firewire/snd-firewire-lib.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/i2c
 #lib/modules/KVER-ipfire-multi/kernel/sound/i2c/other
 #lib/modules/KVER-ipfire-multi/kernel/sound/i2c/other/snd-ak4113.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/i2c/other/snd-ak4114.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/i2c/other/snd-ak4xxx-adda.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/i2c/other/snd-pt2258.ko
-#lib/modules/KVER-ipfire-multi/kernel/sound/i2c/other/snd-tea575x-tuner.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/i2c/snd-cs8427.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/i2c/snd-i2c.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/pci
@@ -2319,6 +2552,7 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/sound/pci/hda/snd-hda-codec-cirrus.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/pci/hda/snd-hda-codec-cmedia.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/pci/hda/snd-hda-codec-conexant.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/pci/hda/snd-hda-codec-generic.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/pci/hda/snd-hda-codec-hdmi.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/pci/hda/snd-hda-codec-idt.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/pci/hda/snd-hda-codec-realtek.ko
@@ -2378,30 +2612,45 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/sound/pci/ymfpci
 #lib/modules/KVER-ipfire-multi/kernel/sound/pci/ymfpci/snd-ymfpci.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/adi
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/adi/snd-soc-adi-axi-i2s.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/adi/snd-soc-adi-axi-spdif.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/atmel
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/atmel/snd-soc-atmel-pcm.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs
-#lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-omap-hdmi-codec.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-dmic.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-hdmi-codec.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-sgtl5000.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-tlv320aic23.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-tlv320aic3x.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-tpa6130a2.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-twl4030.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-twl6040.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/codecs/snd-soc-wm8962.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/davinci
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/davinci/snd-soc-davinci-mcasp.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/davinci/snd-soc-davinci.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/davinci/snd-soc-evm.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/dwc
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/dwc/designware_i2s.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl/imx-pcm-dma.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl/snd-soc-fsl-spdif.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl/snd-soc-fsl-ssi.ko
-#lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl/snd-soc-fsl-utils.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl/snd-soc-imx-audmux.ko
-#lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl/snd-soc-imx-pcm.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl/snd-soc-imx-sgtl5000.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl/snd-soc-imx-spdif.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/fsl/snd-soc-imx-wm8962.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/generic
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/generic/snd-soc-simple-card.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-am3517evm.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-omap-abe-twl6040.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-omap-dmic.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-omap-hdmi-card.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-omap-hdmi.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-omap-mcbsp.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-omap-mcpdm.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-omap-twl4030.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-omap.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/soc/omap/snd-soc-omap3pandora.ko
@@ -2417,6 +2666,8 @@ lib/modules/KVER-ipfire-multi
 #lib/modules/KVER-ipfire-multi/kernel/sound/usb/6fire/snd-usb-6fire.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/usb/caiaq
 #lib/modules/KVER-ipfire-multi/kernel/sound/usb/caiaq/snd-usb-caiaq.ko
+#lib/modules/KVER-ipfire-multi/kernel/sound/usb/hiface
+#lib/modules/KVER-ipfire-multi/kernel/sound/usb/hiface/snd-usb-hiface.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/usb/misc
 #lib/modules/KVER-ipfire-multi/kernel/sound/usb/misc/snd-ua101.ko
 #lib/modules/KVER-ipfire-multi/kernel/sound/usb/snd-usb-audio.ko
index 01f9312ee890ec7b24675bad898ca674b8bd95e9..ee74ac3452c7fb4c672ea8de6f4d08f2e11b9df7 100644 (file)
@@ -1,5 +1,4 @@
 boot/System.map-KVER-ipfire-rpi
-#boot/System.map-ipfire-rpi
 boot/config-KVER-ipfire-rpi
 boot/kernel.img
 boot/vmlinuz-KVER-ipfire-rpi
@@ -12,8 +11,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/arch/arm/crypto
 #lib/modules/KVER-ipfire-rpi/kernel/arch/arm/crypto/aes-arm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/arch/arm/crypto/sha1-arm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/arch/arm/mach-bcm2708
-#lib/modules/KVER-ipfire-rpi/kernel/arch/arm/mach-bcm2708/dmaer_master.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/af_alg.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/algif_hash.ko
@@ -23,16 +20,12 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/arc4.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/asymmetric_keys
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/asymmetric_keys/asymmetric_keys.ko
-#lib/modules/KVER-ipfire-rpi/kernel/crypto/asymmetric_keys/public_key.ko
-#lib/modules/KVER-ipfire-rpi/kernel/crypto/asymmetric_keys/rsa.ko
-#lib/modules/KVER-ipfire-rpi/kernel/crypto/asymmetric_keys/x509_key_parser.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/async_tx
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/async_tx/async_memcpy.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/async_tx/async_pq.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/async_tx/async_raid6_recov.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/async_tx/async_tx.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/async_tx/async_xor.ko
-#lib/modules/KVER-ipfire-rpi/kernel/crypto/async_tx/raid6test.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/authenc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/authencesn.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/blowfish_common.ko
@@ -41,7 +34,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/cast5_generic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/cast6_generic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/cast_common.ko
-#lib/modules/KVER-ipfire-rpi/kernel/crypto/cbc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/ccm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/cmac.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/crc32.ko
@@ -50,17 +42,17 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/crypto_user.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/ctr.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/cts.ko
-#lib/modules/KVER-ipfire-rpi/kernel/crypto/des_generic.ko
+#lib/modules/KVER-ipfire-rpi/kernel/crypto/deflate.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/ecb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/fcrypt.ko
-#lib/modules/KVER-ipfire-rpi/kernel/crypto/gcm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/gf128mul.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/ghash-generic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/khazad.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/lrw.ko
+#lib/modules/KVER-ipfire-rpi/kernel/crypto/lz4.ko
+#lib/modules/KVER-ipfire-rpi/kernel/crypto/lz4hc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/lzo.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/md4.ko
-#lib/modules/KVER-ipfire-rpi/kernel/crypto/md5.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/michael_mic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/pcbc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/rmd128.ko
@@ -71,7 +63,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/seed.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/seqiv.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/serpent_generic.ko
-#lib/modules/KVER-ipfire-rpi/kernel/crypto/sha1_generic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/sha512_generic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/tea.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/tgr192.ko
@@ -84,23 +75,21 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/xts.ko
 #lib/modules/KVER-ipfire-rpi/kernel/crypto/zlib.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/ata
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/ata/libata.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/atm
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/atm/atmtcp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/base
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/base/regmap
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/base/regmap/regmap-i2c.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/base/regmap/regmap-mmio.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/base/regmap/regmap-spi.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/bcma
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/bcma/bcma.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/block
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/block/aoe
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/block/aoe/aoe.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/block/cryptoloop.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/block/mg_disk.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/block/drbd
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/block/drbd/drbd.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/block/nbd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/block/osdblk.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/block/rbd.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/block/pktcdvd.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/bluetooth
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/bluetooth/ath3k.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/bluetooth/bcm203x.ko
@@ -110,76 +99,47 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/bluetooth/btmrvl_sdio.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/bluetooth/btsdio.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/bluetooth/btusb.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/bluetooth/btwilink.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/bluetooth/hci_uart.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/bluetooth/hci_vhci.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/cdrom
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/cdrom/cdrom.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char/ipmi
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char/ipmi/ipmi_devintf.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char/ipmi/ipmi_msghandler.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char/ipmi/ipmi_poweroff.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char/ipmi/ipmi_si.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char/ipmi/ipmi_watchdog.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char/lp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char/nvram.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/char/ppdev.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/connector
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/connector/cn.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/cpufreq
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/cpufreq/cpufreq_stats.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/dma
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/dma/dmatest.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-74x164.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-adnp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-adp5588.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-generic.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-grgpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-max7300.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-max7301.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-max730x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-max732x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-mc33880.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-mcp23s08.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-pca953x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-pcf857x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-rcar.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpio/gpio-ts5500.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpu
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpu/drm
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpu/drm/drm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpu/drm/drm_kms_helper.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpu/drm/drm_usb.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpu/drm/i2c
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpu/drm/i2c/tda998x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpu/drm/udl
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/gpu/drm/udl/udl.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-aureal.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-a4tech.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-apple.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-axff.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-belkin.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-cherry.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-chicony.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-cypress.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-dr.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-elecom.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-elo.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-emsff.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-ezkey.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-gaff.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-gyration.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-holtek-kbd.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-holtek-mouse.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-holtekff.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-icade.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-kensington.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-keytouch.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-kye.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-lcpower.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-lenovo-tpkbd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-logitech-dj.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-logitech.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-magicmouse.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-microsoft.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-monterey.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-multitouch.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-ntrig.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-ortek.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-petalynx.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-picolcd.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-pl.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-primax.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-prodikeys.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-ps3remote.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-roccat-arvo.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-roccat-common.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-roccat-isku.ko
@@ -189,18 +149,15 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-roccat-kovaplus.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-roccat-lua.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-roccat-pyra.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-roccat-ryos.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-roccat-savu.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-roccat.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-saitek.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-samsung.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-sensor-hub.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-sjoy.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-sony.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-speedlink.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-steelseries.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-sunplus.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-thingm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-tivo.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-tmff.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-topseed.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-twinhan.ko
@@ -208,16 +165,9 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-wacom.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-waltop.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-wiimote.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-xinmo.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-zpff.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/hid-zydacron.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/i2c-hid
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/i2c-hid/i2c-hid.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/usbhid
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hid/usbhid/usbhid.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hsi
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hsi/clients
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hsi/clients/hsi_char.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hsi/hsi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/ad7314.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/ad7414.ko
@@ -242,28 +192,23 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/amc6821.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/asc7621.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/atxp1.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/dme1737.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/ds1621.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/ds620.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/emc1403.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/emc2103.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/emc6w201.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/f71805f.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/f71882fg.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/f75375s.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/g760a.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/g762.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/gl518sm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/gl520sm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/gpio-fan.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/hih6130.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/htu21.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/hwmon-vid.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/hwmon.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/ibmaem.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/ibmpex.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/iio_hwmon.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/ina209.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/ina2xx.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/it87.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/jc42.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/lineage-pem.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/lm63.ko
@@ -296,10 +241,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/max6650.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/max6697.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/mcp3021.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/nct6775.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/ntc_thermistor.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/pc87360.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/pc87427.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/pcf8591.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/pmbus
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/pmbus/adm1275.ko
@@ -313,22 +255,14 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/pmbus/ucd9000.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/pmbus/ucd9200.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/pmbus/zl6100.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/sch5627.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/sch5636.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/sch56xx-common.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/sht15.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/sht21.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/smm665.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/smsc47b397.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/smsc47m1.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/smsc47m192.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/thmc50.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/tmp102.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/tmp401.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/tmp421.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/vt1211.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/w83627ehf.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/w83627hf.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/w83781d.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/w83791d.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/hwmon/w83792d.ko
@@ -339,80 +273,44 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/algos
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/algos/i2c-algo-bit.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/algos/i2c-algo-pca.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-bcm2708.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-cbus-gpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-designware-core.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-designware-platform.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-diolan-u2c.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-gpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-nomadik.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-ocores.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-parport-light.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-parport.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-pca-platform.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-simtec.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-taos-evm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-tiny-usb.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/busses/i2c-xiic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/i2c-dev.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/i2c-mux.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/i2c-smbus.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/i2c-stub.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/muxes
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/muxes/i2c-mux-gpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/muxes/i2c-mux-pca9541.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/i2c/muxes/i2c-mux-pca954x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/iio
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/iio/common
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/iio/common/hid-sensors
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/iio/common/hid-sensors/hid-sensor-iio-common.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/iio/industrialio.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/input
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/evdev.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/input/ff-memless.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/gameport
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/gameport/gameport.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/gameport/lightning.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/gameport/ns558.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/input/input-polldev.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/adp5588-keys.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/adp5589-keys.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/gpio_keys.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/gpio_keys_polled.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/lkkbd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/lm8323.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/lm8333.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/matrix_keypad.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/max7359_keypad.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/mcs_touchkey.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/mpr121_touchkey.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/newtonkbd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/opencores-kbd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/qt1070.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/qt2160.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/samsung-keypad.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/stowaway.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/sunkbd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/tca6416-keypad.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/tca8418_keypad.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/keyboard/xtkbd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/matrix-keymap.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/joydev.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/joystick
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/joystick/iforce
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/joystick/iforce/iforce.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/joystick/xpad.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/ad714x-i2c.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/ad714x-spi.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/ad714x.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/adxl34x-i2c.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/adxl34x-spi.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/adxl34x.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/ati_remote2.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/cm109.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/cma3000_d0x.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/keyspan_remote.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/pwm-beeper.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/powermate.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/rotary_encoder.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/uinput.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/misc/yealink.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/input/serio
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/serio/altera_ps2.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/serio/ambakmi.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/serio/apbps2.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/serio/arc_ps2.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/serio/ps2mult.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/sparse-keymap.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/serio/serio.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/serio/serio_raw.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/input/serio/serport.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/capi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/capi/capi.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/capi/capidrv.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/capi/kernelcapi.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/divert
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/divert/dss1_divert.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/gigaset
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/gigaset/bas_gigaset.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/gigaset/gigaset.ko
@@ -421,79 +319,31 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/hardware
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/hardware/mISDN
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/hardware/mISDN/hfcsusb.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/hisax
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/hisax/hfc4s8s_l1.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/hisax/hfc_usb.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/hisax/hisax.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/hisax/hisax_st5481.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/i4l
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/i4l/isdn.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/i4l/isdn_bsdcomp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/i4l/isdnhdlc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/mISDN
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/mISDN/l1oip.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/mISDN/mISDN_core.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/isdn/mISDN/mISDN_dsp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/leds
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-bd2802.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-blinkm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-dac124s085.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/led-class.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-gpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-lm3530.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-lm355x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-lm3642.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-lp3944.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-lp5521.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-lp5523.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-lp5562.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-lp55xx-common.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-lt3593.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-ot200.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-pca9532.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-pca955x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-pca9633.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-pwm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-regulator.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/leds-tca6507.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/trigger
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/trigger/ledtrig-backlight.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/trigger/ledtrig-camera.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/trigger/ledtrig-gpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/trigger/ledtrig-heartbeat.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/trigger/ledtrig-netdev.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/trigger/ledtrig-oneshot.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/trigger/ledtrig-timer.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/leds/trigger/ledtrig-transient.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/bcache
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/bcache/bcache.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-bio-prison.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-bufio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-cache-cleaner.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-cache-mq.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-cache.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-crypt.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-delay.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-flakey.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-log-userspace.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-log.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-mirror.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-mod.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-multipath.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-queue-length.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-raid.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-region-hash.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-round-robin.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-service-time.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-snapshot.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-thin-pool.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-verity.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/dm-zero.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/linear.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/md-mod.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/multipath.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/persistent-data
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/md/persistent-data/dm-persistent-data.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/raid0.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/raid1.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/md/raid10.ko
@@ -536,6 +386,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/dvb-frontends/drxk.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/dvb-frontends/ds3000.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/dvb-frontends/dvb-pll.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/dvb-frontends/dvbsky_m88ds3103.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/dvb-frontends/ec100.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/dvb-frontends/isl6421.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/dvb-frontends/isl6423.ko
@@ -636,6 +487,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-budget-ci-old.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-cinergy-1400.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-cinergy.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-delock-61959.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-dib0700-nec.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-dib0700-rc5.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-digitalnow-tinytwin.ko
@@ -698,6 +550,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-reddo.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-snapstream-firefly.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-streamzap.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-su3000.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-tbs-nec.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-technisat-usb2.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/rc/keymaps/rc-terratec-cinergy-xs.ko
@@ -728,6 +581,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/tuners/fc0012.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/tuners/fc0013.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/tuners/fc2580.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/tuners/m88ts2022.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/tuners/max2165.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/tuners/mc44s803.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/tuners/mt2060.ko
@@ -812,6 +666,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/em28xx/em28xx-alsa.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/em28xx/em28xx-dvb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/em28xx/em28xx-rc.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/em28xx/em28xx-v4l.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/em28xx/em28xx.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/gspca
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/gspca/gl860
@@ -851,6 +706,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/gspca/gspca_sq905c.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/gspca/gspca_sq930x.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/gspca/gspca_stk014.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/gspca/gspca_stk1135.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/gspca/gspca_stv0680.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/gspca/gspca_sunplus.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/gspca/gspca_t613.ko
@@ -874,8 +730,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/s2255/s2255drv.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/siano
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/siano/smsusb.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/sn9c102
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/sn9c102/sn9c102.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/stk1160
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/stk1160/stk1160.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/stkwebcam
@@ -886,6 +740,8 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/tm6000/tm6000-alsa.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/tm6000/tm6000-dvb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/tm6000/tm6000.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/usbtv
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/usbtv/usbtv.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/usbvision
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/usbvision/usbvision.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/usb/uvc
@@ -895,7 +751,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/tuner.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/v4l2-common.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/v4l2-int-device.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/v4l2-dv-timings.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/videobuf-core.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/videobuf-dvb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/videobuf-vmalloc.ko
@@ -903,129 +759,30 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/videobuf2-memops.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/videobuf2-vmalloc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/media/v4l2-core/videodev.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/memstick
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/memstick/core
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/memstick/core/memstick.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/memstick/core/mspro_block.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/mfd
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/mfd/mfd-core.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/mfd/wl1273-core.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/misc
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/ds1682.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/dummy-irq.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/eeprom
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/eeprom/at24.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/eeprom/eeprom.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/eeprom/eeprom_93cx6.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/eeprom/max6875.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/enclosure.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/fsa9480.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/ti-st
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/misc/ti-st/st_drv.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/card
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/card/mmc_test.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/card/sdio_uart.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/dw_mmc-exynos.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/dw_mmc-pltfm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/dw_mmc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/mmci.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/sdhci-pltfm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/sdhci-pxav2.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/sdhci-pxav3.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/ushc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/vub300.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/chips
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/chips/chipreg.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/cmdlinepart.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/lpddr
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/lpddr/lpddr_cmds.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/lpddr/qinfo_probe.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/maps
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/maps/physmap.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/mtd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/mtd_blkdevs.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/mtdblock.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/nand
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/nand/nand.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/nand/nand_ecc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/nand/nand_ids.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/nand/plat_nand.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/ofpart.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/ubi
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/mtd/ubi/ubi.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/mmc/host/mmc_spi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/bonding
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/bonding/bonding.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/dummy.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/eql.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/8390
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/8390/ax88796.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/broadcom
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/broadcom/b44.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/cadence
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/cadence/at91_ether.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/cadence/macb.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/calxeda
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/calxeda/xgmac.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/cirrus
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/cirrus/cs89x0.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/davicom
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/davicom/dm9000.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/dnet.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/ethoc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/faraday
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/faraday/ftgmac100.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/faraday/ftmac100.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/marvell
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/marvell/mvmdio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/micrel
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/micrel/ks8842.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/micrel/ks8851.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/micrel/ks8851_mll.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/microchip
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/microchip/enc28j60.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/smsc
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/smsc/smc911x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/smsc/smc91x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/smsc/smsc911x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/stmicro
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/stmicro/stmmac
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/stmicro/stmmac/stmmac.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/wiznet
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/wiznet/w5100.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ethernet/wiznet/w5300.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ieee802154
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ieee802154/fakehard.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ieee802154/fakelb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ifb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/imq.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/macvlan.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/macvtap.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/mii.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/netconsole.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/amd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/at803x.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/bcm87xx.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/broadcom.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/cicada.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/davicom.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/et1011c.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/icplus.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/lxt.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/marvell.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/libphy.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/mdio-bitbang.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/mdio-gpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/mdio-mux-gpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/mdio-mux-mmioreg.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/mdio-mux.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/micrel.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/national.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/qsemi.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/realtek.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/smsc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/ste10Xp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/vitesse.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/phy/spi_ks8995.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ppp
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ppp/bsd_comp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ppp/ppp_async.ko
@@ -1035,17 +792,8 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ppp/ppp_synctty.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ppp/pppoe.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ppp/pppox.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/ppp/pptp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/slip
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/slip/slhc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/slip/slip.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/team
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/team/team.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/team/team_mode_activebackup.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/team/team_mode_broadcast.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/team/team_mode_loadbalance.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/team/team_mode_random.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/team/team_mode_roundrobin.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/tun.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/asix.ko
@@ -1060,7 +808,9 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/dm9601.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/gl620a.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/hso.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/huawei_cdc_ncm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/int51x1.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/ipheth.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/kalmia.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/kaweth.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/lg-vl600.ko
@@ -1074,19 +824,10 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/rtl8150.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/sierra_net.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/smsc75xx.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/smsc95xx.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/usbnet.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/sr9700.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/sr9800.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/usb/zaurus.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/veth.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/vxlan.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wan
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wan/dlci.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wan/hdlc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wan/hdlc_cisco.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wan/hdlc_fr.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wan/hdlc_ppp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wan/hdlc_raw.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wan/hdlc_raw_eth.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/at76c50x-usb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ath
@@ -1095,7 +836,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ath/ath.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ath/ath6kl
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ath/ath6kl/ath6kl_core.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ath/ath6kl/ath6kl_sdio.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ath/ath6kl/ath6kl_usb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ath/ath9k
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko
@@ -1115,6 +855,10 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/brcm80211/brcmutil
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/cw1200
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/cw1200/cw1200_core.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/cw1200/cw1200_wlan_sdio.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/cw1200/cw1200_wlan_spi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/hostap
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/hostap/hostap.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/libertas
@@ -1127,6 +871,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/libertas_tf/libertas_tf_usb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/libertas_uap
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/libertas_uap/uap8xxx.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/mac80211_hwsim.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/mwifiex
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/mwifiex/mwifiex.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/mwifiex/mwifiex_sdio.ko
@@ -1146,12 +891,16 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtl818x
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtl818x/rtl8187
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtl818x/rtl8187/rtl8187.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtl8192cu
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtl8192cu/8192cu.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtlwifi
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtlwifi/rtl8192c
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtlwifi/rtl8192c/rtl8192c-common.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtlwifi/rtl8192cu
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtlwifi/rtl8192cu/rtl8192cu.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtlwifi/rtl_usb.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wl1251
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wl1251/wl1251.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wl1251/wl1251_sdio.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wl12xx
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wl12xx/wl12xx.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wl18xx
@@ -1159,57 +908,36 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wlcore
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wlcore/wlcore.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wlcore/wlcore_sdio.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/ti/wlcore/wlcore_spi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/zd1201.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/zd1211rw
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/net/wireless/zd1211rw/zd1211rw.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/parport
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/parport/parport.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/parport/parport_ax88796.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/pps
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/pps/pps_core.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/ptp
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/ptp/ptp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/regulator
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/regulator/fixed.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/regulator/gpio-regulator.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/power
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/power/ds2760_battery.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-bq32k.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-bq4802.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-cmos.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds1286.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds1305.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds1307.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds1374.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds1390.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds1511.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds1553.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds1672.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds1742.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds2404.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds3232.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-ds3234.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-em3027.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-fm3130.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-hid-sensor-time.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-isl12022.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-isl1208.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-m41t80.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-m41t93.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-m41t94.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-m48t35.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-m48t59.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-m48t86.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-max6900.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-max6902.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-msm6242.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-pcf2123.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-pcf2127.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-pcf8523.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-pcf8563.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-pcf8583.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-pl030.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-pl031.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-r9701.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-rp5c01.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-rs5c348.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-rs5c372.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-rv3029c2.ko
@@ -1217,76 +945,45 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-rx8025.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-rx8581.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-s35390a.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-snvs.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-stk17ta8.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-v3020.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/rtc/rtc-x1205.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/ch.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/device_handler
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/device_handler/scsi_dh.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/device_handler/scsi_dh_alua.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/device_handler/scsi_dh_emc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/device_handler/scsi_dh_hp_sw.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/device_handler/scsi_dh_rdac.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/fcoe
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/fcoe/libfcoe.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/iscsi_boot_sysfs.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/iscsi_tcp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/libfc
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/libfc/libfc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/libiscsi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/libiscsi_tcp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/libsas
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/libsas/libsas.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/osd
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/osd/libosd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/osd/osd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/raid_class.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/scsi_transport_fc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/scsi_transport_iscsi.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/scsi_transport_sas.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/scsi_transport_spi.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/scsi_transport_srp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/ses.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/osst.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/sg.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/sr_mod.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/ufs
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/ufs/ufshcd-pltfrm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/ufs/ufshcd.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/scsi/st.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/spi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/spi/spi-bcm2708.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/spi/spi-bitbang.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/spi/spi-gpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/spi/spi-oc-tiny.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/spi/spi-pl022.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/ssb
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/ssb/ssb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/staging
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/echo
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/echo/echo.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/rts5139
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/rts5139/rts5139.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/usbip
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/usbip/usbip-core.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/usbip/usbip-host.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/usbip/vhci-hcd.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/n_gsm.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial/8250
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial/8250/8250_dw.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial/8250/8250_em.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial/altera_jtaguart.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial/altera_uart.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial/arc_uart.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial/sccnxp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial/timbuart.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/tty/serial/xilinx_uartps.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/as102
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/as102/dvb-as102.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/lirc
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/lirc/lirc_igorplugusb.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/lirc/lirc_imon.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/lirc/lirc_rpi.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/lirc/lirc_sasem.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/lirc/lirc_serial.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/sn9c102
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/media/sn9c102/sn9c102.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/rtl8712
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/rtl8712/r8712u.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/speakup
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/speakup/speakup.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/speakup/speakup_soft.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/vt6656
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/vt6656/vt6656_stage.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/winbond
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/winbond/w35und.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/wlan-ng
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/staging/wlan-ng/prism2_usb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/uio
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/uio/uio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/uio/uio_dmem_genirq.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/uio/uio_pdrv.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/uio/uio_pdrv_genirq.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/atm
@@ -1299,22 +996,32 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/class/cdc-acm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/class/cdc-wdm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/class/usblp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/class/usbtmc.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/image
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/image/mdc800.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/image/microtek.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/adutux.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/appledisplay.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/cypress_cy7c63.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/cytherm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/emi26.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/emi62.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/ezusb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/ftdi-elan.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/idmouse.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/iowarrior.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/isight_firmware.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/usb3503.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/ldusb.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/legousbtower.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/rio500.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/trancevibrator.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/usblcd.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/usbled.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/usbsevseg.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/uss720.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/usbtest.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/misc/yurex.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/mon
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/mon/usbmon.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/aircable.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/ark3116.ko
@@ -1327,9 +1034,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/empeg.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/f81232.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/ftdi_sio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/funsoft.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/garmin_gps.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/hp4x.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/io_edgeport.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/io_ti.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/ipaq.ko
@@ -1344,7 +1049,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/metro-usb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/mos7720.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/mos7840.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/moto_modem.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/navman.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/omninet.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/opticon.ko
@@ -1355,20 +1059,18 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/qcserial.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/quatech2.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/safe_serial.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/siemens_mpi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/sierra.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/spcp8x5.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/ssu100.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/symbolserial.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/ti_usb_3410_5052.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/usb_debug.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/usb_wwan.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/usbserial.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/visor.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/vivopay-serial.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/whiteheat.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/wishbone-serial.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/xsens_mt.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/zio.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/serial/zte_ev.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/storage
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/storage/ums-alauda.ko
@@ -1384,16 +1086,10 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/storage/ums-sddr09.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/storage/ums-sddr55.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/storage/ums-usbat.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/usb/storage/usb-storage.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/video
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/fb_sys_fops.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/output.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/smscufx.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/syscopyarea.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/sysfillrect.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/sysimgblt.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/udlfb.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/uvesafb.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/backlight
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/backlight/backlight.ko
+#lib/modules/KVER-ipfire-rpi/kernel/drivers/video/backlight/lcd.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/w1
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/w1/masters
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/w1/masters/ds1wm.ko
@@ -1416,8 +1112,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/w1/wire.ko
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/watchdog
 #lib/modules/KVER-ipfire-rpi/kernel/drivers/watchdog/bcm2708_wdog.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/watchdog/pcwd_usb.ko
-#lib/modules/KVER-ipfire-rpi/kernel/drivers/watchdog/softdog.ko
 #lib/modules/KVER-ipfire-rpi/kernel/fs
 #lib/modules/KVER-ipfire-rpi/kernel/fs/autofs4
 #lib/modules/KVER-ipfire-rpi/kernel/fs/autofs4/autofs4.ko
@@ -1429,8 +1123,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/fs/cifs/cifs.ko
 #lib/modules/KVER-ipfire-rpi/kernel/fs/ecryptfs
 #lib/modules/KVER-ipfire-rpi/kernel/fs/ecryptfs/ecryptfs.ko
-#lib/modules/KVER-ipfire-rpi/kernel/fs/exportfs
-#lib/modules/KVER-ipfire-rpi/kernel/fs/exportfs/exportfs.ko
 #lib/modules/KVER-ipfire-rpi/kernel/fs/fat
 #lib/modules/KVER-ipfire-rpi/kernel/fs/fat/fat.ko
 #lib/modules/KVER-ipfire-rpi/kernel/fs/fat/vfat.ko
@@ -1441,8 +1133,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/fs/fuse/fuse.ko
 #lib/modules/KVER-ipfire-rpi/kernel/fs/isofs
 #lib/modules/KVER-ipfire-rpi/kernel/fs/isofs/isofs.ko
-#lib/modules/KVER-ipfire-rpi/kernel/fs/jffs2
-#lib/modules/KVER-ipfire-rpi/kernel/fs/jffs2/jffs2.ko
 #lib/modules/KVER-ipfire-rpi/kernel/fs/jfs
 #lib/modules/KVER-ipfire-rpi/kernel/fs/jfs/jfs.ko
 #lib/modules/KVER-ipfire-rpi/kernel/fs/lockd
@@ -1469,28 +1159,25 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/fs/xfs
 #lib/modules/KVER-ipfire-rpi/kernel/fs/xfs/xfs.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib
-#lib/modules/KVER-ipfire-rpi/kernel/lib/asn1_decoder.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib/cordic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib/crc-ccitt.ko
-#lib/modules/KVER-ipfire-rpi/kernel/lib/crc-itu-t.ko
-#lib/modules/KVER-ipfire-rpi/kernel/lib/crc-t10dif.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib/crc7.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib/crc8.ko
-#lib/modules/KVER-ipfire-rpi/kernel/lib/libcrc32c.ko
-#lib/modules/KVER-ipfire-rpi/kernel/lib/mpi
-#lib/modules/KVER-ipfire-rpi/kernel/lib/mpi/mpi.ko
+#lib/modules/KVER-ipfire-rpi/kernel/lib/lru_cache.ko
+#lib/modules/KVER-ipfire-rpi/kernel/lib/lz4
+#lib/modules/KVER-ipfire-rpi/kernel/lib/lz4/lz4_compress.ko
+#lib/modules/KVER-ipfire-rpi/kernel/lib/lz4/lz4hc_compress.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib/oid_registry.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib/raid6
 #lib/modules/KVER-ipfire-rpi/kernel/lib/raid6/raid6_pq.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib/ts_bm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib/ts_fsm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/lib/ts_kmp.ko
+#lib/modules/KVER-ipfire-rpi/kernel/lib/zlib_deflate
+#lib/modules/KVER-ipfire-rpi/kernel/lib/zlib_deflate/zlib_deflate.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net
 #lib/modules/KVER-ipfire-rpi/kernel/net/802
 #lib/modules/KVER-ipfire-rpi/kernel/net/802/garp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/802/p8022.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/802/psnap.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/802/stp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/8021q
 #lib/modules/KVER-ipfire-rpi/kernel/net/8021q/8021q.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/atm
@@ -1511,7 +1198,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/bluetooth/rfcomm
 #lib/modules/KVER-ipfire-rpi/kernel/net/bluetooth/rfcomm/rfcomm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/bridge
-#lib/modules/KVER-ipfire-rpi/kernel/net/bridge/bridge.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/bridge/netfilter
 #lib/modules/KVER-ipfire-rpi/kernel/net/bridge/netfilter/ebt_802_3.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/bridge/netfilter/ebt_among.ko
@@ -1535,14 +1221,13 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/bridge/netfilter/ebtable_filter.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/bridge/netfilter/ebtable_nat.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/bridge/netfilter/ebtables.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/ceph
-#lib/modules/KVER-ipfire-rpi/kernel/net/ceph/libceph.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/bridge/netfilter/nf_tables_bridge.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/core
 #lib/modules/KVER-ipfire-rpi/kernel/net/core/netprio_cgroup.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/hsr
+#lib/modules/KVER-ipfire-rpi/kernel/net/hsr/hsr.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ieee802154
-#lib/modules/KVER-ipfire-rpi/kernel/net/ieee802154/6lowpan.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/ieee802154/af_802154.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/ieee802154/ieee802154.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ieee802154/6lowpan_iphc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/ah4.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/esp4.ko
@@ -1557,11 +1242,11 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/arp_tables.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/arpt_mangle.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/arptable_filter.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/ip_tables.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/ipt_CLUSTERIP.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/ipt_ECN.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/ipt_MASQUERADE.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/ipt_REJECT.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/ipt_SYNPROXY.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/ipt_ULOG.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/ipt_ah.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
@@ -1571,15 +1256,17 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/iptable_nat.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/iptable_raw.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/iptable_security.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nf_conntrack_ipv4.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nf_defrag_ipv4.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nf_nat_h323.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nf_nat_ipv4.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nf_nat_pptp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nf_nat_proto_gre.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nf_nat_snmp_basic.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nf_tables_arp.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nf_tables_ipv4.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nft_chain_nat_ipv4.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nft_chain_route_ipv4.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/netfilter/nft_reject_ipv4.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/tcp_bic.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/tcp_cubic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/tcp_diag.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/tcp_highspeed.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/tcp_htcp.ko
@@ -1593,17 +1280,23 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/tcp_yeah.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/tunnel4.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/udp_diag.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/xfrm4_mode_beet.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/xfrm4_mode_transport.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/xfrm4_mode_tunnel.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv4/xfrm4_tunnel.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/ah6.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/esp6.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/ip6_gre.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/ip6_tunnel.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/ip6_vti.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/ipcomp6.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/mip6.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter
-#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6_tables.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6t_MASQUERADE.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6t_NPT.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6t_REJECT.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6t_SYNPROXY.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6t_ah.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6t_eui64.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6t_frag.ko
@@ -1614,10 +1307,14 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6t_rt.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6table_filter.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6table_mangle.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6table_nat.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6table_raw.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/ip6table_security.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/nf_conntrack_ipv6.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/nf_defrag_ipv6.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/nf_nat_ipv6.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/nf_tables_ipv6.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/nft_chain_nat_ipv6.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/nft_chain_route_ipv6.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/netfilter/nft_reject_ipv6.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/sit.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/tunnel6.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/ipv6/xfrm6_mode_beet.ko
@@ -1634,13 +1331,24 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/l2tp/l2tp_ip6.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/l2tp/l2tp_netlink.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/l2tp/l2tp_ppp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/llc
-#lib/modules/KVER-ipfire-rpi/kernel/net/llc/llc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/mac80211
 #lib/modules/KVER-ipfire-rpi/kernel/net/mac80211/mac80211.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/mac802154
-#lib/modules/KVER-ipfire-rpi/kernel/net/mac802154/mac802154.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_bitmap_ip.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_bitmap_ipmac.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_bitmap_port.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_hash_ip.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_hash_ipport.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_hash_ipportip.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_hash_ipportnet.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_hash_net.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_hash_netiface.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_hash_netnet.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_hash_netport.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_hash_netportnet.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipset/ip_set_list_set.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipvs
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipvs/ip_vs.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/ipvs/ip_vs_dh.ko
@@ -1680,17 +1388,32 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nf_nat_proto_udplite.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nf_nat_sip.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nf_nat_tftp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nf_tproxy_core.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nf_synproxy_core.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nf_tables.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nf_tables_inet.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nfnetlink.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nfnetlink_acct.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nfnetlink_cthelper.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nfnetlink_cttimeout.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nfnetlink_log.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nfnetlink_queue.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/x_tables.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_compat.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_counter.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_ct.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_exthdr.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_hash.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_limit.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_log.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_meta.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_nat.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_queue.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_rbtree.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_reject.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/nft_reject_inet.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_AUDIT.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_CHECKSUM.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_CLASSIFY.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_CONNSECMARK.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_CT.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_DSCP.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_HL.ko
@@ -1704,6 +1427,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_NFQUEUE.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_RATEEST.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_REDIRECT.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_SECMARK.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_TCPMSS.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_TCPOPTSTRIP.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_TEE.ko
@@ -1711,6 +1435,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_TRACE.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_addrtype.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_bpf.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_cgroup.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_cluster.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_comment.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_connbytes.ko
@@ -1727,8 +1452,10 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_hashlimit.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_helper.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_hl.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_ipcomp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_iprange.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_ipvs.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_l2tp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_layer7.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_length.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_limit.ko
@@ -1747,12 +1474,12 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_realm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_recent.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_sctp.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_set.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_socket.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_state.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_statistic.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_string.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_tcpmss.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_tcpudp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_time.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netfilter/xt_u32.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/netlink
@@ -1761,11 +1488,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/openvswitch/openvswitch.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/rfkill
 #lib/modules/KVER-ipfire-rpi/kernel/net/rfkill/rfkill-gpio.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/rfkill/rfkill-regulator.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/rfkill/rfkill.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/rxrpc
-#lib/modules/KVER-ipfire-rpi/kernel/net/rxrpc/af-rxrpc.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/rxrpc/rxkad.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/act_csum.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/act_gact.ko
@@ -1777,6 +1500,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/act_simple.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/act_skbedit.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/cls_basic.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/sched/cls_bpf.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/cls_cgroup.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/cls_flow.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/cls_fw.ko
@@ -1786,6 +1510,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/cls_tcindex.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/cls_u32.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/em_cmp.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/sched/em_ipset.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/em_meta.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/em_nbyte.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/em_text.ko
@@ -1796,9 +1521,11 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_codel.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_drr.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_dsmark.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_fq.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_fq_codel.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_gred.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_hfsc.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_hhf.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_htb.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_ingress.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_mqprio.ko
@@ -1813,6 +1540,8 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_sfq.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_tbf.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sched/sch_teql.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/sctp
+#lib/modules/KVER-ipfire-rpi/kernel/net/sctp/sctp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/sunrpc
 #lib/modules/KVER-ipfire-rpi/kernel/net/sunrpc/auth_gss
 #lib/modules/KVER-ipfire-rpi/kernel/net/sunrpc/auth_gss/auth_rpcgss.ko
@@ -1820,6 +1549,8 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/sunrpc/sunrpc.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/unix
 #lib/modules/KVER-ipfire-rpi/kernel/net/unix/unix_diag.ko
+#lib/modules/KVER-ipfire-rpi/kernel/net/vmw_vsock
+#lib/modules/KVER-ipfire-rpi/kernel/net/vmw_vsock/vsock.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/wireless
 #lib/modules/KVER-ipfire-rpi/kernel/net/wireless/cfg80211.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/wireless/lib80211.ko
@@ -1827,13 +1558,10 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/net/wireless/lib80211_crypt_tkip.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/wireless/lib80211_crypt_wep.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/xfrm
-#lib/modules/KVER-ipfire-rpi/kernel/net/xfrm/xfrm_algo.ko
 #lib/modules/KVER-ipfire-rpi/kernel/net/xfrm/xfrm_ipcomp.ko
-#lib/modules/KVER-ipfire-rpi/kernel/net/xfrm/xfrm_user.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound
 #lib/modules/KVER-ipfire-rpi/kernel/sound/ac97_bus.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/arm
-#lib/modules/KVER-ipfire-rpi/kernel/sound/arm/snd-aaci.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/arm/snd-bcm2835.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/core
 #lib/modules/KVER-ipfire-rpi/kernel/sound/core/oss
@@ -1851,7 +1579,7 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/sound/core/snd-compress.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/core/snd-hrtimer.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/core/snd-hwdep.ko
-#lib/modules/KVER-ipfire-rpi/kernel/sound/core/snd-page-alloc.ko
+#lib/modules/KVER-ipfire-rpi/kernel/sound/core/snd-pcm-dmaengine.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/core/snd-pcm.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/core/snd-rawmidi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/core/snd-timer.ko
@@ -1863,8 +1591,6 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/sound/drivers/snd-aloop.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/drivers/snd-dummy.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/drivers/snd-mtpav.ko
-#lib/modules/KVER-ipfire-rpi/kernel/sound/drivers/snd-mts64.ko
-#lib/modules/KVER-ipfire-rpi/kernel/sound/drivers/snd-portman2x4.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/drivers/snd-serial-u16550.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/drivers/snd-virmidi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/pci
@@ -1873,19 +1599,19 @@ lib/modules/KVER-ipfire-rpi
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/bcm
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/bcm/snd-soc-bcm2708-i2s.ko
+#lib/modules/KVER-ipfire-rpi/kernel/sound/soc/bcm/snd-soc-hifiberry-amp.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/bcm/snd-soc-hifiberry-dac.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/bcm/snd-soc-hifiberry-digi.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/bcm/snd-soc-rpi-dac.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/codecs
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/codecs/snd-soc-pcm1794a.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/codecs/snd-soc-pcm5102a.ko
+#lib/modules/KVER-ipfire-rpi/kernel/sound/soc/codecs/snd-soc-tas5713.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/codecs/snd-soc-wm8804.ko
-#lib/modules/KVER-ipfire-rpi/kernel/sound/soc/dwc
-#lib/modules/KVER-ipfire-rpi/kernel/sound/soc/dwc/designware_i2s.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/generic
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/generic/snd-soc-simple-card.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/soc/snd-soc-core.ko
-#lib/modules/KVER-ipfire-rpi/kernel/sound/soundcore.ko
+#lib/modules/KVER-ipfire-rpi/kernel/sound/sound_firmware.ko
 #lib/modules/KVER-ipfire-rpi/kernel/sound/usb
 #lib/modules/KVER-ipfire-rpi/kernel/sound/usb/6fire
 #lib/modules/KVER-ipfire-rpi/kernel/sound/usb/6fire/snd-usb-6fire.ko
index c75b147c69747df1d5bf533cb4bd3f3782ecfb20..0f364095085cba5a61df472ba657a401b4468b5c 100644 (file)
@@ -72,7 +72,7 @@ usr/bin/renice
 #usr/bin/script
 #usr/bin/scriptreplay
 #usr/bin/setarch
-#usr/bin/setsid
+usr/bin/setsid
 #usr/bin/setterm
 #usr/bin/tailf
 #usr/bin/taskset
index af3a03719622fbf67d4bc01bd5b3b69f580f680e..84f587f3cdb458ab43f156b7d985f57a1fe2ec4f 100644 (file)
@@ -1,3 +1,5 @@
+bin/sh
+bin/bash
 #bin/bashbug
 #usr/share/doc/bash
 #usr/share/doc/bash/CHANGES
@@ -11,8 +13,6 @@
 #usr/share/doc/bash/bash.html
 #usr/share/doc/bash/bashref.html
 #usr/share/info/bash.info
-#usr/share/locale/af
-#usr/share/locale/af/LC_MESSAGES
 #usr/share/locale/af/LC_MESSAGES/bash.mo
 #usr/share/locale/bg/LC_MESSAGES/bash.mo
 #usr/share/locale/ca/LC_MESSAGES/bash.mo
 #usr/share/locale/en@quot
 #usr/share/locale/en@quot/LC_MESSAGES
 #usr/share/locale/en@quot/LC_MESSAGES/bash.mo
-#usr/share/locale/eo
-#usr/share/locale/eo/LC_MESSAGES
 #usr/share/locale/eo/LC_MESSAGES/bash.mo
 #usr/share/locale/es/LC_MESSAGES/bash.mo
-#usr/share/locale/et
-#usr/share/locale/et/LC_MESSAGES
 #usr/share/locale/et/LC_MESSAGES/bash.mo
 #usr/share/locale/fi/LC_MESSAGES/bash.mo
 #usr/share/locale/fr/LC_MESSAGES/bash.mo
-#usr/share/locale/ga
-#usr/share/locale/ga/LC_MESSAGES
 #usr/share/locale/ga/LC_MESSAGES/bash.mo
 #usr/share/locale/gl/LC_MESSAGES/bash.mo
 #usr/share/locale/hr/LC_MESSAGES/bash.mo
 #usr/share/locale/nl/LC_MESSAGES/bash.mo
 #usr/share/locale/pl/LC_MESSAGES/bash.mo
 #usr/share/locale/pt_BR/LC_MESSAGES/bash.mo
-#usr/share/locale/ro
-#usr/share/locale/ro/LC_MESSAGES
 #usr/share/locale/ro/LC_MESSAGES/bash.mo
 #usr/share/locale/ru/LC_MESSAGES/bash.mo
 #usr/share/locale/sk/LC_MESSAGES/bash.mo
-#usr/share/locale/sl
-#usr/share/locale/sl/LC_MESSAGES
 #usr/share/locale/sl/LC_MESSAGES/bash.mo
 #usr/share/locale/sr
 #usr/share/locale/sr/LC_MESSAGES
 #usr/share/locale/sr/LC_MESSAGES/bash.mo
 #usr/share/locale/sv/LC_MESSAGES/bash.mo
 #usr/share/locale/tr/LC_MESSAGES/bash.mo
-#usr/share/locale/uk
-#usr/share/locale/uk/LC_MESSAGES
 #usr/share/locale/uk/LC_MESSAGES/bash.mo
 #usr/share/locale/vi/LC_MESSAGES/bash.mo
 #usr/share/locale/zh_CN/LC_MESSAGES/bash.mo
 #usr/share/locale/zh_TW/LC_MESSAGES/bash.mo
 #usr/share/man/man1/bash.1
 #usr/share/man/man1/bashbug.1
-bin/sh
-bin/bash
index 81a953958aaea2980823ae55852f0f0ebe9f21a1..069d0c4f6d94f8e054ba8f47773d2719421df6d4 100644 (file)
@@ -2,6 +2,7 @@
 #usr/bin/cmake
 #usr/bin/cpack
 #usr/bin/ctest
+#usr/doc
 #usr/doc/cmake-2.6
 #usr/doc/cmake-2.6/ccmake.docbook
 #usr/doc/cmake-2.6/ccmake.html
index 8e5aff828ffbfe4dce1a2d39f7b49e5a31cc2a47..eaf1af6ed8812879f6b33ca9bcfaf6d0b00db52a 100644 (file)
@@ -80,6 +80,7 @@ var/ipfire/langs
 #var/ipfire/langs/en.pl
 #var/ipfire/langs/es.pl
 #var/ipfire/langs/fr.pl
+#var/ipfire/langs/it.pl
 #var/ipfire/langs/list
 #var/ipfire/langs/nl.pl
 #var/ipfire/langs/pl.pl
index c08e228a94d388a0b0df6bbe1ac691cff117e723..d7f2c76768e443bd1fc12925babb7cfdd853832a 100644 (file)
@@ -1,4 +1,4 @@
-#bin/[
+bin/[
 bin/chgrp
 bin/chmod
 bin/chown
@@ -22,69 +22,244 @@ bin/true
 bin/uname
 etc/DIR_COLORS
 usr/bin/[
+usr/bin/arch
+usr/bin/base64
 usr/bin/basename
-#usr/bin/cksum
-#usr/bin/comm
-#usr/bin/csplit
+usr/bin/chcon
+usr/bin/cksum
+usr/bin/comm
+usr/bin/csplit
 usr/bin/cut
-#usr/bin/dir
+usr/bin/dir
 usr/bin/dircolors
 usr/bin/dirname
 usr/bin/du
 usr/bin/env
-#usr/bin/expand
+usr/bin/expand
 usr/bin/expr
-#usr/bin/factor
-#usr/bin/fmt
+usr/bin/factor
+usr/bin/fmt
 usr/bin/fold
 usr/bin/groups
 usr/bin/hostid
 usr/bin/id
 usr/bin/install
 usr/bin/join
-#usr/bin/link
-#usr/bin/logname
+usr/bin/link
+usr/bin/logname
 usr/bin/md5sum
 usr/bin/mkfifo
-#usr/bin/nl
+usr/bin/mktemp
+usr/bin/nl
 usr/bin/nohup
-#usr/bin/od
+usr/bin/nproc
+usr/bin/numfmt
+usr/bin/od
 usr/bin/paste
-#usr/bin/pathchk
-#usr/bin/pinky
-#usr/bin/pr
-#usr/bin/printenv
+usr/bin/pathchk
+usr/bin/pinky
+usr/bin/pr
+usr/bin/printenv
 usr/bin/printf
-#usr/bin/ptx
+usr/bin/ptx
 usr/bin/readlink
+usr/bin/realpath
+usr/bin/runcon
 usr/bin/seq
 usr/bin/sha1sum
+usr/bin/sha224sum
+usr/bin/sha256sum
+usr/bin/sha384sum
+usr/bin/sha512sum
 usr/bin/shred
+usr/bin/shuf
 usr/bin/sort
 usr/bin/split
 usr/bin/stat
-#usr/bin/sum
-#usr/bin/tac
+#usr/bin/stdbuf
+usr/bin/sum
+usr/bin/tac
 usr/bin/tail
 usr/bin/tee
 usr/bin/test
+usr/bin/timeout
 usr/bin/touch
 usr/bin/tr
-#usr/bin/tsort
+usr/bin/truncate
+usr/bin/tsort
 usr/bin/tty
 usr/bin/unexpand
 usr/bin/uniq
 usr/bin/unlink
-#usr/bin/users
-#usr/bin/vdir
+usr/bin/uptime
+usr/bin/users
+usr/bin/vdir
 usr/bin/wc
 usr/bin/who
 usr/bin/whoami
 usr/bin/yes
+#usr/libexec
+#usr/libexec/coreutils
+#usr/libexec/coreutils/libstdbuf.so
 usr/sbin/chroot
 #usr/share/info/coreutils.info
+#usr/share/locale/af
+#usr/share/locale/af/LC_MESSAGES
+#usr/share/locale/af/LC_MESSAGES/coreutils.mo
+#usr/share/locale/af/LC_TIME
+#usr/share/locale/af/LC_TIME/coreutils.mo
+#usr/share/locale/be/LC_MESSAGES/coreutils.mo
+#usr/share/locale/be/LC_TIME
+#usr/share/locale/be/LC_TIME/coreutils.mo
+#usr/share/locale/bg/LC_MESSAGES/coreutils.mo
+#usr/share/locale/bg/LC_TIME
+#usr/share/locale/bg/LC_TIME/coreutils.mo
+#usr/share/locale/ca/LC_MESSAGES/coreutils.mo
+#usr/share/locale/ca/LC_TIME
+#usr/share/locale/ca/LC_TIME/coreutils.mo
+#usr/share/locale/cs/LC_MESSAGES/coreutils.mo
+#usr/share/locale/cs/LC_TIME
+#usr/share/locale/cs/LC_TIME/coreutils.mo
+#usr/share/locale/da/LC_MESSAGES/coreutils.mo
+#usr/share/locale/da/LC_TIME
+#usr/share/locale/da/LC_TIME/coreutils.mo
+#usr/share/locale/de/LC_MESSAGES/coreutils.mo
+#usr/share/locale/de/LC_TIME
+#usr/share/locale/de/LC_TIME/coreutils.mo
+#usr/share/locale/el/LC_MESSAGES/coreutils.mo
+#usr/share/locale/el/LC_TIME
+#usr/share/locale/el/LC_TIME/coreutils.mo
+#usr/share/locale/eo
+#usr/share/locale/eo/LC_MESSAGES
+#usr/share/locale/eo/LC_MESSAGES/coreutils.mo
+#usr/share/locale/eo/LC_TIME
+#usr/share/locale/eo/LC_TIME/coreutils.mo
+#usr/share/locale/es/LC_MESSAGES/coreutils.mo
+#usr/share/locale/es/LC_TIME
+#usr/share/locale/es/LC_TIME/coreutils.mo
+#usr/share/locale/et
+#usr/share/locale/et/LC_MESSAGES
+#usr/share/locale/et/LC_MESSAGES/coreutils.mo
+#usr/share/locale/et/LC_TIME
+#usr/share/locale/et/LC_TIME/coreutils.mo
+#usr/share/locale/eu
+#usr/share/locale/eu/LC_MESSAGES
+#usr/share/locale/eu/LC_MESSAGES/coreutils.mo
+#usr/share/locale/eu/LC_TIME
+#usr/share/locale/eu/LC_TIME/coreutils.mo
+#usr/share/locale/fi/LC_MESSAGES/coreutils.mo
+#usr/share/locale/fi/LC_TIME
+#usr/share/locale/fi/LC_TIME/coreutils.mo
+#usr/share/locale/fr/LC_MESSAGES/coreutils.mo
+#usr/share/locale/fr/LC_TIME
+#usr/share/locale/fr/LC_TIME/coreutils.mo
+#usr/share/locale/ga
+#usr/share/locale/ga/LC_MESSAGES
+#usr/share/locale/ga/LC_MESSAGES/coreutils.mo
+#usr/share/locale/ga/LC_TIME
+#usr/share/locale/ga/LC_TIME/coreutils.mo
+#usr/share/locale/gl/LC_MESSAGES/coreutils.mo
+#usr/share/locale/gl/LC_TIME
+#usr/share/locale/gl/LC_TIME/coreutils.mo
+#usr/share/locale/hr/LC_MESSAGES/coreutils.mo
+#usr/share/locale/hr/LC_TIME
+#usr/share/locale/hr/LC_TIME/coreutils.mo
+#usr/share/locale/hu/LC_MESSAGES/coreutils.mo
+#usr/share/locale/hu/LC_TIME
+#usr/share/locale/hu/LC_TIME/coreutils.mo
+#usr/share/locale/ia
+#usr/share/locale/ia/LC_MESSAGES
+#usr/share/locale/ia/LC_MESSAGES/coreutils.mo
+#usr/share/locale/ia/LC_TIME
+#usr/share/locale/ia/LC_TIME/coreutils.mo
+#usr/share/locale/id/LC_MESSAGES/coreutils.mo
+#usr/share/locale/id/LC_TIME
+#usr/share/locale/id/LC_TIME/coreutils.mo
+#usr/share/locale/it/LC_MESSAGES/coreutils.mo
+#usr/share/locale/it/LC_TIME
+#usr/share/locale/it/LC_TIME/coreutils.mo
+#usr/share/locale/ja/LC_MESSAGES/coreutils.mo
+#usr/share/locale/ja/LC_TIME
+#usr/share/locale/ja/LC_TIME/coreutils.mo
+#usr/share/locale/kk
+#usr/share/locale/kk/LC_MESSAGES
+#usr/share/locale/kk/LC_MESSAGES/coreutils.mo
+#usr/share/locale/kk/LC_TIME
+#usr/share/locale/kk/LC_TIME/coreutils.mo
+#usr/share/locale/ko/LC_MESSAGES/coreutils.mo
+#usr/share/locale/ko/LC_TIME
+#usr/share/locale/ko/LC_TIME/coreutils.mo
+#usr/share/locale/lg
+#usr/share/locale/lg/LC_MESSAGES
+#usr/share/locale/lg/LC_MESSAGES/coreutils.mo
+#usr/share/locale/lg/LC_TIME
+#usr/share/locale/lg/LC_TIME/coreutils.mo
+#usr/share/locale/lt/LC_MESSAGES/coreutils.mo
+#usr/share/locale/lt/LC_TIME
+#usr/share/locale/lt/LC_TIME/coreutils.mo
+#usr/share/locale/ms
+#usr/share/locale/ms/LC_MESSAGES
+#usr/share/locale/ms/LC_MESSAGES/coreutils.mo
+#usr/share/locale/ms/LC_TIME
+#usr/share/locale/ms/LC_TIME/coreutils.mo
+#usr/share/locale/nb/LC_MESSAGES/coreutils.mo
+#usr/share/locale/nb/LC_TIME
+#usr/share/locale/nb/LC_TIME/coreutils.mo
+#usr/share/locale/nl/LC_MESSAGES/coreutils.mo
+#usr/share/locale/nl/LC_TIME
+#usr/share/locale/nl/LC_TIME/coreutils.mo
+#usr/share/locale/pl/LC_MESSAGES/coreutils.mo
+#usr/share/locale/pl/LC_TIME
+#usr/share/locale/pl/LC_TIME/coreutils.mo
+#usr/share/locale/pt
+#usr/share/locale/pt/LC_MESSAGES
+#usr/share/locale/pt/LC_MESSAGES/coreutils.mo
+#usr/share/locale/pt/LC_TIME
+#usr/share/locale/pt/LC_TIME/coreutils.mo
+#usr/share/locale/pt_BR/LC_MESSAGES/coreutils.mo
+#usr/share/locale/pt_BR/LC_TIME
+#usr/share/locale/pt_BR/LC_TIME/coreutils.mo
+#usr/share/locale/ro
+#usr/share/locale/ro/LC_MESSAGES
+#usr/share/locale/ro/LC_MESSAGES/coreutils.mo
+#usr/share/locale/ro/LC_TIME
+#usr/share/locale/ro/LC_TIME/coreutils.mo
+#usr/share/locale/ru/LC_MESSAGES/coreutils.mo
+#usr/share/locale/ru/LC_TIME
+#usr/share/locale/ru/LC_TIME/coreutils.mo
+#usr/share/locale/sk/LC_MESSAGES/coreutils.mo
+#usr/share/locale/sk/LC_TIME
+#usr/share/locale/sk/LC_TIME/coreutils.mo
+#usr/share/locale/sl
+#usr/share/locale/sl/LC_MESSAGES
+#usr/share/locale/sl/LC_MESSAGES/coreutils.mo
+#usr/share/locale/sl/LC_TIME
+#usr/share/locale/sl/LC_TIME/coreutils.mo
+#usr/share/locale/sv/LC_MESSAGES/coreutils.mo
+#usr/share/locale/sv/LC_TIME
+#usr/share/locale/sv/LC_TIME/coreutils.mo
+#usr/share/locale/tr/LC_MESSAGES/coreutils.mo
+#usr/share/locale/tr/LC_TIME
+#usr/share/locale/tr/LC_TIME/coreutils.mo
+#usr/share/locale/uk
+#usr/share/locale/uk/LC_MESSAGES
+#usr/share/locale/uk/LC_MESSAGES/coreutils.mo
+#usr/share/locale/uk/LC_TIME
+#usr/share/locale/uk/LC_TIME/coreutils.mo
+#usr/share/locale/vi/LC_MESSAGES/coreutils.mo
+#usr/share/locale/vi/LC_TIME
+#usr/share/locale/vi/LC_TIME/coreutils.mo
+#usr/share/locale/zh_CN/LC_MESSAGES/coreutils.mo
+#usr/share/locale/zh_CN/LC_TIME
+#usr/share/locale/zh_CN/LC_TIME/coreutils.mo
+#usr/share/locale/zh_TW/LC_MESSAGES/coreutils.mo
+#usr/share/locale/zh_TW/LC_TIME
+#usr/share/locale/zh_TW/LC_TIME/coreutils.mo
+#usr/share/man/man1/arch.1
+#usr/share/man/man1/base64.1
 #usr/share/man/man1/basename.1
 #usr/share/man/man1/cat.1
+#usr/share/man/man1/chcon.1
 #usr/share/man/man1/chroot.1
 #usr/share/man/man1/cksum.1
 #usr/share/man/man1/comm.1
@@ -103,15 +278,17 @@ usr/sbin/chroot
 #usr/share/man/man1/groups.1
 #usr/share/man/man1/head.1
 #usr/share/man/man1/hostid.1
-#usr/share/man/man1/hostname.1
 #usr/share/man/man1/id.1
 #usr/share/man/man1/join.1
 #usr/share/man/man1/link.1
 #usr/share/man/man1/logname.1
 #usr/share/man/man1/md5sum.1
+#usr/share/man/man1/mktemp.1
 #usr/share/man/man1/nice.1
 #usr/share/man/man1/nl.1
 #usr/share/man/man1/nohup.1
+#usr/share/man/man1/nproc.1
+#usr/share/man/man1/numfmt.1
 #usr/share/man/man1/od.1
 #usr/share/man/man1/paste.1
 #usr/share/man/man1/pathchk.1
@@ -122,13 +299,21 @@ usr/sbin/chroot
 #usr/share/man/man1/ptx.1
 #usr/share/man/man1/pwd.1
 #usr/share/man/man1/readlink.1
+#usr/share/man/man1/realpath.1
+#usr/share/man/man1/runcon.1
 #usr/share/man/man1/seq.1
 #usr/share/man/man1/sha1sum.1
+#usr/share/man/man1/sha224sum.1
+#usr/share/man/man1/sha256sum.1
+#usr/share/man/man1/sha384sum.1
+#usr/share/man/man1/sha512sum.1
 #usr/share/man/man1/shred.1
+#usr/share/man/man1/shuf.1
 #usr/share/man/man1/sleep.1
 #usr/share/man/man1/sort.1
 #usr/share/man/man1/split.1
 #usr/share/man/man1/stat.1
+#usr/share/man/man1/stdbuf.1
 #usr/share/man/man1/stty.1
 #usr/share/man/man1/sum.1
 #usr/share/man/man1/sync.1
@@ -136,14 +321,17 @@ usr/sbin/chroot
 #usr/share/man/man1/tail.1
 #usr/share/man/man1/tee.1
 #usr/share/man/man1/test.1
+#usr/share/man/man1/timeout.1
 #usr/share/man/man1/tr.1
 #usr/share/man/man1/true.1
+#usr/share/man/man1/truncate.1
 #usr/share/man/man1/tsort.1
 #usr/share/man/man1/tty.1
 #usr/share/man/man1/uname.1
 #usr/share/man/man1/unexpand.1
 #usr/share/man/man1/uniq.1
 #usr/share/man/man1/unlink.1
+#usr/share/man/man1/uptime.1
 #usr/share/man/man1/users.1
 #usr/share/man/man1/wc.1
 #usr/share/man/man1/who.1
diff --git a/config/rootfiles/common/dracut b/config/rootfiles/common/dracut
new file mode 100644 (file)
index 0000000..03379b4
--- /dev/null
@@ -0,0 +1,134 @@
+etc/dracut.conf
+etc/dracut.conf.d
+usr/bin/dracut
+usr/bin/dracut-catimages
+usr/bin/lsinitrd
+usr/bin/mkinitrd
+usr/lib/dracut
+#usr/lib/dracut/dracut-functions
+#usr/lib/dracut/dracut-functions.sh
+#usr/lib/dracut/dracut-initramfs-restore
+#usr/lib/dracut/dracut-install
+#usr/lib/dracut/dracut-logger.sh
+#usr/lib/dracut/dracut-version.sh
+#usr/lib/dracut/dracut.conf.d
+#usr/lib/dracut/modules.d
+#usr/lib/dracut/modules.d/00bash
+#usr/lib/dracut/modules.d/00bash/module-setup.sh
+#usr/lib/dracut/modules.d/02caps
+#usr/lib/dracut/modules.d/02caps/README
+#usr/lib/dracut/modules.d/02caps/caps.sh
+#usr/lib/dracut/modules.d/02caps/module-setup.sh
+#usr/lib/dracut/modules.d/03rescue
+#usr/lib/dracut/modules.d/03rescue/module-setup.sh
+#usr/lib/dracut/modules.d/04watchdog
+#usr/lib/dracut/modules.d/04watchdog/module-setup.sh
+#usr/lib/dracut/modules.d/04watchdog/watchdog-stop.sh
+#usr/lib/dracut/modules.d/04watchdog/watchdog.sh
+#usr/lib/dracut/modules.d/10i18n
+#usr/lib/dracut/modules.d/10i18n/10-console.rules
+#usr/lib/dracut/modules.d/10i18n/README
+#usr/lib/dracut/modules.d/10i18n/console_init.sh
+#usr/lib/dracut/modules.d/10i18n/module-setup.sh
+#usr/lib/dracut/modules.d/10i18n/parse-i18n.sh
+#usr/lib/dracut/modules.d/50drm
+#usr/lib/dracut/modules.d/50drm/module-setup.sh
+#usr/lib/dracut/modules.d/90kernel-modules
+#usr/lib/dracut/modules.d/90kernel-modules/insmodpost.sh
+#usr/lib/dracut/modules.d/90kernel-modules/module-setup.sh
+#usr/lib/dracut/modules.d/90kernel-modules/parse-kernel.sh
+#usr/lib/dracut/modules.d/90mdraid
+#usr/lib/dracut/modules.d/90mdraid/59-persistent-storage-md.rules
+#usr/lib/dracut/modules.d/90mdraid/65-md-incremental-imsm.rules
+#usr/lib/dracut/modules.d/90mdraid/md-noddf.sh
+#usr/lib/dracut/modules.d/90mdraid/md-noimsm.sh
+#usr/lib/dracut/modules.d/90mdraid/md-shutdown.sh
+#usr/lib/dracut/modules.d/90mdraid/mdmon-pre-shutdown.sh
+#usr/lib/dracut/modules.d/90mdraid/mdmon-pre-udev.sh
+#usr/lib/dracut/modules.d/90mdraid/mdraid-cleanup.sh
+#usr/lib/dracut/modules.d/90mdraid/mdraid-needshutdown.sh
+#usr/lib/dracut/modules.d/90mdraid/mdraid-waitclean.sh
+#usr/lib/dracut/modules.d/90mdraid/mdraid_start.sh
+#usr/lib/dracut/modules.d/90mdraid/module-setup.sh
+#usr/lib/dracut/modules.d/90mdraid/parse-md.sh
+#usr/lib/dracut/modules.d/95debug
+#usr/lib/dracut/modules.d/95debug/module-setup.sh
+#usr/lib/dracut/modules.d/95fstab-sys
+#usr/lib/dracut/modules.d/95fstab-sys/module-setup.sh
+#usr/lib/dracut/modules.d/95fstab-sys/mount-sys.sh
+#usr/lib/dracut/modules.d/95rootfs-block
+#usr/lib/dracut/modules.d/95rootfs-block/block-genrules.sh
+#usr/lib/dracut/modules.d/95rootfs-block/module-setup.sh
+#usr/lib/dracut/modules.d/95rootfs-block/mount-root.sh
+#usr/lib/dracut/modules.d/95rootfs-block/parse-block.sh
+#usr/lib/dracut/modules.d/95rootfs-block/rootfallback.sh
+#usr/lib/dracut/modules.d/95terminfo
+#usr/lib/dracut/modules.d/95terminfo/module-setup.sh
+#usr/lib/dracut/modules.d/95udev-rules
+#usr/lib/dracut/modules.d/95udev-rules/59-persistent-storage.rules
+#usr/lib/dracut/modules.d/95udev-rules/61-persistent-storage.rules
+#usr/lib/dracut/modules.d/95udev-rules/load-modules.sh
+#usr/lib/dracut/modules.d/95udev-rules/module-setup.sh
+#usr/lib/dracut/modules.d/95virtfs
+#usr/lib/dracut/modules.d/95virtfs/module-setup.sh
+#usr/lib/dracut/modules.d/95virtfs/mount-virtfs.sh
+#usr/lib/dracut/modules.d/95virtfs/parse-virtfs.sh
+#usr/lib/dracut/modules.d/98integrity
+#usr/lib/dracut/modules.d/98integrity/README
+#usr/lib/dracut/modules.d/98integrity/evm-enable.sh
+#usr/lib/dracut/modules.d/98integrity/ima-policy-load.sh
+#usr/lib/dracut/modules.d/98integrity/module-setup.sh
+#usr/lib/dracut/modules.d/98pollcdrom
+#usr/lib/dracut/modules.d/98pollcdrom/module-setup.sh
+#usr/lib/dracut/modules.d/98pollcdrom/pollcdrom.sh
+#usr/lib/dracut/modules.d/98syslog
+#usr/lib/dracut/modules.d/98syslog/README
+#usr/lib/dracut/modules.d/98syslog/module-setup.sh
+#usr/lib/dracut/modules.d/98syslog/parse-syslog-opts.sh
+#usr/lib/dracut/modules.d/98syslog/rsyslog.conf
+#usr/lib/dracut/modules.d/98syslog/rsyslogd-start.sh
+#usr/lib/dracut/modules.d/98syslog/rsyslogd-stop.sh
+#usr/lib/dracut/modules.d/98syslog/syslog-cleanup.sh
+#usr/lib/dracut/modules.d/98syslog/syslog-genrules.sh
+#usr/lib/dracut/modules.d/99base
+#usr/lib/dracut/modules.d/99base/dracut-lib.sh
+#usr/lib/dracut/modules.d/99base/init.sh
+#usr/lib/dracut/modules.d/99base/initqueue.sh
+#usr/lib/dracut/modules.d/99base/loginit.sh
+#usr/lib/dracut/modules.d/99base/module-setup.sh
+#usr/lib/dracut/modules.d/99base/parse-root-opts.sh
+#usr/lib/dracut/modules.d/99base/rdsosreport.sh
+#usr/lib/dracut/modules.d/99fs-lib
+#usr/lib/dracut/modules.d/99fs-lib/fs-lib.sh
+#usr/lib/dracut/modules.d/99fs-lib/module-setup.sh
+#usr/lib/dracut/modules.d/99img-lib
+#usr/lib/dracut/modules.d/99img-lib/img-lib.sh
+#usr/lib/dracut/modules.d/99img-lib/module-setup.sh
+#usr/lib/dracut/modules.d/99shutdown
+#usr/lib/dracut/modules.d/99shutdown/module-setup.sh
+#usr/lib/dracut/modules.d/99shutdown/shutdown.sh
+#usr/lib/dracut/skipcpio
+#usr/lib/kernel
+#usr/lib/kernel/install.d
+#usr/lib/kernel/install.d/50-dracut.install
+#usr/lib/kernel/install.d/51-dracut-rescue.install
+#usr/share/bash-completion/completions/dracut
+#usr/share/bash-completion/completions/lsinitrd
+#usr/share/man/man1/lsinitrd.1
+#usr/share/man/man5/dracut.conf.5
+#usr/share/man/man7/dracut.bootup.7
+#usr/share/man/man7/dracut.cmdline.7
+#usr/share/man/man7/dracut.kernel.7
+#usr/share/man/man7/dracut.modules.7
+#usr/share/man/man8/dracut-catimages.8
+#usr/share/man/man8/dracut-cmdline.service.8
+#usr/share/man/man8/dracut-initqueue.service.8
+#usr/share/man/man8/dracut-mount.service.8
+#usr/share/man/man8/dracut-pre-mount.service.8
+#usr/share/man/man8/dracut-pre-pivot.service.8
+#usr/share/man/man8/dracut-pre-trigger.service.8
+#usr/share/man/man8/dracut-pre-udev.service.8
+#usr/share/man/man8/dracut-shutdown.service.8
+#usr/share/man/man8/dracut.8
+#usr/share/man/man8/mkinitrd-suse.8
+#usr/share/man/man8/mkinitrd.8
index 89f68a76ccf391f353f147c0df31cfc0519b93bd..d37541b95718d6d0aba6f467a5f7b0da6ad81d00 100644 (file)
@@ -15,67 +15,67 @@ etc/fcron.weekly/info.txt
 usr/bin/fcronsighup
 usr/bin/fcrontab
 usr/sbin/fcron
-#usr/share/doc/fcron-3.0.4
-#usr/share/doc/fcron-3.0.4/en
-#usr/share/doc/fcron-3.0.4/en/HTML
-#usr/share/doc/fcron-3.0.4/en/HTML/LEGALNOTICE.html
-#usr/share/doc/fcron-3.0.4/en/HTML/changes.html
-#usr/share/doc/fcron-3.0.4/en/HTML/faq.html
-#usr/share/doc/fcron-3.0.4/en/HTML/fcron.8.html
-#usr/share/doc/fcron-3.0.4/en/HTML/fcron.conf.5.html
-#usr/share/doc/fcron-3.0.4/en/HTML/fcrondyn.1.html
-#usr/share/doc/fcron-3.0.4/en/HTML/fcrontab.1.html
-#usr/share/doc/fcron-3.0.4/en/HTML/fcrontab.5.html
-#usr/share/doc/fcron-3.0.4/en/HTML/fdl.html
-#usr/share/doc/fcron-3.0.4/en/HTML/gpl.html
-#usr/share/doc/fcron-3.0.4/en/HTML/how-and-why.html
-#usr/share/doc/fcron-3.0.4/en/HTML/index.html
-#usr/share/doc/fcron-3.0.4/en/HTML/install.html
-#usr/share/doc/fcron-3.0.4/en/HTML/manpages.html
-#usr/share/doc/fcron-3.0.4/en/HTML/readme.html
-#usr/share/doc/fcron-3.0.4/en/HTML/relnotes.html
-#usr/share/doc/fcron-3.0.4/en/HTML/thanks.html
-#usr/share/doc/fcron-3.0.4/en/HTML/todo.html
-#usr/share/doc/fcron-3.0.4/en/HTML/using-fcron.html
-#usr/share/doc/fcron-3.0.4/en/txt
-#usr/share/doc/fcron-3.0.4/en/txt/changes.txt
-#usr/share/doc/fcron-3.0.4/en/txt/faq.txt
-#usr/share/doc/fcron-3.0.4/en/txt/gpl.txt
-#usr/share/doc/fcron-3.0.4/en/txt/install.txt
-#usr/share/doc/fcron-3.0.4/en/txt/readme.txt
-#usr/share/doc/fcron-3.0.4/en/txt/relnotes.txt
-#usr/share/doc/fcron-3.0.4/en/txt/thanks.txt
-#usr/share/doc/fcron-3.0.4/en/txt/todo.txt
-#usr/share/doc/fcron-3.0.4/fr
-#usr/share/doc/fcron-3.0.4/fr/HTML
-#usr/share/doc/fcron-3.0.4/fr/HTML/LEGALNOTICE.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/changes.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/faq.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/fcron.8.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/fcron.conf.5.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/fcrondyn.1.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/fcrontab.1.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/fcrontab.5.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/fdl.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/gpl.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/how-and-why.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/index.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/install.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/manpages.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/readme.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/relnotes.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/thanks.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/todo.html
-#usr/share/doc/fcron-3.0.4/fr/HTML/using-fcron.html
-#usr/share/doc/fcron-3.0.4/fr/txt
-#usr/share/doc/fcron-3.0.4/fr/txt/changes.txt
-#usr/share/doc/fcron-3.0.4/fr/txt/faq.txt
-#usr/share/doc/fcron-3.0.4/fr/txt/gpl.txt
-#usr/share/doc/fcron-3.0.4/fr/txt/install.txt
-#usr/share/doc/fcron-3.0.4/fr/txt/readme.txt
-#usr/share/doc/fcron-3.0.4/fr/txt/relnotes.txt
-#usr/share/doc/fcron-3.0.4/fr/txt/thanks.txt
-#usr/share/doc/fcron-3.0.4/fr/txt/todo.txt
+#usr/share/doc/fcron-3.2.0
+#usr/share/doc/fcron-3.2.0/en
+#usr/share/doc/fcron-3.2.0/en/HTML
+#usr/share/doc/fcron-3.2.0/en/HTML/LEGALNOTICE.html
+#usr/share/doc/fcron-3.2.0/en/HTML/changes.html
+#usr/share/doc/fcron-3.2.0/en/HTML/faq.html
+#usr/share/doc/fcron-3.2.0/en/HTML/fcron.8.html
+#usr/share/doc/fcron-3.2.0/en/HTML/fcron.conf.5.html
+#usr/share/doc/fcron-3.2.0/en/HTML/fcrondyn.1.html
+#usr/share/doc/fcron-3.2.0/en/HTML/fcrontab.1.html
+#usr/share/doc/fcron-3.2.0/en/HTML/fcrontab.5.html
+#usr/share/doc/fcron-3.2.0/en/HTML/fdl.html
+#usr/share/doc/fcron-3.2.0/en/HTML/gpl.html
+#usr/share/doc/fcron-3.2.0/en/HTML/how-and-why.html
+#usr/share/doc/fcron-3.2.0/en/HTML/index.html
+#usr/share/doc/fcron-3.2.0/en/HTML/install.html
+#usr/share/doc/fcron-3.2.0/en/HTML/manpages.html
+#usr/share/doc/fcron-3.2.0/en/HTML/readme.html
+#usr/share/doc/fcron-3.2.0/en/HTML/relnotes.html
+#usr/share/doc/fcron-3.2.0/en/HTML/thanks.html
+#usr/share/doc/fcron-3.2.0/en/HTML/todo.html
+#usr/share/doc/fcron-3.2.0/en/HTML/using-fcron.html
+#usr/share/doc/fcron-3.2.0/en/txt
+#usr/share/doc/fcron-3.2.0/en/txt/changes.txt
+#usr/share/doc/fcron-3.2.0/en/txt/faq.txt
+#usr/share/doc/fcron-3.2.0/en/txt/gpl.txt
+#usr/share/doc/fcron-3.2.0/en/txt/install.txt
+#usr/share/doc/fcron-3.2.0/en/txt/readme.txt
+#usr/share/doc/fcron-3.2.0/en/txt/relnotes.txt
+#usr/share/doc/fcron-3.2.0/en/txt/thanks.txt
+#usr/share/doc/fcron-3.2.0/en/txt/todo.txt
+#usr/share/doc/fcron-3.2.0/fr
+#usr/share/doc/fcron-3.2.0/fr/HTML
+#usr/share/doc/fcron-3.2.0/fr/HTML/LEGALNOTICE.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/changes.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/faq.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/fcron.8.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/fcron.conf.5.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/fcrondyn.1.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/fcrontab.1.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/fcrontab.5.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/fdl.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/gpl.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/how-and-why.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/index.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/install.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/manpages.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/readme.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/relnotes.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/thanks.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/todo.html
+#usr/share/doc/fcron-3.2.0/fr/HTML/using-fcron.html
+#usr/share/doc/fcron-3.2.0/fr/txt
+#usr/share/doc/fcron-3.2.0/fr/txt/changes.txt
+#usr/share/doc/fcron-3.2.0/fr/txt/faq.txt
+#usr/share/doc/fcron-3.2.0/fr/txt/gpl.txt
+#usr/share/doc/fcron-3.2.0/fr/txt/install.txt
+#usr/share/doc/fcron-3.2.0/fr/txt/readme.txt
+#usr/share/doc/fcron-3.2.0/fr/txt/relnotes.txt
+#usr/share/doc/fcron-3.2.0/fr/txt/thanks.txt
+#usr/share/doc/fcron-3.2.0/fr/txt/todo.txt
 #usr/share/man/fr
 #usr/share/man/fr/man1
 #usr/share/man/fr/man1/fcrondyn.1
index 7c59b98f7373fcf016cf5a883291089744c49cef..83cbfc4508e5f75896f42b2f251c3aa854882494 100644 (file)
@@ -5,5 +5,6 @@ bin/nisdomainname
 bin/ypdomainname
 #usr/share/man/man1/dnsdomainname.1
 #usr/share/man/man1/domainname.1
+#usr/share/man/man1/hostname.1
 #usr/share/man/man1/nisdomainname.1
 #usr/share/man/man1/ypdomainname.1
diff --git a/config/rootfiles/common/i586/dracut b/config/rootfiles/common/i586/dracut
deleted file mode 100644 (file)
index 27d8243..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#boot/ipfirerd-KVER.img
-etc/dracut.conf
-etc/dracut.conf.d
-#etc/dracut.conf.d/dracut.conf
-sbin/dracut
-sbin/dracut-catimages
-sbin/dracut-gencmdline
-sbin/lsinitrd
-sbin/mkinitrd
-usr/share/dracut
-usr/share/dracut/dracut-functions
-usr/share/dracut/modules.d
-usr/share/dracut/modules.d/60xen
-usr/share/dracut/modules.d/60xen/check
-usr/share/dracut/modules.d/60xen/install
-usr/share/dracut/modules.d/60xen/installkernel
-usr/share/dracut/modules.d/60xen/xen-pre-udev.sh
-usr/share/dracut/modules.d/90kernel-modules
-usr/share/dracut/modules.d/90kernel-modules/install
-usr/share/dracut/modules.d/90kernel-modules/installkernel
-usr/share/dracut/modules.d/90kernel-modules/parse-kernel.sh
-usr/share/dracut/modules.d/95debug
-usr/share/dracut/modules.d/95debug/check
-usr/share/dracut/modules.d/95debug/install
-usr/share/dracut/modules.d/95rootfs-block
-usr/share/dracut/modules.d/95rootfs-block/block-genrules.sh
-usr/share/dracut/modules.d/95rootfs-block/install
-usr/share/dracut/modules.d/95rootfs-block/mount-root.sh
-usr/share/dracut/modules.d/95rootfs-block/parse-block.sh
-usr/share/dracut/modules.d/95terminfo
-usr/share/dracut/modules.d/95terminfo/install
-usr/share/dracut/modules.d/95udev-rules
-usr/share/dracut/modules.d/95udev-rules/01-ignore.rules
-usr/share/dracut/modules.d/95udev-rules/59-persistent-storage-volid.rules
-usr/share/dracut/modules.d/95udev-rules/59-persistent-storage.rules
-usr/share/dracut/modules.d/95udev-rules/61-persistent-storage.rules
-usr/share/dracut/modules.d/95udev-rules/install
-usr/share/dracut/modules.d/95udev-rules/load-modules.sh
-usr/share/dracut/modules.d/98syslog
-usr/share/dracut/modules.d/98syslog/README
-usr/share/dracut/modules.d/98syslog/check
-usr/share/dracut/modules.d/98syslog/install
-usr/share/dracut/modules.d/98syslog/parse-syslog-opts.sh
-usr/share/dracut/modules.d/98syslog/rsyslog.conf
-usr/share/dracut/modules.d/98syslog/rsyslogd-start.sh
-usr/share/dracut/modules.d/98syslog/rsyslogd-stop.sh
-usr/share/dracut/modules.d/98syslog/syslog-cleanup.sh
-usr/share/dracut/modules.d/98syslog/syslog-genrules.sh
-usr/share/dracut/modules.d/99base
-usr/share/dracut/modules.d/99base/check
-usr/share/dracut/modules.d/99base/dracut-lib.sh
-usr/share/dracut/modules.d/99base/init
-usr/share/dracut/modules.d/99base/initqueue
-#usr/share/dracut/modules.d/99base/init~
-usr/share/dracut/modules.d/99base/install
-usr/share/dracut/modules.d/99base/loginit
-usr/share/dracut/modules.d/99base/parse-blacklist.sh
-usr/share/dracut/modules.d/99base/parse-root-opts.sh
-#usr/share/man/man5/dracut.conf.5
-#usr/share/man/man8/dracut-catimages.8
-#usr/share/man/man8/dracut-gencmdline.8
-#usr/share/man/man8/dracut.8
-sbin/switch_root
index b4335a50338d7f73ea5a33d9379d9401bd17b1bc..d34a8f5986bbdfa727b6caad1950e2798a8d931b 100644 (file)
@@ -52,7 +52,7 @@ usr/bin/getconf
 usr/bin/getent
 #usr/bin/iconv
 usr/bin/ldd
-#usr/bin/lddlibc4
+usr/bin/lddlibc4
 usr/bin/locale
 #usr/bin/localedef
 #usr/bin/mtrace
@@ -7058,6 +7058,7 @@ usr/lib/locale
 #usr/share/i18n/locales/eu_ES@euro
 #usr/share/i18n/locales/fa_IR
 #usr/share/i18n/locales/fi_FI
+#usr/share/i18n/locales/fi_FI.orig
 #usr/share/i18n/locales/fi_FI@euro
 #usr/share/i18n/locales/fil_PH
 #usr/share/i18n/locales/fo_FO
index de6a53b5cff18f3432acf5d080e0bc25034b758e..9d71942523c501ce34abbaed5ebf817efa3294cb 100644 (file)
 #boot/grub
-boot/grub/default
-boot/grub/grub.conf
-boot/grub/ipfire.xpm.gz
-boot/grub/stage1
-boot/grub/stage2
-#usr/bin/mbchk
+boot/grub/grub.cfg
+boot/grub/splash.png
+boot/grub/unifont.pf2
+#etc/bash_completion.d
+#etc/bash_completion.d/grub
+etc/default/grub
+etc/grub.d
+etc/grub.d/00_header
+etc/grub.d/10_linux
+etc/grub.d/20_linux_xen
+etc/grub.d/30_os-prober
+etc/grub.d/40_custom
+etc/grub.d/41_custom
+etc/grub.d/README
+etc/grub2.cfg
+usr/bin/grub-editenv
+usr/bin/grub-fstest
+usr/bin/grub-kbdcomp
+usr/bin/grub-menulst2cfg
+usr/bin/grub-mkfont
+usr/bin/grub-mkimage
+usr/bin/grub-mklayout
+usr/bin/grub-mkpasswd-pbkdf2
+usr/bin/grub-mkrelpath
+usr/bin/grub-mkrescue
+usr/bin/grub-mkstandalone
+usr/bin/grub-script-check
 usr/lib/grub
-#usr/lib/grub/i386-pc
-#usr/lib/grub/i386-pc/e2fs_stage1_5
-#usr/lib/grub/i386-pc/fat_stage1_5
-#usr/lib/grub/i386-pc/ffs_stage1_5
-#usr/lib/grub/i386-pc/iso9660_stage1_5
-#usr/lib/grub/i386-pc/jfs_stage1_5
-#usr/lib/grub/i386-pc/minix_stage1_5
-#usr/lib/grub/i386-pc/reiserfs_stage1_5
-#usr/lib/grub/i386-pc/stage1
-#usr/lib/grub/i386-pc/stage2
-#usr/lib/grub/i386-pc/stage2_eltorito
-#usr/lib/grub/i386-pc/ufs2_stage1_5
-#usr/lib/grub/i386-pc/vstafs_stage1_5
-#usr/lib/grub/i386-pc/xfs_stage1_5
-usr/sbin/grub
+usr/lib/grub/i386-pc
+usr/lib/grub/i386-pc/acpi.mod
+usr/lib/grub/i386-pc/acpi.module
+usr/lib/grub/i386-pc/adler32.mod
+usr/lib/grub/i386-pc/adler32.module
+usr/lib/grub/i386-pc/affs.mod
+usr/lib/grub/i386-pc/affs.module
+usr/lib/grub/i386-pc/afs.mod
+usr/lib/grub/i386-pc/afs.module
+usr/lib/grub/i386-pc/ahci.mod
+usr/lib/grub/i386-pc/ahci.module
+usr/lib/grub/i386-pc/all_video.mod
+usr/lib/grub/i386-pc/all_video.module
+usr/lib/grub/i386-pc/aout.mod
+usr/lib/grub/i386-pc/aout.module
+usr/lib/grub/i386-pc/at_keyboard.mod
+usr/lib/grub/i386-pc/at_keyboard.module
+usr/lib/grub/i386-pc/ata.mod
+usr/lib/grub/i386-pc/ata.module
+usr/lib/grub/i386-pc/backtrace.mod
+usr/lib/grub/i386-pc/backtrace.module
+usr/lib/grub/i386-pc/bfs.mod
+usr/lib/grub/i386-pc/bfs.module
+usr/lib/grub/i386-pc/biosdisk.mod
+usr/lib/grub/i386-pc/biosdisk.module
+usr/lib/grub/i386-pc/bitmap.mod
+usr/lib/grub/i386-pc/bitmap.module
+usr/lib/grub/i386-pc/bitmap_scale.mod
+usr/lib/grub/i386-pc/bitmap_scale.module
+usr/lib/grub/i386-pc/blocklist.mod
+usr/lib/grub/i386-pc/blocklist.module
+usr/lib/grub/i386-pc/boot.image
+usr/lib/grub/i386-pc/boot.img
+usr/lib/grub/i386-pc/boot.mod
+usr/lib/grub/i386-pc/boot.module
+usr/lib/grub/i386-pc/bsd.mod
+usr/lib/grub/i386-pc/bsd.module
+usr/lib/grub/i386-pc/btrfs.mod
+usr/lib/grub/i386-pc/btrfs.module
+usr/lib/grub/i386-pc/bufio.mod
+usr/lib/grub/i386-pc/bufio.module
+usr/lib/grub/i386-pc/cat.mod
+usr/lib/grub/i386-pc/cat.module
+usr/lib/grub/i386-pc/cdboot.image
+usr/lib/grub/i386-pc/cdboot.img
+usr/lib/grub/i386-pc/chain.mod
+usr/lib/grub/i386-pc/chain.module
+usr/lib/grub/i386-pc/cmostest.mod
+usr/lib/grub/i386-pc/cmostest.module
+usr/lib/grub/i386-pc/cmp.mod
+usr/lib/grub/i386-pc/cmp.module
+usr/lib/grub/i386-pc/command.lst
+usr/lib/grub/i386-pc/config.h
+usr/lib/grub/i386-pc/configfile.mod
+usr/lib/grub/i386-pc/configfile.module
+usr/lib/grub/i386-pc/cpio.mod
+usr/lib/grub/i386-pc/cpio.module
+usr/lib/grub/i386-pc/cpio_be.mod
+usr/lib/grub/i386-pc/cpio_be.module
+usr/lib/grub/i386-pc/cpuid.mod
+usr/lib/grub/i386-pc/cpuid.module
+usr/lib/grub/i386-pc/crc64.mod
+usr/lib/grub/i386-pc/crc64.module
+usr/lib/grub/i386-pc/crypto.lst
+usr/lib/grub/i386-pc/crypto.mod
+usr/lib/grub/i386-pc/crypto.module
+usr/lib/grub/i386-pc/cryptodisk.mod
+usr/lib/grub/i386-pc/cryptodisk.module
+usr/lib/grub/i386-pc/cs5536.mod
+usr/lib/grub/i386-pc/cs5536.module
+usr/lib/grub/i386-pc/date.mod
+usr/lib/grub/i386-pc/date.module
+usr/lib/grub/i386-pc/datehook.mod
+usr/lib/grub/i386-pc/datehook.module
+usr/lib/grub/i386-pc/datetime.mod
+usr/lib/grub/i386-pc/datetime.module
+usr/lib/grub/i386-pc/diskboot.image
+usr/lib/grub/i386-pc/diskboot.img
+usr/lib/grub/i386-pc/diskfilter.mod
+usr/lib/grub/i386-pc/diskfilter.module
+usr/lib/grub/i386-pc/dm_nv.mod
+usr/lib/grub/i386-pc/dm_nv.module
+usr/lib/grub/i386-pc/drivemap.mod
+usr/lib/grub/i386-pc/drivemap.module
+usr/lib/grub/i386-pc/echo.mod
+usr/lib/grub/i386-pc/echo.module
+usr/lib/grub/i386-pc/efiemu.mod
+usr/lib/grub/i386-pc/efiemu.module
+usr/lib/grub/i386-pc/ehci.mod
+usr/lib/grub/i386-pc/ehci.module
+usr/lib/grub/i386-pc/elf.mod
+usr/lib/grub/i386-pc/elf.module
+usr/lib/grub/i386-pc/exfat.mod
+usr/lib/grub/i386-pc/exfat.module
+usr/lib/grub/i386-pc/exfctest.mod
+usr/lib/grub/i386-pc/exfctest.module
+usr/lib/grub/i386-pc/ext2.mod
+usr/lib/grub/i386-pc/ext2.module
+usr/lib/grub/i386-pc/extcmd.mod
+usr/lib/grub/i386-pc/extcmd.module
+usr/lib/grub/i386-pc/fat.mod
+usr/lib/grub/i386-pc/fat.module
+usr/lib/grub/i386-pc/font.mod
+usr/lib/grub/i386-pc/font.module
+usr/lib/grub/i386-pc/freedos.mod
+usr/lib/grub/i386-pc/freedos.module
+usr/lib/grub/i386-pc/fs.lst
+usr/lib/grub/i386-pc/fshelp.mod
+usr/lib/grub/i386-pc/fshelp.module
+usr/lib/grub/i386-pc/functional_test.mod
+usr/lib/grub/i386-pc/functional_test.module
+usr/lib/grub/i386-pc/gcry_arcfour.mod
+usr/lib/grub/i386-pc/gcry_arcfour.module
+usr/lib/grub/i386-pc/gcry_blowfish.mod
+usr/lib/grub/i386-pc/gcry_blowfish.module
+usr/lib/grub/i386-pc/gcry_camellia.mod
+usr/lib/grub/i386-pc/gcry_camellia.module
+usr/lib/grub/i386-pc/gcry_cast5.mod
+usr/lib/grub/i386-pc/gcry_cast5.module
+usr/lib/grub/i386-pc/gcry_crc.mod
+usr/lib/grub/i386-pc/gcry_crc.module
+usr/lib/grub/i386-pc/gcry_des.mod
+usr/lib/grub/i386-pc/gcry_des.module
+usr/lib/grub/i386-pc/gcry_md4.mod
+usr/lib/grub/i386-pc/gcry_md4.module
+usr/lib/grub/i386-pc/gcry_md5.mod
+usr/lib/grub/i386-pc/gcry_md5.module
+usr/lib/grub/i386-pc/gcry_rfc2268.mod
+usr/lib/grub/i386-pc/gcry_rfc2268.module
+usr/lib/grub/i386-pc/gcry_rijndael.mod
+usr/lib/grub/i386-pc/gcry_rijndael.module
+usr/lib/grub/i386-pc/gcry_rmd160.mod
+usr/lib/grub/i386-pc/gcry_rmd160.module
+usr/lib/grub/i386-pc/gcry_seed.mod
+usr/lib/grub/i386-pc/gcry_seed.module
+usr/lib/grub/i386-pc/gcry_serpent.mod
+usr/lib/grub/i386-pc/gcry_serpent.module
+usr/lib/grub/i386-pc/gcry_sha1.mod
+usr/lib/grub/i386-pc/gcry_sha1.module
+usr/lib/grub/i386-pc/gcry_sha256.mod
+usr/lib/grub/i386-pc/gcry_sha256.module
+usr/lib/grub/i386-pc/gcry_sha512.mod
+usr/lib/grub/i386-pc/gcry_sha512.module
+usr/lib/grub/i386-pc/gcry_tiger.mod
+usr/lib/grub/i386-pc/gcry_tiger.module
+usr/lib/grub/i386-pc/gcry_twofish.mod
+usr/lib/grub/i386-pc/gcry_twofish.module
+usr/lib/grub/i386-pc/gcry_whirlpool.mod
+usr/lib/grub/i386-pc/gcry_whirlpool.module
+usr/lib/grub/i386-pc/gdb.mod
+usr/lib/grub/i386-pc/gdb.module
+usr/lib/grub/i386-pc/gdb_grub
+usr/lib/grub/i386-pc/geli.mod
+usr/lib/grub/i386-pc/geli.module
+usr/lib/grub/i386-pc/gettext.mod
+usr/lib/grub/i386-pc/gettext.module
+usr/lib/grub/i386-pc/gfxmenu.mod
+usr/lib/grub/i386-pc/gfxmenu.module
+usr/lib/grub/i386-pc/gfxterm.mod
+usr/lib/grub/i386-pc/gfxterm.module
+usr/lib/grub/i386-pc/gmodule.pl
+usr/lib/grub/i386-pc/gptsync.mod
+usr/lib/grub/i386-pc/gptsync.module
+usr/lib/grub/i386-pc/gzio.mod
+usr/lib/grub/i386-pc/gzio.module
+usr/lib/grub/i386-pc/halt.mod
+usr/lib/grub/i386-pc/halt.module
+usr/lib/grub/i386-pc/hashsum.mod
+usr/lib/grub/i386-pc/hashsum.module
+usr/lib/grub/i386-pc/hdparm.mod
+usr/lib/grub/i386-pc/hdparm.module
+usr/lib/grub/i386-pc/hello.mod
+usr/lib/grub/i386-pc/hello.module
+usr/lib/grub/i386-pc/help.mod
+usr/lib/grub/i386-pc/help.module
+usr/lib/grub/i386-pc/hexdump.mod
+usr/lib/grub/i386-pc/hexdump.module
+usr/lib/grub/i386-pc/hfs.mod
+usr/lib/grub/i386-pc/hfs.module
+usr/lib/grub/i386-pc/hfsplus.mod
+usr/lib/grub/i386-pc/hfsplus.module
+usr/lib/grub/i386-pc/http.mod
+usr/lib/grub/i386-pc/http.module
+usr/lib/grub/i386-pc/iorw.mod
+usr/lib/grub/i386-pc/iorw.module
+usr/lib/grub/i386-pc/iso9660.mod
+usr/lib/grub/i386-pc/iso9660.module
+usr/lib/grub/i386-pc/jfs.mod
+usr/lib/grub/i386-pc/jfs.module
+usr/lib/grub/i386-pc/jpeg.mod
+usr/lib/grub/i386-pc/jpeg.module
+usr/lib/grub/i386-pc/kernel.exec
+usr/lib/grub/i386-pc/kernel.img
+usr/lib/grub/i386-pc/keylayouts.mod
+usr/lib/grub/i386-pc/keylayouts.module
+usr/lib/grub/i386-pc/keystatus.mod
+usr/lib/grub/i386-pc/keystatus.module
+usr/lib/grub/i386-pc/ldm.mod
+usr/lib/grub/i386-pc/ldm.module
+usr/lib/grub/i386-pc/legacycfg.mod
+usr/lib/grub/i386-pc/legacycfg.module
+usr/lib/grub/i386-pc/linux.mod
+usr/lib/grub/i386-pc/linux.module
+usr/lib/grub/i386-pc/linux16.mod
+usr/lib/grub/i386-pc/linux16.module
+usr/lib/grub/i386-pc/lnxboot.image
+usr/lib/grub/i386-pc/lnxboot.img
+usr/lib/grub/i386-pc/loadenv.mod
+usr/lib/grub/i386-pc/loadenv.module
+usr/lib/grub/i386-pc/loopback.mod
+usr/lib/grub/i386-pc/loopback.module
+usr/lib/grub/i386-pc/ls.mod
+usr/lib/grub/i386-pc/ls.module
+usr/lib/grub/i386-pc/lsacpi.mod
+usr/lib/grub/i386-pc/lsacpi.module
+usr/lib/grub/i386-pc/lsapm.mod
+usr/lib/grub/i386-pc/lsapm.module
+usr/lib/grub/i386-pc/lsmmap.mod
+usr/lib/grub/i386-pc/lsmmap.module
+usr/lib/grub/i386-pc/lspci.mod
+usr/lib/grub/i386-pc/lspci.module
+usr/lib/grub/i386-pc/luks.mod
+usr/lib/grub/i386-pc/luks.module
+usr/lib/grub/i386-pc/lvm.mod
+usr/lib/grub/i386-pc/lvm.module
+usr/lib/grub/i386-pc/lzma_decompress.image
+usr/lib/grub/i386-pc/lzma_decompress.img
+usr/lib/grub/i386-pc/lzopio.mod
+usr/lib/grub/i386-pc/lzopio.module
+usr/lib/grub/i386-pc/mdraid09.mod
+usr/lib/grub/i386-pc/mdraid09.module
+usr/lib/grub/i386-pc/mdraid09_be.mod
+usr/lib/grub/i386-pc/mdraid09_be.module
+usr/lib/grub/i386-pc/mdraid1x.mod
+usr/lib/grub/i386-pc/mdraid1x.module
+usr/lib/grub/i386-pc/memdisk.mod
+usr/lib/grub/i386-pc/memdisk.module
+usr/lib/grub/i386-pc/memrw.mod
+usr/lib/grub/i386-pc/memrw.module
+usr/lib/grub/i386-pc/minicmd.mod
+usr/lib/grub/i386-pc/minicmd.module
+usr/lib/grub/i386-pc/minix.mod
+usr/lib/grub/i386-pc/minix.module
+usr/lib/grub/i386-pc/minix2.mod
+usr/lib/grub/i386-pc/minix2.module
+usr/lib/grub/i386-pc/minix2_be.mod
+usr/lib/grub/i386-pc/minix2_be.module
+usr/lib/grub/i386-pc/minix3.mod
+usr/lib/grub/i386-pc/minix3.module
+usr/lib/grub/i386-pc/minix3_be.mod
+usr/lib/grub/i386-pc/minix3_be.module
+usr/lib/grub/i386-pc/minix_be.mod
+usr/lib/grub/i386-pc/minix_be.module
+usr/lib/grub/i386-pc/mmap.mod
+usr/lib/grub/i386-pc/mmap.module
+usr/lib/grub/i386-pc/moddep.lst
+usr/lib/grub/i386-pc/modinfo.sh
+usr/lib/grub/i386-pc/msdospart.mod
+usr/lib/grub/i386-pc/msdospart.module
+usr/lib/grub/i386-pc/multiboot.mod
+usr/lib/grub/i386-pc/multiboot.module
+usr/lib/grub/i386-pc/multiboot2.mod
+usr/lib/grub/i386-pc/multiboot2.module
+usr/lib/grub/i386-pc/net.mod
+usr/lib/grub/i386-pc/net.module
+usr/lib/grub/i386-pc/newc.mod
+usr/lib/grub/i386-pc/newc.module
+usr/lib/grub/i386-pc/nilfs2.mod
+usr/lib/grub/i386-pc/nilfs2.module
+usr/lib/grub/i386-pc/normal.mod
+usr/lib/grub/i386-pc/normal.module
+usr/lib/grub/i386-pc/ntfs.mod
+usr/lib/grub/i386-pc/ntfs.module
+usr/lib/grub/i386-pc/ntfscomp.mod
+usr/lib/grub/i386-pc/ntfscomp.module
+usr/lib/grub/i386-pc/ntldr.mod
+usr/lib/grub/i386-pc/ntldr.module
+usr/lib/grub/i386-pc/odc.mod
+usr/lib/grub/i386-pc/odc.module
+usr/lib/grub/i386-pc/ohci.mod
+usr/lib/grub/i386-pc/ohci.module
+usr/lib/grub/i386-pc/part_acorn.mod
+usr/lib/grub/i386-pc/part_acorn.module
+usr/lib/grub/i386-pc/part_amiga.mod
+usr/lib/grub/i386-pc/part_amiga.module
+usr/lib/grub/i386-pc/part_apple.mod
+usr/lib/grub/i386-pc/part_apple.module
+usr/lib/grub/i386-pc/part_bsd.mod
+usr/lib/grub/i386-pc/part_bsd.module
+usr/lib/grub/i386-pc/part_dvh.mod
+usr/lib/grub/i386-pc/part_dvh.module
+usr/lib/grub/i386-pc/part_gpt.mod
+usr/lib/grub/i386-pc/part_gpt.module
+usr/lib/grub/i386-pc/part_msdos.mod
+usr/lib/grub/i386-pc/part_msdos.module
+usr/lib/grub/i386-pc/part_plan.mod
+usr/lib/grub/i386-pc/part_plan.module
+usr/lib/grub/i386-pc/part_sun.mod
+usr/lib/grub/i386-pc/part_sun.module
+usr/lib/grub/i386-pc/part_sunpc.mod
+usr/lib/grub/i386-pc/part_sunpc.module
+usr/lib/grub/i386-pc/partmap.lst
+usr/lib/grub/i386-pc/parttool.lst
+usr/lib/grub/i386-pc/parttool.mod
+usr/lib/grub/i386-pc/parttool.module
+usr/lib/grub/i386-pc/password.mod
+usr/lib/grub/i386-pc/password.module
+usr/lib/grub/i386-pc/password_pbkdf2.mod
+usr/lib/grub/i386-pc/password_pbkdf2.module
+usr/lib/grub/i386-pc/pata.mod
+usr/lib/grub/i386-pc/pata.module
+usr/lib/grub/i386-pc/pbkdf2.mod
+usr/lib/grub/i386-pc/pbkdf2.module
+usr/lib/grub/i386-pc/pci.mod
+usr/lib/grub/i386-pc/pci.module
+usr/lib/grub/i386-pc/plan9.mod
+usr/lib/grub/i386-pc/plan9.module
+usr/lib/grub/i386-pc/play.mod
+usr/lib/grub/i386-pc/play.module
+usr/lib/grub/i386-pc/png.mod
+usr/lib/grub/i386-pc/png.module
+usr/lib/grub/i386-pc/priority_queue.mod
+usr/lib/grub/i386-pc/priority_queue.module
+usr/lib/grub/i386-pc/probe.mod
+usr/lib/grub/i386-pc/probe.module
+usr/lib/grub/i386-pc/pxe.mod
+usr/lib/grub/i386-pc/pxe.module
+usr/lib/grub/i386-pc/pxeboot.image
+usr/lib/grub/i386-pc/pxeboot.img
+usr/lib/grub/i386-pc/pxechain.mod
+usr/lib/grub/i386-pc/pxechain.module
+usr/lib/grub/i386-pc/raid5rec.mod
+usr/lib/grub/i386-pc/raid5rec.module
+usr/lib/grub/i386-pc/raid6rec.mod
+usr/lib/grub/i386-pc/raid6rec.module
+usr/lib/grub/i386-pc/read.mod
+usr/lib/grub/i386-pc/read.module
+usr/lib/grub/i386-pc/reboot.mod
+usr/lib/grub/i386-pc/reboot.module
+usr/lib/grub/i386-pc/regexp.mod
+usr/lib/grub/i386-pc/regexp.module
+usr/lib/grub/i386-pc/reiserfs.mod
+usr/lib/grub/i386-pc/reiserfs.module
+usr/lib/grub/i386-pc/relocator.mod
+usr/lib/grub/i386-pc/relocator.module
+usr/lib/grub/i386-pc/romfs.mod
+usr/lib/grub/i386-pc/romfs.module
+usr/lib/grub/i386-pc/scsi.mod
+usr/lib/grub/i386-pc/scsi.module
+usr/lib/grub/i386-pc/search.mod
+usr/lib/grub/i386-pc/search.module
+usr/lib/grub/i386-pc/search_fs_file.mod
+usr/lib/grub/i386-pc/search_fs_file.module
+usr/lib/grub/i386-pc/search_fs_uuid.mod
+usr/lib/grub/i386-pc/search_fs_uuid.module
+usr/lib/grub/i386-pc/search_label.mod
+usr/lib/grub/i386-pc/search_label.module
+usr/lib/grub/i386-pc/sendkey.mod
+usr/lib/grub/i386-pc/sendkey.module
+usr/lib/grub/i386-pc/serial.mod
+usr/lib/grub/i386-pc/serial.module
+usr/lib/grub/i386-pc/setjmp.mod
+usr/lib/grub/i386-pc/setjmp.module
+usr/lib/grub/i386-pc/setpci.mod
+usr/lib/grub/i386-pc/setpci.module
+usr/lib/grub/i386-pc/sfs.mod
+usr/lib/grub/i386-pc/sfs.module
+usr/lib/grub/i386-pc/sleep.mod
+usr/lib/grub/i386-pc/sleep.module
+usr/lib/grub/i386-pc/squash4.mod
+usr/lib/grub/i386-pc/squash4.module
+usr/lib/grub/i386-pc/tar.mod
+usr/lib/grub/i386-pc/tar.module
+usr/lib/grub/i386-pc/terminal.lst
+usr/lib/grub/i386-pc/terminal.mod
+usr/lib/grub/i386-pc/terminal.module
+usr/lib/grub/i386-pc/terminfo.mod
+usr/lib/grub/i386-pc/terminfo.module
+usr/lib/grub/i386-pc/test.mod
+usr/lib/grub/i386-pc/test.module
+usr/lib/grub/i386-pc/test_blockarg.mod
+usr/lib/grub/i386-pc/test_blockarg.module
+usr/lib/grub/i386-pc/testload.mod
+usr/lib/grub/i386-pc/testload.module
+usr/lib/grub/i386-pc/tftp.mod
+usr/lib/grub/i386-pc/tftp.module
+usr/lib/grub/i386-pc/tga.mod
+usr/lib/grub/i386-pc/tga.module
+usr/lib/grub/i386-pc/time.mod
+usr/lib/grub/i386-pc/time.module
+usr/lib/grub/i386-pc/trig.mod
+usr/lib/grub/i386-pc/trig.module
+usr/lib/grub/i386-pc/true.mod
+usr/lib/grub/i386-pc/true.module
+usr/lib/grub/i386-pc/udf.mod
+usr/lib/grub/i386-pc/udf.module
+usr/lib/grub/i386-pc/ufs1.mod
+usr/lib/grub/i386-pc/ufs1.module
+usr/lib/grub/i386-pc/ufs2.mod
+usr/lib/grub/i386-pc/ufs2.module
+usr/lib/grub/i386-pc/uhci.mod
+usr/lib/grub/i386-pc/uhci.module
+usr/lib/grub/i386-pc/usb.mod
+usr/lib/grub/i386-pc/usb.module
+usr/lib/grub/i386-pc/usb_keyboard.mod
+usr/lib/grub/i386-pc/usb_keyboard.module
+usr/lib/grub/i386-pc/usbms.mod
+usr/lib/grub/i386-pc/usbms.module
+usr/lib/grub/i386-pc/usbserial_common.mod
+usr/lib/grub/i386-pc/usbserial_common.module
+usr/lib/grub/i386-pc/usbserial_ftdi.mod
+usr/lib/grub/i386-pc/usbserial_ftdi.module
+usr/lib/grub/i386-pc/usbserial_pl2303.mod
+usr/lib/grub/i386-pc/usbserial_pl2303.module
+usr/lib/grub/i386-pc/usbtest.mod
+usr/lib/grub/i386-pc/usbtest.module
+usr/lib/grub/i386-pc/vbe.mod
+usr/lib/grub/i386-pc/vbe.module
+usr/lib/grub/i386-pc/vga.mod
+usr/lib/grub/i386-pc/vga.module
+usr/lib/grub/i386-pc/vga_text.mod
+usr/lib/grub/i386-pc/vga_text.module
+usr/lib/grub/i386-pc/video.lst
+usr/lib/grub/i386-pc/video.mod
+usr/lib/grub/i386-pc/video.module
+usr/lib/grub/i386-pc/video_bochs.mod
+usr/lib/grub/i386-pc/video_bochs.module
+usr/lib/grub/i386-pc/video_cirrus.mod
+usr/lib/grub/i386-pc/video_cirrus.module
+usr/lib/grub/i386-pc/video_fb.mod
+usr/lib/grub/i386-pc/video_fb.module
+usr/lib/grub/i386-pc/videoinfo.mod
+usr/lib/grub/i386-pc/videoinfo.module
+usr/lib/grub/i386-pc/videotest.mod
+usr/lib/grub/i386-pc/videotest.module
+usr/lib/grub/i386-pc/xfs.mod
+usr/lib/grub/i386-pc/xfs.module
+usr/lib/grub/i386-pc/xnu.mod
+usr/lib/grub/i386-pc/xnu.module
+usr/lib/grub/i386-pc/xnu_uuid.mod
+usr/lib/grub/i386-pc/xnu_uuid.module
+usr/lib/grub/i386-pc/xzio.mod
+usr/lib/grub/i386-pc/xzio.module
+usr/lib/grub/i386-pc/zfs.mod
+usr/lib/grub/i386-pc/zfs.module
+usr/lib/grub/i386-pc/zfscrypt.mod
+usr/lib/grub/i386-pc/zfscrypt.module
+usr/lib/grub/i386-pc/zfsinfo.mod
+usr/lib/grub/i386-pc/zfsinfo.module
+usr/sbin/grub-bios-setup
 usr/sbin/grub-install
-usr/sbin/grub-md5-crypt
+usr/sbin/grub-mkconfig
+usr/sbin/grub-mknetdir
+usr/sbin/grub-ofpathname
+usr/sbin/grub-probe
+usr/sbin/grub-reboot
 usr/sbin/grub-set-default
-usr/sbin/grub-terminfo
+usr/sbin/grub-sparc64-setup
+usr/share/grub
+usr/share/grub/grub-mkconfig_lib
+#usr/share/info/grub-dev.info
 #usr/share/info/grub.info
-#usr/share/info/multiboot.info
-#usr/share/man/man1/mbchk.1
-#usr/share/man/man8/grub-install.8
-#usr/share/man/man8/grub-md5-crypt.8
-#usr/share/man/man8/grub-terminfo.8
-#usr/share/man/man8/grub.8
+#usr/share/locale/ast
+#usr/share/locale/ast/LC_MESSAGES
+#usr/share/locale/ast/LC_MESSAGES/grub.mo
+#usr/share/locale/ca/LC_MESSAGES/grub.mo
+#usr/share/locale/da/LC_MESSAGES/grub.mo
+#usr/share/locale/de/LC_MESSAGES/grub.mo
+#usr/share/locale/de@hebrew
+#usr/share/locale/de@hebrew/LC_MESSAGES
+#usr/share/locale/de@hebrew/LC_MESSAGES/grub.mo
+#usr/share/locale/de_CH
+#usr/share/locale/de_CH/LC_MESSAGES
+#usr/share/locale/de_CH/LC_MESSAGES/grub.mo
+#usr/share/locale/en@arabic
+#usr/share/locale/en@arabic/LC_MESSAGES
+#usr/share/locale/en@arabic/LC_MESSAGES/grub.mo
+#usr/share/locale/en@cyrillic
+#usr/share/locale/en@cyrillic/LC_MESSAGES
+#usr/share/locale/en@cyrillic/LC_MESSAGES/grub.mo
+#usr/share/locale/en@greek
+#usr/share/locale/en@greek/LC_MESSAGES
+#usr/share/locale/en@greek/LC_MESSAGES/grub.mo
+#usr/share/locale/en@hebrew
+#usr/share/locale/en@hebrew/LC_MESSAGES
+#usr/share/locale/en@hebrew/LC_MESSAGES/grub.mo
+#usr/share/locale/en@piglatin
+#usr/share/locale/en@piglatin/LC_MESSAGES
+#usr/share/locale/en@piglatin/LC_MESSAGES/grub.mo
+#usr/share/locale/en@quot/LC_MESSAGES/grub.mo
+#usr/share/locale/eo/LC_MESSAGES/grub.mo
+#usr/share/locale/fi/LC_MESSAGES/grub.mo
+#usr/share/locale/fr/LC_MESSAGES/grub.mo
+#usr/share/locale/hu/LC_MESSAGES/grub.mo
+#usr/share/locale/id/LC_MESSAGES/grub.mo
+#usr/share/locale/it/LC_MESSAGES/grub.mo
+#usr/share/locale/ja/LC_MESSAGES/grub.mo
+#usr/share/locale/nl/LC_MESSAGES/grub.mo
+#usr/share/locale/pa
+#usr/share/locale/pa/LC_MESSAGES
+#usr/share/locale/pa/LC_MESSAGES/grub.mo
+#usr/share/locale/pl/LC_MESSAGES/grub.mo
+#usr/share/locale/ru/LC_MESSAGES/grub.mo
+#usr/share/locale/sv/LC_MESSAGES/grub.mo
+#usr/share/locale/uk/LC_MESSAGES/grub.mo
+#usr/share/locale/vi/LC_MESSAGES/grub.mo
+#usr/share/locale/zh_CN/LC_MESSAGES/grub.mo
+#usr/share/locale/zh_TW/LC_MESSAGES/grub.mo
index 622886fd647f909dc2bb340b1ca5682642789a5e..d0bc8c5c20dfc0dfe53ceaaec6ab33fc9da60ee6 100644 (file)
@@ -46,7 +46,6 @@ etc/rc.d/init.d/ipsec
 etc/rc.d/init.d/leds
 etc/rc.d/init.d/localnet
 etc/rc.d/init.d/mISDN
-#etc/rc.d/init.d/mdadm
 #etc/rc.d/init.d/mediatomb
 #etc/rc.d/init.d/messagebus
 #etc/rc.d/init.d/miau
@@ -57,6 +56,7 @@ etc/rc.d/init.d/modules
 #etc/rc.d/init.d/motion
 etc/rc.d/init.d/mountfs
 etc/rc.d/init.d/mountkernfs
+etc/rc.d/init.d/mounttmpfs
 #etc/rc.d/init.d/mpd
 #etc/rc.d/init.d/mysql
 #etc/rc.d/init.d/netsnmpd
@@ -221,8 +221,11 @@ etc/rc.d/rcsysinit.d/S10udev
 etc/rc.d/rcsysinit.d/S19checkfstab
 etc/rc.d/rcsysinit.d/S19waitdrives
 etc/rc.d/rcsysinit.d/S20swap
+etc/rc.d/rcsysinit.d/S25partresize
 etc/rc.d/rcsysinit.d/S30checkfs
 etc/rc.d/rcsysinit.d/S40mountfs
+etc/rc.d/rcsysinit.d/S42fsresize
+etc/rc.d/rcsysinit.d/S43mounttmpfs
 etc/rc.d/rcsysinit.d/S45udev_retry
 etc/rc.d/rcsysinit.d/S50cleanfs
 etc/rc.d/rcsysinit.d/S60setclock
index 3f364aed55e54ad1ee68f0f475c1291b7bb1abc2..ff17a6268e7feb080684f4bde3401548fe4d238b 100644 (file)
@@ -1,8 +1,6 @@
 boot/System.map-KVER-ipfire
-boot/System.map-ipfire
 boot/config-KVER-ipfire
 boot/vmlinuz-KVER-ipfire
-boot/vmlinuz-ipfire
 etc/modprobe.d/framebuffer.conf
 etc/modprobe.d/ipv6.conf
 etc/modprobe.d/isdn.conf
@@ -17,7 +15,10 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/arch/x86/crypto/serpent-sse2-i586.ko
 #lib/modules/KVER-ipfire/kernel/arch/x86/crypto/twofish-i586.ko
 #lib/modules/KVER-ipfire/kernel/arch/x86/kernel
-#lib/modules/KVER-ipfire/kernel/arch/x86/kernel/microcode.ko
+#lib/modules/KVER-ipfire/kernel/arch/x86/kernel/cpu
+#lib/modules/KVER-ipfire/kernel/arch/x86/kernel/cpu/microcode
+#lib/modules/KVER-ipfire/kernel/arch/x86/kernel/cpu/microcode/microcode.ko
+#lib/modules/KVER-ipfire/kernel/arch/x86/kernel/iosf_mbi.ko
 #lib/modules/KVER-ipfire/kernel/arch/x86/kernel/test_nx.ko
 #lib/modules/KVER-ipfire/kernel/arch/x86/kvm
 #lib/modules/KVER-ipfire/kernel/arch/x86/kvm/kvm-amd.ko
@@ -62,6 +63,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/crypto/gcm.ko
 #lib/modules/KVER-ipfire/kernel/crypto/ghash-generic.ko
 #lib/modules/KVER-ipfire/kernel/crypto/khazad.ko
+#lib/modules/KVER-ipfire/kernel/crypto/lz4.ko
+#lib/modules/KVER-ipfire/kernel/crypto/lz4hc.ko
 #lib/modules/KVER-ipfire/kernel/crypto/lzo.ko
 #lib/modules/KVER-ipfire/kernel/crypto/md4.ko
 #lib/modules/KVER-ipfire/kernel/crypto/michael_mic.ko
@@ -88,7 +91,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/crypto/zlib.ko
 #lib/modules/KVER-ipfire/kernel/drivers
 #lib/modules/KVER-ipfire/kernel/drivers/acpi
-#lib/modules/KVER-ipfire/kernel/drivers/acpi/acpi_i2c.ko
+#lib/modules/KVER-ipfire/kernel/drivers/acpi/acpi_extlog.ko
 #lib/modules/KVER-ipfire/kernel/drivers/acpi/acpi_ipmi.ko
 #lib/modules/KVER-ipfire/kernel/drivers/acpi/acpi_pad.ko
 #lib/modules/KVER-ipfire/kernel/drivers/acpi/custom_method.ko
@@ -155,6 +158,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_nv.ko
 #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_promise.ko
 #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_qstor.ko
+#lib/modules/KVER-ipfire/kernel/drivers/ata/sata_rcar.ko
 #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_sil.ko
 #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_sil24.ko
 #lib/modules/KVER-ipfire/kernel/drivers/ata/sata_sis.ko
@@ -182,10 +186,11 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/base
 #lib/modules/KVER-ipfire/kernel/drivers/base/regmap
 #lib/modules/KVER-ipfire/kernel/drivers/base/regmap/regmap-i2c.ko
+#lib/modules/KVER-ipfire/kernel/drivers/bcma
+#lib/modules/KVER-ipfire/kernel/drivers/bcma/bcma.ko
 #lib/modules/KVER-ipfire/kernel/drivers/block
 #lib/modules/KVER-ipfire/kernel/drivers/block/DAC960.ko
 #lib/modules/KVER-ipfire/kernel/drivers/block/cciss.ko
-#lib/modules/KVER-ipfire/kernel/drivers/block/cpqarray.ko
 #lib/modules/KVER-ipfire/kernel/drivers/block/cryptoloop.ko
 #lib/modules/KVER-ipfire/kernel/drivers/block/floppy.ko
 #lib/modules/KVER-ipfire/kernel/drivers/block/mtip32xx
@@ -250,7 +255,6 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/gx-suspmod.ko
 #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/longhaul.ko
 #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/longrun.ko
-#lib/modules/KVER-ipfire/kernel/drivers/cpufreq/mperf.ko
 #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/p4-clockmod.ko
 #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/pcc-cpufreq.ko
 #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/powernow-k6.ko
@@ -260,6 +264,9 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/speedstep-lib.ko
 #lib/modules/KVER-ipfire/kernel/drivers/cpufreq/speedstep-smi.ko
 #lib/modules/KVER-ipfire/kernel/drivers/crypto
+#lib/modules/KVER-ipfire/kernel/drivers/crypto/ccp
+#lib/modules/KVER-ipfire/kernel/drivers/crypto/ccp/ccp-crypto.ko
+#lib/modules/KVER-ipfire/kernel/drivers/crypto/ccp/ccp.ko
 #lib/modules/KVER-ipfire/kernel/drivers/crypto/geode-aes.ko
 #lib/modules/KVER-ipfire/kernel/drivers/crypto/hifn_795x.ko
 #lib/modules/KVER-ipfire/kernel/drivers/crypto/padlock-aes.ko
@@ -267,7 +274,10 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/dca
 #lib/modules/KVER-ipfire/kernel/drivers/dca/dca.ko
 #lib/modules/KVER-ipfire/kernel/drivers/dma
-#lib/modules/KVER-ipfire/kernel/drivers/dma/dw_dmac.ko
+#lib/modules/KVER-ipfire/kernel/drivers/dma/dw
+#lib/modules/KVER-ipfire/kernel/drivers/dma/dw/dw_dmac.ko
+#lib/modules/KVER-ipfire/kernel/drivers/dma/dw/dw_dmac_core.ko
+#lib/modules/KVER-ipfire/kernel/drivers/dma/dw/dw_dmac_pci.ko
 #lib/modules/KVER-ipfire/kernel/drivers/dma/ioat
 #lib/modules/KVER-ipfire/kernel/drivers/dma/ioat/ioatdma.ko
 #lib/modules/KVER-ipfire/kernel/drivers/dma/pch_dma.ko
@@ -305,6 +315,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm
 #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/ast
 #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/ast/ast.ko
+#lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/bochs
+#lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/bochs/bochs-drm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/cirrus
 #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/cirrus/cirrus.ko
 #lib/modules/KVER-ipfire/kernel/drivers/gpu/drm/drm.ko
@@ -365,6 +377,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-kovaplus.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-lua.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-pyra.ko
+#lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-ryos.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat-savu.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-roccat.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hid/hid-saitek.ko
@@ -425,9 +438,11 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/fam15h_power.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/fschmd.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/g760a.ko
+#lib/modules/KVER-ipfire/kernel/drivers/hwmon/g762.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/gl518sm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/gl520sm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/hih6130.ko
+#lib/modules/KVER-ipfire/kernel/drivers/hwmon/htu21.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/hwmon-vid.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/i5k_amb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/ibmaem.ko
@@ -531,6 +546,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-parport.ko
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-pca-platform.ko
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-piix4.ko
+#lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-robotfuzz-osif.ko
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-scmi.ko
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-simtec.ko
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/i2c-sis5595.ko
@@ -543,7 +559,13 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/busses/scx200_acb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/i2c-core.ko
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/i2c-dev.ko
+#lib/modules/KVER-ipfire/kernel/drivers/i2c/i2c-mux.ko
 #lib/modules/KVER-ipfire/kernel/drivers/i2c/i2c-smbus.ko
+#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes
+#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes/i2c-mux-gpio.ko
+#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes/i2c-mux-pca9541.ko
+#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes/i2c-mux-pca954x.ko
+#lib/modules/KVER-ipfire/kernel/drivers/i2c/muxes/i2c-mux-pinctrl.ko
 #lib/modules/KVER-ipfire/kernel/drivers/iio
 #lib/modules/KVER-ipfire/kernel/drivers/iio/common
 #lib/modules/KVER-ipfire/kernel/drivers/iio/common/hid-sensors
@@ -563,6 +585,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/input/misc/ati_remote2.ko
 #lib/modules/KVER-ipfire/kernel/drivers/input/misc/atlas_btns.ko
 #lib/modules/KVER-ipfire/kernel/drivers/input/misc/cm109.ko
+#lib/modules/KVER-ipfire/kernel/drivers/input/misc/ideapad_slidebar.ko
 #lib/modules/KVER-ipfire/kernel/drivers/input/misc/keyspan_remote.ko
 #lib/modules/KVER-ipfire/kernel/drivers/input/misc/pcspkr.ko
 #lib/modules/KVER-ipfire/kernel/drivers/input/misc/powermate.ko
@@ -582,6 +605,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/input/serio
 #lib/modules/KVER-ipfire/kernel/drivers/input/serio/altera_ps2.ko
 #lib/modules/KVER-ipfire/kernel/drivers/input/serio/arc_ps2.ko
+#lib/modules/KVER-ipfire/kernel/drivers/input/serio/hyperv-keyboard.ko
 #lib/modules/KVER-ipfire/kernel/drivers/input/serio/serio_raw.ko
 #lib/modules/KVER-ipfire/kernel/drivers/input/sparse-keymap.ko
 #lib/modules/KVER-ipfire/kernel/drivers/isdn
@@ -652,11 +676,13 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp5523.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp5562.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp55xx-common.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp8501.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lt3593.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-ot200.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9532.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca955x.ko
-#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9633.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca963x.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9685.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-ss4200.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-tca6507.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/trigger
@@ -673,7 +699,6 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/md/bcache
 #lib/modules/KVER-ipfire/kernel/drivers/md/bcache/bcache.ko
 #lib/modules/KVER-ipfire/kernel/drivers/md/dm-bio-prison.ko
-#lib/modules/KVER-ipfire/kernel/drivers/md/dm-bufio.ko
 #lib/modules/KVER-ipfire/kernel/drivers/md/dm-cache-cleaner.ko
 #lib/modules/KVER-ipfire/kernel/drivers/md/dm-cache-mq.ko
 #lib/modules/KVER-ipfire/kernel/drivers/md/dm-cache.ko
@@ -684,6 +709,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/md/dm-raid.ko
 #lib/modules/KVER-ipfire/kernel/drivers/md/dm-round-robin.ko
 #lib/modules/KVER-ipfire/kernel/drivers/md/dm-service-time.ko
+#lib/modules/KVER-ipfire/kernel/drivers/md/dm-switch.ko
 #lib/modules/KVER-ipfire/kernel/drivers/md/dm-verity.ko
 #lib/modules/KVER-ipfire/kernel/drivers/md/faulty.ko
 #lib/modules/KVER-ipfire/kernel/drivers/md/linear.ko
@@ -724,6 +750,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24110.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24113.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24116.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24117.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cx24123.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/cxd2820r.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/dib0070.ko
@@ -738,6 +765,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/drxk.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/ds3000.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/dvb-pll.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/dvbsky_m88ds3103.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/ec100.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/isl6405.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/dvb-frontends/isl6421.ko
@@ -821,6 +849,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/mt9v011.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/ov7670.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa6588.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa6752hs.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa7110.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa7115.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/i2c/saa7127.ko
@@ -901,7 +930,6 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/pci/pt1
 #lib/modules/KVER-ipfire/kernel/drivers/media/pci/pt1/earth-pt1.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134
-#lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134/saa6752hs.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134/saa7134-alsa.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134/saa7134-dvb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/pci/saa7134/saa7134-empress.ko
@@ -932,12 +960,16 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/platform/marvell-ccic/cafe_ccic.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/platform/sh_veu.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera
+#lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/rcar_vin.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/sh_mobile_csi2.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/soc_camera.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/soc_camera_platform.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/soc_mediabus.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/platform/soc_camera/soc_scale_crop.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/platform/timblogiw.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/platform/vsp1
+#lib/modules/KVER-ipfire/kernel/drivers/media/platform/vsp1/vsp1.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/ati_remote.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/ene_ir.ko
@@ -978,6 +1010,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-budget-ci-old.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-cinergy-1400.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-cinergy.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-delock-61959.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-dib0700-nec.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-dib0700-rc5.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-digitalnow-tinytwin.ko
@@ -1040,6 +1073,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-reddo.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-snapstream-firefly.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-streamzap.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-su3000.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-tbs-nec.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-technisat-usb2.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/rc/keymaps/rc-terratec-cinergy-xs.ko
@@ -1072,6 +1106,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/fc0012.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/fc0013.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/fc2580.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/tuners/m88ts2022.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/max2165.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/mc44s803.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/tuners/mt2060.ko
@@ -1155,6 +1190,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx-alsa.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx-dvb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx-rc.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx-v4l.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/em28xx/em28xx.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gl860
@@ -1194,6 +1230,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_sq905c.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_sq930x.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_stk014.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_stk1135.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_stv0680.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_sunplus.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/gspca/gspca_t613.ko
@@ -1217,8 +1254,6 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/s2255/s2255drv.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/siano
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/siano/smsusb.ko
-#lib/modules/KVER-ipfire/kernel/drivers/media/usb/sn9c102
-#lib/modules/KVER-ipfire/kernel/drivers/media/usb/sn9c102/sn9c102.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/stk1160
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/stk1160/stk1160.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/stkwebcam
@@ -1234,6 +1269,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/ttusb-dec
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/ttusb-dec/ttusb_dec.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/ttusb-dec/ttusbdecfe.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/usb/usbtv
+#lib/modules/KVER-ipfire/kernel/drivers/media/usb/usbtv/usbtv.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/usbvision
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/usbvision/usbvision.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/usb/uvc
@@ -1243,7 +1280,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core
 #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/tuner.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/v4l2-common.ko
-#lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/v4l2-int-device.ko
+#lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/v4l2-dv-timings.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/v4l2-mem2mem.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/videobuf-core.ko
 #lib/modules/KVER-ipfire/kernel/drivers/media/v4l2-core/videobuf-dma-contig.ko
@@ -1258,6 +1295,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/memstick
 #lib/modules/KVER-ipfire/kernel/drivers/memstick/core
 #lib/modules/KVER-ipfire/kernel/drivers/memstick/core/memstick.ko
+#lib/modules/KVER-ipfire/kernel/drivers/memstick/core/ms_block.ko
 #lib/modules/KVER-ipfire/kernel/drivers/memstick/core/mspro_block.ko
 #lib/modules/KVER-ipfire/kernel/drivers/memstick/host
 #lib/modules/KVER-ipfire/kernel/drivers/memstick/host/jmb38x_ms.ko
@@ -1441,6 +1479,10 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/e1000e
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/i40e
+#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/i40e/i40e.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/i40evf
+#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/i40evf/i40evf.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/igb
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/igb/igb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/intel/igbvf
@@ -1494,6 +1536,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/realtek/8139too.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/realtek/atp.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/realtek/r8169.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/renesas
+#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/renesas/sh_eth.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/sfc
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/sfc/sfc.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/silan
@@ -1505,6 +1549,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/epic100.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/smc9194.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/smc91c92_cs.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/smsc911x.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/smsc/smsc9420.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/stmicro
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/stmicro/stmmac
@@ -1535,6 +1580,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/mdio.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/mii.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/netconsole.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/nlmon.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/phy
 #lib/modules/KVER-ipfire/kernel/drivers/net/phy/amd.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/phy/at803x.ko
@@ -1581,6 +1627,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/dm9601.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/gl620a.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/hso.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/usb/huawei_cdc_ncm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/int51x1.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/ipheth.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/kalmia.ko
@@ -1597,6 +1644,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/sierra_net.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/smsc75xx.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/smsc95xx.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/usb/sr9700.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/usb/sr9800.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/usbnet.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/usb/zaurus.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/veth.ko
@@ -1613,6 +1662,9 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ar5523
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ar5523/ar5523.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath10k
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath5k
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath9k
@@ -1622,6 +1674,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/carl9170
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/carl9170/carl9170.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/wcn36xx
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/wcn36xx/wcn36xx.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/wil6210
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ath/wil6210/wil6210.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/atmel.ko
@@ -1634,8 +1688,13 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmfmac
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmsmac
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmutil
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/cw1200
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/cw1200/cw1200_core.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/cw1200/cw1200_wlan_sdio.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/hostap
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/hostap/hostap.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/hostap/hostap_cs.ko
@@ -1690,6 +1749,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2500pci.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2500usb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2800lib.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2800mmio.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2800pci.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2800usb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rt2x00/rt2x00lib.ko
@@ -1718,6 +1778,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl8192se/rtl8192se.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl8723ae
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl8723ae/rtl8723ae.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtl_usb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ti
 #lib/modules/KVER-ipfire/kernel/drivers/net/wireless/ti/wl1251
@@ -1763,7 +1825,6 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/asus-laptop.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/asus-nb-wmi.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/asus-wmi.ko
-#lib/modules/KVER-ipfire/kernel/drivers/platform/x86/chromeos_laptop.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/classmate-laptop.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/compal-laptop.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/dell-laptop.ko
@@ -1776,6 +1837,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/hp-wmi.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/hp_accel.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/ideapad-laptop.ko
+#lib/modules/KVER-ipfire/kernel/drivers/platform/x86/intel-rst.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/intel_ips.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/intel_oaktrail.ko
 #lib/modules/KVER-ipfire/kernel/drivers/platform/x86/msi-laptop.ko
@@ -1815,12 +1877,15 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-fm3130.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-hid-sensor-time.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-isl12022.ko
+#lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-isl12057.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-isl1208.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-m41t80.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-m48t35.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-m48t59.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-max6900.ko
+#lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-moxart.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-msm6242.ko
+#lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-pcf2127.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-pcf8523.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-pcf8563.ko
 #lib/modules/KVER-ipfire/kernel/drivers/rtc/rtc-pcf8583.ko
@@ -1881,6 +1946,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/dpt_i2o.ko
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/dtc.ko
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/eata.ko
+#lib/modules/KVER-ipfire/kernel/drivers/scsi/esas2r
+#lib/modules/KVER-ipfire/kernel/drivers/scsi/esas2r/esas2r.ko
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/fcoe
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/fcoe/fcoe.ko
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/fcoe/libfcoe.ko
@@ -1977,6 +2044,9 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/staging/echo/echo.ko
 #lib/modules/KVER-ipfire/kernel/drivers/staging/et131x
 #lib/modules/KVER-ipfire/kernel/drivers/staging/et131x/et131x.ko
+#lib/modules/KVER-ipfire/kernel/drivers/staging/gdm724x
+#lib/modules/KVER-ipfire/kernel/drivers/staging/gdm724x/gdmtty.ko
+#lib/modules/KVER-ipfire/kernel/drivers/staging/gdm724x/gdmulte.ko
 #lib/modules/KVER-ipfire/kernel/drivers/staging/rts5139
 #lib/modules/KVER-ipfire/kernel/drivers/staging/rts5139/rts5139.ko
 #lib/modules/KVER-ipfire/kernel/drivers/staging/slicoss
@@ -1986,7 +2056,9 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/staging/usbip/usbip-host.ko
 #lib/modules/KVER-ipfire/kernel/drivers/staging/usbip/vhci-hcd.ko
 #lib/modules/KVER-ipfire/kernel/drivers/thermal
+#lib/modules/KVER-ipfire/kernel/drivers/thermal/int3403_thermal.ko
 #lib/modules/KVER-ipfire/kernel/drivers/thermal/intel_powerclamp.ko
+#lib/modules/KVER-ipfire/kernel/drivers/thermal/x86_pkg_temp_thermal.ko
 #lib/modules/KVER-ipfire/kernel/drivers/tty
 #lib/modules/KVER-ipfire/kernel/drivers/tty/cyclades.ko
 #lib/modules/KVER-ipfire/kernel/drivers/tty/n_gsm.ko
@@ -1998,6 +2070,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/8250
 #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/8250/8250_dw.ko
 #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/arc_uart.ko
+#lib/modules/KVER-ipfire/kernel/drivers/tty/serial/fsl_lpuart.ko
 #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/jsm
 #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/jsm/jsm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/tty/serial/rp2.ko
@@ -2018,20 +2091,20 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/usb/atm/usbatm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/atm/xusbatm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea
-#lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci13xxx_msm.ko
-#lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci13xxx_pci.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci_hdrc.ko
+#lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci_hdrc_msm.ko
+#lib/modules/KVER-ipfire/kernel/drivers/usb/chipidea/ci_hdrc_pci.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/class
 #lib/modules/KVER-ipfire/kernel/drivers/usb/class/cdc-acm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/class/cdc-wdm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/class/usblp.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/class/usbtmc.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3
-#lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3-exynos.ko
-#lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3-omap.ko
+#lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3-keystone.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3-pci.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/dwc3/dwc3.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/host
+#lib/modules/KVER-ipfire/kernel/drivers/usb/host/bcma-hcd.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/host/hwa-hc.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/host/isp1362-hcd.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/host/sl811-hcd.ko
@@ -2043,6 +2116,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/usb/image/microtek.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/misc
 #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/adutux.ko
+#lib/modules/KVER-ipfire/kernel/drivers/usb/misc/ehset.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/emi26.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/emi62.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/ezusb.ko
@@ -2058,6 +2132,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/usb/misc/yurex.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/mon
 #lib/modules/KVER-ipfire/kernel/drivers/usb/mon/usbmon.ko
+#lib/modules/KVER-ipfire/kernel/drivers/usb/phy
+#lib/modules/KVER-ipfire/kernel/drivers/usb/phy/phy-fsm-usb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/aircable.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/ark3116.ko
@@ -2068,7 +2144,6 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/digi_acceleport.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/f81232.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/ftdi_sio.ko
-#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/funsoft.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/io_edgeport.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/io_ti.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/ipaq.ko
@@ -2080,17 +2155,17 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/mct_u232.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/mos7720.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/mos7840.ko
-#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/moto_modem.ko
+#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/mxuport.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/option.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/oti6858.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/pl2303.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/qcaux.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/qcserial.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/quatech2.ko
-#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/siemens_mpi.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/sierra.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/spcp8x5.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/ssu100.ko
+#lib/modules/KVER-ipfire/kernel/drivers/usb/serial/usb-serial-simple.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/usb_wwan.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/usbserial.ko
 #lib/modules/KVER-ipfire/kernel/drivers/usb/serial/visor.ko
@@ -2125,6 +2200,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/uwb/whc-rc.ko
 #lib/modules/KVER-ipfire/kernel/drivers/uwb/whci.ko
 #lib/modules/KVER-ipfire/kernel/drivers/vhost
+#lib/modules/KVER-ipfire/kernel/drivers/vhost/vhost.ko
 #lib/modules/KVER-ipfire/kernel/drivers/vhost/vhost_net.ko
 #lib/modules/KVER-ipfire/kernel/drivers/vhost/vringh.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video
@@ -2158,6 +2234,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/video/matrox/matroxfb_base.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video/matrox/matroxfb_misc.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video/neofb.ko
+#lib/modules/KVER-ipfire/kernel/drivers/video/ocfb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video/output.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video/pm2fb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video/pm3fb.ko
@@ -2210,6 +2287,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/alim1535_wdt.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/alim7101_wdt.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/cpu5wdt.ko
+#lib/modules/KVER-ipfire/kernel/drivers/watchdog/dw_wdt.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/eurotechwdt.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/f71808e_wdt.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/geodewdt.ko
@@ -2223,6 +2301,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/it8712f_wdt.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/it87_wdt.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/machzwd.ko
+#lib/modules/KVER-ipfire/kernel/drivers/watchdog/mena21_wdt.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/nv_tco.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/pc87413_wdt.ko
 #lib/modules/KVER-ipfire/kernel/drivers/watchdog/pcwd_pci.ko
@@ -2354,6 +2433,9 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/lib/crc7.ko
 #lib/modules/KVER-ipfire/kernel/lib/crc8.ko
 #lib/modules/KVER-ipfire/kernel/lib/libcrc32c.ko
+#lib/modules/KVER-ipfire/kernel/lib/lz4
+#lib/modules/KVER-ipfire/kernel/lib/lz4/lz4_compress.ko
+#lib/modules/KVER-ipfire/kernel/lib/lz4/lz4hc_compress.ko
 #lib/modules/KVER-ipfire/kernel/lib/mpi
 #lib/modules/KVER-ipfire/kernel/lib/mpi/mpi.ko
 #lib/modules/KVER-ipfire/kernel/lib/oid_registry.ko
@@ -2363,8 +2445,6 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/lib/ts_bm.ko
 #lib/modules/KVER-ipfire/kernel/lib/ts_fsm.ko
 #lib/modules/KVER-ipfire/kernel/lib/ts_kmp.ko
-#lib/modules/KVER-ipfire/kernel/lib/zlib_deflate
-#lib/modules/KVER-ipfire/kernel/lib/zlib_deflate/zlib_deflate.ko
 #lib/modules/KVER-ipfire/kernel/net
 #lib/modules/KVER-ipfire/kernel/net/802
 #lib/modules/KVER-ipfire/kernel/net/802/garp.ko
@@ -2410,8 +2490,13 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/bridge/netfilter/ebtable_filter.ko
 #lib/modules/KVER-ipfire/kernel/net/bridge/netfilter/ebtable_nat.ko
 #lib/modules/KVER-ipfire/kernel/net/bridge/netfilter/ebtables.ko
+#lib/modules/KVER-ipfire/kernel/net/bridge/netfilter/nf_tables_bridge.ko
 #lib/modules/KVER-ipfire/kernel/net/core
 #lib/modules/KVER-ipfire/kernel/net/core/netprio_cgroup.ko
+#lib/modules/KVER-ipfire/kernel/net/hsr
+#lib/modules/KVER-ipfire/kernel/net/hsr/hsr.ko
+#lib/modules/KVER-ipfire/kernel/net/ieee802154
+#lib/modules/KVER-ipfire/kernel/net/ieee802154/6lowpan_iphc.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4
 #lib/modules/KVER-ipfire/kernel/net/ipv4/ah4.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/esp4.ko
@@ -2430,6 +2515,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_ECN.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_MASQUERADE.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_REJECT.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_SYNPROXY.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_ah.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/ipt_rpfilter.ko
@@ -2443,6 +2529,11 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_nat_pptp.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_nat_proto_gre.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_nat_snmp_basic.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_tables_arp.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nf_tables_ipv4.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nft_chain_nat_ipv4.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nft_chain_route_ipv4.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv4/netfilter/nft_reject_ipv4.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/tcp_bic.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/tcp_diag.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv4/tcp_highspeed.ko
@@ -2466,12 +2557,14 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/ipv6/esp6.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/ip6_gre.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/ip6_tunnel.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv6/ip6_vti.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/ipcomp6.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/mip6.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_MASQUERADE.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_NPT.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_REJECT.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_SYNPROXY.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_ah.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_eui64.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6t_frag.ko
@@ -2486,6 +2579,10 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6table_raw.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/ip6table_security.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nf_nat_ipv6.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nf_tables_ipv6.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nft_chain_nat_ipv6.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nft_chain_route_ipv6.ko
+#lib/modules/KVER-ipfire/kernel/net/ipv6/netfilter/nft_reject_ipv6.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/sit.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/tunnel6.ko
 #lib/modules/KVER-ipfire/kernel/net/ipv6/xfrm6_mode_beet.ko
@@ -2516,7 +2613,9 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_ipportnet.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_net.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_netiface.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_netnet.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_netport.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_hash_netportnet.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/ipset/ip_set_list_set.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/ipvs
 #lib/modules/KVER-ipfire/kernel/net/netfilter/ipvs/ip_vs.ko
@@ -2557,13 +2656,28 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/netfilter/nf_nat_proto_udplite.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/nf_nat_sip.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/nf_nat_tftp.ko
-#lib/modules/KVER-ipfire/kernel/net/netfilter/nf_tproxy_core.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nf_synproxy_core.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nf_tables.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nf_tables_inet.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_acct.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_cthelper.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_cttimeout.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_log.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/nfnetlink_queue.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_compat.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_counter.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_ct.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_exthdr.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_hash.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_limit.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_log.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_meta.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_nat.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_queue.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_rbtree.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_reject.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/nft_reject_inet.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_AUDIT.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_CHECKSUM.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_CLASSIFY.ko
@@ -2589,6 +2703,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_TRACE.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_addrtype.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_bpf.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_cgroup.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_cluster.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_comment.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_connbytes.ko
@@ -2605,7 +2720,9 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_hashlimit.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_helper.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_hl.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_ipcomp.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_iprange.ko
+#lib/modules/KVER-ipfire/kernel/net/netfilter/xt_l2tp.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_layer7.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_length.ko
 #lib/modules/KVER-ipfire/kernel/net/netfilter/xt_limit.ko
@@ -2650,6 +2767,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/sched/act_simple.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/act_skbedit.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/cls_basic.ko
+#lib/modules/KVER-ipfire/kernel/net/sched/cls_bpf.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/cls_cgroup.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/cls_flow.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/cls_fw.ko
@@ -2670,9 +2788,11 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/net/sched/sch_codel.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/sch_drr.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/sch_dsmark.ko
+#lib/modules/KVER-ipfire/kernel/net/sched/sch_fq.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/sch_fq_codel.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/sch_gred.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/sch_hfsc.ko
+#lib/modules/KVER-ipfire/kernel/net/sched/sch_hhf.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/sch_htb.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/sch_ingress.ko
 #lib/modules/KVER-ipfire/kernel/net/sched/sch_mqprio.ko
@@ -2725,7 +2845,6 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/sound/core/seq/snd-seq.ko
 #lib/modules/KVER-ipfire/kernel/sound/core/snd-hrtimer.ko
 #lib/modules/KVER-ipfire/kernel/sound/core/snd-hwdep.ko
-#lib/modules/KVER-ipfire/kernel/sound/core/snd-page-alloc.ko
 #lib/modules/KVER-ipfire/kernel/sound/core/snd-pcm.ko
 #lib/modules/KVER-ipfire/kernel/sound/core/snd-rawmidi.ko
 #lib/modules/KVER-ipfire/kernel/sound/core/snd-timer.ko
@@ -2752,6 +2871,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/sound/drivers/vx
 #lib/modules/KVER-ipfire/kernel/sound/drivers/vx/snd-vx-lib.ko
 #lib/modules/KVER-ipfire/kernel/sound/firewire
+#lib/modules/KVER-ipfire/kernel/sound/firewire/snd-dice.ko
 #lib/modules/KVER-ipfire/kernel/sound/firewire/snd-firewire-lib.ko
 #lib/modules/KVER-ipfire/kernel/sound/firewire/snd-firewire-speakers.ko
 #lib/modules/KVER-ipfire/kernel/sound/i2c
@@ -2760,7 +2880,6 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/sound/i2c/other/snd-ak4114.ko
 #lib/modules/KVER-ipfire/kernel/sound/i2c/other/snd-ak4xxx-adda.ko
 #lib/modules/KVER-ipfire/kernel/sound/i2c/other/snd-pt2258.ko
-#lib/modules/KVER-ipfire/kernel/sound/i2c/other/snd-tea575x-tuner.ko
 #lib/modules/KVER-ipfire/kernel/sound/i2c/snd-cs8427.ko
 #lib/modules/KVER-ipfire/kernel/sound/i2c/snd-i2c.ko
 #lib/modules/KVER-ipfire/kernel/sound/i2c/snd-tea6330t.ko
@@ -2862,6 +2981,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-cirrus.ko
 #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-cmedia.ko
 #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-conexant.ko
+#lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-generic.ko
 #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-hdmi.ko
 #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-idt.ko
 #lib/modules/KVER-ipfire/kernel/sound/pci/hda/snd-hda-codec-realtek.ko
@@ -2934,6 +3054,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/sound/usb/6fire/snd-usb-6fire.ko
 #lib/modules/KVER-ipfire/kernel/sound/usb/caiaq
 #lib/modules/KVER-ipfire/kernel/sound/usb/caiaq/snd-usb-caiaq.ko
+#lib/modules/KVER-ipfire/kernel/sound/usb/hiface
+#lib/modules/KVER-ipfire/kernel/sound/usb/hiface/snd-usb-hiface.ko
 #lib/modules/KVER-ipfire/kernel/sound/usb/misc
 #lib/modules/KVER-ipfire/kernel/sound/usb/misc/snd-ua101.ko
 #lib/modules/KVER-ipfire/kernel/sound/usb/snd-usb-audio.ko
@@ -2954,4 +3076,4 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/modules.symbols.bin
 #lib/modules/KVER-ipfire/source
 sbin/gen_init_cpio
-boot/ipfirerd-KVER.img
+boot/initramfs-KVER-ipfire.img
index deaa97f4019b3ee57d104c21913a7a194b56853d..804a61043068f17b04036f827b817a2664e9fa22 100644 (file)
 #usr/include/drm/i810_drm.h
 #usr/include/drm/i915_drm.h
 #usr/include/drm/mga_drm.h
+#usr/include/drm/msm_drm.h
 #usr/include/drm/nouveau_drm.h
 #usr/include/drm/qxl_drm.h
 #usr/include/drm/r128_drm.h
 #usr/include/linux/ax25.h
 #usr/include/linux/b1lli.h
 #usr/include/linux/baycom.h
+#usr/include/linux/bcm933xx_hcs.h
 #usr/include/linux/bfs_fs.h
 #usr/include/linux/binfmts.h
 #usr/include/linux/blkpg.h
 #usr/include/linux/kvm.h
 #usr/include/linux/kvm_para.h
 #usr/include/linux/l2tp.h
+#usr/include/linux/libc-compat.h
 #usr/include/linux/limits.h
 #usr/include/linux/llc.h
 #usr/include/linux/loop.h
 #usr/include/linux/mei.h
 #usr/include/linux/mempolicy.h
 #usr/include/linux/meye.h
+#usr/include/linux/mic_common.h
+#usr/include/linux/mic_ioctl.h
 #usr/include/linux/mii.h
 #usr/include/linux/minix_fs.h
 #usr/include/linux/mman.h
 #usr/include/linux/netfilter/nf_conntrack_tcp.h
 #usr/include/linux/netfilter/nf_conntrack_tuple_common.h
 #usr/include/linux/netfilter/nf_nat.h
+#usr/include/linux/netfilter/nf_tables.h
+#usr/include/linux/netfilter/nf_tables_compat.h
 #usr/include/linux/netfilter/nfnetlink.h
 #usr/include/linux/netfilter/nfnetlink_acct.h
 #usr/include/linux/netfilter/nfnetlink_compat.h
 #usr/include/linux/netfilter/xt_CONNSECMARK.h
 #usr/include/linux/netfilter/xt_CT.h
 #usr/include/linux/netfilter/xt_DSCP.h
+#usr/include/linux/netfilter/xt_HMARK.h
 #usr/include/linux/netfilter/xt_IDLETIMER.h
 #usr/include/linux/netfilter/xt_LED.h
 #usr/include/linux/netfilter/xt_LOG.h
 #usr/include/linux/netfilter/xt_TPROXY.h
 #usr/include/linux/netfilter/xt_addrtype.h
 #usr/include/linux/netfilter/xt_bpf.h
+#usr/include/linux/netfilter/xt_cgroup.h
 #usr/include/linux/netfilter/xt_cluster.h
 #usr/include/linux/netfilter/xt_comment.h
 #usr/include/linux/netfilter/xt_connbytes.h
 #usr/include/linux/netfilter/xt_esp.h
 #usr/include/linux/netfilter/xt_hashlimit.h
 #usr/include/linux/netfilter/xt_helper.h
+#usr/include/linux/netfilter/xt_ipcomp.h
 #usr/include/linux/netfilter/xt_iprange.h
 #usr/include/linux/netfilter/xt_ipvs.h
+#usr/include/linux/netfilter/xt_l2tp.h
 #usr/include/linux/netfilter/xt_layer7.h
 #usr/include/linux/netfilter/xt_length.h
 #usr/include/linux/netfilter/xt_limit.h
 #usr/include/linux/netfilter/xt_rateest.h
 #usr/include/linux/netfilter/xt_realm.h
 #usr/include/linux/netfilter/xt_recent.h
+#usr/include/linux/netfilter/xt_rpfilter.h
 #usr/include/linux/netfilter/xt_sctp.h
 #usr/include/linux/netfilter/xt_set.h
 #usr/include/linux/netfilter/xt_socket.h
 #usr/include/linux/nfsd/stats.h
 #usr/include/linux/nl80211.h
 #usr/include/linux/nubus.h
+#usr/include/linux/nvme.h
 #usr/include/linux/nvram.h
 #usr/include/linux/omap3isp.h
 #usr/include/linux/omapfb.h
 #usr/include/linux/taskstats.h
 #usr/include/linux/tc_act
 #usr/include/linux/tc_act/tc_csum.h
+#usr/include/linux/tc_act/tc_defact.h
 #usr/include/linux/tc_act/tc_gact.h
 #usr/include/linux/tc_act/tc_ipt.h
 #usr/include/linux/tc_act/tc_mirred.h
 #usr/include/linux/x25.h
 #usr/include/linux/xattr.h
 #usr/include/linux/xfrm.h
+#usr/include/linux/zorro.h
+#usr/include/linux/zorro_ids.h
 #usr/include/mtd
 #usr/include/mtd/inftl-user.h
 #usr/include/mtd/mtd-abi.h
 #usr/include/sound/compress_offload.h
 #usr/include/sound/compress_params.h
 #usr/include/sound/emu10k1.h
+#usr/include/sound/firewire.h
 #usr/include/sound/hdsp.h
 #usr/include/sound/hdspm.h
 #usr/include/sound/sb16_csp.h
 #usr/include/video/uvesafb.h
 #usr/include/xen
 #usr/include/xen/evtchn.h
+#usr/include/xen/gntalloc.h
+#usr/include/xen/gntdev.h
 #usr/include/xen/privcmd.h
diff --git a/config/rootfiles/common/i586/linux-initrd b/config/rootfiles/common/i586/linux-initrd
new file mode 100644 (file)
index 0000000..5679550
--- /dev/null
@@ -0,0 +1 @@
+#boot/initramfs-KVER-ipfire.img
diff --git a/config/rootfiles/common/i586/linux-initrd-pae b/config/rootfiles/common/i586/linux-initrd-pae
new file mode 100644 (file)
index 0000000..083efc2
--- /dev/null
@@ -0,0 +1 @@
+#boot/initramfs-KVER-ipfire-pae.img
index 6f31cf6a8381f7d28e924a344c6f44118a7f01d7..34c87f27694e6a69727a65ae40588d53c9368cc1 100644 (file)
@@ -73,7 +73,7 @@ usr/bin/renice
 #usr/bin/script
 #usr/bin/scriptreplay
 #usr/bin/setarch
-#usr/bin/setsid
+usr/bin/setsid
 #usr/bin/setterm
 #usr/bin/tailf
 #usr/bin/taskset
diff --git a/config/rootfiles/common/installer b/config/rootfiles/common/installer
new file mode 100644 (file)
index 0000000..a0cb093
--- /dev/null
@@ -0,0 +1,39 @@
+#usr/bin/downloadsource.sh
+#usr/bin/execute-postinstall.sh
+#usr/bin/start-networking.sh
+#usr/bin/installer
+#usr/lib/dracut/modules.d/99installer
+#usr/lib/dracut/modules.d/99installer/70-dhcpcd.exe
+#usr/lib/dracut/modules.d/99installer/fake-root.sh
+#usr/lib/dracut/modules.d/99installer/module-setup.sh
+#usr/lib/dracut/modules.d/99installer/run-installer.sh
+#usr/share/locale/ar/LC_MESSAGES/installer.mo
+#usr/share/locale/ca/LC_MESSAGES/installer.mo
+#usr/share/locale/cs_CZ/LC_MESSAGES/installer.mo
+#usr/share/locale/da/LC_MESSAGES/installer.mo
+#usr/share/locale/de/LC_MESSAGES/installer.mo
+#usr/share/locale/el_GR/LC_MESSAGES/installer.mo
+#usr/share/locale/es/LC_MESSAGES/installer.mo
+#usr/share/locale/fa/LC_MESSAGES/installer.mo
+#usr/share/locale/fr/LC_MESSAGES/installer.mo
+#usr/share/locale/hu/LC_MESSAGES/installer.mo
+#usr/share/locale/id/LC_MESSAGES/installer.mo
+#usr/share/locale/it/LC_MESSAGES/installer.mo
+#usr/share/locale/ja/LC_MESSAGES/installer.mo
+#usr/share/locale/km_KH/LC_MESSAGES/installer.mo
+#usr/share/locale/nl/LC_MESSAGES/installer.mo
+#usr/share/locale/pl/LC_MESSAGES/installer.mo
+#usr/share/locale/pt_BR/LC_MESSAGES/installer.mo
+#usr/share/locale/pt_PT/LC_MESSAGES/installer.mo
+#usr/share/locale/ro_RO/LC_MESSAGES/installer.mo
+#usr/share/locale/ru/LC_MESSAGES/installer.mo
+#usr/share/locale/sk/LC_MESSAGES/installer.mo
+#usr/share/locale/sq/LC_MESSAGES/installer.mo
+#usr/share/locale/sv/LC_MESSAGES/installer.mo
+#usr/share/locale/th/LC_MESSAGES/installer.mo
+#usr/share/locale/tk/LC_MESSAGES/installer.mo
+#usr/share/locale/tr/LC_MESSAGES/installer.mo
+#usr/share/locale/uk/LC_MESSAGES/installer.mo
+#usr/share/locale/uz@Latn/LC_MESSAGES/installer.mo
+#usr/share/locale/vi/LC_MESSAGES/installer.mo
+#usr/share/locale/zh/LC_MESSAGES/installer.mo
index 90e23652886994cd447a6a62db78dc735d383998..f490c89f6b5d17a5290a7e3bc7b26f7d423302ff 100644 (file)
@@ -9,7 +9,6 @@ sbin/getcap
 sbin/getpcaps
 sbin/setcap
 #usr/include/sys/capability.h
-usr/lib/libnewt.so.0.51
 #usr/share/man/man1/capsh.1
 #usr/share/man/man3/cap_clear.3
 #usr/share/man/man3/cap_clear_flag.3
diff --git a/config/rootfiles/common/libsmooth b/config/rootfiles/common/libsmooth
new file mode 100644 (file)
index 0000000..8064831
--- /dev/null
@@ -0,0 +1,6 @@
+#usr/include/libsmooth.h
+#usr/lib/libsmooth.la
+#usr/lib/libsmooth.so
+usr/lib/libsmooth.so.1
+usr/lib/libsmooth.so.1.0.0
+#usr/lib/pkgconfig/libsmooth.pc
diff --git a/config/rootfiles/common/lvm2 b/config/rootfiles/common/lvm2
new file mode 100644 (file)
index 0000000..8ccafc7
--- /dev/null
@@ -0,0 +1,103 @@
+#etc/lvm
+#etc/lvm/lvm.conf
+#usr/include/libdevmapper.h
+#usr/lib/libdevmapper.so
+usr/lib/libdevmapper.so.1.02
+#usr/lib/pkgconfig/devmapper.pc
+#usr/sbin/dmsetup
+#usr/sbin/fsadm
+#usr/sbin/lvchange
+#usr/sbin/lvconvert
+#usr/sbin/lvcreate
+#usr/sbin/lvdisplay
+#usr/sbin/lvextend
+#usr/sbin/lvm
+#usr/sbin/lvmchange
+#usr/sbin/lvmconf
+#usr/sbin/lvmdiskscan
+#usr/sbin/lvmdump
+#usr/sbin/lvmsadc
+#usr/sbin/lvmsar
+#usr/sbin/lvreduce
+#usr/sbin/lvremove
+#usr/sbin/lvrename
+#usr/sbin/lvresize
+#usr/sbin/lvs
+#usr/sbin/lvscan
+#usr/sbin/pvchange
+#usr/sbin/pvck
+#usr/sbin/pvcreate
+#usr/sbin/pvdisplay
+#usr/sbin/pvmove
+#usr/sbin/pvremove
+#usr/sbin/pvresize
+#usr/sbin/pvs
+#usr/sbin/pvscan
+#usr/sbin/vgcfgbackup
+#usr/sbin/vgcfgrestore
+#usr/sbin/vgchange
+#usr/sbin/vgck
+#usr/sbin/vgconvert
+#usr/sbin/vgcreate
+#usr/sbin/vgdisplay
+#usr/sbin/vgexport
+#usr/sbin/vgextend
+#usr/sbin/vgimport
+#usr/sbin/vgimportclone
+#usr/sbin/vgmerge
+#usr/sbin/vgmknodes
+#usr/sbin/vgreduce
+#usr/sbin/vgremove
+#usr/sbin/vgrename
+#usr/sbin/vgs
+#usr/sbin/vgscan
+#usr/sbin/vgsplit
+#usr/share/man/man5/lvm.conf.5
+#usr/share/man/man8/dmsetup.8
+#usr/share/man/man8/fsadm.8
+#usr/share/man/man8/lvchange.8
+#usr/share/man/man8/lvconvert.8
+#usr/share/man/man8/lvcreate.8
+#usr/share/man/man8/lvdisplay.8
+#usr/share/man/man8/lvextend.8
+#usr/share/man/man8/lvm.8
+#usr/share/man/man8/lvmchange.8
+#usr/share/man/man8/lvmconf.8
+#usr/share/man/man8/lvmdiskscan.8
+#usr/share/man/man8/lvmdump.8
+#usr/share/man/man8/lvmsadc.8
+#usr/share/man/man8/lvmsar.8
+#usr/share/man/man8/lvreduce.8
+#usr/share/man/man8/lvremove.8
+#usr/share/man/man8/lvrename.8
+#usr/share/man/man8/lvresize.8
+#usr/share/man/man8/lvs.8
+#usr/share/man/man8/lvscan.8
+#usr/share/man/man8/pvchange.8
+#usr/share/man/man8/pvck.8
+#usr/share/man/man8/pvcreate.8
+#usr/share/man/man8/pvdisplay.8
+#usr/share/man/man8/pvmove.8
+#usr/share/man/man8/pvremove.8
+#usr/share/man/man8/pvresize.8
+#usr/share/man/man8/pvs.8
+#usr/share/man/man8/pvscan.8
+#usr/share/man/man8/vgcfgbackup.8
+#usr/share/man/man8/vgcfgrestore.8
+#usr/share/man/man8/vgchange.8
+#usr/share/man/man8/vgck.8
+#usr/share/man/man8/vgconvert.8
+#usr/share/man/man8/vgcreate.8
+#usr/share/man/man8/vgdisplay.8
+#usr/share/man/man8/vgexport.8
+#usr/share/man/man8/vgextend.8
+#usr/share/man/man8/vgimport.8
+#usr/share/man/man8/vgimportclone.8
+#usr/share/man/man8/vgmerge.8
+#usr/share/man/man8/vgmknodes.8
+#usr/share/man/man8/vgreduce.8
+#usr/share/man/man8/vgremove.8
+#usr/share/man/man8/vgrename.8
+#usr/share/man/man8/vgs.8
+#usr/share/man/man8/vgscan.8
+#usr/share/man/man8/vgsplit.8
similarity index 55%
rename from config/rootfiles/packages/mdadm
rename to config/rootfiles/common/mdadm
index d593cac2541167f8574c68e5793b7df364cf8b82..00d38a8c864ca35cf98458a25548a7ea1dff1950 100644 (file)
@@ -1,12 +1,9 @@
-etc/rc.d/rc0.d/S85mdadm
-etc/rc.d/rc6.d/S75mdadm
-etc/rc.d/rcsysinit.d/S11mdadm
-lib/udev/rules.d/64-md-raid.rules
+lib/udev/rules.d/63-md-raid-arrays.rules
+lib/udev/rules.d/64-md-raid-assembly.rules
 sbin/mdadm
 sbin/mdmon
 #usr/share/man/man4/md.4
 #usr/share/man/man5/mdadm.conf.5
 #usr/share/man/man8/mdadm.8
 #usr/share/man/man8/mdmon.8
-etc/rc.d/init.d/mdadm
 srv/web/ipfire/cgi-bin/mdstat.cgi
diff --git a/config/rootfiles/common/mktemp b/config/rootfiles/common/mktemp
deleted file mode 100644 (file)
index e6328ab..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-usr/bin/mktemp
-#usr/bin/tempfile
-#usr/man/man1/mktemp.1
diff --git a/config/rootfiles/common/multipath-tools b/config/rootfiles/common/multipath-tools
new file mode 100644 (file)
index 0000000..b889621
--- /dev/null
@@ -0,0 +1,4 @@
+#etc/udev/rules.d/kpartx.rules
+#lib/udev/kpartx_id
+#sbin/kpartx
+#usr/share/man/man8/kpartx.8.gz
index 08fb2ce0c4ae45f1eba192b816b9153145bb5d8d..2fbd2b34c87623ab9b6aceaea7c9af854743f5b1 100644 (file)
@@ -1,8 +1,147 @@
 usr/bin/whiptail
 #usr/include/newt.h
 #usr/lib/libnewt.a
-usr/lib/libnewt.so
-usr/lib/libnewt.so.0.51
-usr/lib/libnewt.so.0.51.6
-#usr/lib/python2.7/site-packages/_snackmodule.so
+#usr/lib/libnewt.so
+usr/lib/libnewt.so.0.52
+usr/lib/libnewt.so.0.52.17
+#usr/lib/pkgconfig/libnewt.pc
+#usr/lib/python2.7/site-packages/_snack.so
 #usr/lib/python2.7/site-packages/snack.py
+#usr/share/locale/ar
+#usr/share/locale/ar/LC_MESSAGES
+#usr/share/locale/ar/LC_MESSAGES/newt.mo
+#usr/share/locale/as
+#usr/share/locale/as/LC_MESSAGES
+#usr/share/locale/as/LC_MESSAGES/newt.mo
+#usr/share/locale/ast
+#usr/share/locale/ast/LC_MESSAGES
+#usr/share/locale/ast/LC_MESSAGES/newt.mo
+#usr/share/locale/bal
+#usr/share/locale/bal/LC_MESSAGES
+#usr/share/locale/bal/LC_MESSAGES/newt.mo
+#usr/share/locale/bg/LC_MESSAGES/newt.mo
+#usr/share/locale/bn
+#usr/share/locale/bn/LC_MESSAGES
+#usr/share/locale/bn/LC_MESSAGES/newt.mo
+#usr/share/locale/bn_IN
+#usr/share/locale/bn_IN/LC_MESSAGES
+#usr/share/locale/bn_IN/LC_MESSAGES/newt.mo
+#usr/share/locale/bs/LC_MESSAGES/newt.mo
+#usr/share/locale/ca/LC_MESSAGES/newt.mo
+#usr/share/locale/cs/LC_MESSAGES/newt.mo
+#usr/share/locale/cy
+#usr/share/locale/cy/LC_MESSAGES
+#usr/share/locale/cy/LC_MESSAGES/newt.mo
+#usr/share/locale/da/LC_MESSAGES/newt.mo
+#usr/share/locale/de/LC_MESSAGES/newt.mo
+#usr/share/locale/dz
+#usr/share/locale/dz/LC_MESSAGES
+#usr/share/locale/dz/LC_MESSAGES/newt.mo
+#usr/share/locale/el/LC_MESSAGES/newt.mo
+#usr/share/locale/eo/LC_MESSAGES/newt.mo
+#usr/share/locale/es/LC_MESSAGES/newt.mo
+#usr/share/locale/et/LC_MESSAGES/newt.mo
+#usr/share/locale/eu/LC_MESSAGES/newt.mo
+#usr/share/locale/fa
+#usr/share/locale/fa/LC_MESSAGES
+#usr/share/locale/fa/LC_MESSAGES/newt.mo
+#usr/share/locale/fi/LC_MESSAGES/newt.mo
+#usr/share/locale/fr/LC_MESSAGES/newt.mo
+#usr/share/locale/ga/LC_MESSAGES/newt.mo
+#usr/share/locale/gl/LC_MESSAGES/newt.mo
+#usr/share/locale/gu
+#usr/share/locale/gu/LC_MESSAGES
+#usr/share/locale/gu/LC_MESSAGES/newt.mo
+#usr/share/locale/he
+#usr/share/locale/he/LC_MESSAGES
+#usr/share/locale/he/LC_MESSAGES/newt.mo
+#usr/share/locale/hi
+#usr/share/locale/hi/LC_MESSAGES
+#usr/share/locale/hi/LC_MESSAGES/newt.mo
+#usr/share/locale/hr/LC_MESSAGES/newt.mo
+#usr/share/locale/hu/LC_MESSAGES/newt.mo
+#usr/share/locale/ia/LC_MESSAGES/newt.mo
+#usr/share/locale/id/LC_MESSAGES/newt.mo
+#usr/share/locale/it/LC_MESSAGES/newt.mo
+#usr/share/locale/ja/LC_MESSAGES/newt.mo
+#usr/share/locale/km
+#usr/share/locale/km/LC_MESSAGES
+#usr/share/locale/km/LC_MESSAGES/newt.mo
+#usr/share/locale/kn
+#usr/share/locale/kn/LC_MESSAGES
+#usr/share/locale/kn/LC_MESSAGES/newt.mo
+#usr/share/locale/ko/LC_MESSAGES/newt.mo
+#usr/share/locale/ku
+#usr/share/locale/ku/LC_MESSAGES
+#usr/share/locale/ku/LC_MESSAGES/newt.mo
+#usr/share/locale/lt/LC_MESSAGES/newt.mo
+#usr/share/locale/lv
+#usr/share/locale/lv/LC_MESSAGES
+#usr/share/locale/lv/LC_MESSAGES/newt.mo
+#usr/share/locale/mg
+#usr/share/locale/mg/LC_MESSAGES
+#usr/share/locale/mg/LC_MESSAGES/newt.mo
+#usr/share/locale/mk
+#usr/share/locale/mk/LC_MESSAGES
+#usr/share/locale/mk/LC_MESSAGES/newt.mo
+#usr/share/locale/ml
+#usr/share/locale/ml/LC_MESSAGES
+#usr/share/locale/ml/LC_MESSAGES/newt.mo
+#usr/share/locale/mr
+#usr/share/locale/mr/LC_MESSAGES
+#usr/share/locale/mr/LC_MESSAGES/newt.mo
+#usr/share/locale/ms/LC_MESSAGES/newt.mo
+#usr/share/locale/nb/LC_MESSAGES/newt.mo
+#usr/share/locale/nds
+#usr/share/locale/nds/LC_MESSAGES
+#usr/share/locale/nds/LC_MESSAGES/newt.mo
+#usr/share/locale/ne
+#usr/share/locale/ne/LC_MESSAGES
+#usr/share/locale/ne/LC_MESSAGES/newt.mo
+#usr/share/locale/nl/LC_MESSAGES/newt.mo
+#usr/share/locale/nn
+#usr/share/locale/nn/LC_MESSAGES
+#usr/share/locale/nn/LC_MESSAGES/newt.mo
+#usr/share/locale/pa
+#usr/share/locale/pa/LC_MESSAGES
+#usr/share/locale/pa/LC_MESSAGES/newt.mo
+#usr/share/locale/pl/LC_MESSAGES/newt.mo
+#usr/share/locale/pt/LC_MESSAGES/newt.mo
+#usr/share/locale/pt_BR/LC_MESSAGES/newt.mo
+#usr/share/locale/ro/LC_MESSAGES/newt.mo
+#usr/share/locale/ru/LC_MESSAGES/newt.mo
+#usr/share/locale/sk/LC_MESSAGES/newt.mo
+#usr/share/locale/sl/LC_MESSAGES/newt.mo
+#usr/share/locale/sq/LC_MESSAGES/newt.mo
+#usr/share/locale/sr/LC_MESSAGES/newt.mo
+#usr/share/locale/sr@latin
+#usr/share/locale/sr@latin/LC_MESSAGES
+#usr/share/locale/sr@latin/LC_MESSAGES/newt.mo
+#usr/share/locale/sv/LC_MESSAGES/newt.mo
+#usr/share/locale/ta
+#usr/share/locale/ta/LC_MESSAGES
+#usr/share/locale/ta/LC_MESSAGES/newt.mo
+#usr/share/locale/te
+#usr/share/locale/te/LC_MESSAGES
+#usr/share/locale/te/LC_MESSAGES/newt.mo
+#usr/share/locale/tg
+#usr/share/locale/tg/LC_MESSAGES
+#usr/share/locale/tg/LC_MESSAGES/newt.mo
+#usr/share/locale/th
+#usr/share/locale/th/LC_MESSAGES
+#usr/share/locale/th/LC_MESSAGES/newt.mo
+#usr/share/locale/tl
+#usr/share/locale/tl/LC_MESSAGES
+#usr/share/locale/tl/LC_MESSAGES/newt.mo
+#usr/share/locale/tr/LC_MESSAGES/newt.mo
+#usr/share/locale/uk/LC_MESSAGES/newt.mo
+#usr/share/locale/vi/LC_MESSAGES/newt.mo
+#usr/share/locale/wo
+#usr/share/locale/wo/LC_MESSAGES
+#usr/share/locale/wo/LC_MESSAGES/newt.mo
+#usr/share/locale/xh
+#usr/share/locale/xh/LC_MESSAGES
+#usr/share/locale/xh/LC_MESSAGES/newt.mo
+#usr/share/locale/zh_CN/LC_MESSAGES/newt.mo
+#usr/share/locale/zh_TW/LC_MESSAGES/newt.mo
+#usr/share/man/man1/whiptail.1
index b3538ad1973a95002ba6c02104d5318dd0f23706..d144ca1b8637bbd2732573702db1e510b0a6e1be 100644 (file)
@@ -1,2 +1,2 @@
 usr/bin/patch
-#usr/man/man1/patch.1
+#usr/share/man/man1/patch.1
diff --git a/config/rootfiles/common/pigz b/config/rootfiles/common/pigz
new file mode 100644 (file)
index 0000000..618d924
--- /dev/null
@@ -0,0 +1,2 @@
+#usr/bin/pigz
+#usr/bin/unpigz
index f57e550167fa9ec6367fba353c890434e30acc4f..6124db15f7e629b354fc21ae596331247f4e85fc 100644 (file)
@@ -1,6 +1,6 @@
 etc/screenrc
 usr/bin/screen
-usr/bin/screen-4.0.3
+usr/bin/screen-4.2.1
 #usr/info/screen.info
 #usr/info/screen.info-1
 #usr/info/screen.info-2
@@ -8,6 +8,8 @@ usr/bin/screen-4.0.3
 #usr/info/screen.info-4
 #usr/info/screen.info-5
 #usr/man/man1/screen.1
+#usr/share/info/screen.info
+#usr/share/man/man1/screen.1
 #usr/share/screen
 #usr/share/screen/utf8encodings
 #usr/share/screen/utf8encodings/01
index 1e33068123d1b5cf206834c1c4756507e0f6c6e6..334c243a4ef3de1d5055dcddb2134fc567040636 100644 (file)
@@ -1,2 +1,3 @@
-usr/local/sbin/setup
-bin/probenic.sh
+usr/bin/probenic.sh
+usr/sbin/setup
+usr/share/locale/de/LC_MESSAGES/setup.mo
index c6afc2c79758a2812440c8576b6cc01be0645466..0ebef78c70cfcd4c3d9b5af57d1176bda54e290f 100644 (file)
-#usr/doc
-#usr/doc/slang
-#usr/doc/slang/COPYING
-#usr/doc/slang/COPYING.ART
-#usr/doc/slang/COPYING.GPL
-#usr/doc/slang/COPYRIGHT
-#usr/doc/slang/changes.txt
-#usr/doc/slang/cref.txt
-#usr/doc/slang/cslang.txt
-#usr/doc/slang/slang.txt
-#usr/doc/slang/slangdoc.html
-#usr/doc/slang/slangfun.txt
+#etc/slsh.rc
+#usr/bin/slsh
 #usr/include/slang.h
 #usr/include/slcurses.h
-#usr/lib/libslang-utf8.a
-usr/lib/libslang-utf8.so
-usr/lib/libslang-utf8.so.1
-usr/lib/libslang-utf8.so.1.4.9
-#usr/lib/libslang.a
-usr/lib/libslang.so
+#usr/lib/libslang.so
+usr/lib/libslang.so.2
+usr/lib/libslang.so.2.2.4
+#usr/lib/pkgconfig/slang.pc
+#usr/lib/slang
+#usr/lib/slang/v2
+#usr/lib/slang/v2/modules
+usr/lib/slang/v2/modules/csv-module.so
+usr/lib/slang/v2/modules/fcntl-module.so
+usr/lib/slang/v2/modules/fork-module.so
+usr/lib/slang/v2/modules/iconv-module.so
+usr/lib/slang/v2/modules/pcre-module.so
+usr/lib/slang/v2/modules/png-module.so
+usr/lib/slang/v2/modules/rand-module.so
+usr/lib/slang/v2/modules/select-module.so
+usr/lib/slang/v2/modules/slsmg-module.so
+usr/lib/slang/v2/modules/socket-module.so
+usr/lib/slang/v2/modules/sysconf-module.so
+usr/lib/slang/v2/modules/termios-module.so
+usr/lib/slang/v2/modules/varray-module.so
+usr/lib/slang/v2/modules/zlib-module.so
+#usr/share/doc/slang
+#usr/share/doc/slang/v2
+#usr/share/doc/slang/v2/COPYING
+#usr/share/doc/slang/v2/changes.txt
+#usr/share/doc/slang/v2/cref.txt
+#usr/share/doc/slang/v2/cslang.txt
+#usr/share/doc/slang/v2/slang.txt
+#usr/share/doc/slang/v2/slangdoc.html
+#usr/share/doc/slang/v2/slangfun.txt
+#usr/share/doc/slsh
+#usr/share/doc/slsh/html
+#usr/share/doc/slsh/html/slshfun-1.html
+#usr/share/doc/slsh/html/slshfun-2.html
+#usr/share/doc/slsh/html/slshfun-3.html
+#usr/share/doc/slsh/html/slshfun-4.html
+#usr/share/doc/slsh/html/slshfun-5.html
+#usr/share/doc/slsh/html/slshfun-6.html
+#usr/share/doc/slsh/html/slshfun-7.html
+#usr/share/doc/slsh/html/slshfun-8.html
+#usr/share/doc/slsh/html/slshfun-9.html
+#usr/share/doc/slsh/html/slshfun.html
+#usr/share/man/man1/slsh.1
+#usr/share/slsh
+#usr/share/slsh/arrayfuns.sl
+#usr/share/slsh/autoload.sl
+#usr/share/slsh/cmaps
+#usr/share/slsh/cmaps/cool.map
+#usr/share/slsh/cmaps/coolwarm.map
+#usr/share/slsh/cmaps/copper.map
+#usr/share/slsh/cmaps/drywet.map
+#usr/share/slsh/cmaps/ds9b.map
+#usr/share/slsh/cmaps/ds9sls.map
+#usr/share/slsh/cmaps/gebco.map
+#usr/share/slsh/cmaps/globe.map
+#usr/share/slsh/cmaps/gray.map
+#usr/share/slsh/cmaps/haxby.map
+#usr/share/slsh/cmaps/hot.map
+#usr/share/slsh/cmaps/jet.map
+#usr/share/slsh/cmaps/no_green.map
+#usr/share/slsh/cmaps/ocean.map
+#usr/share/slsh/cmaps/polar.map
+#usr/share/slsh/cmaps/rainbow.map
+#usr/share/slsh/cmaps/red2green.map
+#usr/share/slsh/cmaps/relief.map
+#usr/share/slsh/cmaps/sealand.map
+#usr/share/slsh/cmaps/seis.map
+#usr/share/slsh/cmaps/split.map
+#usr/share/slsh/cmaps/topo.map
+#usr/share/slsh/cmaps/wysiwyg.map
+#usr/share/slsh/cmdopt.sl
+#usr/share/slsh/csv.sl
+#usr/share/slsh/fcntl.sl
+#usr/share/slsh/fork.sl
+#usr/share/slsh/glob.sl
+#usr/share/slsh/help
+#usr/share/slsh/help/arrayfuns.hlp
+#usr/share/slsh/help/cmdopt.hlp
+#usr/share/slsh/help/csvfuns.hlp
+#usr/share/slsh/help/forkfuns.hlp
+#usr/share/slsh/help/glob.hlp
+#usr/share/slsh/help/onigfuns.hlp
+#usr/share/slsh/help/pcrefuns.hlp
+#usr/share/slsh/help/pngfuns.hlp
+#usr/share/slsh/help/print.hlp
+#usr/share/slsh/help/process.hlp
+#usr/share/slsh/help/profile.hlp
+#usr/share/slsh/help/randfuns.hlp
+#usr/share/slsh/help/readascii.hlp
+#usr/share/slsh/help/require.hlp
+#usr/share/slsh/help/setfuns.hlp
+#usr/share/slsh/help/slsmg.hlp
+#usr/share/slsh/help/sockfuns.hlp
+#usr/share/slsh/help/structfuns.hlp
+#usr/share/slsh/iconv.sl
+#usr/share/slsh/local-packages
+#usr/share/slsh/onig.sl
+#usr/share/slsh/pcre.sl
+#usr/share/slsh/png.sl
+#usr/share/slsh/print.sl
+#usr/share/slsh/process.sl
+#usr/share/slsh/profile.sl
+#usr/share/slsh/rand.sl
+#usr/share/slsh/readascii.sl
+#usr/share/slsh/require.sl
+#usr/share/slsh/rline
+#usr/share/slsh/rline/complete.sl
+#usr/share/slsh/rline/editfuns.sl
+#usr/share/slsh/rline/editor.sl
+#usr/share/slsh/rline/emacskeys.sl
+#usr/share/slsh/rline/history.sl
+#usr/share/slsh/rline/histsrch.sl
+#usr/share/slsh/rline/slrline.rc
+#usr/share/slsh/rline/vikeys.sl
+#usr/share/slsh/scripts
+#usr/share/slsh/scripts/jpegsize
+#usr/share/slsh/scripts/lsrpm
+#usr/share/slsh/scripts/sldb
+#usr/share/slsh/scripts/slprof
+#usr/share/slsh/scripts/slstkchk
+#usr/share/slsh/scripts/svnsh
+#usr/share/slsh/select.sl
+#usr/share/slsh/setfuns.sl
+#usr/share/slsh/sldb.sl
+#usr/share/slsh/sldbcore.sl
+#usr/share/slsh/sldbsock.sl
+#usr/share/slsh/slshhelp.sl
+#usr/share/slsh/slshrl.sl
+#usr/share/slsh/slsmg.sl
+#usr/share/slsh/socket.sl
+#usr/share/slsh/stkcheck.sl
+#usr/share/slsh/structfuns.sl
+#usr/share/slsh/sysconf.sl
+#usr/share/slsh/termios.sl
+#usr/share/slsh/varray.sl
+#usr/share/slsh/zlib.sl
index 4bb0df248efda0b3a621ff09f3e3974d016c66d1..a18ba0a8878fcd3981a530d692140be616c9a468 100644 (file)
@@ -234,6 +234,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/Antarctica/Rothera
 #usr/share/zoneinfo/Antarctica/South_Pole
 #usr/share/zoneinfo/Antarctica/Syowa
+#usr/share/zoneinfo/Antarctica/Troll
 #usr/share/zoneinfo/Antarctica/Vostok
 #usr/share/zoneinfo/Arctic
 #usr/share/zoneinfo/Arctic/Longyearbyen
@@ -254,6 +255,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/Asia/Bishkek
 #usr/share/zoneinfo/Asia/Brunei
 #usr/share/zoneinfo/Asia/Calcutta
+#usr/share/zoneinfo/Asia/Chita
 #usr/share/zoneinfo/Asia/Choibalsan
 #usr/share/zoneinfo/Asia/Chongqing
 #usr/share/zoneinfo/Asia/Chungking
@@ -311,6 +313,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/Asia/Seoul
 #usr/share/zoneinfo/Asia/Shanghai
 #usr/share/zoneinfo/Asia/Singapore
+#usr/share/zoneinfo/Asia/Srednekolymsk
 #usr/share/zoneinfo/Asia/Taipei
 #usr/share/zoneinfo/Asia/Tashkent
 #usr/share/zoneinfo/Asia/Tbilisi
@@ -488,7 +491,6 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/Europe/Zagreb
 #usr/share/zoneinfo/Europe/Zaporozhye
 #usr/share/zoneinfo/Europe/Zurich
-#usr/share/zoneinfo/Factory
 #usr/share/zoneinfo/GB
 #usr/share/zoneinfo/GB-Eire
 #usr/share/zoneinfo/GMT
@@ -532,6 +534,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/Pacific
 #usr/share/zoneinfo/Pacific/Apia
 #usr/share/zoneinfo/Pacific/Auckland
+#usr/share/zoneinfo/Pacific/Bougainville
 #usr/share/zoneinfo/Pacific/Chatham
 #usr/share/zoneinfo/Pacific/Chuuk
 #usr/share/zoneinfo/Pacific/Easter
@@ -835,6 +838,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/posix/Antarctica/Rothera
 #usr/share/zoneinfo/posix/Antarctica/South_Pole
 #usr/share/zoneinfo/posix/Antarctica/Syowa
+#usr/share/zoneinfo/posix/Antarctica/Troll
 #usr/share/zoneinfo/posix/Antarctica/Vostok
 #usr/share/zoneinfo/posix/Arctic
 #usr/share/zoneinfo/posix/Arctic/Longyearbyen
@@ -855,6 +859,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/posix/Asia/Bishkek
 #usr/share/zoneinfo/posix/Asia/Brunei
 #usr/share/zoneinfo/posix/Asia/Calcutta
+#usr/share/zoneinfo/posix/Asia/Chita
 #usr/share/zoneinfo/posix/Asia/Choibalsan
 #usr/share/zoneinfo/posix/Asia/Chongqing
 #usr/share/zoneinfo/posix/Asia/Chungking
@@ -912,6 +917,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/posix/Asia/Seoul
 #usr/share/zoneinfo/posix/Asia/Shanghai
 #usr/share/zoneinfo/posix/Asia/Singapore
+#usr/share/zoneinfo/posix/Asia/Srednekolymsk
 #usr/share/zoneinfo/posix/Asia/Taipei
 #usr/share/zoneinfo/posix/Asia/Tashkent
 #usr/share/zoneinfo/posix/Asia/Tbilisi
@@ -1132,6 +1138,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/posix/Pacific
 #usr/share/zoneinfo/posix/Pacific/Apia
 #usr/share/zoneinfo/posix/Pacific/Auckland
+#usr/share/zoneinfo/posix/Pacific/Bougainville
 #usr/share/zoneinfo/posix/Pacific/Chatham
 #usr/share/zoneinfo/posix/Pacific/Chuuk
 #usr/share/zoneinfo/posix/Pacific/Easter
@@ -1435,6 +1442,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/right/Antarctica/Rothera
 #usr/share/zoneinfo/right/Antarctica/South_Pole
 #usr/share/zoneinfo/right/Antarctica/Syowa
+#usr/share/zoneinfo/right/Antarctica/Troll
 #usr/share/zoneinfo/right/Antarctica/Vostok
 #usr/share/zoneinfo/right/Arctic
 #usr/share/zoneinfo/right/Arctic/Longyearbyen
@@ -1455,6 +1463,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/right/Asia/Bishkek
 #usr/share/zoneinfo/right/Asia/Brunei
 #usr/share/zoneinfo/right/Asia/Calcutta
+#usr/share/zoneinfo/right/Asia/Chita
 #usr/share/zoneinfo/right/Asia/Choibalsan
 #usr/share/zoneinfo/right/Asia/Chongqing
 #usr/share/zoneinfo/right/Asia/Chungking
@@ -1512,6 +1521,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/right/Asia/Seoul
 #usr/share/zoneinfo/right/Asia/Shanghai
 #usr/share/zoneinfo/right/Asia/Singapore
+#usr/share/zoneinfo/right/Asia/Srednekolymsk
 #usr/share/zoneinfo/right/Asia/Taipei
 #usr/share/zoneinfo/right/Asia/Tashkent
 #usr/share/zoneinfo/right/Asia/Tbilisi
@@ -1732,6 +1742,7 @@ usr/share/zoneinfo
 #usr/share/zoneinfo/right/Pacific
 #usr/share/zoneinfo/right/Pacific/Apia
 #usr/share/zoneinfo/right/Pacific/Auckland
+#usr/share/zoneinfo/right/Pacific/Bougainville
 #usr/share/zoneinfo/right/Pacific/Chatham
 #usr/share/zoneinfo/right/Pacific/Chuuk
 #usr/share/zoneinfo/right/Pacific/Easter
similarity index 98%
rename from config/rootfiles/packages/xfsprogs
rename to config/rootfiles/common/xfsprogs
index ea3e18f71f69e2d21d23004861bb74a41e4a3cf8..4c445341bb9abcad405d2c4b580c9f6c7e0b31e9 100644 (file)
@@ -4,7 +4,7 @@ sbin/fsck.xfs
 sbin/mkfs.xfs
 sbin/xfs_repair
 #usr/lib/libhandle.la
-usr/lib/libhandle.so
+#usr/lib/libhandle.so
 usr/sbin/xfs_admin
 usr/sbin/xfs_bmap
 usr/sbin/xfs_check
diff --git a/config/rootfiles/core/86/exclude b/config/rootfiles/core/86/exclude
new file mode 100644 (file)
index 0000000..18e9b4d
--- /dev/null
@@ -0,0 +1,20 @@
+boot/config.txt
+etc/collectd.custom
+etc/ipsec.conf
+etc/ipsec.secrets
+etc/ipsec.user.conf
+etc/ipsec.user.secrets
+etc/localtime
+etc/shadow
+etc/ssh/ssh_config
+etc/ssh/sshd_config
+etc/ssl/openssl.cnf
+etc/sudoers
+etc/sysconfig/firewall.local
+etc/sysconfig/rc.local
+etc/udev/rules.d/30-persistent-network.rules
+srv/web/ipfire/html/proxy.pac
+var/ipfire/ovpn
+var/log/cache
+var/state/dhcp/dhcpd.leases
+var/updatecache
diff --git a/config/rootfiles/core/86/filelists/armv5tel/initscripts b/config/rootfiles/core/86/filelists/armv5tel/initscripts
new file mode 120000 (symlink)
index 0000000..af1d762
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/armv5tel/initscripts
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/armv5tel/linux-kirkwood b/config/rootfiles/core/86/filelists/armv5tel/linux-kirkwood
new file mode 120000 (symlink)
index 0000000..7217107
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/armv5tel/linux-kirkwood
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/armv5tel/linux-multi b/config/rootfiles/core/86/filelists/armv5tel/linux-multi
new file mode 120000 (symlink)
index 0000000..204eb4c
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/armv5tel/linux-multi
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/armv5tel/linux-rpi b/config/rootfiles/core/86/filelists/armv5tel/linux-rpi
new file mode 120000 (symlink)
index 0000000..a651a49
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/armv5tel/linux-rpi
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/coreutils b/config/rootfiles/core/86/filelists/coreutils
new file mode 120000 (symlink)
index 0000000..7351ed2
--- /dev/null
@@ -0,0 +1 @@
+../../../common/coreutils
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/dracut b/config/rootfiles/core/86/filelists/dracut
new file mode 120000 (symlink)
index 0000000..1608699
--- /dev/null
@@ -0,0 +1 @@
+../../../common/dracut
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/files b/config/rootfiles/core/86/filelists/files
new file mode 100644 (file)
index 0000000..cfcb0cc
--- /dev/null
@@ -0,0 +1,5 @@
+etc/system-release
+etc/issue
+var/ipfire/header.pl
+var/ipfire/langs
+var/ipfire/lang.pl
diff --git a/config/rootfiles/core/86/filelists/i586/glibc b/config/rootfiles/core/86/filelists/i586/glibc
new file mode 120000 (symlink)
index 0000000..943021f
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/i586/glibc
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/i586/grub b/config/rootfiles/core/86/filelists/i586/grub
new file mode 120000 (symlink)
index 0000000..feb236a
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/i586/grub
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/i586/initscripts b/config/rootfiles/core/86/filelists/i586/initscripts
new file mode 120000 (symlink)
index 0000000..12d8770
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/i586/initscripts
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/i586/linux b/config/rootfiles/core/86/filelists/i586/linux
new file mode 120000 (symlink)
index 0000000..693ec4b
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/i586/linux
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/i586/linux-initrd b/config/rootfiles/core/86/filelists/i586/linux-initrd
new file mode 120000 (symlink)
index 0000000..32a03e6
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/i586/linux-initrd
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/libcap b/config/rootfiles/core/86/filelists/libcap
new file mode 120000 (symlink)
index 0000000..ed67d95
--- /dev/null
@@ -0,0 +1 @@
+../../../common/libcap
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/libsmooth b/config/rootfiles/core/86/filelists/libsmooth
new file mode 120000 (symlink)
index 0000000..6164182
--- /dev/null
@@ -0,0 +1 @@
+../../../common/libsmooth
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/lvm2 b/config/rootfiles/core/86/filelists/lvm2
new file mode 120000 (symlink)
index 0000000..d640870
--- /dev/null
@@ -0,0 +1 @@
+../../../common/lvm2
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/mdadm b/config/rootfiles/core/86/filelists/mdadm
new file mode 120000 (symlink)
index 0000000..465808b
--- /dev/null
@@ -0,0 +1 @@
+../../../common/mdadm
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/misc-progs b/config/rootfiles/core/86/filelists/misc-progs
new file mode 120000 (symlink)
index 0000000..7223cad
--- /dev/null
@@ -0,0 +1 @@
+../../../common/misc-progs
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/multipath-tools b/config/rootfiles/core/86/filelists/multipath-tools
new file mode 120000 (symlink)
index 0000000..9ff6323
--- /dev/null
@@ -0,0 +1 @@
+../../../common/multipath-tools
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/newt b/config/rootfiles/core/86/filelists/newt
new file mode 120000 (symlink)
index 0000000..fb3eb20
--- /dev/null
@@ -0,0 +1 @@
+../../../common/newt
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/openvpn b/config/rootfiles/core/86/filelists/openvpn
new file mode 120000 (symlink)
index 0000000..493f3f7
--- /dev/null
@@ -0,0 +1 @@
+../../../common/openvpn
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/parted b/config/rootfiles/core/86/filelists/parted
new file mode 120000 (symlink)
index 0000000..89195d8
--- /dev/null
@@ -0,0 +1 @@
+../../../common/parted
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/patch b/config/rootfiles/core/86/filelists/patch
new file mode 120000 (symlink)
index 0000000..27a3825
--- /dev/null
@@ -0,0 +1 @@
+../../../common/patch
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/pigz b/config/rootfiles/core/86/filelists/pigz
new file mode 120000 (symlink)
index 0000000..696f8f8
--- /dev/null
@@ -0,0 +1 @@
+../../../common/pigz
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/setup b/config/rootfiles/core/86/filelists/setup
new file mode 120000 (symlink)
index 0000000..209374b
--- /dev/null
@@ -0,0 +1 @@
+../../../common/setup
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/slang b/config/rootfiles/core/86/filelists/slang
new file mode 120000 (symlink)
index 0000000..228e45e
--- /dev/null
@@ -0,0 +1 @@
+../../../common/slang
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/strongswan b/config/rootfiles/core/86/filelists/strongswan
new file mode 120000 (symlink)
index 0000000..90c727e
--- /dev/null
@@ -0,0 +1 @@
+../../../common/strongswan
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/tzdata b/config/rootfiles/core/86/filelists/tzdata
new file mode 120000 (symlink)
index 0000000..5a6e325
--- /dev/null
@@ -0,0 +1 @@
+../../../common/tzdata
\ No newline at end of file
diff --git a/config/rootfiles/core/86/filelists/xfsprogs b/config/rootfiles/core/86/filelists/xfsprogs
new file mode 120000 (symlink)
index 0000000..9103296
--- /dev/null
@@ -0,0 +1 @@
+../../../common/xfsprogs
\ No newline at end of file
diff --git a/config/rootfiles/core/86/meta b/config/rootfiles/core/86/meta
new file mode 100644 (file)
index 0000000..d547fa8
--- /dev/null
@@ -0,0 +1 @@
+DEPS=""
diff --git a/config/rootfiles/core/86/update.sh b/config/rootfiles/core/86/update.sh
new file mode 100644 (file)
index 0000000..c1ea59c
--- /dev/null
@@ -0,0 +1,262 @@
+#!/bin/bash
+############################################################################
+#                                                                          #
+# This file is part of the IPFire Firewall.                                #
+#                                                                          #
+# IPFire 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 3 of the License, or        #
+# (at your option) any later version.                                      #
+#                                                                          #
+# IPFire 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 IPFire; if not, write to the Free Software                    #
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
+#                                                                          #
+# Copyright (C) 2014 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+function add_to_backup ()
+{
+       # Add path to ROOTFILES but remove old entries to prevent double
+       # files in the tar
+       grep -v "^$1" /opt/pakfire/tmp/ROOTFILES > /opt/pakfire/tmp/ROOTFILES.tmp
+       mv /opt/pakfire/tmp/ROOTFILES.tmp /opt/pakfire/tmp/ROOTFILES
+       echo $1 >> /opt/pakfire/tmp/ROOTFILES
+}
+
+#
+# Remove old core updates from pakfire cache to save space...
+core=86
+for (( i=1; i<=${core}; i++ ))
+do
+       rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
+done
+
+#
+# Do some sanity checks.
+case $(uname -r) in
+       *-ipfire-versatile )
+               /usr/bin/logger -p syslog.emerg -t ipfire \
+                       "core-update-${core}: ERROR cannot update. versatile support is dropped."
+               # Report no error to pakfire. So it does not try to install it again.
+               exit 0
+               ;;
+       *-ipfire* )
+               # Ok.
+               ;;
+       * )
+               /usr/bin/logger -p syslog.emerg -t ipfire \
+                       "core-update-${core}: ERROR cannot update. No IPFire Kernel."
+               exit 1
+       ;;
+esac
+
+
+#
+#
+KVER="xxxKVERxxx"
+
+#
+# check if we the backup file already exist
+if [ -e /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz ]; then
+    echo Moving backup to backup-old ...
+    mv -f /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz \
+       /var/ipfire/backup/core-upgrade${core}_${KVER}-old.tar.xz
+fi
+echo First we made a backup of all files that was inside of the
+echo update archive. This may take a while ...
+# Add some files that are not in the package to backup
+add_to_backup lib/modules
+add_to_backup boot
+
+# Backup the files
+tar cJvf /var/ipfire/backup/core-upgrade${core}_${KVER}.tar.xz \
+    -C / -T /opt/pakfire/tmp/ROOTFILES --exclude='#*' --exclude='/var/cache' > /dev/null 2>&1
+
+# Check diskspace on root
+ROOTSPACE=`df / -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+
+if [ $ROOTSPACE -lt 100000 ]; then
+       /usr/bin/logger -p syslog.emerg -t ipfire \
+               "core-update-${core}: ERROR cannot update because not enough free space on root."
+       exit 2
+fi
+
+
+echo
+echo Update Kernel to $KVER ...
+#
+# Remove old kernel, configs, initrd, modules ...
+#
+rm -rf /boot/System.map-*
+rm -rf /boot/config-*
+rm -rf /boot/ipfirerd-*
+rm -rf /boot/vmlinuz-*
+rm -rf /boot/uImage-ipfire-*
+rm -rf /boot/uInit-ipfire-*
+rm -rf /lib/modules
+
+case "$(uname -m)" in
+       i?86)
+               # Backup grub.conf
+               cp -vf /boot/grub/grub.conf /boot/grub-legacy.conf
+
+               # Remove all files that belong to GRUB-legacy
+               rm -rfv /boot/grub
+               ;;
+esac
+#
+#Stop services
+/etc/init.d/snort stop
+/etc/init.d/squid stop
+/etc/init.d/ipsec stop
+/etc/init.d/apache stop
+
+#
+#Extract files
+tar xavf /opt/pakfire/tmp/files* --no-overwrite-dir -p --numeric-owner -C /
+
+# Check diskspace on boot
+BOOTSPACE=`df /boot -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+
+if [ $BOOTSPACE -lt 1000 ]; then
+       case $(uname -r) in
+               *-ipfire-kirkwood )
+                       # Special handling for old kirkwood images.
+                       # (install only kirkwood kernel)
+                       rm -rf /boot/*
+                       tar xavf /opt/pakfire/tmp/files* --no-overwrite-dir -p \
+                               --numeric-owner -C / --wildcards 'boot/*-kirkwood*'
+                       ;;
+               * )
+                       /usr/bin/logger -p syslog.emerg -t ipfire \
+                               "core-update-${core}: FATAL-ERROR space run out on boot. System is not bootable..."
+                       /etc/init.d/apache start
+                       exit 4
+                       ;;
+       esac
+fi
+
+# Update Language cache
+perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
+
+# Add nobody to group dialout
+usermod -a -G dialout nobody
+
+#
+# Start services
+#
+/etc/init.d/apache start
+/etc/init.d/squid start
+/etc/init.d/snort start
+if [ `grep "ENABLED=on" /var/ipfire/vpn/settings` ]; then
+       /etc/init.d/ipsec start
+fi
+
+case "$(uname -m)" in
+       i?86)
+               #
+               # Update to GRUB2
+               #
+               echo
+               echo Update grub configuration ...
+               if grep -qE "^serial" /boot/grub-legacy.conf; then
+                       sed -i /etc/default/grub \
+                               -e "s| panic=10 | console=ttyS0,115200n8 panic=10 |g"
+                       echo "GRUB_TERMINAL=\"serial\"" >> /etc/default/grub
+                       echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> /etc/default/grub
+               fi
+               grub-mkconfig -o /boot/grub/grub.cfg
+
+               ROOT=$(mount | grep " / " | cut -d" " -f1)
+               ROOT=${ROOT::-1}
+
+               if ! grub-install --no-floppy --recheck "${ROOT}"; then
+                       if ! grub-install --no-floppy --recheck --force "${ROOT}"; then
+                               logger -p syslog.emerg -t ipfire \
+                                       "Could not update the bootloader!"
+                       fi
+               fi
+               ;;
+esac
+
+# Force (re)install pae kernel if pae is supported
+rm -rf /opt/pakfire/db/*/meta-linux-pae
+if [ ! "$(grep "^flags.* pae " /proc/cpuinfo)" == "" ]; then
+       ROOTSPACE=`df / -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+       BOOTSPACE=`df /boot -Pk | sed "s| * | |g" | cut -d" " -f4 | tail -n 1`
+       if [ $BOOTSPACE -lt 12000 -o $ROOTSPACE -lt 90000 ]; then
+               /usr/bin/logger -p syslog.emerg -t ipfire \
+                       "core-update-${core}: WARNING not enough space for pae kernel."
+       else
+               echo "Name: linux-pae" > /opt/pakfire/db/installed/meta-linux-pae
+               echo "ProgVersion: 0" >> /opt/pakfire/db/installed/meta-linux-pae
+               echo "Release: 0"     >> /opt/pakfire/db/installed/meta-linux-pae
+               echo "Name: linux-pae" > /opt/pakfire/db/meta/meta-linux-pae
+               echo "ProgVersion: 0" >> /opt/pakfire/db/meta/meta-linux-pae
+               echo "Release: 0"     >> /opt/pakfire/db/meta/meta-linux-pae
+       fi
+fi
+
+# Force reinstall xen kernel if it was installed
+if [ -e "/opt/pakfire/db/installed/meta-linux-xen" ]; then
+       echo "Name: linux-xen" > /opt/pakfire/db/installed/meta-linux-xen
+       echo "ProgVersion: 0" >> /opt/pakfire/db/installed/meta-linux-xen
+       echo "Release: 0"     >> /opt/pakfire/db/installed/meta-linux-xen
+       echo "Name: linux-xen" > /opt/pakfire/db/meta/meta-linux-xen
+       echo "ProgVersion: 0" >> /opt/pakfire/db/meta/meta-linux-xen
+       echo "Release: 0"     >> /opt/pakfire/db/meta/meta-linux-xen
+       # Add xvc0 to /etc/securetty
+       echo "xvc0" >> /etc/securetty
+fi
+
+#
+# After pakfire has ended run it again and update the lists and do upgrade
+#
+echo '#!/bin/bash'                                        >  /tmp/pak_update
+echo 'while [ "$(ps -A | grep " update.sh")" != "" ]; do' >> /tmp/pak_update
+echo '    sleep 1'                                        >> /tmp/pak_update
+echo 'done'                                               >> /tmp/pak_update
+echo 'while [ "$(ps -A | grep " pakfire")" != "" ]; do'   >> /tmp/pak_update
+echo '    sleep 1'                                        >> /tmp/pak_update
+echo 'done'                                               >> /tmp/pak_update
+echo '/opt/pakfire/pakfire update -y --force'             >> /tmp/pak_update
+echo '/opt/pakfire/pakfire upgrade -y'                    >> /tmp/pak_update
+echo '/opt/pakfire/pakfire upgrade -y'                    >> /tmp/pak_update
+echo '/opt/pakfire/pakfire upgrade -y'                    >> /tmp/pak_update
+echo '/usr/bin/logger -p syslog.emerg -t ipfire "Core-upgrade finished. If you use a customized grub.cfg"' >> /tmp/pak_update
+echo '/usr/bin/logger -p syslog.emerg -t ipfire "Check it before reboot !!!"' >> /tmp/pak_update
+echo '/usr/bin/logger -p syslog.emerg -t ipfire " *** Please reboot... *** "' >> /tmp/pak_update
+echo 'touch /var/run/need_reboot ' >> /tmp/pak_update
+#
+killall -KILL pak_update
+chmod +x /tmp/pak_update
+/tmp/pak_update &
+
+sync
+
+#
+#Finish
+(
+       /etc/init.d/fireinfo start
+       sendprofile
+) >/dev/null 2>&1 &
+
+# Update Package list for addon installation
+/opt/pakfire/pakfire update -y --force
+
+echo
+echo Please wait until pakfire has ended...
+echo
+
+# Don't report the exitcode last command
+exit 0
diff --git a/config/rootfiles/core/87/exclude b/config/rootfiles/core/87/exclude
new file mode 100644 (file)
index 0000000..18e9b4d
--- /dev/null
@@ -0,0 +1,20 @@
+boot/config.txt
+etc/collectd.custom
+etc/ipsec.conf
+etc/ipsec.secrets
+etc/ipsec.user.conf
+etc/ipsec.user.secrets
+etc/localtime
+etc/shadow
+etc/ssh/ssh_config
+etc/ssh/sshd_config
+etc/ssl/openssl.cnf
+etc/sudoers
+etc/sysconfig/firewall.local
+etc/sysconfig/rc.local
+etc/udev/rules.d/30-persistent-network.rules
+srv/web/ipfire/html/proxy.pac
+var/ipfire/ovpn
+var/log/cache
+var/state/dhcp/dhcpd.leases
+var/updatecache
diff --git a/config/rootfiles/core/87/filelists/fcron b/config/rootfiles/core/87/filelists/fcron
new file mode 120000 (symlink)
index 0000000..4a454ea
--- /dev/null
@@ -0,0 +1 @@
+../../../common/fcron
\ No newline at end of file
diff --git a/config/rootfiles/core/87/filelists/file b/config/rootfiles/core/87/filelists/file
new file mode 120000 (symlink)
index 0000000..0c60e43
--- /dev/null
@@ -0,0 +1 @@
+../../../common/file
\ No newline at end of file
diff --git a/config/rootfiles/core/87/filelists/files b/config/rootfiles/core/87/filelists/files
new file mode 100644 (file)
index 0000000..168c7d1
--- /dev/null
@@ -0,0 +1,3 @@
+etc/system-release
+etc/issue
+var/ipfire/langs
diff --git a/config/rootfiles/core/87/filelists/gnupg b/config/rootfiles/core/87/filelists/gnupg
new file mode 120000 (symlink)
index 0000000..a1a1564
--- /dev/null
@@ -0,0 +1 @@
+../../../common/gnupg
\ No newline at end of file
diff --git a/config/rootfiles/core/87/filelists/grep b/config/rootfiles/core/87/filelists/grep
new file mode 120000 (symlink)
index 0000000..ab5ef8b
--- /dev/null
@@ -0,0 +1 @@
+../../../common/grep
\ No newline at end of file
diff --git a/config/rootfiles/core/87/filelists/hdparm b/config/rootfiles/core/87/filelists/hdparm
new file mode 120000 (symlink)
index 0000000..b644751
--- /dev/null
@@ -0,0 +1 @@
+../../../common/hdparm
\ No newline at end of file
diff --git a/config/rootfiles/core/87/filelists/screen b/config/rootfiles/core/87/filelists/screen
new file mode 120000 (symlink)
index 0000000..81008f4
--- /dev/null
@@ -0,0 +1 @@
+../../../common/screen
\ No newline at end of file
diff --git a/config/rootfiles/core/87/meta b/config/rootfiles/core/87/meta
new file mode 100644 (file)
index 0000000..d547fa8
--- /dev/null
@@ -0,0 +1 @@
+DEPS=""
diff --git a/config/rootfiles/core/87/update.sh b/config/rootfiles/core/87/update.sh
new file mode 100644 (file)
index 0000000..ad06686
--- /dev/null
@@ -0,0 +1,56 @@
+#!/bin/bash
+############################################################################
+#                                                                          #
+# This file is part of the IPFire Firewall.                                #
+#                                                                          #
+# IPFire 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 3 of the License, or        #
+# (at your option) any later version.                                      #
+#                                                                          #
+# IPFire 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 IPFire; if not, write to the Free Software                    #
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
+#                                                                          #
+# Copyright (C) 2014 IPFire-Team <info@ipfire.org>.                        #
+#                                                                          #
+############################################################################
+#
+. /opt/pakfire/lib/functions.sh
+/usr/local/bin/backupctrl exclude >/dev/null 2>&1
+
+# Remove old core updates from pakfire cache to save space...
+core=87
+for (( i=1; i<=$core; i++ ))
+do
+       rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
+done
+
+# Stop services
+
+# Remove old files
+
+# Extract files
+extract_files
+
+# Start services
+
+# Update Language cache
+perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
+
+sync
+
+# This update need a reboot...
+#touch /var/run/need_reboot
+
+# Finish
+/etc/init.d/fireinfo start
+sendprofile
+
+# Don't report the exitcode last command
+exit 0
diff --git a/config/rootfiles/installer/coreutils b/config/rootfiles/installer/coreutils
deleted file mode 120000 (symlink)
index b41d95a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/coreutils
\ No newline at end of file
diff --git a/config/rootfiles/installer/dhcpcd b/config/rootfiles/installer/dhcpcd
deleted file mode 120000 (symlink)
index ea5996c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/dhcpcd
\ No newline at end of file
diff --git a/config/rootfiles/installer/e2fsprogs b/config/rootfiles/installer/e2fsprogs
deleted file mode 120000 (symlink)
index 2a6ee42..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/e2fsprogs
\ No newline at end of file
diff --git a/config/rootfiles/installer/files b/config/rootfiles/installer/files
deleted file mode 100644 (file)
index aba14d8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-etc/host.conf
-etc/hosts
-etc/protocols
-
diff --git a/config/rootfiles/installer/findutils b/config/rootfiles/installer/findutils
deleted file mode 120000 (symlink)
index 1114c4c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/findutils
\ No newline at end of file
diff --git a/config/rootfiles/installer/gawk b/config/rootfiles/installer/gawk
deleted file mode 120000 (symlink)
index a7660cf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/gawk
\ No newline at end of file
diff --git a/config/rootfiles/installer/glibc b/config/rootfiles/installer/glibc
deleted file mode 120000 (symlink)
index 4a46726..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/i586/glibc
\ No newline at end of file
diff --git a/config/rootfiles/installer/grep b/config/rootfiles/installer/grep
deleted file mode 120000 (symlink)
index f7bf2d9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/grep
\ No newline at end of file
diff --git a/config/rootfiles/installer/gzip b/config/rootfiles/installer/gzip
deleted file mode 120000 (symlink)
index 1cbc376..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/gzip
\ No newline at end of file
diff --git a/config/rootfiles/installer/hwdata b/config/rootfiles/installer/hwdata
deleted file mode 120000 (symlink)
index 7ed7e21..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/hwdata
\ No newline at end of file
diff --git a/config/rootfiles/installer/iproute2 b/config/rootfiles/installer/iproute2
deleted file mode 120000 (symlink)
index efe83c5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/iproute2
\ No newline at end of file
diff --git a/config/rootfiles/installer/kbd b/config/rootfiles/installer/kbd
deleted file mode 120000 (symlink)
index 3efe86a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/kbd
\ No newline at end of file
diff --git a/config/rootfiles/installer/libidn b/config/rootfiles/installer/libidn
deleted file mode 120000 (symlink)
index 9750546..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/libidn
\ No newline at end of file
diff --git a/config/rootfiles/installer/libusb b/config/rootfiles/installer/libusb
deleted file mode 120000 (symlink)
index efe4a28..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/libusb
\ No newline at end of file
diff --git a/config/rootfiles/installer/misc-progs b/config/rootfiles/installer/misc-progs
deleted file mode 100644 (file)
index 1e4226b..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-bin/ping
-usr/local/bin/iowrap
diff --git a/config/rootfiles/installer/ncurses b/config/rootfiles/installer/ncurses
deleted file mode 120000 (symlink)
index 7aac8a2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/ncurses
\ No newline at end of file
diff --git a/config/rootfiles/installer/newt b/config/rootfiles/installer/newt
deleted file mode 120000 (symlink)
index b63c480..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/newt
\ No newline at end of file
diff --git a/config/rootfiles/installer/openssl b/config/rootfiles/installer/openssl
deleted file mode 120000 (symlink)
index 8317ffd..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/openssl
\ No newline at end of file
diff --git a/config/rootfiles/installer/parted b/config/rootfiles/installer/parted
deleted file mode 120000 (symlink)
index dc69674..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../packages/parted
\ No newline at end of file
diff --git a/config/rootfiles/installer/pciutils b/config/rootfiles/installer/pciutils
deleted file mode 120000 (symlink)
index 903f124..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/pciutils
\ No newline at end of file
diff --git a/config/rootfiles/installer/pcmciautils b/config/rootfiles/installer/pcmciautils
deleted file mode 120000 (symlink)
index 47b2fe8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/pcmciautils
\ No newline at end of file
diff --git a/config/rootfiles/installer/pcre b/config/rootfiles/installer/pcre
deleted file mode 120000 (symlink)
index ffd8616..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/pcre
\ No newline at end of file
diff --git a/config/rootfiles/installer/popt b/config/rootfiles/installer/popt
deleted file mode 120000 (symlink)
index d15b2c6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/popt
\ No newline at end of file
diff --git a/config/rootfiles/installer/reboot b/config/rootfiles/installer/reboot
deleted file mode 100644 (file)
index f1f6d64..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-sbin/reboot
-sbin/halt
diff --git a/config/rootfiles/installer/reiserfsprogs b/config/rootfiles/installer/reiserfsprogs
deleted file mode 120000 (symlink)
index f596f68..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/reiserfsprogs
\ No newline at end of file
diff --git a/config/rootfiles/installer/sed b/config/rootfiles/installer/sed
deleted file mode 120000 (symlink)
index 4b0d3a3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/sed
\ No newline at end of file
diff --git a/config/rootfiles/installer/slang b/config/rootfiles/installer/slang
deleted file mode 120000 (symlink)
index 405fd40..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/slang
\ No newline at end of file
diff --git a/config/rootfiles/installer/sysfsutils b/config/rootfiles/installer/sysfsutils
deleted file mode 120000 (symlink)
index 9c56a9a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/sysfsutils
\ No newline at end of file
diff --git a/config/rootfiles/installer/tar b/config/rootfiles/installer/tar
deleted file mode 120000 (symlink)
index f994ef6..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/tar
\ No newline at end of file
diff --git a/config/rootfiles/installer/usbutils b/config/rootfiles/installer/usbutils
deleted file mode 120000 (symlink)
index dcc136f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/usbutils
\ No newline at end of file
diff --git a/config/rootfiles/installer/util-linux b/config/rootfiles/installer/util-linux
deleted file mode 120000 (symlink)
index f672071..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/i586/util-linux
\ No newline at end of file
diff --git a/config/rootfiles/installer/vim b/config/rootfiles/installer/vim
deleted file mode 120000 (symlink)
index 3ae92f3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/vim
\ No newline at end of file
diff --git a/config/rootfiles/installer/wget b/config/rootfiles/installer/wget
deleted file mode 120000 (symlink)
index b75cdbc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/wget
\ No newline at end of file
diff --git a/config/rootfiles/installer/xz b/config/rootfiles/installer/xz
deleted file mode 120000 (symlink)
index 61772c7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/xz
\ No newline at end of file
diff --git a/config/rootfiles/installer/zlib b/config/rootfiles/installer/zlib
deleted file mode 120000 (symlink)
index fcdedec..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../common/zlib
\ No newline at end of file
index 9b198c2bdfbae9a082f2d3ef3455fb15abd8b6fd..511b0f344cb81eb113e0a69da9387d0396106440 100644 (file)
@@ -1,8 +1,6 @@
 boot/System.map-KVER-ipfire-pae
-boot/System.map-ipfire-pae
 boot/config-KVER-ipfire-pae
 boot/vmlinuz-KVER-ipfire-pae
-boot/vmlinuz-ipfire-pae
 #lib/modules
 lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/build
@@ -15,7 +13,10 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/arch/x86/crypto/serpent-sse2-i586.ko
 #lib/modules/KVER-ipfire-pae/kernel/arch/x86/crypto/twofish-i586.ko
 #lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel
-#lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/microcode.ko
+#lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/cpu
+#lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/cpu/microcode
+#lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/cpu/microcode/microcode.ko
+#lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/iosf_mbi.ko
 #lib/modules/KVER-ipfire-pae/kernel/arch/x86/kernel/test_nx.ko
 #lib/modules/KVER-ipfire-pae/kernel/arch/x86/kvm
 #lib/modules/KVER-ipfire-pae/kernel/arch/x86/kvm/kvm-amd.ko
@@ -58,6 +59,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/crypto/gcm.ko
 #lib/modules/KVER-ipfire-pae/kernel/crypto/ghash-generic.ko
 #lib/modules/KVER-ipfire-pae/kernel/crypto/khazad.ko
+#lib/modules/KVER-ipfire-pae/kernel/crypto/lz4.ko
+#lib/modules/KVER-ipfire-pae/kernel/crypto/lz4hc.ko
 #lib/modules/KVER-ipfire-pae/kernel/crypto/lzo.ko
 #lib/modules/KVER-ipfire-pae/kernel/crypto/md4.ko
 #lib/modules/KVER-ipfire-pae/kernel/crypto/michael_mic.ko
@@ -84,7 +87,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/crypto/zlib.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers
 #lib/modules/KVER-ipfire-pae/kernel/drivers/acpi
-#lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/acpi_i2c.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/acpi_extlog.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/acpi_ipmi.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/acpi_pad.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/acpi/custom_method.ko
@@ -151,6 +154,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_nv.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_promise.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_qstor.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_rcar.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_sil.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_sil24.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/ata/sata_sis.ko
@@ -178,10 +182,11 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/base
 #lib/modules/KVER-ipfire-pae/kernel/drivers/base/regmap
 #lib/modules/KVER-ipfire-pae/kernel/drivers/base/regmap/regmap-i2c.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/bcma
+#lib/modules/KVER-ipfire-pae/kernel/drivers/bcma/bcma.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/block
 #lib/modules/KVER-ipfire-pae/kernel/drivers/block/DAC960.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/block/cciss.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/block/cpqarray.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/block/cryptoloop.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/block/floppy.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/block/mtip32xx
@@ -248,7 +253,6 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/gx-suspmod.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/longhaul.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/longrun.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/mperf.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/p4-clockmod.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/pcc-cpufreq.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/powernow-k6.ko
@@ -258,13 +262,19 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/speedstep-lib.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/cpufreq/speedstep-smi.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/crypto
+#lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/ccp
+#lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/ccp/ccp-crypto.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/ccp/ccp.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/geode-aes.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/padlock-aes.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/crypto/padlock-sha.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/dca
 #lib/modules/KVER-ipfire-pae/kernel/drivers/dca/dca.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/dma
-#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw_dmac.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw
+#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw/dw_dmac.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw/dw_dmac_core.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/dma/dw/dw_dmac_pci.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/dma/ioat
 #lib/modules/KVER-ipfire-pae/kernel/drivers/dma/ioat/ioatdma.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/dma/pch_dma.ko
@@ -293,14 +303,18 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/firmware/edd.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/firmware/iscsi_ibft.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio
+#lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-f7188x.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-ich.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-sch.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-sch311x.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-ts5500.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpio/gpio-viperboard.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/ast
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/ast/ast.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/bochs
+#lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/bochs/bochs-drm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/cirrus
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/cirrus/cirrus.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/gpu/drm/drm.ko
@@ -361,6 +375,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-kovaplus.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-lua.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-pyra.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-ryos.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat-savu.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-roccat.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hid/hid-saitek.ko
@@ -421,9 +436,11 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/fam15h_power.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/fschmd.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/g760a.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/g762.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/gl518sm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/gl520sm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/hih6130.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/htu21.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/hwmon-vid.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/i5k_amb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/ibmaem.ko
@@ -527,6 +544,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-parport.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-pca-platform.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-piix4.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-robotfuzz-osif.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-scmi.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-simtec.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/i2c-sis5595.ko
@@ -539,7 +557,13 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/busses/scx200_acb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/i2c-core.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/i2c-dev.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/i2c-mux.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/i2c-smbus.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes
+#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes/i2c-mux-gpio.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes/i2c-mux-pca9541.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes/i2c-mux-pca954x.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/i2c/muxes/i2c-mux-pinctrl.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/iio
 #lib/modules/KVER-ipfire-pae/kernel/drivers/iio/common
 #lib/modules/KVER-ipfire-pae/kernel/drivers/iio/common/hid-sensors
@@ -559,6 +583,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/ati_remote2.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/atlas_btns.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/cm109.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/ideapad_slidebar.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/keyspan_remote.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/pcspkr.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/misc/powermate.ko
@@ -578,6 +603,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio/altera_ps2.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio/arc_ps2.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio/hyperv-keyboard.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/serio/serio_raw.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/input/sparse-keymap.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/isdn
@@ -648,11 +674,13 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp5523.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp5562.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp55xx-common.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp8501.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lt3593.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-ot200.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9532.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca955x.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9633.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca963x.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9685.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-ss4200.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-tca6507.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/trigger
@@ -669,7 +697,6 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/bcache
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/bcache/bcache.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-bio-prison.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-bufio.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-cache-cleaner.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-cache-mq.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-cache.ko
@@ -680,6 +707,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-raid.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-round-robin.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-service-time.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-switch.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/dm-verity.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/faulty.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/md/linear.ko
@@ -720,6 +748,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24110.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24113.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24116.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24117.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cx24123.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/cxd2820r.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/dib0070.ko
@@ -734,6 +763,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/drxk.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/ds3000.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/dvb-pll.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/dvbsky_m88ds3103.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/ec100.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/isl6405.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/dvb-frontends/isl6421.ko
@@ -817,6 +847,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/mt9v011.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/ov7670.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa6588.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa6752hs.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa7110.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa7115.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/i2c/saa7127.ko
@@ -897,7 +928,6 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/pt1
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/pt1/earth-pt1.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134
-#lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134/saa6752hs.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134/saa7134-alsa.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134/saa7134-dvb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/pci/saa7134/saa7134-empress.ko
@@ -928,12 +958,16 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/marvell-ccic/cafe_ccic.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/sh_veu.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/rcar_vin.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/sh_mobile_csi2.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/soc_camera.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/soc_camera_platform.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/soc_mediabus.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/soc_camera/soc_scale_crop.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/timblogiw.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/vsp1
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/platform/vsp1/vsp1.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/ati_remote.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/ene_ir.ko
@@ -974,6 +1008,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-budget-ci-old.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-cinergy-1400.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-cinergy.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-delock-61959.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-dib0700-nec.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-dib0700-rc5.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-digitalnow-tinytwin.ko
@@ -1036,6 +1071,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-reddo.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-snapstream-firefly.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-streamzap.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-su3000.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-tbs-nec.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-technisat-usb2.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/rc/keymaps/rc-terratec-cinergy-xs.ko
@@ -1068,6 +1104,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/fc0012.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/fc0013.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/fc2580.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/m88ts2022.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/max2165.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/mc44s803.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/tuners/mt2060.ko
@@ -1151,6 +1188,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx-alsa.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx-dvb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx-rc.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx-v4l.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/em28xx/em28xx.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gl860
@@ -1190,6 +1228,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_sq905c.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_sq930x.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_stk014.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_stk1135.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_stv0680.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_sunplus.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/gspca/gspca_t613.ko
@@ -1213,8 +1252,6 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/s2255/s2255drv.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/siano
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/siano/smsusb.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/sn9c102
-#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/sn9c102/sn9c102.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/stk1160
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/stk1160/stk1160.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/stkwebcam
@@ -1230,6 +1267,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/ttusb-dec
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/ttusb-dec/ttusb_dec.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/ttusb-dec/ttusbdecfe.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/usbtv
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/usbtv/usbtv.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/usbvision
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/usbvision/usbvision.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/usb/uvc
@@ -1239,7 +1278,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/tuner.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/v4l2-common.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/v4l2-int-device.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/v4l2-dv-timings.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/v4l2-mem2mem.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/videobuf-core.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/media/v4l2-core/videobuf-dma-contig.ko
@@ -1254,6 +1293,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick
 #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/core
 #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/core/memstick.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/core/ms_block.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/core/mspro_block.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/host
 #lib/modules/KVER-ipfire-pae/kernel/drivers/memstick/host/jmb38x_ms.ko
@@ -1437,6 +1477,10 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/e1000e
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/i40e
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/i40e/i40e.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/i40evf
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/i40evf/i40evf.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/igb
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/igb/igb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/intel/igbvf
@@ -1490,6 +1534,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/realtek/8139too.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/realtek/atp.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/realtek/r8169.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/renesas
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/renesas/sh_eth.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/sfc
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/sfc/sfc.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/silan
@@ -1501,6 +1547,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/epic100.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/smc9194.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/smc91c92_cs.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/smsc911x.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/smsc/smsc9420.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/stmicro
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/stmicro/stmmac
@@ -1531,6 +1578,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/mdio.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/mii.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/netconsole.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/nlmon.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/phy
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/phy/amd.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/phy/at803x.ko
@@ -1577,6 +1625,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/dm9601.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/gl620a.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/hso.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/huawei_cdc_ncm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/int51x1.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/ipheth.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/kalmia.ko
@@ -1593,6 +1642,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/sierra_net.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/smsc75xx.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/smsc95xx.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/sr9700.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/sr9800.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/usbnet.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/usb/zaurus.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/veth.ko
@@ -1609,6 +1660,9 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ar5523
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ar5523/ar5523.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath10k
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath10k/ath10k_core.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath10k/ath10k_pci.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath5k
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath5k/ath5k.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath9k
@@ -1618,6 +1672,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/ath9k/ath9k_hw.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/carl9170
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/carl9170/carl9170.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/wcn36xx
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/wcn36xx/wcn36xx.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/wil6210
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ath/wil6210/wil6210.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/atmel.ko
@@ -1630,8 +1686,13 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmfmac
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmsmac
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmsmac/brcmsmac.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmutil
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/cw1200
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/cw1200/cw1200_core.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/cw1200/cw1200_wlan_sdio.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/hostap
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/hostap/hostap.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/hostap/hostap_cs.ko
@@ -1686,6 +1747,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2500pci.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2500usb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2800lib.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2800mmio.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2800pci.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2800usb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rt2x00/rt2x00lib.ko
@@ -1714,6 +1776,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl8192se/rtl8192se.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl8723ae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl8723ae/rtl8723ae.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl_pci.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtl_usb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/rtlwifi/rtlwifi.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ti
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/wireless/ti/wl1251
@@ -1763,7 +1827,6 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/asus-laptop.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/asus-nb-wmi.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/asus-wmi.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/chromeos_laptop.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/classmate-laptop.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/compal-laptop.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/dell-laptop.ko
@@ -1776,6 +1839,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/hp-wmi.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/hp_accel.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/ideapad-laptop.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/intel-rst.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/intel_ips.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/intel_oaktrail.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/platform/x86/msi-laptop.ko
@@ -1815,12 +1879,15 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-fm3130.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-hid-sensor-time.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-isl12022.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-isl12057.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-isl1208.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-m41t80.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-m48t35.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-m48t59.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-max6900.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-moxart.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-msm6242.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-pcf2127.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-pcf8523.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-pcf8563.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/rtc/rtc-pcf8583.ko
@@ -1881,6 +1948,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/dpt_i2o.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/dtc.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/eata.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/esas2r
+#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/esas2r/esas2r.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/fcoe
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/fcoe/fcoe.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/fcoe/libfcoe.ko
@@ -1977,6 +2046,9 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/echo/echo.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/et131x
 #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/et131x/et131x.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/staging/gdm724x
+#lib/modules/KVER-ipfire-pae/kernel/drivers/staging/gdm724x/gdmtty.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/staging/gdm724x/gdmulte.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/rts5139
 #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/rts5139/rts5139.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/slicoss
@@ -1986,7 +2058,9 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/usbip/usbip-host.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/staging/usbip/vhci-hcd.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/thermal
+#lib/modules/KVER-ipfire-pae/kernel/drivers/thermal/int3403_thermal.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/thermal/intel_powerclamp.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/thermal/x86_pkg_temp_thermal.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty
 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/cyclades.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/n_gsm.ko
@@ -1998,6 +2072,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/8250
 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/8250/8250_dw.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/arc_uart.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/fsl_lpuart.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/jsm
 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/jsm/jsm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/tty/serial/rp2.ko
@@ -2018,22 +2093,23 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/atm/usbatm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/atm/xusbatm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea
-#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci13xxx_msm.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci13xxx_pci.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci_hdrc.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci_hdrc_msm.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/chipidea/ci_hdrc_pci.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class/cdc-acm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class/cdc-wdm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class/usblp.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/class/usbtmc.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3
-#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3-exynos.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3-omap.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3-keystone.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3-pci.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/dwc3/dwc3.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/bcma-hcd.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/hwa-hc.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/isp1362-hcd.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/ohci-pci.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/sl811-hcd.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/ssb-hcd.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/host/whci
@@ -2043,6 +2119,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/image/microtek.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/adutux.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/ehset.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/emi26.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/emi62.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/ezusb.ko
@@ -2058,6 +2135,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/misc/yurex.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/mon
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/mon/usbmon.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/phy
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/phy/phy-fsm-usb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/aircable.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/ark3116.ko
@@ -2068,7 +2147,6 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/digi_acceleport.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/f81232.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/ftdi_sio.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/funsoft.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/io_edgeport.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/io_ti.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/ipaq.ko
@@ -2080,17 +2158,17 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/mct_u232.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/mos7720.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/mos7840.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/moto_modem.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/mxuport.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/option.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/oti6858.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/pl2303.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/qcaux.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/qcserial.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/quatech2.ko
-#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/siemens_mpi.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/sierra.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/spcp8x5.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/ssu100.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/usb-serial-simple.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/usb_wwan.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/usbserial.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/usb/serial/visor.ko
@@ -2125,6 +2203,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/uwb/whc-rc.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/uwb/whci.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/vhost
+#lib/modules/KVER-ipfire-pae/kernel/drivers/vhost/vhost.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/vhost/vhost_net.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/vhost/vringh.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video
@@ -2158,6 +2237,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/matrox/matroxfb_base.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/matrox/matroxfb_misc.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/neofb.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/video/ocfb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/output.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/pm2fb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/pm3fb.ko
@@ -2211,6 +2291,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/alim1535_wdt.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/alim7101_wdt.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/cpu5wdt.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/dw_wdt.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/eurotechwdt.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/f71808e_wdt.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/geodewdt.ko
@@ -2224,6 +2305,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/it8712f_wdt.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/it87_wdt.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/machzwd.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/mena21_wdt.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/nv_tco.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/pc87413_wdt.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/watchdog/pcwd_pci.ko
@@ -2366,6 +2448,9 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/lib/crc7.ko
 #lib/modules/KVER-ipfire-pae/kernel/lib/crc8.ko
 #lib/modules/KVER-ipfire-pae/kernel/lib/libcrc32c.ko
+#lib/modules/KVER-ipfire-pae/kernel/lib/lz4
+#lib/modules/KVER-ipfire-pae/kernel/lib/lz4/lz4_compress.ko
+#lib/modules/KVER-ipfire-pae/kernel/lib/lz4/lz4hc_compress.ko
 #lib/modules/KVER-ipfire-pae/kernel/lib/mpi
 #lib/modules/KVER-ipfire-pae/kernel/lib/mpi/mpi.ko
 #lib/modules/KVER-ipfire-pae/kernel/lib/oid_registry.ko
@@ -2375,8 +2460,6 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/lib/ts_bm.ko
 #lib/modules/KVER-ipfire-pae/kernel/lib/ts_fsm.ko
 #lib/modules/KVER-ipfire-pae/kernel/lib/ts_kmp.ko
-#lib/modules/KVER-ipfire-pae/kernel/lib/zlib_deflate
-#lib/modules/KVER-ipfire-pae/kernel/lib/zlib_deflate/zlib_deflate.ko
 #lib/modules/KVER-ipfire-pae/kernel/net
 #lib/modules/KVER-ipfire-pae/kernel/net/802
 #lib/modules/KVER-ipfire-pae/kernel/net/802/garp.ko
@@ -2422,8 +2505,13 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/bridge/netfilter/ebtable_filter.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/bridge/netfilter/ebtable_nat.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/bridge/netfilter/ebtables.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/bridge/netfilter/nf_tables_bridge.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/core
 #lib/modules/KVER-ipfire-pae/kernel/net/core/netprio_cgroup.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/hsr
+#lib/modules/KVER-ipfire-pae/kernel/net/hsr/hsr.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ieee802154
+#lib/modules/KVER-ipfire-pae/kernel/net/ieee802154/6lowpan_iphc.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/ah4.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/esp4.ko
@@ -2442,6 +2530,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_ECN.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_MASQUERADE.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_REJECT.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_SYNPROXY.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_ah.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/ipt_rpfilter.ko
@@ -2455,6 +2544,11 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_nat_pptp.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_nat_proto_gre.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_nat_snmp_basic.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_tables_arp.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nf_tables_ipv4.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nft_chain_nat_ipv4.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nft_chain_route_ipv4.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv4/netfilter/nft_reject_ipv4.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/tcp_bic.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/tcp_diag.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv4/tcp_highspeed.ko
@@ -2478,12 +2572,14 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/esp6.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/ip6_gre.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/ip6_tunnel.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/ip6_vti.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/ipcomp6.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/mip6.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_MASQUERADE.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_NPT.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_REJECT.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_SYNPROXY.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_ah.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_eui64.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6t_frag.ko
@@ -2498,6 +2594,10 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6table_raw.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/ip6table_security.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nf_nat_ipv6.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nf_tables_ipv6.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nft_chain_nat_ipv6.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nft_chain_route_ipv6.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/ipv6/netfilter/nft_reject_ipv6.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/sit.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/tunnel6.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/ipv6/xfrm6_mode_beet.ko
@@ -2528,7 +2628,9 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_ipportnet.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_net.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_netiface.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_netnet.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_netport.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_hash_netportnet.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipset/ip_set_list_set.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipvs
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/ipvs/ip_vs.ko
@@ -2569,13 +2671,26 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_nat_proto_udplite.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_nat_sip.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_nat_tftp.ko
-#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_tproxy_core.ko
-#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_synproxy_core.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nf_tables_inet.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_acct.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_cthelper.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_cttimeout.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_log.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nfnetlink_queue.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_compat.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_counter.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_ct.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_exthdr.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_hash.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_limit.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_log.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_meta.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_nat.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_queue.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_rbtree.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_reject.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/nft_reject_inet.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_AUDIT.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_CHECKSUM.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_CLASSIFY.ko
@@ -2601,6 +2716,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_TRACE.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_addrtype.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_bpf.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_cgroup.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_cluster.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_comment.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_connbytes.ko
@@ -2617,7 +2733,10 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_hashlimit.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_helper.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_hl.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_ipcomp.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_iprange.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_ipvs.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_l2tp.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_layer7.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_length.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/netfilter/xt_limit.ko
@@ -2662,6 +2781,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/act_simple.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/act_skbedit.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_basic.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_bpf.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_cgroup.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_flow.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/cls_fw.ko
@@ -2682,9 +2802,11 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_codel.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_drr.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_dsmark.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_fq.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_fq_codel.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_gred.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_hfsc.ko
+#lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_hhf.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_htb.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_ingress.ko
 #lib/modules/KVER-ipfire-pae/kernel/net/sched/sch_mqprio.ko
@@ -2737,7 +2859,6 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/sound/core/seq/snd-seq.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-hrtimer.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-hwdep.ko
-#lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-page-alloc.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-pcm.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-rawmidi.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/core/snd-timer.ko
@@ -2772,7 +2893,6 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/other/snd-ak4114.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/other/snd-ak4xxx-adda.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/other/snd-pt2258.ko
-#lib/modules/KVER-ipfire-pae/kernel/sound/i2c/other/snd-tea575x-tuner.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/snd-cs8427.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/snd-i2c.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/i2c/snd-tea6330t.ko
@@ -2874,6 +2994,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-cirrus.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-cmedia.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-conexant.ko
+#lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-generic.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-hdmi.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-idt.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/pci/hda/snd-hda-codec-realtek.ko
@@ -2946,6 +3067,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/sound/usb/6fire/snd-usb-6fire.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/usb/caiaq
 #lib/modules/KVER-ipfire-pae/kernel/sound/usb/caiaq/snd-usb-caiaq.ko
+#lib/modules/KVER-ipfire-pae/kernel/sound/usb/hiface
+#lib/modules/KVER-ipfire-pae/kernel/sound/usb/hiface/snd-usb-hiface.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/usb/misc
 #lib/modules/KVER-ipfire-pae/kernel/sound/usb/misc/snd-ua101.ko
 #lib/modules/KVER-ipfire-pae/kernel/sound/usb/snd-usb-audio.ko
diff --git a/config/rootfiles/packages/tmux b/config/rootfiles/packages/tmux
new file mode 100644 (file)
index 0000000..9e0fd02
--- /dev/null
@@ -0,0 +1,2 @@
+usr/bin/tmux
+#usr/share/man/man1/tmux.1
index 3c7ae87d23a07c488a398779a853bd8bdb6b03dc..cfb8113cf6e57fc4cda28c730bd91f45b044bebe 100644 (file)
@@ -58,7 +58,7 @@ Run an unattended installation.
                ENDTEXT
                KERNEL vmlinuz
                INITRD instroot
-               APPEND unattended
+               APPEND installer.unattended
 MENU END
 
 MENU BEGIN tools
diff --git a/config/syslinux/unattended.conf b/config/syslinux/unattended.conf
deleted file mode 100644 (file)
index 169463b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-DOMAINNAME=localdomain
-HOSTNAME=ipfire
-KEYMAP=/lib/kbd/keymaps/i386/qwerty/us.map.gz
-LANGUAGE=en
-TIMEZONE=/usr/share/zoneinfo/posix/Europe/Berlin
-THEME=ipfire
-GREEN_ADDRESS=192.168.0.1
-GREEN_NETMASK=255.255.255.0
-GREEN_NETADDRESS=192.168.0.0
-GREEN_BROADCAST=192.168.0.255
-ROOT_PASSWORD=ipfire
-ADMIN_PASSWORD=ipfire
index 672b15277a2196c387b4804da9f994d564cd25eb..0fb1193fe4c7347dacc36b8a47ea61e54c0108f8 100755 (executable)
Binary files a/config/u-boot/boot.scr and b/config/u-boot/boot.scr differ
index 66d76282fc0d6175c279099252d9676dad9398a1..2017e71ae64204b6c5205c68d8362c993a4093a1 100755 (executable)
@@ -1,7 +1,7 @@
+setenv initrd_high 90000000
 fatload mmc 0:1 0x82000000 zImage-ipfire-multi
-fatload mmc 0:1 0x85000000 uInit-ipfire-multi
-#fatload mmc 0:1 ${fdtaddr} omap4-${board_name}.dtb
+#fatload mmc 0:1 0x85000000 uInit-ipfire-multi
+fatload mmc 0:1 ${fdtaddr} omap4-${board_name}.dtb
 setenv bootargs video=800x600 console=tty1 rootwait smsc95xx.macaddr=$usbethaddr root=/dev/mmcblk0p3 ro
-# Pandaboard has serious Problems in dt mode with kernel 3.10.x
 #bootz 0x82000000 0x85000000 ${fdtaddr}
-bootz 0x82000000 0x85000000
+bootz 0x82000000 - ${fdtaddr}
index 5318673117e43f46bca63dd1d78ee9db7ec4e6fd..a23491fc9ea94b45253069f3e6154dd24656820d 100644 (file)
@@ -21,5 +21,5 @@ other usefull commands from the Dom0:
 
 This script can also build a Citrix XenCenter xva image. (Need xz-aware
 xen version. Tested with Citrix Xen Server 6.2.5 beta)
-- run "XEN_IMG_TYPE=xva sh xen-image-maker.sh" to build an xva image.
-- import the vm with "xe vm-import file=ipfire.xfa"
+- run "XEN_IMG_TYPE=xva bash xen-image-maker.sh" to build an xva image.
+- import the vm with "xe vm-import file=ipfire.xva"
index 83c242fc3322422af57a2430a4345bbd34c89e40..bf928516cae1460c165c9defd30ce5b1756ebba7 100644 (file)
@@ -1,16 +1,10 @@
 ############################################################################
-# Checking install/setup translations for language: en                     #
-############################################################################
-############################################################################
 # Checking cgi-bin translations for language: en                           #
 ############################################################################
 < addon
 < ccd maxclients
 < ovpn_fragment
 ############################################################################
-# Checking install/setup translations for language: fr                     #
-############################################################################
-############################################################################
 # Checking cgi-bin translations for language: fr                           #
 ############################################################################
 < addon
 < wlan client wpa mode ccmp tkip
 < wlan client wpa mode tkip tkip
 ############################################################################
-# Checking install/setup translations for language: es                     #
-############################################################################
-############################################################################
 # Checking cgi-bin translations for language: es                           #
 ############################################################################
 < addon
 < wlan client wpa mode ccmp tkip
 < wlan client wpa mode tkip tkip
 ############################################################################
-# Checking install/setup translations for language: pl                     #
-############################################################################
-############################################################################
 # Checking cgi-bin translations for language: pl                           #
 ############################################################################
 < addon
 < wlan client wpa mode ccmp tkip
 < wlan client wpa mode tkip tkip
 ############################################################################
-# Checking install/setup translations for language: ru                     #
-############################################################################
-############################################################################
 # Checking cgi-bin translations for language: ru                           #
 ############################################################################
 < Add a route
diff --git a/langs/de/install/lang_de.c b/langs/de/install/lang_de.c
deleted file mode 100644 (file)
index 8c93586..0000000
+++ /dev/null
@@ -1,600 +0,0 @@
-/*
- * German (de) Data File
- *
- * This file is part of the IPFire.
- * 
- * IPCop 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.
- * 
- * IPCop 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 IPCop; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- * 
- * (c) IPFire Team  <info@ipfire.org>
- *
- * based on work of SmoothWall and IPCop
- *
- * (c) The SmoothWall Team
- * 
- * IPCop translation
- * (c) 2003 Dirk Loss, Ludwig Steininger, Michael Knappe, Michael Linke,
- * Richard Hartmann, Ufuk Altinkaynak, Gerhard Abrahams, Benjamin Kohberg,
- * Samuel Wiktor 
- */
-#include "libsmooth.h"
-
-char *de_tr[] = {
-
-/* TR_ISDN */
-"ISDN",
-/* TR_ERROR_PROBING_ISDN */
-"Konnte ISDN Scan nicht durchführen.",
-/* TR_PROBING_ISDN */
-"Suche und konfiguriere ISDN Geräte.",
-/* TR_MISSING_GREEN_IP */
-"Fehlende IP auf der grünen Schnittstelle!",
-/* TR_CHOOSE_FILESYSTEM */
-"Bitte wählen Sie ihr Dateisystem aus:",
-/* TR_NOT_ENOUGH_INTERFACES */
-"Nicht genügend Netzwerkkarten für diese Auswahl gefunden.\n\nBenötigt: %d - Gefunden: %d\n",
-/* TR_INTERFACE_CHANGE */
-"Bitte wählen Sie das Interface aus das geändert werden soll.\n\n",
-/* TR_NETCARD_COLOR */
-"Zugewiesene Karten",
-/* TR_REMOVE */
-"Entfernen",
-/* TR_MISSING_DNS */
-"Kein DNS eingetragen\n",
-/* TR_MISSING_DEFAULT */
-"Kein default Gateway eingetragen.\n",
-/* TR_JOURNAL_EXT3 */
-"Erstelle Journal für Ext3...",
-/* TR_CHOOSE_NETCARD */
-"Bitte wählen Sie eine der untenstehenden Netzwerkkarten für die folgene Schnittstelle aus - %s.",
-/* TR_NETCARDMENU2 */
-"Erweitertes Netzwerkmenu",
-/* TR_ERROR_INTERFACES */
-"Es wurden leider keine freien Netzwerkkarten für die Schnittstelle in ihrem System gefunden.",
-/* TR_REMOVE_CARD */
-"Soll die Zuordnung der folgende Netzwerkkarte entfernt werden? - %s",
-/* TR_JOURNAL_ERROR */
-"Konnte das Journal nicht erstelle, verwende ext2 Fallback.",
-/* TR_FILESYSTEM */
-"Dateisystemauswahl",
-/* TR_ADDRESS_SETTINGS */
-"Adress-Einstellungen",
-/* TR_ADMIN_PASSWORD */
-"'admin'-Passwort",
-/* TR_AGAIN_PROMPT */
-"Wiederholung:",
-/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */
-"Alle Karten wurden erfolgreich zugeordnet.",
-/* TR_AUTODETECT */
-"* AUTOMATISCHE ERKENNUNG *",
-/* TR_BUILDING_INITRD */
-"Erzeuge Ramdisk...",
-/* TR_CANCEL */
-"Abbrechen",
-/* TR_CARD_ASSIGNMENT */
-"Karten-Zuordnung",
-/* TR_CHECKING */
-"Überprüfe URL...",
-/* TR_CHECKING_FOR */
-"Suche nach: %s",
-/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */
-"Wähle die ISDN-Karte in diesem Computer aus:",
-/* TR_CHOOSE_THE_ISDN_PROTOCOL */
-"Wählen Sie das benötigte ISDN-Protokoll.",
-/* TR_CONFIGURE_DHCP */
-"Konfigurieren Sie den DHCP-Server durch Eingabe der Einstellungen:",
-/* TR_CONFIGURE_NETWORKING */
-"Netzwerk konfigurieren",
-/* TR_CONFIGURE_NETWORKING_LONG */
-"Sie sollten jetzt das Netzwerk konfigurieren. Laden Sie zunächst den richtigen Treiber für die GRÜNE Schnittstelle, indem Sie die Netzwerkkarte entweder automatisch erkennen lassen oder den richtigen Treiber aus einer Liste auswählen. Wenn Sie mehr als eine Netzwerkkarte installiert haben, können Sie die anderen später konfigurieren. Sollten Sie mehrere Karten vom gleichen Typ wie die an der GRÜNEN Schnittstelle haben und jede Karte spezielle Modulparameter benötigen, sollten Sie jetzt die Parameter für alle diese Karten eingeben, so dass alle Karten aktiv werden, wenn Sie die GRÜNE Schnittstelle konfigurieren.",
-/* TR_CONFIGURE_NETWORK_DRIVERS */
-"Konfigurieren Sie die Netzwerktreiber und geben Sie an, welcher Schnittstelle jede Karte zugewiesen ist. Die aktuelle Konfiguration ist wie folgt:\n\n",
-/* TR_CONFIGURE_THE_CDROM */
-"Konfigurieren Sie das CD-ROM-Laufwerk, indem Sie die richtigen Werte für IO-Adresse und/oder IRQ eingeben.",
-/* TR_CONGRATULATIONS */
-"Herzlichen Glückwunsch!",
-/* TR_CONGRATULATIONS_LONG */
-"%s wurde erfolgreich installiert. Entfernen Sie bitte alle eventuellen CDs aus dem Computer. Nun wird das Setup-Programm gestartet, in dem Sie ISDN, Netzwerkkarten und die Systempasswörter konfigurieren können. Wenn dies fertiggestellt ist, rufen Sie in Ihrem Webbrowser die Box mit https://%s:444 (oder welchen Namen Sie Ihrem %s auch immer gegeben haben) auf und konfigurieren die Wählverbindung und (falls nötig) die Fernwartung.",
-/* TR_CONTINUE_NO_SWAP */
-"Ihre Festplatte ist sehr klein, aber sie können mit einer minimalen Auslagerungspartition weitermachen. (Mit Vorsicht benutzen).",
-/* TR_CURRENT_CONFIG */
-"Aktuelle Einstellung: %s%s",
-/* TR_DEFAULT_GATEWAY */
-"Standard-Gateway:",
-/* TR_DEFAULT_GATEWAY_CR */
-"Standard-Gateway\n",
-/* TR_DEFAULT_LEASE */
-"Voreingestellte Haltezeit (min):",
-/* TR_DEFAULT_LEASE_CR */
-"Voreinstellung der Haltezeit\n",
-/* TR_DETECTED */
-"Gefunden wurde: %s",
-/* TR_DHCP_HOSTNAME */
-"DHCP-Hostname:",
-/* TR_DHCP_HOSTNAME_CR */
-"DHCP-Hostname\n",
-/* TR_DHCP_SERVER_CONFIGURATION */
-"DHCP-Konfiguration",
-/* TR_DISABLED */
-"Deaktiviert",
-/* TR_DISABLE_ISDN */
-"ISDN deaktivieren",
-/* TR_DISK_TOO_SMALL */
-"Ihre Festplatte ist zu klein.",
-/* TR_DNS_AND_GATEWAY_SETTINGS */
-"DNS- und Gateway-Einstellungen",
-/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */
-"Geben Sie die DNS- und Gateway-Informationen ein. Diese Einstellungen werden nur bei einer statischen IP an der ROTEN Schnittstelle benutzt (und DHCP, falls DNS eingetragen wurde).",
-/* TR_DNS_GATEWAY_WITH_GREEN */
-"Ihre Konfiguration benutzt keine Ethernet-Karte für die ROTE Schnittstelle. DNS- und Gateway-Informationen für  Einwahl- verbindungen werden automatisch beim Einwählen konfiguriert.",
-/* TR_DOMAINNAME */
-"Domainname",
-/* TR_DOMAINNAME_CANNOT_BE_EMPTY */
-"Domain Name darf nicht leer sein.",
-/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */
-"Domainname darf keine Leerzeichen enthalten.",
-/* TR_DOMAINNAME_NOT_VALID_CHARS */
-"Domain Name darf nur Buchstaben, Ziffern, Bindestriche und Punkte enthalten.",
-/* TR_DOMAIN_NAME_SUFFIX */
-"Domainnamen-Suffix:",
-/* TR_DOMAIN_NAME_SUFFIX_CR */
-"Domainnamen-Suffix\n",
-/* TR_DONE */
-"Fertig",
-/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */
-"\nMöchten Sie die Einstellungen ändern?",
-/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */
-"Treiber- und Karten-Zuordnungen",
-/* TR_ENABLED */
-"aktiviert",
-/* TR_ENABLE_ISDN */
-"ISDN aktivieren",
-/* TR_END_ADDRESS */
-"Endadresse:",
-/* TR_END_ADDRESS_CR */
-"Endadresse\n",
-/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */
-"Einige ISDN-Karten (besonders ISA-Karten) benötigen zusätzliche Modulparameter, um die IRQ- und IO-Adress-Informationen einzustellen. Wenn Sie eine solche ISDN-Karte haben, geben Sie diese Parameter hier ein (z. B. \"io=0x280 irq=9\"). Sie werden dann bei der Erkennung der Karte berücksichtigt.",
-/* TR_ENTER_ADMIN_PASSWORD */
-"Geben Sie das Passwort für den %s-Administrator 'admin' ein. Das ist der Benutzer, mit dem Sie sich an den %s-Webadministrationsseiten anmelden.",
-/* TR_ENTER_DOMAINNAME */
-"Bitte geben Sie den Domainnamen ein",
-/* TR_ENTER_HOSTNAME */
-"Geben Sie den Hostnamen des Rechners an:",
-/* TR_ENTER_IP_ADDRESS_INFO */
-"Geben Sie die IP-Adressinformationen ein",
-/* TR_ENTER_NETWORK_DRIVER */
-"Kann die Netzwerkkarte nicht automatisch erkennen. Geben Sie den Modulnamen und eventuelle Parameter für die Netzwerkkarte an.",
-/* TR_ENTER_ROOT_PASSWORD */
-"Geben Sie das Passwort für den Benutzer 'root' ein. Melden Sie sich als dieser Benutzer an, um Zugriff auf die Befehlszeile zu erhalten.",
-/* TR_ENTER_SETUP_PASSWORD */
-"Geben Sie das Passwort für den Benutzer 'setup' ein. Melden Sie sich als dieser Benutzer an, um das Setup-Programm zu starten.",
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
-"Geben Sie die IP-Adressinformationen für die folgende Schnittstelle ein - %s.",
-/* TR_ENTER_THE_LOCAL_MSN */
-"Geben Sie Ihre lokale Telefonnummer ein (MSN/EAZ):",
-/* TR_ENTER_URL */
-"Geben Sie die URL für ipcop-<version>.tgz und die images/scsidrv-<version>.img-Dateien ein. WARNUNG: DNS ist nicht verfügbar! Sie sollten jetzt nur etwas im Format 'http://X.X.X.X/<verzeichnis>' eingeben. ",
-/* TR_ERROR */
-"Fehler",
-/* TR_ERROR_PROBING_CDROM */
-"Kein CDROM-Laufwerk gefunden.",
-/* TR_ERROR_WRITING_CONFIG */
-"Fehler beim Schreiben der Konfigurationsinformationen.",
-/* TR_EURO_EDSS1 */
-"DSS1 (Euro-ISDN) (meist richtig)",
-/* TR_EXTRACTING_MODULES */
-"Entpacke die Module...",
-/* TR_FAILED_TO_FIND */
-"Konnte die URL-Datei nicht finden.",
-/* TR_FOUND_NIC */
-"%s hat den folgenden NIC in Ihrer Maschine erkannt: %s",
-/* TR_GERMAN_1TR6 */
-"1TR6",
-/* TR_HELPLINE */
-"       <Tab>/<Alt-Tab> wechselt zwischen Elementen | <Leertaste> wählt aus",
-/* TR_HOSTNAME */
-"Hostname",
-/* TR_HOSTNAME_CANNOT_BE_EMPTY */
-"Der Hostname darf nicht leer sein.",
-/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */
-"Der Hostname darf keine Leerzeichen enthalten.",
-/* TR_HOSTNAME_NOT_VALID_CHARS */
-"Hostname darf nur Buchstaben, Ziffern und Bindestriche enthalten.",
-/* TR_INITIALISING_ISDN */
-"Initialisiere ISDN...",
-/* TR_INSERT_CDROM */
-"Legen Sie bitte die %s CD in das CD-ROM-Laufwerk ein.",
-/* TR_INSERT_FLOPPY */
-"Legen Sie bitte die %s-Treiberdiskette in das Diskettenlaufwerk ein.",
-/* TR_INSTALLATION_CANCELED */
-"Installation abgebrochen.",
-/* TR_INSTALLING_FILES */
-"Installiere Dateien...",
-/* TR_INSTALLING_GRUB */
-"Installiere GRUB...",
-/* TR_INSTALLING_LANG_CACHE */
-"Installiere Sprachunterstützung...",
-/* TR_INTERFACE */
-"Schnittstelle - %s",
-/* TR_INTERFACE_FAILED_TO_COME_UP */
-"Schnittstelle konnte nicht aktiviert werden.",
-/* TR_INVALID_FIELDS */
-"Die folgenden Felder sind ungültig:\n\n",
-/* TR_INVALID_IO */
-"Die angegebenen Einstellungen für den IO-Port sind ungültig. ",
-/* TR_INVALID_IRQ */
-"Die eingegebenen IRQ-Einstellungen sind ungültig.",
-/* TR_IP_ADDRESS_CR */
-"IP-Adresse\n",
-/* TR_IP_ADDRESS_PROMPT */
-"IP-Adresse:",
-/* TR_ISDN_CARD */
-"ISDN-Karte",
-/* TR_ISDN_CARD_NOT_DETECTED */
-"Keine ISDN-Karte gefunden. Möglicherweise müssen Sie zusätzliche Modulparameter angeben, wenn es sich um eine ISA-Karte handelt oder die Karte spezielle Anforderungen hat.",
-/* TR_ISDN_CARD_SELECTION */
-"Auswahl der ISDN-Karte",
-/* TR_ISDN_CONFIGURATION */
-"ISDN-Konfiguration",
-/* TR_ISDN_CONFIGURATION_MENU */
-"ISDN-Konfigurationsmenü",
-/* TR_ISDN_NOT_SETUP */
-"ISDN nicht eingestellt. Einige Parameter wurden nicht ausgewählt.",
-/* TR_ISDN_NOT_YET_CONFIGURED */
-"ISDN wurde noch nicht konfiguriert. Wählen Sie aus, was Sie konfigurieren möchten.",
-/* TR_ISDN_PROTOCOL_SELECTION */
-"Auswahl des ISDN-Protokolls",
-/* TR_ISDN_STATUS */
-"ISDN ist momentan %s.\n\n   Protokoll: %s\n   Karte: %s\n   Lokale Telefonnummer: %s\n\nWählen Sie aus, was Sie konfigurieren möchten, oder verwerfen Sie die aktuellen Einstellungen.",
-/* TR_KEYBOARD_MAPPING */
-"Tastatur-Layout",
-/* TR_KEYBOARD_MAPPING_LONG */
-"Wählen Sie aus dieser Liste den Tastatur-Typ aus, den Sie benutzen.",
-/* TR_LEASED_LINE */
-"Standleitung (leased line)",
-/* TR_LOADING_MODULE */
-"Lade Modul...",
-/* TR_LOADING_PCMCIA */
-"PCMCIA-Module werden geladen...",
-/* TR_LOOKING_FOR_NIC */
-"Suche nach: %s",
-/* TR_MAKING_BOOT_FILESYSTEM */
-"Erstelle das Boot-Dateisystem...",
-/* TR_MAKING_LOG_FILESYSTEM */
-"Erstelle das Log-Dateisystem...",
-/* TR_MAKING_ROOT_FILESYSTEM */
-"Erstelle das Root-Dateisystem...",
-/* TR_MAKING_SWAPSPACE */
-"Erstelle Swap-Partition...",
-/* TR_MANUAL */
-"* MANUELL *",
-/* TR_MAX_LEASE */
-"Maximale Haltezeit (min):",
-/* TR_MAX_LEASE_CR */
-"Maximale Haltezeit\n",
-/* TR_MISSING_BLUE_IP */
-"Fehlende IP-Information für das BLAUE Interface.",
-/* TR_MISSING_ORANGE_IP */
-"IP-Informationen für die ORANGE Schnittstelle fehlen.",
-/* TR_MISSING_RED_IP */
-"IP-Informationen für die ROTE Schnittstelle fehlen.",
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */
-"Der Modulname darf nicht leer sein.",
-/* TR_MODULE_PARAMETERS */
-"Geben Sie den Modulnamen und die Parameter für den benötigten Treiber an.",
-/* TR_MOUNTING_BOOT_FILESYSTEM */
-"Mounte das Boot-Dateisystem...",
-/* TR_MOUNTING_LOG_FILESYSTEM */
-"Mounte das Log-Dateisystem...",
-/* TR_MOUNTING_ROOT_FILESYSTEM */
-"Mounte das Root-Dateisystem...",
-/* TR_MOUNTING_SWAP_PARTITION */
-"Mounte die Swap-Partition...",
-/* TR_MSN_CONFIGURATION */
-"Lokale Telefonnummer (MSN/EAZ)",
-/* TR_NETMASK_PROMPT */
-"Subnetzmaske:",
-/* TR_NETWORKING */
-"Netzwerk",
-/* TR_NETWORK_ADDRESS_CR */
-"Netzwerkadresse\n",
-/* TR_NETWORK_ADDRESS_PROMPT */
-"Netzwerkadresse:",
-/* TR_NETWORK_CONFIGURATION_MENU */
-"Netzwerkkonfiguration",
-/* TR_NETWORK_CONFIGURATION_TYPE */
-"Typ der Netzwerkkonfiguration",
-/* TR_NETWORK_CONFIGURATION_TYPE_LONG */
-"Wählen Sie die Netzwerkkonfiguration für %s aus. Die folgenden Konfigurationstypen listen diejenigen Schnittstellen auf, die am Ethernet angeschlossen sind. Wenn Sie diese Einstellung ändern, muss das Netzwerk neu gestartet werden und Sie müssen die Netzwerktreiber neu zuweisen.",
-/* TR_NETWORK_MASK_CR */
-"Subnetzmaske\n",
-/* TR_NETWORK_SETUP_FAILED */
-"Netzwerk-Setup fehlgeschlagen.",
-/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */
-"Nicht genügend Karten wurden zugeordnet.",
-/* TR_NO_BLUE_INTERFACE */
-"Kein BLAUES Interface zugeordnet.",
-/* TR_NO_CDROM */
-"Kein CD-ROM gefunden.",
-/* TR_NO_GREEN_INTERFACE */
-"Keine GRÜNE Schnittstelle zugewiesen.",
-/* TR_NO_HARDDISK */
-"Keine Festplatte gefunden.",
-/* TR_NO_IPCOP_TARBALL_FOUND */
-"Auf dem Webserver wurde kein ipcop-Tarball gefunden.",
-/* TR_NO_ORANGE_INTERFACE */
-"Keine ORANGE Schnittstelle zugewiesen.",
-/* TR_NO_RED_INTERFACE */
-"Keine ROTE Schnittstelle zugewiesen.",
-/* TR_NO_SCSI_IMAGE_FOUND */
-"Auf dem Webserver wurde kein SCSI-Image gefunden.",
-/* TR_NO_UNALLOCATED_CARDS */
-"Es sind keine nicht zugeteilten Karten übrig; es werden aber noch mehr benötigt. Sie könnten einen Treiber aus der Liste auswählen oder eine automatische Erkennung starten.",
-/* TR_OK */
-"Ok",
-/* TR_PARTITIONING_DISK */
-"Partitioniere die Festplatte...",
-/* TR_PASSWORDS_DO_NOT_MATCH */
-"Die Passwörter stimmen nicht überein.",
-/* TR_PASSWORD_CANNOT_BE_BLANK */
-"Die Passwörter dürfen nicht leer sein.",
-/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */
-"Das Passwort darf keine Leerzeichen enthalten.",
-/* TR_PASSWORD_PROMPT */
-"Passwort:",
-/* TR_PHONENUMBER_CANNOT_BE_EMPTY */
-"Die Telefonnummer darf nicht leer sein.",
-/* TR_PREPARE_HARDDISK */
-"Das Installationsprogramm wird jetzt die Festplatte %s vorbereiten. Zunächst wird die Festplatte partitioniert. Danach wird auf den Partitionen ein Dateisystem erstellt.\n\nALLE DATEN AUF DEM LAUFWERK WERDEN GELÖSCHT. Einverstanden?",
-/* TR_PRESS_OK_TO_REBOOT */
-"Drücken Sie Ok, um neu zu starten.",
-/* TR_PRIMARY_DNS */
-"Primärer DNS:",
-/* TR_PRIMARY_DNS_CR */
-"Primärer DNS\n",
-/* TR_PROBE */
-"Automatische Erkennung",
-/* TR_PROBE_FAILED */
-"Automatische Erkennung fehlgeschlagen.",
-/* TR_PROBING_HARDWARE */
-"Hardwareerkennung läuft...",
-/* TR_PROBING_FOR_NICS */
-"Netzwerkkartenerkennung läuft...",
-/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */
-"Problem beim Setzen des %s Administrator-Passworts.",
-/* TR_PROBLEM_SETTING_ROOT_PASSWORD */
-"Problem beim Setzen des 'root'-Passworts.",
-/* TR_PROBLEM_SETTING_SETUP_PASSWORD */
-"Problem beim Setzen des 'setup'-Passworts.",
-/* TR_PROTOCOL_COUNTRY */
-"Protokoll/Land",
-/* TR_PULLING_NETWORK_UP */
-"Starte Netzwerk...",
-/* TR_PUSHING_NETWORK_DOWN */
-"Fahre Netzwerk herunter...",
-/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */
-"Fahre nicht-lokales Netzwerk herunter...",
-/* TR_QUIT */
-"Beenden",
-/* TR_RED_IN_USE */
-"ISDN (oder eine andere externe Verbindung) wird momentan benutzt. Sie können ISDN nicht konfigurieren, während die ROTE Schnittstelle aktiv ist.",
-/* TR_RESTART_REQUIRED */
-"\n\nWenn die Konfiguration komplett ist, muss das Netzwerk neu gestartet werden.",
-/* TR_RESTORE */
-"Wiederherstellen",
-/* TR_RESTORE_CONFIGURATION */
-"Falls Sie eine Diskette mit %s-Systemeinstellungen haben, legen Sie die Diskette in das Floppylaufwerk und \ndrücken auf <Wiederherstellen>",
-/* TR_ROOT_PASSWORD */
-"'root'-Passwort",
-/* TR_SECONDARY_DNS */
-"Sekundärer DNS:",
-/* TR_SECONDARY_DNS_CR */
-"Sekundärer DNS\n",
-/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */
-"Sekundären DNS angegeben ohne primären DNS",
-/* TR_SECTION_MENU */
-"Auswahlmenu",
-/* TR_SELECT */
-"Auswählen",
-/* TR_SELECT_CDROM_TYPE */
-"Wählen Sie den Typ des CD-ROM-Laufwerks aus",
-/* TR_SELECT_CDROM_TYPE_LONG */
-"Es wurde kein CD-ROM-Laufwerk in diesem Rechner gefunden. Bitte wählen Sie aus, welchen der folgenden Treiber Sie benutzen möchten, damit %s das CD-ROM-Laufwerk ansprechen kann.",
-/* TR_SELECT_INSTALLATION_MEDIA */
-"Wählen Sie das Installationsmedium",
-/* TR_SELECT_INSTALLATION_MEDIA_LONG */
-"%s kann von verschiedenen Programmquellen installiert werden.  Am einfachsten ist, Sie benutzen das eingebaute CD-ROM-Laufwerk. Falls der Computer kein CD-ROM-Laufwerk besitzt, können Sie von einem anderen Rechner im LAN installieren, der die Installationsdateien per HTTP oder FTP zur Verfügung stellt.",
-/* TR_SELECT_NETWORK_DRIVER */
-"Wählen Sie den Netzwerktreiber aus",
-/* TR_SELECT_NETWORK_DRIVER_LONG */
-"Wählen Sie den Treiber für die in diesem Rechner eingebaute Netzwerkkarte aus. Wenn Sie MANUELL auswählen, können Sie den Modulnamen des Treibers  und die Parameter selbst angeben (z. B. für Treiber mit speziellen Anforderungen, wie bei ISA-Karten).",
-/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */
-"Wählen Sie die Schnittstelle aus, die Sie neu konfigurieren möchten.",
-/* TR_SELECT_THE_ITEM */
-"Wählen Sie den Punkt aus, den Sie konfigurieren möchten:",
-/* TR_SETTING_ADMIN_PASSWORD */
-"Setze %s-Administrator-Passwort....",
-/* TR_SETTING_ROOT_PASSWORD */
-"Setze 'root'-Passwort....",
-/* TR_SETTING_SETUP_PASSWORD */
-"Setze 'setup'-Passwort...",
-/* TR_SETUP_FINISHED */
-"Das Setup ist vollständig beendet. Drücken Sie Ok.",
-/* TR_SETUP_NOT_COMPLETE */
-"Das erste Setup wurde nicht vollständig durchgeführt. Sie müssen Setup vollständig beenden; dies können Sie durch Ausführen von Setup in der Shell nachholen.",
-/* TR_SETUP_PASSWORD */
-"'setup'-Passwort",
-/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */
-"Zusätzliche Modulparameter angeben",
-/* TR_SINGLE_GREEN */
-"In ihrer Konfiguration ist eine GRÜNE Schnittstelle eingestellt.",
-/* TR_SKIP */
-"Überspringen",
-/* TR_START_ADDRESS */
-"Anfangsadresse:",
-/* TR_START_ADDRESS_CR */
-"Anfangsadressen\n",
-/* TR_STATIC */
-"Statisch",
-/* TR_SUGGEST_IO */
-"(schlage vor %x)",
-/* TR_SUGGEST_IRQ */
-"(schlage vor %d)",
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
-"Dieses Treibermodul ist bereits geladen.",
-/* TR_TIMEZONE */
-"Zeitzone",
-/* TR_TIMEZONE_LONG */
-"Wählen Sie die Zeitzone aus, in der Sie sich befinden.",
-/* TR_UNABLE_TO_EJECT_CDROM */
-"Kann die CD-ROM nicht auswerfen.",
-/* TR_UNABLE_TO_EXTRACT_MODULES */
-"Module können nicht extrahiert werden.",
-/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */
-"Kann keine weiteren Treiber finden.",
-/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */
-"Kann keine ISDN-Karte in diesem Computer finden. Möglicherweise müssen Sie zusätzliche Modulparameter angeben, wenn es sich um eine ISA-Karte handelt oder die Karte spezielle Anforderungen hat.",
-/* TR_UNABLE_TO_INITIALISE_ISDN */
-"Kann ISDN nicht initialisieren.",
-/* TR_UNABLE_TO_INSTALL_FILES */
-"Kann die Dateien nicht installieren.",
-/* TR_UNABLE_TO_INSTALL_LANG_CACHE */
-"Kann Sprachunterstützung nicht installieren.",
-/* TR_UNABLE_TO_INSTALL_GRUB */
-"Kann GRUB nicht installieren.",
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
-"Kann Treibermodul nicht laden.",
-/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */
-"Kann das Boot-Dateisystem nicht erstellen.",
-/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */
-"Kann das Log-Dateisystem nicht erstellen.",
-/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */
-"Kann das Root-Dateisystem nicht erstellen.",
-/* TR_UNABLE_TO_MAKE_SWAPSPACE */
-"Kann Swap-Partition nicht erstellen.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */
-"Kann symbolischen Link /dev/harddisk nicht anlegen.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */
-"Kann symbolischen Link /dev/harddisk1 nicht anlegen.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */
-"Kann symbolischen Link /dev/harddisk2 nicht anlegen.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */
-"Kann symbolischen Link /dev/harddisk3 nicht anlegen.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */
-"Kann symbolischen Link /dev/harddisk4 nicht anlegen.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */
-"Symlink /dev/root kann nicht erzeugt werden.",
-/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */
-"Kann das Root-Dateisystem nicht mounten.",
-/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */
-"Kann das Log-Dateisystem nicht mounten.",
-/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */
-"Das proc-Dateisystem kann nicht gemountet werden.",
-/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */
-"Kann das Root-Dateisystem nicht mounten.",
-/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */
-"Kann die Swap-Partition nicht unmounten.",
-/* TR_UNABLE_TO_OPEN_HOSTS_FILE */
-"Kann primäre hosts-Datei nicht öffnen.",
-/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */
-"Kann Datei mit Einstellungen nicht öffnen",
-/* TR_UNABLE_TO_PARTITION */
-"Kann die Festplatte nicht partitionieren.",
-/* TR_UNABLE_TO_REMOVE_TEMP_FILES */
-"Kann temporär heruntergeladene Dateien nicht löschen.",
-/* TR_UNABLE_TO_SET_HOSTNAME */
-"Kann Hostnamen nicht setzen.",
-/* TR_UNABLE_TO_UNMOUNT_CDROM */
-"Kann die CD-ROM bzw. Floppy nicht unmounten.",
-/* TR_UNABLE_TO_UNMOUNT_HARDDISK */
-"Kann die Festplatte nicht unmounten.",
-/* TR_UNABLE_TO_WRITE_ETC_FSTAB */
-"Kann /etc/fstab nicht schreiben",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */
-"Kann /etc/hostname nicht schreiben",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS */
-"Kann /etc/hosts nicht schreiben.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */
-"Kann /etc/hosts.allow nicht schreiben.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */
-"Kann /etc/hosts.deny nicht schreiben.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */
-"Kann %s/ethernet/settings nicht schreiben.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */
-"Kann %s/main/hostname.conf nicht schreiben",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */
-"Kann %s/main/settings nicht schreiben.",
-/* TR_UNCLAIMED_DRIVER */
-"Es gibt eine nicht zugeordnete Ethernet-Karte des Typs:\n%s\n\nSie können sie zuweisen an:",
-/* TR_UNKNOWN */
-"UNBEKANNT",
-/* TR_UNSET */
-"NICHT GESETZT",
-/* TR_USB_KEY_VFAT_ERR */
-"Dieser USB-Stick ist ungültig (keine VFAT Partiton gefunden).",
-/* TR_US_NI1 */
-"US NI1",
-/* TR_WARNING */
-"WARNUNG",
-/* TR_WARNING_LONG */
-"Wenn Sie diese IP-Adresse ändern, während Sie über den Fernwartungszugang zugreifen, wird die Verbindung zum %s-Rechner abbrechen. Sie müssen dann eine Verbindung zur neuen IP-Adresse aufbauen. Dies ist ein riskanter Vorgang, der nur versucht werden sollte, wenn Sie physikalischen Zugriff auf den Rechner haben, für den Fall, dass etwas schief geht.",
-/* TR_WELCOME */
-"Willkommen zum %s Installationsprogramm. Wenn Sie auf irgendeiner der folgenden Seiten 'Abbrechen' auswählen, wird der Computer neu gestartet.",
-/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */
-"Ihre Konfiguration ist für eine einzelne GRÜNE Schnittstelle eingestellt, der bereits ein Treiber zugewiesen ist.",
-/* TR_YES */
-"Ja",
-/* TR_NO */
-"Nein",
-/* TR_AS */
-"als",
-/* TR_IGNORE */
-"Ignorieren",
-/* TR_PPP_DIALUP */
-"PPP Einwahl (PPPoE, Modem, ATM ...)",
-/* TR_DHCP */
-"DHCP",
-/* TR_DHCP_STARTSERVER */
-"Starte den DHCP-Server ...",
-/* TR_DHCP_STOPSERVER */
-"Stoppe den DHCP-Server ...",
-/* TR_LICENSE_ACCEPT */
-"Ich akzeptiere diese Lizenz.",
-/* TR_LICENSE_NOT_ACCEPTED */
-"Die Lizenz wurde nicht akzeptiert. Abbruch!",
-/* TR_EXT2FS_DESCR */
-"Ext2 - Dateisystem ohne Journal (empfohlen für Flash)",
-/* TR_EXT3FS_DESCR */
-"Ext3 - Dateisystem mit Journal",
-/* TR_EXT4FS_DESCR */
-"Ext4 - Dateisystem mit Journal",
-/* TR_REISERFS_DESCR */
-"ReiserFS - Dateisystem mit Journal",
-/* TR_NO_LOCAL_SOURCE */
-"Kein lokales Quellmedium gefunden. Starte Download.",
-/* TR_DOWNLOADING_ISO */
-"Lade Installations-Abbild ...",
-/* TR_DOWNLOAD_ERROR */
-"Beim Herunterladen ist ein Fehler aufgetreten!",
-/* TR_DHCP_FORCE_MTU */
-"DHCP MTU setzen:",
-/* TR_IDENTIFY */
-"Identifizieren",
-/* TR_IDENTIFY_SHOULD_BLINK */
-"Die Leds dieses Netzwerkports sollten jetzt blinken ...",
-/* TR_IDENTIFY_NOT_SUPPORTED */
-"Dieser Netzwerkport untestützt die Funktion leider nicht.",
-};
diff --git a/langs/en/install/lang_en.c b/langs/en/install/lang_en.c
deleted file mode 100644 (file)
index 12ac4b5..0000000
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
- * English (en) Data File
- *
- * This file is part of the IPFire.
- * 
- * IPCop 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.
- * 
- * IPCop 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 IPCop; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- * 
- * (c) IPFire Team  <info@ipfire.org>
- *
- * based on work of SmoothWall and IPCop
- *
- * (c) The SmoothWall Team
- *  
- */
-#include "libsmooth.h"
-
-char *en_tr[] = {
-
-/* TR_ISDN */
-"ISDN",
-/* TR_ERROR_PROBING_ISDN */
-"Unable to scan for ISDN devices.",
-/* TR_PROBING_ISDN */
-"Scanning and configuring ISDN devices.",
-/* TR_MISSING_GREEN_IP */
-"Missing Green IP!",
-/* TR_CHOOSE_FILESYSTEM */
-"Please choose your filesystem:",
-/* TR_NOT_ENOUGH_INTERFACES */
-"Not enough netcards for your choice.\n\nNeeded: %d - Available: %d\n",
-/* TR_INTERFACE_CHANGE */
-"Please choose the interface you wish to change.\n\n",
-/* TR_NETCARD_COLOR */
-"Assigned Cards",
-/* TR_REMOVE */
-"Remove",
-/* TR_MISSING_DNS */
-"Misssing DNS.\n",
-/* TR_MISSING_DEFAULT */
-"Missing Default Gateway.\n",
-/* TR_JOURNAL_EXT3 */
-"Creating journal for Ext3...",
-/* TR_CHOOSE_NETCARD */
-"Please choose a networkcard for the following interface - %s.",
-/* TR_NETCARDMENU2 */
-"Extended Networkmenu",
-/* TR_ERROR_INTERFACES */
-"There are no free interfaces on your system.",
-/* TR_REMOVE_CARD */
-"Should the allocation for the networkcard be deleted? - %s",
-/* TR_JOURNAL_ERROR */
-"Could not create the journal, using fallback to ext2.",
-/* TR_FILESYSTEM */
-"Choose Filesystem",
-/* TR_ADDRESS_SETTINGS */
-"Address settings",
-/* TR_ADMIN_PASSWORD */
-"'admin' password",
-/* TR_AGAIN_PROMPT */
-"Again:",
-/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */
-"All cards successfully allocated.",
-/* TR_AUTODETECT */
-"* AUTODETECT *",
-/* TR_BUILDING_INITRD */
-"Building ramdisk...",
-/* TR_CANCEL */
-"Cancel",
-/* TR_CARD_ASSIGNMENT */
-"Card assignment",
-/* TR_CHECKING */
-"Checking URL...",
-/* TR_CHECKING_FOR */
-"Checking for: %s",
-/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */
-"Choose the ISDN card installed in this computer.",
-/* TR_CHOOSE_THE_ISDN_PROTOCOL */
-"Choose the ISDN protocol you require.",
-/* TR_CONFIGURE_DHCP */
-"Configure the DHCP server by entering the settings information.",
-/* TR_CONFIGURE_NETWORKING */
-"Configure networking",
-/* TR_CONFIGURE_NETWORKING_LONG */
-"You should now configure networking by first loading the correct driver for the GREEN interface. You can do this by either auto-probing for a network card, or by choosing the correct driver from a list. Note that if you have more then one network card installed, you will be able to configure the others later on in the installation. Also note that if you have more then one card which is the same type as GREEN and each card requires special module parameters, you should enter parameters for all cards of this type such that all cards can become active when you configure the GREEN interface.",
-/* TR_CONFIGURE_NETWORK_DRIVERS */
-"Configure network drivers, and which interface each card is assigned to.  The current configuration is as follows:\n\n",
-/* TR_CONFIGURE_THE_CDROM */
-"Configure the CDROM by choosing the appropriate IO address and/or IRQ.",
-/* TR_CONGRATULATIONS */
-"Congratulations!",
-/* TR_CONGRATULATIONS_LONG */
-"%s was successfully installed. Please remove any CDROMs in the computer. Setup will now run where you may configure ISDN, network cards, and the system passwords. After Setup has been completed, you should point your web browser at https://%s:444 (or whatever you name your %s), and configure dialup networking (if required) and remote access.",
-/* TR_CONTINUE_NO_SWAP */
-"Your harddisk is very small, but you can continue with an very small swap. (Use with caution).",
-/* TR_CURRENT_CONFIG */
-"Current config: %s%s",
-/* TR_DEFAULT_GATEWAY */
-"Default Gateway:",
-/* TR_DEFAULT_GATEWAY_CR */
-"Default Gateway\n",
-/* TR_DEFAULT_LEASE */
-"Default lease (mins):",
-/* TR_DEFAULT_LEASE_CR */
-"Default lease time\n",
-/* TR_DETECTED */
-"Detected a: %s",
-/* TR_DHCP_HOSTNAME */
-"DHCP Hostname:",
-/* TR_DHCP_HOSTNAME_CR */
-"DHCP Hostname\n",
-/* TR_DHCP_SERVER_CONFIGURATION */
-"DHCP server configuration",
-/* TR_DISABLED */
-"Disabled",
-/* TR_DISABLE_ISDN */
-"Disable ISDN",
-/* TR_DISK_TOO_SMALL */
-"Your harddisk is too small.",
-/* TR_DNS_AND_GATEWAY_SETTINGS */
-"DNS and Gateway settings",
-/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */
-"Enter the DNS and gateway information.  These settings are used only with Static IP (and DHCP if DNS set) on the RED interface.",
-/* TR_DNS_GATEWAY_WITH_GREEN */
-"Your configuration does not utilise an ethernet adaptor for its RED interface.  DNS and Gateway information for dialup users is configured automatically at dialup time.",
-/* TR_DOMAINNAME */
-"Domain name",
-/* TR_DOMAINNAME_CANNOT_BE_EMPTY */
-"Domain name cannot be empty.",
-/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */
-"Domain name cannot contain spaces.",
-/* TR_DOMAINNAME_NOT_VALID_CHARS */
-"Domain name may only contain letters, numbers, hyphens and periods.",
-/* TR_DOMAIN_NAME_SUFFIX */
-"Domain name suffix:",
-/* TR_DOMAIN_NAME_SUFFIX_CR */
-"Domain name suffix\n",
-/* TR_DONE */
-"Done",
-/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */
-"\nDo you wish to change these settings?",
-/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */
-"Drivers and card assignments",
-/* TR_ENABLED */
-"Enabled",
-/* TR_ENABLE_ISDN */
-"Enable ISDN",
-/* TR_END_ADDRESS */
-"End address:",
-/* TR_END_ADDRESS_CR */
-"End address\n",
-/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */
-"Some ISDN cards (especially ISA ones) may require additional module parameters for setting IRQ and IO address information. If you have such a ISDN card, enter these extra parameters here. For example: \"io=0x280 irq=9\". They will be used during card detection.",
-/* TR_ENTER_ADMIN_PASSWORD */
-"Enter %s 'admin' user password.  This is the user to use for logging into the %s web administration pages.",
-/* TR_ENTER_DOMAINNAME */
-"Enter Domain name",
-/* TR_ENTER_HOSTNAME */
-"Enter the machine's hostname.",
-/* TR_ENTER_IP_ADDRESS_INFO */
-"Enter the IP address information",
-/* TR_ENTER_NETWORK_DRIVER */
-"Failed to detect a network card automatically. Enter the driver and optional parameters for the network card.",
-/* TR_ENTER_ROOT_PASSWORD */
-"Enter the 'root' user password. Login as this user for commandline access.",
-/* TR_ENTER_SETUP_PASSWORD */
-"TO BE REMOVED",
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
-"Enter the IP address information for the %s interface.",
-/* TR_ENTER_THE_LOCAL_MSN */
-"Enter the local phone number (MSN/EAZ).",
-/* TR_ENTER_URL */
-"Enter the URL path to the ipcop-<version>.tgz and images/scsidrv-<version>.img files. WARNING: DNS not available! This should now just be http://X.X.X.X/<directory>",
-/* TR_ERROR */
-"Error",
-/* TR_ERROR_PROBING_CDROM */
-"No CDROM drive found.",
-/* TR_ERROR_WRITING_CONFIG */
-"Error writing configuration information.",
-/* TR_EURO_EDSS1 */
-"Euro (EDSS1)",
-/* TR_EXTRACTING_MODULES */
-"Extracting modules...",
-/* TR_FAILED_TO_FIND */
-"Failed to find URL file.",
-/* TR_FOUND_NIC */
-"%s has detected the following NIC in your machine: %s",
-/* TR_GERMAN_1TR6 */
-"German 1TR6",
-/* TR_HELPLINE */
-"              <Tab>/<Alt-Tab> between elements   |  <Space> selects",
-/* TR_HOSTNAME */
-"Hostname",
-/* TR_HOSTNAME_CANNOT_BE_EMPTY */
-"Hostname cannot be empty.",
-/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */
-"Hostname cannot contain spaces.",
-/* TR_HOSTNAME_NOT_VALID_CHARS */
-"Hostname may only contain letters, numbers and hyphens.",
-/* TR_INITIALISING_ISDN */
-"Initialising ISDN...",
-/* TR_INSERT_CDROM */
-"Please insert the %s CD in the CDROM drive.",
-/* TR_INSERT_FLOPPY */
-"Please insert the %s driver diskette in the floppy drive.",
-/* TR_INSTALLATION_CANCELED */
-"Installation cancelled.",
-/* TR_INSTALLING_FILES */
-"Installing files...",
-/* TR_INSTALLING_GRUB */
-"Installing GRUB...",
-/* TR_INSTALLING_LANG_CACHE */
-"Installing language files...",
-/* TR_INTERFACE */
-"Interface - %s",
-/* TR_INTERFACE_FAILED_TO_COME_UP */
-"Interface failed to come up.",
-/* TR_INVALID_FIELDS */
-"The following fields are invalid:\n\n",
-/* TR_INVALID_IO */
-"The IO port details entered are invalid. ",
-/* TR_INVALID_IRQ */
-"The IRQ details entered are invalid.",
-/* TR_IP_ADDRESS_CR */
-"IP address\n",
-/* TR_IP_ADDRESS_PROMPT */
-"IP address:",
-/* TR_ISDN_CARD */
-"ISDN card",
-/* TR_ISDN_CARD_NOT_DETECTED */
-"ISDN card not detected. You may need to specify additional module parameters if the card is an ISA type or it has special requirements.",
-/* TR_ISDN_CARD_SELECTION */
-"ISDN card selection",
-/* TR_ISDN_CONFIGURATION */
-"ISDN Configuration",
-/* TR_ISDN_CONFIGURATION_MENU */
-"ISDN configuration menu",
-/* TR_ISDN_NOT_SETUP */
-"ISDN not setup. Some items have not been selected.",
-/* TR_ISDN_NOT_YET_CONFIGURED */
-"ISDN has not yet been configured. Select the item you wish to configure.",
-/* TR_ISDN_PROTOCOL_SELECTION */
-"ISDN protocol selection",
-/* TR_ISDN_STATUS */
-"ISDN is currently %s.\n\n   Protocol: %s\n   Card: %s\n   Local phone number: %s\n\nSelect the item you wish to reconfigure, or choose to use the current settings.",
-/* TR_KEYBOARD_MAPPING */
-"Keyboard mapping",
-/* TR_KEYBOARD_MAPPING_LONG */
-"Choose the type of keyboard you are using from the list below.",
-/* TR_LEASED_LINE */
-"Leased line",
-/* TR_LOADING_MODULE */
-"Loading module...",
-/* TR_LOADING_PCMCIA */
-"Loading PCMCIA modules...",
-/* TR_LOOKING_FOR_NIC */
-"Looking for: %s",
-/* TR_MAKING_BOOT_FILESYSTEM */
-"Making boot filesystem...",
-/* TR_MAKING_LOG_FILESYSTEM */
-"Making log filesystem...",
-/* TR_MAKING_ROOT_FILESYSTEM */
-"Making root filesystem...",
-/* TR_MAKING_SWAPSPACE */
-"Making swap space...",
-/* TR_MANUAL */
-"* MANUAL *",
-/* TR_MAX_LEASE */
-"Max lease (mins):",
-/* TR_MAX_LEASE_CR */
-"Max lease time\n",
-/* TR_MISSING_BLUE_IP */
-"Missing IP information on the BLUE interface.",
-/* TR_MISSING_ORANGE_IP */
-"Missing IP information on the ORANGE interface.",
-/* TR_MISSING_RED_IP */
-"Missing IP information on the RED interface.",
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */
-"Module name cannot be blank.",
-/* TR_MODULE_PARAMETERS */
-"Enter the module name and parameters for the driver you require.",
-/* TR_MOUNTING_BOOT_FILESYSTEM */
-"Mounting boot filesystem...",
-/* TR_MOUNTING_LOG_FILESYSTEM */
-"Mounting log filesystem...",
-/* TR_MOUNTING_ROOT_FILESYSTEM */
-"Mounting root filesystem...",
-/* TR_MOUNTING_SWAP_PARTITION */
-"Mounting swap partition...",
-/* TR_MSN_CONFIGURATION */
-"Local phone number (MSN/EAZ)",
-/* TR_NETMASK_PROMPT */
-"Network mask:",
-/* TR_NETWORKING */
-"Networking",
-/* TR_NETWORK_ADDRESS_CR */
-"Network address\n",
-/* TR_NETWORK_ADDRESS_PROMPT */
-"Network address:",
-/* TR_NETWORK_CONFIGURATION_MENU */
-"Network configuration menu",
-/* TR_NETWORK_CONFIGURATION_TYPE */
-"Network configuration type",
-/* TR_NETWORK_CONFIGURATION_TYPE_LONG */
-"Select the network configuration for %s.  The following configuration types list those interfaces which have ethernet attached. If you change this setting, a network restart will be required, and you will have to reconfigure the network driver assignments.",
-/* TR_NETWORK_MASK_CR */
-"Network mask\n",
-/* TR_NETWORK_SETUP_FAILED */
-"Network setup failed.",
-/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */
-"Not enough cards were allocated.",
-/* TR_NO_BLUE_INTERFACE */
-"No BLUE interface assigned.",
-/* TR_NO_CDROM */
-"No CD-ROM found.",
-/* TR_NO_GREEN_INTERFACE */
-"No GREEN interface assigned.",
-/* TR_NO_HARDDISK */
-"No hard disk found.",
-/* TR_NO_IPCOP_TARBALL_FOUND */
-"No ipcop tarball found on Web Server.",
-/* TR_NO_ORANGE_INTERFACE */
-"No ORANGE interface assigned.",
-/* TR_NO_RED_INTERFACE */
-"No RED interface assigned.",
-/* TR_NO_SCSI_IMAGE_FOUND */
-"No SCSI image found on Web Server.",
-/* TR_NO_UNALLOCATED_CARDS */
-"No unallocated cards remaining, more are required. You may autodetect and look for more cards, or choose to select a driver from the list.",
-/* TR_OK */
-"Ok",
-/* TR_PARTITIONING_DISK */
-"Partitioning disk...",
-/* TR_PASSWORDS_DO_NOT_MATCH */
-"Passwords do not match.",
-/* TR_PASSWORD_CANNOT_BE_BLANK */
-"Password cannot be blank.",
-/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */
-"Password cannot contain spaces.",
-/* TR_PASSWORD_PROMPT */
-"Password:",
-/* TR_PHONENUMBER_CANNOT_BE_EMPTY */
-"Phone number cannot be empty.",
-/* TR_PREPARE_HARDDISK */
-"The installation program will now prepare the harddisk on %s. First the disk will be partitioned, and then the partitions will have a filesystem put on them.\n\nALL DATA ON THE DISK WILL BE DESTROYED. Do you agree to continue?",
-/* TR_PRESS_OK_TO_REBOOT */
-"Press Ok to reboot.",
-/* TR_PRIMARY_DNS */
-"Primary DNS:",
-/* TR_PRIMARY_DNS_CR */
-"Primary DNS\n",
-/* TR_PROBE */
-"Probe",
-/* TR_PROBE_FAILED */
-"Auto detecting failed.",
-/* TR_PROBING_HARDWARE */
-"Probing hardware...",
-/* TR_PROBING_FOR_NICS */
-"Probing for NICs...",
-/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */
-"Problem setting %s 'admin' user password.",
-/* TR_PROBLEM_SETTING_ROOT_PASSWORD */
-"Problem setting 'root' password.",
-/* TR_PROBLEM_SETTING_SETUP_PASSWORD */
-"TO BE REMOVED",
-/* TR_PROTOCOL_COUNTRY */
-"Protocol/Country",
-/* TR_PULLING_NETWORK_UP */
-"Pulling network up...",
-/* TR_PUSHING_NETWORK_DOWN */
-"Pushing network down...",
-/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */
-"Pushing non local network down...",
-/* TR_QUIT */
-"Quit",
-/* TR_RED_IN_USE */
-"ISDN (or another external connection) is currently in use.  You may not configure ISDN while the RED interface is active.",
-/* TR_RESTART_REQUIRED */
-"\n\nWhen configuration is complete, a network restart will be required.",
-/* TR_RESTORE */
-"Restore",
-/* TR_RESTORE_CONFIGURATION */
-"If you have a floppy with an %s system configuration on it, place the floppy in the floppy drive and press the Restore button.",
-/* TR_ROOT_PASSWORD */
-"'root' password",
-/* TR_SECONDARY_DNS */
-"Secondary DNS:",
-/* TR_SECONDARY_DNS_CR */
-"Secondary DNS\n",
-/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */
-"Secondary DNS specified without a Primary DNS",
-/* TR_SECTION_MENU */
-"Section menu",
-/* TR_SELECT */
-"Select",
-/* TR_SELECT_CDROM_TYPE */
-"Select CDROM type",
-/* TR_SELECT_CDROM_TYPE_LONG */
-"No CD-ROM was detected in this machine.  Please select which of the following drivers you wish to use so that %s can access the CD-ROM.",
-/* TR_SELECT_INSTALLATION_MEDIA */
-"Select installation media",
-/* TR_SELECT_INSTALLATION_MEDIA_LONG */
-"%s can be installed from multiple sources.  The simplest is to use the machines CDROM drive. If the computer lacks a drive, you may install via another machine on the LAN which has the installation files available via HTTP or FTP.",
-/* TR_SELECT_NETWORK_DRIVER */
-"Select network driver",
-/* TR_SELECT_NETWORK_DRIVER_LONG */
-"Select the network driver for the card installed in this machine. If you select MANUAL, you will be given an opportunity to enter the driver module name and parameters for drivers which have special requirements, such as ISA cards.",
-/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */
-"Select the interface you wish to reconfigure.",
-/* TR_SELECT_THE_ITEM */
-"Select the item you wish to configure.",
-/* TR_SETTING_ADMIN_PASSWORD */
-"Setting %s 'admin' user password...",
-/* TR_SETTING_ROOT_PASSWORD */
-"Setting 'root' password....",
-/* TR_SETTING_SETUP_PASSWORD */
-"TO BE REMOVED",
-/* TR_SETUP_FINISHED */
-"Setup is complete.  Press Ok.",
-/* TR_SETUP_NOT_COMPLETE */
-"Initial setup was not entirely complete.  You must ensure that Setup is properly finished by running setup again at the shell.",
-/* TR_SETUP_PASSWORD */
-"TO BE REMOVED",
-/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */
-"Set additional module parameters",
-/* TR_SINGLE_GREEN */
-"Your configuration is set for a single GREEN interface.",
-/* TR_SKIP */
-"Skip",
-/* TR_START_ADDRESS */
-"Start address:",
-/* TR_START_ADDRESS_CR */
-"Start address\n",
-/* TR_STATIC */
-"Static",
-/* TR_SUGGEST_IO */
-"(suggest %x)",
-/* TR_SUGGEST_IRQ */
-"(suggest %d)",
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
-"This driver module is already loaded.",
-/* TR_TIMEZONE */
-"Timezone",
-/* TR_TIMEZONE_LONG */
-"Choose the timezone you are in from the list below.",
-/* TR_UNABLE_TO_EJECT_CDROM */
-"Unable to eject the CDROM.",
-/* TR_UNABLE_TO_EXTRACT_MODULES */
-"Unable to extract modules.",
-/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */
-"Unable to find any additional drivers.",
-/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */
-"Unable to find an ISDN card in this computer. You may need to specify additional module parameters if the card is an ISA type or it has special requirements.",
-/* TR_UNABLE_TO_INITIALISE_ISDN */
-"Unable to initialise ISDN.",
-/* TR_UNABLE_TO_INSTALL_FILES */
-"Unable to install files.",
-/* TR_UNABLE_TO_INSTALL_LANG_CACHE */
-"Unable to install language files.",
-/* TR_UNABLE_TO_INSTALL_GRUB */
-"Unable to install GRUB.",
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
-"Unable to load driver module.",
-/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */
-"Unable to make boot filesystem.",
-/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */
-"Unable to make log filesystem.",
-/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */
-"Unable to make root filesystem.",
-/* TR_UNABLE_TO_MAKE_SWAPSPACE */
-"Unable to make swap space.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */
-"Unable to create symlink /dev/harddisk.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */
-"Unable to create symlink /dev/harddisk1.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */
-"Unable to create symlink /dev/harddisk2.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */
-"Unable to create symlink /dev/harddisk3.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */
-"Unable to create symlink /dev/harddisk4.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */
-"Unable to create symlink /dev/root.",
-/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */
-"Unable to mount boot filesystem.",
-/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */
-"Unable to mount log filesystem.",
-/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */
-"Unable to mount proc filesystem.",
-/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */
-"Unable to mount root filesystem.",
-/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */
-"Unable to mount the swap partition.",
-/* TR_UNABLE_TO_OPEN_HOSTS_FILE */
-"Unable to open main hosts file.",
-/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */
-"Unable to open settings file",
-/* TR_UNABLE_TO_PARTITION */
-"Unable to partition the disk.",
-/* TR_UNABLE_TO_REMOVE_TEMP_FILES */
-"Unable to remove temporary downloaded files.",
-/* TR_UNABLE_TO_SET_HOSTNAME */
-"Unable to set hostname.",
-/* TR_UNABLE_TO_UNMOUNT_CDROM */
-"Unable to unmount the CDROM/floppydisk.",
-/* TR_UNABLE_TO_UNMOUNT_HARDDISK */
-"Unable to unmount harddisk.",
-/* TR_UNABLE_TO_WRITE_ETC_FSTAB */
-"Unable to write /etc/fstab",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */
-"Unable to write /etc/hostname",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS */
-"Unable to write /etc/hosts.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */
-"Unable to write /etc/hosts.allow.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */
-"Unable to write /etc/hosts.deny.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */
-"Unable to write %s/ethernet/settings.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */
-"Unable to write %s/main/hostname.conf",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */
-"Unable to write %s/main/settings.",
-/* TR_UNCLAIMED_DRIVER */
-"There is an unclaimed ethernet card of type:\n%s\n\nYou can assign this to:",
-/* TR_UNKNOWN */
-"UNKNOWN",
-/* TR_UNSET */
-"UNSET",
-/* TR_USB_KEY_VFAT_ERR */
-"This USB key is invalid (no vfat partition found).",
-/* TR_US_NI1 */
-"US NI1",
-/* TR_WARNING */
-"WARNING",
-/* TR_WARNING_LONG */
-"If you change this IP address, and you are logged in remotely, your connection to the %s machine will be broken, and you will have to reconnect on the new IP. This is a risky operation, and should only be attempted if you have physical access to the machine, should something go wrong.",
-/* TR_WELCOME */
-"Welcome to the %s installation program. Selecting Cancel on any of the following screens will reboot the computer.",
-/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */
-"Your configuration is set for a single GREEN interface, which already has a driver assigned.",
-/* TR_YES */
-"Yes",
-/* TR_NO */
-"No",
-/* TR_AS */
-"as",
-/* TR_IGNORE */
-"Ignore",
-/* TR_PPP_DIALUP */
-"PPP DIALUP (PPPoE, modem, ATM ...)",
-/* TR_DHCP */
-"DHCP",
-/* TR_DHCP_STARTSERVER */
-"Starting DHCP-server ...",
-/* TR_DHCP_STOPSERVER */
-"Stopping DHCP-server ...",
-/* TR_LICENSE_ACCEPT */
-"I accept this license.",
-/* TR_LICENSE_NOT_ACCEPTED */
-"License not accepted. Exit!",
-/* TR_EXT2FS_DESCR */
-"Ext2 - Filesystem without journal (suggested for flashdrives)",
-/* TR_EXT3FS_DESCR */
-"Ext3 - Filesystem with journal",
-/* TR_EXT4FS_DESCR */
-"Ext4 - Filesystem with journal",
-/* TR_REISERFS_DESCR */
-"ReiserFS - Filesystem with journal",
-/* TR_NO_LOCAL_SOURCE */
-"No local source media found. Starting download.",
-/* TR_DOWNLOADING_ISO */
-"Downloading Installation-Image ...",
-/* TR_DOWNLOAD_ERROR */
-"Error while downloading!",
-/* TR_DHCP_FORCE_MTU */
-"Force DHCP mtu:",
-/* TR_IDENTIFY */
-"Identify",
-/* TR_IDENTIFY_SHOULD_BLINK */
-"Selected port should blink now ...",
-/* TR_IDENTIFY_NOT_SUPPORTED */
-"Function is not supported by this port.",
-};
diff --git a/langs/es/install/lang_es.c b/langs/es/install/lang_es.c
deleted file mode 100644 (file)
index 4a08748..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- * Spanish (es) Data File
- *
- * This file is part of the IPFire.
- * 
- * IPFire 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.
- * 
- * IPFire 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 IPFire; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- * (c) IPFire Team  <info@ipfire.org>
- *
- */
-#include "libsmooth.h"
-
-char *es_tr[] = {
-
-/* TR_ISDN */
-"ISDN",
-/* TR_ERROR_PROBING_ISDN */
-"Imposibe escanear dispositivos ISDN.",
-/* TR_PROBING_ISDN */
-"Buscando y configurando dispositivos ISDN.",
-/* TR_MISSING_GREEN_IP */
-"¡Hace falta la dirección ip en GREEN!",
-/* TR_CHOOSE_FILESYSTEM */
-"Por favor elija su sistema de Archivos:",
-/* TR_NOT_ENOUGH_INTERFACES */
-"No hay suficientes tarjetas de red para su selección.\n\nNecesarias: %d - Disponibles: %d\n",
-/* TR_INTERFACE_CHANGE */
-"Por favor elija la interfaz que desea modificar.\n\n",
-/* TR_NETCARD_COLOR */
-"Tarjetas de red asignadas",
-/* TR_REMOVE */
-"Remover",
-/* TR_MISSING_DNS */
-"Faltan DNS.\n",
-/* TR_MISSING_DEFAULT */
-"Falta la puerta de enlace por defecto.\n",
-/* TR_JOURNAL_EXT3 */
-"Creando journal para Ext3...",
-/* TR_CHOOSE_NETCARD */
-"Por favor elija una tarjeta de red para la siguiente interfaz  - %s.",
-/* TR_NETCARDMENU2 */
-"Menú de Red extendido",
-/* TR_ERROR_INTERFACES */
-"No hay interfaces libres en su sistema.",
-/* TR_REMOVE_CARD */
-"La ubicación de la tarjeta de red debería ser borrada? - %s",
-/* TR_JOURNAL_ERROR */
-"No se pudo crear el journal usando fallback a ext2.",
-/* TR_FILESYSTEM */
-"Seleccione el sistema de Archivos",
-/* TR_ADDRESS_SETTINGS */
-"Configuración de direcciones",
-/* TR_ADMIN_PASSWORD */
-"Contraseña 'admin'",
-/* TR_AGAIN_PROMPT */
-"Nuevamente:",
-/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */
-"Todas las tarjetas se asignaron correctamente.",
-/* TR_AUTODETECT */
-"* AUTODETECTANDO *",
-/* TR_BUILDING_INITRD */
-"Construyendo ramdisk...",
-/* TR_CANCEL */
-"Cancelar",
-/* TR_CARD_ASSIGNMENT */
-"Asignación de Tarjetas",
-/* TR_CHECKING */
-"Revisando URL...",
-/* TR_CHECKING_FOR */
-"Probando : %s",
-/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */
-"Seleccione el tipo de tarjeta ISDN instalada en este computador.",
-/* TR_CHOOSE_THE_ISDN_PROTOCOL */
-"Seleccione el protocolo ISDN que ud. requiera.",
-/* TR_CONFIGURE_DHCP */
-"Configure el servidor DHCP introduciendo la siguiente información.",
-/* TR_CONFIGURE_NETWORKING */
-"Configuraciónes de Red",
-/* TR_CONFIGURE_NETWORKING_LONG */
-"Ahora debería configurar la red primeramente cargando el driver correcto para la interfaz GREEN. Puede hacer esto, ya sea por medio de auto-detección de la tarjeta de red, o eligiendo el driver correcto de la lista. Tome en cuenta que si usted tiene mas de una tarjeta de red instalada, podrá configurar las demás posteriormente durante la instalación. También tenga en cuenta que si posee mas de una tarjeta que sea del mismo tipo que su interfaz GREEN, cada una requerirá parámetros de módulo especiales, los cuales debe introducir para cada una de las tarjetas, ya que todas las tarjetas se podrían activar cuando se configure la interfaz GREEN.",
-/* TR_CONFIGURE_NETWORK_DRIVERS */
-"Configure los drivers de red, y a cual interfaz será asignada cada tarjeta. La configuración actual es la siguiente:\n\n",
-/* TR_CONFIGURE_THE_CDROM */
-"Configure la unidad de CDROM eligiendo la dirección IO apropiada y/o la dirección IRQ.",
-/* TR_CONGRATULATIONS */
-"¡Felicidades!",
-/* TR_CONGRATULATIONS_LONG */
-"%s fué instalado exitosamente. Por favor retire cualquier CDROM de las unidades. La instalación se ejecutará ahora y usted podrá configurar las parámetros de ISDN, Tarjetas de red, y las contraseñas del sistema. Una vez que la instalación se halla completado usted podrá dirigir su navegador de internet a https://%s:444 (o a cualquiera que sea el nombre de su %s), y configurar la red por dialup (si fuese necesario) y el acceso remoto.",
-/* TR_CONTINUE_NO_SWAP */
-"Su disco duro es muy pequeño, pero podrá continuar un swap muy reducido (Use con precaución).",
-/* TR_CURRENT_CONFIG */
-"Configuración Actual: %s%s",
-/* TR_DEFAULT_GATEWAY */
-"Puerta de enlace por defecto:",
-/* TR_DEFAULT_GATEWAY_CR */
-"Puerta de enlace por defecto\n",
-/* TR_DEFAULT_LEASE */
-"Default lease (mins):",
-/* TR_DEFAULT_LEASE_CR */
-"Default lease time\n",
-/* TR_DETECTED */
-"Se detectó: %s",
-/* TR_DHCP_HOSTNAME */
-"DHCP Hostname:",
-/* TR_DHCP_HOSTNAME_CR */
-"DHCP Hostname\n",
-/* TR_DHCP_SERVER_CONFIGURATION */
-"Configuración de servidor DHCP",
-/* TR_DISABLED */
-"Desactivado",
-/* TR_DISABLE_ISDN */
-"Desactivar ISDN",
-/* TR_DISK_TOO_SMALL */
-"Su disco duro es muy pequeño.",
-/* TR_DNS_AND_GATEWAY_SETTINGS */
-"Configuraciones de DNS y Puerta de enlace(Gateway)",
-/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */
-"Introduzca la información de DNS y puerta de enlace predeterminado. Estas configuraciones sólo son utilizadas con IP estática (y DHCP si se configura el DNS) en la interfaz RED",
-/* TR_DNS_GATEWAY_WITH_GREEN */
-"Su configuración no utiliza una interfaz ethernet para la interfaz RED. La información de Puerta de enlace y DNS para usuarios de dialup, es configurada automáticamente en el momento de marcar.",
-/* TR_DOMAINNAME */
-"Nombre de dominio",
-/* TR_DOMAINNAME_CANNOT_BE_EMPTY */
-"Nombre de domino no puede estar vacío",
-/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */
-"El nombre de dominio no puede contener espacios",
-/* TR_DOMAINNAME_NOT_VALID_CHARS */
-"Los nombres de dominio sólo pueden contener letras, números, guiones y guion_bajo",
-/* TR_DOMAIN_NAME_SUFFIX */
-"Sufijo de nombre de dominio:",
-/* TR_DOMAIN_NAME_SUFFIX_CR */
-"Sufijo de nombre de dominio\n",
-/* TR_DONE */
-"Terminado",
-/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */
-"\n¿Desea cambiar estas configuraciones?",
-/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */
-"Drivers y asignación de tarjeta",
-/* TR_ENABLED */
-"Activado",
-/* TR_ENABLE_ISDN */
-"Activar ISDN",
-/* TR_END_ADDRESS */
-"Dirección final:",
-/* TR_END_ADDRESS_CR */
-"Dirección final\n",
-/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */
-"Algunas tarjetas ISDN (especialmente las ISA) pueden requerir parámetros adicionales de módulo para configuracioenes como IRQ la dirección de dirección IO. Si usted tiene una tarjeta de este tipo, introduzca los parámetros adicionales aquí. Por ejemplo: 'io=0x280 irq=9'. Serán utilizados durante la detección de la tarjeta.",
-/* TR_ENTER_ADMIN_PASSWORD */
-"Introduzca la contraseña del usuario %s'admin'. Este es el usuario que accederá a la página de administración %sweb",
-/* TR_ENTER_DOMAINNAME */
-"Introduzca el nombre de dominio",
-/* TR_ENTER_HOSTNAME */
-"Introduzca el nombre host de la máquina",
-/* TR_ENTER_IP_ADDRESS_INFO */
-"Introduzca la dirección IP",
-/* TR_ENTER_NETWORK_DRIVER */
-"Fallo la detección automática de la tarjeta de red. Introduzca el driver y los parámetros opcionales para esta tarjeta de red.",
-/* TR_ENTER_ROOT_PASSWORD */
-"Introduzca la contraseña del usuario 'root'. Acceda como este usuario para obtener acceso a la línea de comandos.",
-/* TR_ENTER_SETUP_PASSWORD */
-"A REMOVER",
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
-"Introduzca la dirección IP para la interfaz %s .",
-/* TR_ENTER_THE_LOCAL_MSN */
-"Introduzca el número telefónico local",
-/* TR_ENTER_URL */
-"Introduzca  la ruta URL de losarchivo ipcop<version>.tgz e images/scsidrv-<version>.img  ADVERTENCIA: ¡DNS no disponible! Ahora debería ser solamente http://X.X.X.X/<directory>",
-/* TR_ERROR */
-"Error",
-/* TR_ERROR_PROBING_CDROM */
-"No se encontró unidad de CD/DVDROM",
-/* TR_ERROR_WRITING_CONFIG */
-"Error escribiendo la información de configuración",
-/* TR_EURO_EDSS1 */
-"Euro (EDSS1)",
-/* TR_EXTRACTING_MODULES */
-"Extrayendo modulos...",
-/* TR_FAILED_TO_FIND */
-"Fallo al encontrar el archivo URL",
-/* TR_FOUND_NIC */
-"%s ha detectado la siguiente tarjeta de red en su máquina %s",
-/* TR_GERMAN_1TR6 */
-"German 1TR6",
-/* TR_HELPLINE */
-"              <Tab>/<Alt-Tab> entre elementos   |  <Espacio> selecciona",
-/* TR_HOSTNAME */
-"Nombre de host",
-/* TR_HOSTNAME_CANNOT_BE_EMPTY */
-"Nombre de host no puede estar vacío",
-/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */
-"Nombre de host no puede contener espacios.",
-/* TR_HOSTNAME_NOT_VALID_CHARS */
-"El nombre de host solo puede contener letra, números y guiones",
-/* TR_INITIALISING_ISDN */
-"Inicializando ISDN...",
-/* TR_INSERT_CDROM */
-"Por favor inserte el CD %s en la unidad de CD/DVD",
-/* TR_INSERT_FLOPPY */
-"Por favor inserte el diskette de drivers %s  en la unidad floppy",
-/* TR_INSTALLATION_CANCELED */
-"Instalación cancelada",
-/* TR_INSTALLING_FILES */
-"Instalando archivos...",
-/* TR_INSTALLING_GRUB */
-"Instalando GRUB...",
-/* TR_INSTALLING_LANG_CACHE */
-"Instalando archivos de idioma...",
-/* TR_INTERFACE */
-"Interfaz - %s",
-/* TR_INTERFACE_FAILED_TO_COME_UP */
-"La interfaz falló en arrancar",
-/* TR_INVALID_FIELDS */
-"Los siguientes campos son inválidos:\n\n",
-/* TR_INVALID_IO */
-"Los detalles de puerto IO insertados son inválidos.",
-/* TR_INVALID_IRQ */
-"Los detalles de IRQ insertados son inválidos.",
-/* TR_IP_ADDRESS_CR */
-"Dirección IP\n",
-/* TR_IP_ADDRESS_PROMPT */
-"Dirección IP:",
-/* TR_ISDN_CARD */
-"Tarjeta ISDN",
-/* TR_ISDN_CARD_NOT_DETECTED */
-"La tarjeta ISDN no fue detectada. Tal vez debería específicar módulos de parámetro adicionales si la tarjeta es tipo ISA o tiene requerimentos especiales.",
-/* TR_ISDN_CARD_SELECTION */
-"Selección de tarjeta ISDN",
-/* TR_ISDN_CONFIGURATION */
-"Configuración ISDN",
-/* TR_ISDN_CONFIGURATION_MENU */
-"Menú de configuración ISDN",
-/* TR_ISDN_NOT_SETUP */
-"ISDN no está configurado. Algunos elementos no han sido seleccionados.",
-/* TR_ISDN_NOT_YET_CONFIGURED */
-"ISDN no ha sido configurado aún. Seleccione el elemento que desea configurar",
-/* TR_ISDN_PROTOCOL_SELECTION */
-"Selección de protocolo ISDN",
-/* TR_ISDN_STATUS */
-"ISDN actual es %s.\n\n Protocolo: %s\n Tarjeta: %s\n Número de teléfono lcoal: %s\n\nSeleccione el elemento que desea reconfigurar, o elija usar la configuración actual.",
-/* TR_KEYBOARD_MAPPING */
-"Mapeo de teclado",
-/* TR_KEYBOARD_MAPPING_LONG */
-"Seleccione de la lista el tipo de teclado que está utilizando.",
-/* TR_LEASED_LINE */
-"Concesión de línea",
-/* TR_LOADING_MODULE */
-"Cargando módulo...",
-/* TR_LOADING_PCMCIA */
-"Cargando módulos PCMCIA...",
-/* TR_LOOKING_FOR_NIC */
-"Buscando: %s",
-/* TR_MAKING_BOOT_FILESYSTEM */
-"Generando el sistema de arranque...",
-/* TR_MAKING_LOG_FILESYSTEM */
-"Generando el sistema de log...",
-/* TR_MAKING_ROOT_FILESYSTEM */
-"Generando el sistema de archivos root...",
-/* TR_MAKING_SWAPSPACE */
-"Generando el espacio swap....",
-/* TR_MANUAL */
-"* MANUAL *",
-/* TR_MAX_LEASE */
-"Concesión MAX (mins):",
-/* TR_MAX_LEASE_CR */
-"Tiempo MAX de concesión\n",
-/* TR_MISSING_BLUE_IP */
-"Falta información IP en la interfaz BLUE",
-/* TR_MISSING_ORANGE_IP */
-"Falta información IP en la interfaz ORANGE",
-/* TR_MISSING_RED_IP */
-"Falta información IP en la interfaz RED",
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */
-"El nombre de módulo no puede estar vacío.",
-/* TR_MODULE_PARAMETERS */
-"Introduzca el nombre del módulo y los parámetros que requiera para sus drivers.",
-/* TR_MOUNTING_BOOT_FILESYSTEM */
-"Montando sistema de archivos de arranque...",
-/* TR_MOUNTING_LOG_FILESYSTEM */
-"Montando sistema archvos log...",
-/* TR_MOUNTING_ROOT_FILESYSTEM */
-"Montando sistema de archivos root....",
-/* TR_MOUNTING_SWAP_PARTITION */
-"Montando partición swap...",
-/* TR_MSN_CONFIGURATION */
-"Número telefónico local (MSN/EAZ)",
-/* TR_NETMASK_PROMPT */
-"Máscara de red:",
-/* TR_NETWORKING */
-"Redes",
-/* TR_NETWORK_ADDRESS_CR */
-"Dirección de red\n",
-/* TR_NETWORK_ADDRESS_PROMPT */
-"Dirección de red:",
-/* TR_NETWORK_CONFIGURATION_MENU */
-"Menú de configuración de red",
-/* TR_NETWORK_CONFIGURATION_TYPE */
-"Tipo de configuración de red",
-/* TR_NETWORK_CONFIGURATION_TYPE_LONG */
-"Seleccione la configuración de red para %s. Los siguientes tipos de configuración muestran aquellas interfaces que tengan asignada una tarjeta ethernet. Si ud. cambia esta configuración, será necesario reiniciar el servicio de red, y ud. deberá volver a asignar las asignaciones de tarjetas de red.",
-/* TR_NETWORK_MASK_CR */
-"Máscara de red\n",
-/* TR_NETWORK_SETUP_FAILED */
-"Configuración de red falló.",
-/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */
-"No hay suficientes tarjetas de red para asignar.",
-/* TR_NO_BLUE_INTERFACE */
-"No se asignó interfaz BLUE.",
-/* TR_NO_CDROM */
-"No se encontró  CD/DVD.",
-/* TR_NO_GREEN_INTERFACE */
-"No se asignó interfaz GREEN.",
-/* TR_NO_HARDDISK */
-"No se encontró unidad de disco duro.",
-/* TR_NO_IPCOP_TARBALL_FOUND */
-"No se encontró ningun archivo tarball de ipcop en el servidor web",
-/* TR_NO_ORANGE_INTERFACE */
-"No se asignó Interfaz ORANGE.",
-/* TR_NO_RED_INTERFACE */
-"No se asignó interfaz ROJA.",
-/* TR_NO_SCSI_IMAGE_FOUND */
-"No se encontró imagen SCSI en el servidor web.",
-/* TR_NO_UNALLOCATED_CARDS */
-"No quedan tarjetas sin asignar. Se necesitan mas. Se puede proceder a autodetección y búsqueda de mas tarjetas o elegir un driver de la lista.",
-/* TR_OK */
-"Ok",
-/* TR_PARTITIONING_DISK */
-"Particionando Disco...",
-/* TR_PASSWORDS_DO_NOT_MATCH */
-"Las contraseñas no concuerdan.",
-/* TR_PASSWORD_CANNOT_BE_BLANK */
-"La contraseña no puede ir en blanco.",
-/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */
-"La contraseña no puede llevar espacios.",
-/* TR_PASSWORD_PROMPT */
-"Contraseña:",
-/* TR_PHONENUMBER_CANNOT_BE_EMPTY */
-"Número telefónico no puede ir en blanco.",
-/* TR_PREPARE_HARDDISK */
-"El programa de instalación va a preparar el disco duro en %s. Primero el disco será particionado y después se les colocará un sistema de archivos a las particiones.",
-/* TR_PRESS_OK_TO_REBOOT */
-"Presione Ok para reiniciar el sistema.",
-/* TR_PRIMARY_DNS */
-"DNS Primario:",
-/* TR_PRIMARY_DNS_CR */
-"DNS Primario\n",
-/* TR_PROBE */
-"Detección",
-/* TR_PROBE_FAILED */
-"Falló la auto detección",
-/* TR_PROBING_HARDWARE */
-"Detectando Hardware...",
-/* TR_PROBING_FOR_NICS */
-"Detectando NICs....",
-/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */
-"Problema estableciendo la contraseña del usuario %s 'admin'",
-/* TR_PROBLEM_SETTING_ROOT_PASSWORD */
-"Problema estableciendo la contraseña del usuario 'root'",
-/* TR_PROBLEM_SETTING_SETUP_PASSWORD */
-"A REMOVER",
-/* TR_PROTOCOL_COUNTRY */
-"Protocolo/País",
-/* TR_PULLING_NETWORK_UP */
-"Encendiendo la red...",
-/* TR_PUSHING_NETWORK_DOWN */
-"Apagando la red....",
-/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */
-"Apagando red no local...",
-/* TR_QUIT */
-"Salir",
-/* TR_RED_IN_USE */
-"ISDN (u otra conexión externa) se encuentra en uso. No puede configurar ISDN mientras la interfaz RED está activa.",
-/* TR_RESTART_REQUIRED */
-"\n\nCuando la configuración se complete, Un reinicio de red será requerido",
-/* TR_RESTORE */
-"Restaurar",
-/* TR_RESTORE_CONFIGURATION */
-"Si cuenta con un floppy con la configuración del %s sistema en el, insertelo en la unidad lectora y presione el botón restaurar.",
-/* TR_ROOT_PASSWORD */
-"Contraseña 'root'",
-/* TR_SECONDARY_DNS */
-"DNS Secundario:",
-/* TR_SECONDARY_DNS_CR */
-"DNS Secundario\n",
-/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */
-"DNS Secundario especificado sinun servidor DNS primario",
-/* TR_SECTION_MENU */
-"Sección de Menú",
-/* TR_SELECT */
-"Selección",
-/* TR_SELECT_CDROM_TYPE */
-"Seleccione tipo de CDROM",
-/* TR_SELECT_CDROM_TYPE_LONG */
-"No se detectó unidad de CD/DVD en esta máquina. Por favor seleccione cual de los siguientes drivers desea usar para que %s pueda acceder a la unidad de CD/DVD",
-/* TR_SELECT_INSTALLATION_MEDIA */
-"Seleccione medio de instalación",
-/* TR_SELECT_INSTALLATION_MEDIA_LONG */
-"%s puede ser instalado desde múltiples fuentes. La mas sencilla es usar la unidad de CD/DVD. Si la máquina carece de una, puede instalarlo desde otra máquina en la red local que tenga los archivos de instalación disponibles via HTTP o FTP.",
-/* TR_SELECT_NETWORK_DRIVER */
-"Seleccione drivers de red",
-/* TR_SELECT_NETWORK_DRIVER_LONG */
-"Seleccione el driver de red para la tarjeta instalada en esta máquina. Si usted elige MANUAL, se le dará una oportunidad de introducir los parámetros y nombres de módulo para los drivers que requieran configuracioens especiales como las tarjetas ISA",
-/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */
-"Seleccione la  interfaz que desea reconfigurar",
-/* TR_SELECT_THE_ITEM */
-"Seleccione el elemento que desea configurar",
-/* TR_SETTING_ADMIN_PASSWORD */
-"Estableciendo la contraseña del usuario %s 'admin'...",
-/* TR_SETTING_ROOT_PASSWORD */
-"Estableciendo la contraseña del usuario 'root'...",
-/* TR_SETTING_SETUP_PASSWORD */
-"A REMOVER",
-/* TR_SETUP_FINISHED */
-"La configuración se ha completado. Presione Ok.",
-/* TR_SETUP_NOT_COMPLETE */
-"La configuración inicial no se completó totalmente. Asegúrese de configurar todo correctamente ejecutando setup de nuevo desde la línea de comandos.",
-/* TR_SETUP_PASSWORD */
-"A REMOVER",
-/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */
-"Configurar parámetros de módulo adicionales",
-/* TR_SINGLE_GREEN */
-"Su configuración está dispuesta para una interface GREEN única",
-/* TR_SKIP */
-"Omitir",
-/* TR_START_ADDRESS */
-"Dirección de inicio:",
-/* TR_START_ADDRESS_CR */
-"Dirección de inicio\n",
-/* TR_STATIC */
-"Estático",
-/* TR_SUGGEST_IO */
-"(sugerir %x)",
-/* TR_SUGGEST_IRQ */
-"(sugerir %d)",
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
-"El módulo de este driver ya ha sido cargado.",
-/* TR_TIMEZONE */
-"Zona de tiempo",
-/* TR_TIMEZONE_LONG */
-"Seleccione su zona de tiempo de la siguiente lista.",
-/* TR_UNABLE_TO_EJECT_CDROM */
-"Imposible expulsar el CD/DVD",
-/* TR_UNABLE_TO_EXTRACT_MODULES */
-"Imposible extraer módulos.",
-/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */
-"Imposible encontrar drivers adicionales",
-/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */
-"Imposible encontrar tarjeta ISDN en esta máquina. Podría necesitar especificar parámetros de módulo adicionales si la tarjeta es tipo ISA o tiene requerimientos especiales",
-/* TR_UNABLE_TO_INITIALISE_ISDN */
-"Imposible inicializar ISDN",
-/* TR_UNABLE_TO_INSTALL_FILES */
-"Imposible instalar archivos.",
-/* TR_UNABLE_TO_INSTALL_LANG_CACHE */
-"Imposible instalar archivos de Idioma.",
-/* TR_UNABLE_TO_INSTALL_GRUB */
-"Imposible instalar GRUB.",
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
-"Imposible cargar driver de módulo.",
-/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */
-"Imposibe crear sistema de archivos de arranque.",
-/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */
-"Imposible crear sistema de archivos log.",
-/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */
-"Imposible crear sistema de archivos root.",
-/* TR_UNABLE_TO_MAKE_SWAPSPACE */
-"Imposible crear espacio swap",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */
-"Imposible crear enlace simbólico /dev/harddisk.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */
-"Imposible crear enlace simbólico /dev/harddisk1.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */
-"Imposible crear enlace simbólico /dev/harddisk2.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */
-"Imposible crear enlace simbólico /dev/harddisk3.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */
-"Imposible crear enlace simbólico /dev/harddisk4.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */
-"Imposible crear enlace simbólico a /dev/root",
-/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */
-"Imposible montar boot filesystem.",
-/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */
-"Imposible montar log filesystem.",
-/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */
-"Imposible montar proc filesystem.",
-/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */
-"Imposible montar root filesystem.",
-/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */
-"Imposible montar the swap partition.",
-/* TR_UNABLE_TO_OPEN_HOSTS_FILE */
-"Imposible abrir main hosts file.",
-/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */
-"Imposible abrir settings file",
-/* TR_UNABLE_TO_PARTITION */
-"Imposible particionar el disco.",
-/* TR_UNABLE_TO_REMOVE_TEMP_FILES */
-"Imposible remover archivos de descarga temporales.",
-/* TR_UNABLE_TO_SET_HOSTNAME */
-"Imposible asignar el nombre de host.",
-/* TR_UNABLE_TO_UNMOUNT_CDROM */
-"Imposible desmontar la unidad CDROM/Floppydisk.",
-/* TR_UNABLE_TO_UNMOUNT_HARDDISK */
-"Imposible desmontar disco duro.",
-/* TR_UNABLE_TO_WRITE_ETC_FSTAB */
-"Imposible escribir /etc/fstab",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */
-"Imposible escribir /etc/hostname",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS */
-"Imposible escribir /etc/hosts.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */
-"Imposible escribir /etc/hosts.allow.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */
-"Imposible escribir /etc/hosts.deny.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */
-"Imposible escribir %s/ethernet/settings.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */
-"Imposible escribir %s/main/hostname.conf",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */
-"Imposible escribir %s/main/settings.",
-/* TR_UNCLAIMED_DRIVER */
-"There is an unclaimed ethernet card of type:\n%s\n\nYou can assign this to:",
-/* TR_UNKNOWN */
-"DESCONOCIDO",
-/* TR_UNSET */
-"NO ASIGNADO",
-/* TR_USB_KEY_VFAT_ERR */
-"Esta unidad USB no es válida (no se encontró partición vfat).",
-/* TR_US_NI1 */
-"US NI1",
-/* TR_WARNING */
-"ADVERTENCIA",
-/* TR_WARNING_LONG */
-"Si usted cambia esta dirección IP mientras se encuentra conectado de manera remota, su conexión a esta máquina %s será terminada, i tendrá que reconectarse con la nueva dirección IP. Esta es una operación riesgosa y solamente debería ser intentada si usted tiene acceso físico a la máquina en caso de que algo salga mal.",
-/* TR_WELCOME */
-"Bienvenido al programa de instalación de %s. Si selecciona cancelar en cualquiera de las pantallas siguientes su computadora será reiniciada.",
-/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */
-"Su sistema está configurado a interfaz GREEN única, la cual ya ha sido asignada.",
-/* TR_YES */
-"Si",
-/* TR_NO */
-"No",
-/* TR_AS */
-"as",
-/* TR_IGNORE */
-"Ignorar",
-/* TR_PPP_DIALUP */
-"PPP DIALUP (PPPoE, modem, ATM ...)",
-/* TR_DHCP */
-"DHCP",
-/* TR_DHCP_STARTSERVER */
-"Iniciando Servidor DHCP ...",
-/* TR_DHCP_STOPSERVER */
-"Deteniendo Servidor DHCP ...",
-/* TR_LICENSE_ACCEPT */
-"I accept this license.",
-/* TR_LICENSE_NOT_ACCEPTED */
-"License not accepted. Exit!",
-/* TR_EXT2FS_DESCR */
-"Ext2 - Filesystem without journal (suggested for flashdrives)",
-/* TR_EXT3FS_DESCR */
-"Ext3 - Filesystem with journal",
-/* TR_EXT4FS_DESCR */
-"Ext4 - Filesystem with journal",
-/* TR_REISERFS_DESCR */
-"ReiserFS - Filesystem with journal",
-/* TR_NO_LOCAL_SOURCE */
-"No local source media found. Starting download.",
-/* TR_DOWNLOADING_ISO */
-"Downloading Installation-Image ...",
-/* TR_DOWNLOAD_ERROR */
-"Error while downloading!",
-/* TR_DHCP_FORCE_MTU */
-"Force DHCP mtu:",
-/* TR_IDENTIFY */
-"Identify",
-/* TR_IDENTIFY_SHOULD_BLINK */
-"Selected port should blink now ...",
-/* TR_IDENTIFY_NOT_SUPPORTED */
-"Function is not supported by this port.",
-};
diff --git a/langs/fr/install/lang_fr.c b/langs/fr/install/lang_fr.c
deleted file mode 100644 (file)
index 188e0fd..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- * French (fr) Data File
- *
- * This file is part of the IPFire.
- * 
- * IPCop 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.
- * 
- * IPCop 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 IPCop; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- * 
- * (c) IPFire Team  <info@ipfire.org>
- *
- */
-#include "libsmooth.h"
-
-char *fr_tr[] = {
-
-/* TR_ISDN */
-"RNIS",
-/* TR_ERROR_PROBING_ISDN */
-"Impossible de scanner les périphériques RNIS.",
-/* TR_PROBING_ISDN */
-"Recherche et configuration des périphériques RNIS.",
-/* TR_MISSING_GREEN_IP */
-"Adresse IP de l'interface verte manquante !",
-/* TR_CHOOSE_FILESYSTEM */
-"Choisissez SVP votre système de fichiers :",
-/* TR_NOT_ENOUGH_INTERFACES */
-"Il n'y a pas assez de cartes réseau pour ce choix.\n\nRequise : %d - Disponible : %d\n",
-/* TR_INTERFACE_CHANGE */
-"Choisissez SVP l'interface que vous souhaitez modifier.\n\n",
-/* TR_NETCARD_COLOR */
-"Cartes assignées",
-/* TR_REMOVE */
-"Enlever",
-/* TR_MISSING_DNS */
-"DNS manquants.\n",
-/* TR_MISSING_DEFAULT */
-"Passerelle par défaut manquante.\n",
-/* TR_JOURNAL_EXT3 */
-"Création du journal pour Ext3...",
-/* TR_CHOOSE_NETCARD */
-"Choisissez SVP une carte réseau pour l'interface suivante - %s.",
-/* TR_NETCARDMENU2 */
-"Menu réseau étendu",
-/* TR_ERROR_INTERFACES */
-"Il n'y a aucune interface de libre sur votre système.",
-/* TR_REMOVE_CARD */
-"L'attribution de la carte réseau doit-elle être supprimée ? - %s",
-/* TR_JOURNAL_ERROR */
-"Impossible de céer le journal, utilisation de ext2 en remplacement.",
-/* TR_FILESYSTEM */
-"Choix du système de fichier",
-/* TR_ADDRESS_SETTINGS */
-"Paramètres d'adresse",
-/* TR_ADMIN_PASSWORD */
-"Mot de passe 'admin'",
-/* TR_AGAIN_PROMPT */
-"Encore:",
-/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */
-"Attribution de toutes les cartes avec succès.",
-/* TR_AUTODETECT */
-"* AUTO-DETECTION *",
-/* TR_BUILDING_INITRD */
-"Génération du ramdisk...",
-/* TR_CANCEL */
-"Annuler",
-/* TR_CARD_ASSIGNMENT */
-"Attribution de la carte",
-/* TR_CHECKING */
-"Vérification de l'URL...",
-/* TR_CHECKING_FOR */
-"Vérification pour : %s",
-/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */
-"Choisissez la carte RNIS sur cet ordinateur.",
-/* TR_CHOOSE_THE_ISDN_PROTOCOL */
-"Choisissez le procole RNIS requis.",
-/* TR_CONFIGURE_DHCP */
-"Configurez le serveur DHCP en saisissant les paramètres.",
-/* TR_CONFIGURE_NETWORKING */
-"Configuration du réseau",
-/* TR_CONFIGURE_NETWORKING_LONG */
-"Vous devriez maintenant configurer le réseau en commençant par choisir le pilote approprié pour l'interface verte. Vous pouvez essayer la détection automatique ou choisir vous-même le bon pilote. Notez que si vous avez plus d'une carte réseau installée, vous pourrez configurer les autres ultérieurement. Notez également que si vous avez plus d'une carte qui a le même type que la VERTE et que chacune requiert des paramètres de module spéciaux, vous devriez saisir les paramètres pour toutes les cartes de ce type maintenant de façon à ce que toutes cartes deviennent actives quand vous configurez l'interface verte.",
-/* TR_CONFIGURE_NETWORK_DRIVERS */
-"Configurer les pilotes réseaux, et à quelle interface chaque carte est assignée.  La configuration actuelle est comme suit :\n\n",
-/* TR_CONFIGURE_THE_CDROM */
-"Configurez le CDROM en choisissant l'adresse IO et/ou IRQ appropriées.",
-/* TR_CONGRATULATIONS */
-"Félicitation!",
-/* TR_CONGRATULATIONS_LONG */
-"%s a été installé avec succès. Merci de retirer les CDROMs de l'ordinateur. L'installation va maintenant commencer la configuration pendant laquelle vous pourrez configurer RNIS, les cartes réseaux et les mots de passe du système. Après la fin de l'installation, vous pourrez vous rendre avec votre navigateur web à l'adresse https://%s:444 (ou quelque soit le nom %s que vous avez donné), afin de configurer le réseau commuté (si nécessaire) et l'accès distant.",
-/* TR_CONTINUE_NO_SWAP */
-"Votre disque dur est très petit, mais vous pouvez continuer avec une petite partition d'échange. (Utiliser avec précaution).",
-/* TR_CURRENT_CONFIG */
-"Configuration actuelle : %s%s",
-/* TR_DEFAULT_GATEWAY */
-"Passerelle par défaut :",
-/* TR_DEFAULT_GATEWAY_CR */
-"Passerelle par défaut\n",
-/* TR_DEFAULT_LEASE */
-"Bail par défaut (mins):",
-/* TR_DEFAULT_LEASE_CR */
-"Bail par défaut\n",
-/* TR_DETECTED */
-"Détecté: %s",
-/* TR_DHCP_HOSTNAME */
-"Hôte DHCP :",
-/* TR_DHCP_HOSTNAME_CR */
-"Hôte DHCP\n",
-/* TR_DHCP_SERVER_CONFIGURATION */
-"Configuration du serveur DHCP",
-/* TR_DISABLED */
-"Désactivé",
-/* TR_DISABLE_ISDN */
-"Désactiver RNIS",
-/* TR_DISK_TOO_SMALL */
-"Votre disque dur est trop petit.",
-/* TR_DNS_AND_GATEWAY_SETTINGS */
-"Paramètres DNS et de la passerelle",
-/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */
-"Saisissez les DNS et les informations de la passerelle.  Ces paramètres ne sont utilisés qu'avec une IP statique (et DHCP si les DNS sont saisis) sur l'interface rouge (RED).",
-/* TR_DNS_GATEWAY_WITH_GREEN */
-"Votre configuration n'utilise pas d'adaptateur ethernet pour l'interface rouge.  DNS et les informations de la passerelle pour les utilisateur de réseau commuté est configuré automatiquement au moment de la connexion.",
-/* TR_DOMAINNAME */
-"Nom de domaine",
-/* TR_DOMAINNAME_CANNOT_BE_EMPTY */
-"Le nom de domaine ne peut être vide.",
-/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */
-"Le nom de domaine ne peut pas contenir d'espaces.",
-/* TR_DOMAINNAME_NOT_VALID_CHARS */
-"Le nom de domaine ne peut contenir que des lettres, chiffres, -, et des points.",
-/* TR_DOMAIN_NAME_SUFFIX */
-"Suffixe du nom de domaine :",
-/* TR_DOMAIN_NAME_SUFFIX_CR */
-"Suffixe du nom de domaine\n",
-/* TR_DONE */
-"Terminé",
-/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */
-"\nVoulez-vous changer ces paramètres ?",
-/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */
-"Attribution des pilotes et des cartes",
-/* TR_ENABLED */
-"Activé",
-/* TR_ENABLE_ISDN */
-"Activer RNIS",
-/* TR_END_ADDRESS */
-"Adresse de fin :",
-/* TR_END_ADDRESS_CR */
-"Adresse de fin\n",
-/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */
-"Certaines cartes RNIS (particulièrement les ISA) peut nécessiter des paramètres supplémentaires pour configurer les adresses IRQ et IO. Si vous avez une telle carte, saisissez ces paramètres ici. Par exemple : \"io=0x280 irq=9\". Ils seront utilisés pendant la détection des cartes.",
-/* TR_ENTER_ADMIN_PASSWORD */
-"Saisissez le mot de passe pour l'administrateur 'admin' d'%s.  C'est l'utilisateur à utiliser pour l'interface d'administration web %s.",
-/* TR_ENTER_DOMAINNAME */
-"Entrez un nom de domaine",
-/* TR_ENTER_HOSTNAME */
-"Entrez le nom d'hôte de la machine.",
-/* TR_ENTER_IP_ADDRESS_INFO */
-"Entez l'adresse IP",
-/* TR_ENTER_NETWORK_DRIVER */
-"La détection automatique de la carte réseau a échoué. Entrez les pilotes et paramètres optionnels pour la carte réseau.",
-/* TR_ENTER_ROOT_PASSWORD */
-"Entrez le mot de passe 'root'. Il est utilisé pour l'accès en ligne de commande.",
-/* TR_ENTER_SETUP_PASSWORD */
-"A ENLEVER",
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
-"Entrez les informations IP pour l'interface %s.",
-/* TR_ENTER_THE_LOCAL_MSN */
-"Entrez le numéro de téléphone local (MSN/EAZ).",
-/* TR_ENTER_URL */
-"Entrez l'URL vers ipcop-<version>.tgz et les fichiers images/scsidrv-<version>.img. ATTENTION : DNS non disponibles ! Ca devrait être quelque chose comme http://X.X.X.X/<dossier>",
-/* TR_ERROR */
-"Erreur",
-/* TR_ERROR_PROBING_CDROM */
-"Aucun lecteur CDROM trouvé.",
-/* TR_ERROR_WRITING_CONFIG */
-"Erreur lors de l'écriture des informations de configuration.",
-/* TR_EURO_EDSS1 */
-"Euro (EDSS1)",
-/* TR_EXTRACTING_MODULES */
-"Extraction des modules...",
-/* TR_FAILED_TO_FIND */
-"Impossible de  trouver le fichier URL.",
-/* TR_FOUND_NIC */
-"%s a détecté la carte réseau suivante sur votre machine : %s",
-/* TR_GERMAN_1TR6 */
-"German 1TR6",
-/* TR_HELPLINE */
-"              <Tab>/<Alt-Tab> changer d'élément   |  <Espace> sélectionner",
-/* TR_HOSTNAME */
-"Nom d'hôte",
-/* TR_HOSTNAME_CANNOT_BE_EMPTY */
-"Le nom d'hôte ne peut être vide.",
-/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */
-"Le nom d'hôte ne peut contenir d'espaces.",
-/* TR_HOSTNAME_NOT_VALID_CHARS */
-"Le nom d'hôte ne peut contenir que des lettres, chiffres et traits d'union.",
-/* TR_INITIALISING_ISDN */
-"Initialisation RNIS...",
-/* TR_INSERT_CDROM */
-"Insérez le CD %s dans le lecteur de CDROM.",
-/* TR_INSERT_FLOPPY */
-"Insérez la disquette du driver %s dans le lecteur de disquette.",
-/* TR_INSTALLATION_CANCELED */
-"Installation annulée.",
-/* TR_INSTALLING_FILES */
-"Installation des fichiers...",
-/* TR_INSTALLING_GRUB */
-"Installation de GRUB...",
-/* TR_INSTALLING_LANG_CACHE */
-"Installation des fichiers de langues...",
-/* TR_INTERFACE */
-"Interface - %s",
-/* TR_INTERFACE_FAILED_TO_COME_UP */
-"L'interface n'a pas pu être activée.",
-/* TR_INVALID_FIELDS */
-"Les champs suivants sont invalides :\n\n",
-/* TR_INVALID_IO */
-"Les détails du port d'IO sont invalides. ",
-/* TR_INVALID_IRQ */
-"Les détails IRQ sont invalides.",
-/* TR_IP_ADDRESS_CR */
-"Adresse IP\n",
-/* TR_IP_ADDRESS_PROMPT */
-"Adresse IP :",
-/* TR_ISDN_CARD */
-"Carte RNIS",
-/* TR_ISDN_CARD_NOT_DETECTED */
-"Carte RNIS non détectée. Vous devez peut-être spécifier des paramètres additionnels si la carte est de type ISA ou si elle a des spécifications particulières.",
-/* TR_ISDN_CARD_SELECTION */
-"Sélection de la carte RNIS",
-/* TR_ISDN_CONFIGURATION */
-"Configuration RNIS",
-/* TR_ISDN_CONFIGURATION_MENU */
-"Menu de configuration RNIS",
-/* TR_ISDN_NOT_SETUP */
-"RNIS non installé. Certains paramètres n'ont pas été sélectionnés.",
-/* TR_ISDN_NOT_YET_CONFIGURED */
-"RNIS n'a pas encore été configuré. Sélectionnez le paramètre que vous souhaitez configurer.",
-/* TR_ISDN_PROTOCOL_SELECTION */
-"Sélection du protocole RNIS",
-/* TR_ISDN_STATUS */
-"RNIS est actuellement %s.\n\n   Protocole : %s\n   Carte : %s\n   Numéro de téléphone local : %s\n\nSélectionnez le paramètre que vous voulez reconfigurer, ou utilisez les paramètres actuels.",
-/* TR_KEYBOARD_MAPPING */
-"Organisation du clavier",
-/* TR_KEYBOARD_MAPPING_LONG */
-"Choisissez le type de clavier que vous utilisez dans la liste ci-dessous.",
-/* TR_LEASED_LINE */
-"Leased line (ligne dédiée)",
-/* TR_LOADING_MODULE */
-"Chargement du module...",
-/* TR_LOADING_PCMCIA */
-"Chargement du module PCMCIA...",
-/* TR_LOOKING_FOR_NIC */
-"Recherche de: %s",
-/* TR_MAKING_BOOT_FILESYSTEM */
-"Génération du système de fichier de démarrage...",
-/* TR_MAKING_LOG_FILESYSTEM */
-"Génération du système de fichier de log...",
-/* TR_MAKING_ROOT_FILESYSTEM */
-"Génération du système de fichier de root...",
-/* TR_MAKING_SWAPSPACE */
-"Génération de la partition swap...",
-/* TR_MANUAL */
-"* MANUEL *",
-/* TR_MAX_LEASE */
-"Bail Max (mins):",
-/* TR_MAX_LEASE_CR */
-"Bail Max\n",
-/* TR_MISSING_BLUE_IP */
-"Paramètres IP manquants sur l'interface BLEUE.",
-/* TR_MISSING_ORANGE_IP */
-"Paramètres IP manquants sur l'interface ORANGE.",
-/* TR_MISSING_RED_IP */
-"Paramètres IP manquants sur l'interface ROUGE.",
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */
-"Le nom du module ne peut être vide.",
-/* TR_MODULE_PARAMETERS */
-"Entrer les paramètres et le nom du module pour le pilote requis.",
-/* TR_MOUNTING_BOOT_FILESYSTEM */
-"Montage du système de fichier de boot...",
-/* TR_MOUNTING_LOG_FILESYSTEM */
-"Montage du système de fichier de log...",
-/* TR_MOUNTING_ROOT_FILESYSTEM */
-"Montage du système de fichier de root...",
-/* TR_MOUNTING_SWAP_PARTITION */
-"Montage de la partition swap...",
-/* TR_MSN_CONFIGURATION */
-"Numéro de téléphone local (MSN/EAZ)",
-/* TR_NETMASK_PROMPT */
-"Masque réseau :",
-/* TR_NETWORKING */
-"Réseau",
-/* TR_NETWORK_ADDRESS_CR */
-"Adresse réseau\n",
-/* TR_NETWORK_ADDRESS_PROMPT */
-"Adresse réseau :",
-/* TR_NETWORK_CONFIGURATION_MENU */
-"Menu de configuration du réseau",
-/* TR_NETWORK_CONFIGURATION_TYPE */
-"Type de configuration réseau",
-/* TR_NETWORK_CONFIGURATION_TYPE_LONG */
-"Sélectionnez la configuration réseau pour %s.  Les types de configuration suivants listent les interfaces ethernet. Si vous changez ce paramètre, un redémarrage du réseau est requis, et vous devrez reconfigurer les attributions des pilotes.",
-/* TR_NETWORK_MASK_CR */
-"Masque réseau\n",
-/* TR_NETWORK_SETUP_FAILED */
-"Installation du réseau échouée.",
-/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */
-"Trop peu de cartes ont été attribuée.",
-/* TR_NO_BLUE_INTERFACE */
-"Interface BLEUE non attribuée.",
-/* TR_NO_CDROM */
-"Aucun CD-ROM trouvé.",
-/* TR_NO_GREEN_INTERFACE */
-"Interface VERTE non attribuée.",
-/* TR_NO_HARDDISK */
-"Aucun disque dur trouvé.",
-/* TR_NO_IPCOP_TARBALL_FOUND */
-"Aucun tarball ipcop trouvé sur le serveur Web.",
-/* TR_NO_ORANGE_INTERFACE */
-"Interface ORANGE non attribuée.",
-/* TR_NO_RED_INTERFACE */
-"Interface ROUGE non attribuée.",
-/* TR_NO_SCSI_IMAGE_FOUND */
-"Aucune image SCSI trouvée sur le serveur Web.",
-/* TR_NO_UNALLOCATED_CARDS */
-"Aucune carte non attribuée restante, il en faut plus. Vous pouvez auto-détecter et rechercher plus de cartes ou choisissez un pilote dans la liste.",
-/* TR_OK */
-"Ok",
-/* TR_PARTITIONING_DISK */
-"Partitionnement du disque...",
-/* TR_PASSWORDS_DO_NOT_MATCH */
-"Les mots de passe ne correspondent pas.",
-/* TR_PASSWORD_CANNOT_BE_BLANK */
-"Le mot de passe ne peut être vide.",
-/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */
-"Le mot de  passe ne peut contenir d'espaces.",
-/* TR_PASSWORD_PROMPT */
-"Mot de passe :",
-/* TR_PHONENUMBER_CANNOT_BE_EMPTY */
-"Le numéro de téléphone ne peut être vide.",
-/* TR_PREPARE_HARDDISK */
-"Le programme d'installation va maintenant préparer le disque %s. Il sera d'abord partitionné, puis les systèmes de fichiers seront installés.",
-/* TR_PRESS_OK_TO_REBOOT */
-"Appuyer sur Ok pour redémarrer.",
-/* TR_PRIMARY_DNS */
-"DNS primaire :",
-/* TR_PRIMARY_DNS_CR */
-"DNS primaire\n",
-/* TR_PROBE */
-"Auto-détection",
-/* TR_PROBE_FAILED */
-"Auto-détection échouée.",
-/* TR_PROBING_HARDWARE */
-"Détection du matériel...",
-/* TR_PROBING_FOR_NICS */
-"Détection des cartes réseaux...",
-/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */
-"Problème lors de la configuration du mot de passe 'admin' %s.",
-/* TR_PROBLEM_SETTING_ROOT_PASSWORD */
-"Problème lors de la configuration du mot de passe 'root'.",
-/* TR_PROBLEM_SETTING_SETUP_PASSWORD */
-"A ENLEVER",
-/* TR_PROTOCOL_COUNTRY */
-"Protocole/Pays",
-/* TR_PULLING_NETWORK_UP */
-"Démarrage du réseau...",
-/* TR_PUSHING_NETWORK_DOWN */
-"Arrêt du réseau...",
-/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */
-"Arrêt du réseau distant...",
-/* TR_QUIT */
-"Quitter",
-/* TR_RED_IN_USE */
-"RNIS (ou une autre connexion externe) est actuellement utilisée.  Vous ne pouvez pas configurer RNIS pendant que l'interface ROUGE est utilisée.",
-/* TR_RESTART_REQUIRED */
-"\n\nLorsque la configuration sera terminée, un redémarrage du réseau sera requis.",
-/* TR_RESTORE */
-"Restaurer",
-/* TR_RESTORE_CONFIGURATION */
-"Si vous avez une disquette avec une configuration système %s, insérez la disquette dans le lecteur et appuyer sur restaurer.",
-/* TR_ROOT_PASSWORD */
-"Mot de passe 'root'",
-/* TR_SECONDARY_DNS */
-"DNS secondaire :",
-/* TR_SECONDARY_DNS_CR */
-"DNS secondaire\n",
-/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */
-"DNS secondaire spécifié sans un DNS primaire",
-/* TR_SECTION_MENU */
-"Menu de sélection",
-/* TR_SELECT */
-"Sélectionner",
-/* TR_SELECT_CDROM_TYPE */
-"Sélectionner le type de CDROM",
-/* TR_SELECT_CDROM_TYPE_LONG */
-"Aucun CD-ROM détecté sur la machine.  Sélectionnez lequel des pilotes suivants vous voulez utiliser afin que %s accède au CD-ROM.",
-/* TR_SELECT_INSTALLATION_MEDIA */
-"Sélectionner le média d'installation",
-/* TR_SELECT_INSTALLATION_MEDIA_LONG */
-"%s peut être installé depuis de multiples sources.  La manière la plus simple est d'utiliser une machine avec un CD-ROM. S'il n'y a aucun lecteur, vous pouvez installer via une autre machine du réseau qui possède les fichiers d'installation disponibles par FTP ou HTTP.",
-/* TR_SELECT_NETWORK_DRIVER */
-"Sélectionner un pilote réseau",
-/* TR_SELECT_NETWORK_DRIVER_LONG */
-"Sélectionner le pilote réseau pour la carte installée sur la machine. Si vous sélectionner MANUEL, vous pourrez saisir le nom du pilote ainsi que les paramètres pour les pilotes qui sont spécifiques comme les cartes ISA.",
-/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */
-"Sélectionnez l'interface que vous voulez reconfigurer.",
-/* TR_SELECT_THE_ITEM */
-"Sélectionner l'élément que vous voulez configurer.",
-/* TR_SETTING_ADMIN_PASSWORD */
-"Paramétrage le mot de passe 'admin' de %s...",
-/* TR_SETTING_ROOT_PASSWORD */
-"Paramétrage du mot de passe 'root'....",
-/* TR_SETTING_SETUP_PASSWORD */
-"A ENLEVER",
-/* TR_SETUP_FINISHED */
-"Installation terminée.",
-/* TR_SETUP_NOT_COMPLETE */
-"L'installation initiale n'est pas complètement finie.  Vous devez vous assurer que l'installation s'est finie correctement en relançant l'installation depuis le shell.",
-/* TR_SETUP_PASSWORD */
-"A ENLEVER",
-/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */
-"Choisissez les paramètres additionnels du module",
-/* TR_SINGLE_GREEN */
-"Votre configuration est définie pour une unique interface VERTE.",
-/* TR_SKIP */
-"Passer",
-/* TR_START_ADDRESS */
-"Adresse de début :",
-/* TR_START_ADDRESS_CR */
-"Adresse de début\n",
-/* TR_STATIC */
-"Statique",
-/* TR_SUGGEST_IO */
-"(suggère %x)",
-/* TR_SUGGEST_IRQ */
-"(suggère %d)",
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
-"Ce pilote est déjà chargé.",
-/* TR_TIMEZONE */
-"Fuseau horaire",
-/* TR_TIMEZONE_LONG */
-"Choisissez votre fuseau horaire dans la liste ci-dessous.",
-/* TR_UNABLE_TO_EJECT_CDROM */
-"Impossible d'éjecter le CD-ROM.",
-/* TR_UNABLE_TO_EXTRACT_MODULES */
-"Impossible d'extraire les modules.",
-/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */
-"Impossible de trouver des pilotes supplémentaires.",
-/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */
-"Impossible de trouver une carte RNIS sur cet ordinateur. Vous devrez peut-être spécifier des paramètres additionnels si la carte est de type ISA ou si elle a des spécificités.",
-/* TR_UNABLE_TO_INITIALISE_ISDN */
-"Impossible d'initialiser RNIS.",
-/* TR_UNABLE_TO_INSTALL_FILES */
-"Impossible d'installer les fichiers.",
-/* TR_UNABLE_TO_INSTALL_LANG_CACHE */
-"Impossible d'installer les fichiers de langues.",
-/* TR_UNABLE_TO_INSTALL_GRUB */
-"Impossible d'installer GRUB.",
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
-"Impossible de charger le pilote.",
-/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */
-"Impossible de générer le système de fichiers boot.",
-/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */
-"Impossible de générer le système de fichiers log.",
-/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */
-"Impossible de générer le système de fichiers root.",
-/* TR_UNABLE_TO_MAKE_SWAPSPACE */
-"Impossible de générer la partition swap.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */
-"Impossible de créer le symlink /dev/harddisk.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */
-"Impossible de créer le simlink /dev/harddisk1.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */
-"Impossible de créer le symlink /dev/harddisk2.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */
-"Impossible de créer le symlink /dev/harddisk3.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */
-"Impossible de créer le symlink /dev/harddisk4.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */
-"Impossible de créer le symlink /dev/root.",
-/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */
-"Impossible de monter le système de fichier boot.",
-/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */
-"Impossible de monter le système de fichier log.",
-/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */
-"Impossible de monter le système de fichier proc.",
-/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */
-"Impossible de monter le système de fichier root.",
-/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */
-"Impossible de monter la partition swap.",
-/* TR_UNABLE_TO_OPEN_HOSTS_FILE */
-"Impossible d'ouvrir le fichier hosts principal.",
-/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */
-"Impossible d'ouvrir le fichier settings",
-/* TR_UNABLE_TO_PARTITION */
-"Impossible de partitionner le disque.",
-/* TR_UNABLE_TO_REMOVE_TEMP_FILES */
-"Impossible de supprimer les fichiers téléchargés temporaires.",
-/* TR_UNABLE_TO_SET_HOSTNAME */
-"Impossible de définir le nom d'hôte.",
-/* TR_UNABLE_TO_UNMOUNT_CDROM */
-"Impossible de démonter le CDROM/disquette.",
-/* TR_UNABLE_TO_UNMOUNT_HARDDISK */
-"Impossible de démonter le disque dur.",
-/* TR_UNABLE_TO_WRITE_ETC_FSTAB */
-"Impossible d'écrire /etc/fstab",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */
-"Impossible d'écrire /etc/hostname",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS */
-"Impossible d'écrire /etc/hosts.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */
-"Impossible d'écrire /etc/hosts.allow.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */
-"Impossible d'écrire /etc/hosts.deny.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */
-"Impossible d'écrire %s/ethernet/settings.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */
-"Impossible d'écrire %s/main/hostname.conf",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */
-"Impossible d'écrire %s/main/settings.",
-/* TR_UNCLAIMED_DRIVER */
-"Il y a une carte ethernet non assignée de type :\n%s\n\nVous pouvez l'assigner à :",
-/* TR_UNKNOWN */
-"INCONNU",
-/* TR_UNSET */
-"NON DEFINIE",
-/* TR_USB_KEY_VFAT_ERR */
-"La clé USB est invalide (aucune partition vfat).",
-/* TR_US_NI1 */
-"US NI1",
-/* TR_WARNING */
-"ATTENTION",
-/* TR_WARNING_LONG */
-"Si vous changez cette adresse IP et que vous êtes connecté à distance, la connexion à la machine %s sera interrompue et vous aurez à vous reconnecter avec la nouvelle IP. C'est une opération risquée et ne devrait pas être tentée si vous n'avez pas d'accès physique à la machine dans le cas où quelque chose se passe mal.",
-/* TR_WELCOME */
-"Bienvenue dans le programme d'installation d'%s. Si vous sélectionnez Annuler sur n'importe lequel des écrans suivants, ceci redémarrera l'ordinateur.",
-/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */
-"Votre configuration est définie pour une interface VERTE unique, qui a déjà un pilote assigné.",
-/* TR_YES */
-"Oui",
-/* TR_NO */
-"Non",
-/* TR_AS */
-"comme",
-/* TR_IGNORE */
-"Ignorer",
-/* TR_PPP_DIALUP */
-"PPP DIALUP (PPPoE, Modem, ATM ...)",
-/* TR_DHCP */
-"DHCP",
-/* TR_DHCP_STARTSERVER */
-"Démarrage du serveur DHCP ...",
-/* TR_DHCP_STOPSERVER */
-"Arrêt du serveur DHCP ...",
-/* TR_LICENSE_ACCEPT */
-"J'accepte les termes de cette licence.",
-/* TR_LICENSE_NOT_ACCEPTED */
-"Je n'accepte pas les termes de cette licence, quitter le programme d'installation.",
-/* TR_EXT2FS_DESCR */
-"Ext2 - Système de fichiers sans journal (suggéré pour les cartes flash)",
-/* TR_EXT3FS_DESCR */
-"Ext3 - Système de fichiers avec journal",
-/* TR_EXT4FS_DESCR */
-"Ext4 - Système de fichiers avec journal",
-/* TR_REISERFS_DESCR */
-"ReiserFS - Système de fichiers avec journal",
-/* TR_NO_LOCAL_SOURCE */
-"Pas de source locale trouvée. Démarrage du téléchargement.",
-/* TR_DOWNLOADING_ISO */
-"Téléchargement du fichier image ISO ...",
-/* TR_DOWNLOAD_ERROR */
-"Erreur pendant le téléchargement!",
-/* TR_DHCP_FORCE_MTU */
-"Force DHCP mtu:",
-/* TR_IDENTIFY */
-"Identify",
-/* TR_IDENTIFY_SHOULD_BLINK */
-"Selected port should blink now ...",
-/* TR_IDENTIFY_NOT_SUPPORTED */
-"Function is not supported by this port.",
-};
diff --git a/langs/it/cgi-bin/it.pl b/langs/it/cgi-bin/it.pl
new file mode 100644 (file)
index 0000000..0b5e786
--- /dev/null
@@ -0,0 +1,2680 @@
+%tr = ( 
+%tr,
+
+'Act as' => 'Lavora come:',
+'Add Level7 rule' => 'Aggiungo una regola al Level7',
+'Add Port Rule' => 'Aggiungo regola porta',
+'Add Rule' => 'Aggiungo regola',
+'Add a route' => 'Aggiungi una rotta',
+'Async logging enabled' => 'Abilita scrittura asincrona di file syslog',
+'Choose Rule' => 'Scegli <u> una </ u> delle seguenti regole.',
+'Class' => 'Classe',
+'Class was deleted' => 'Una classe è stata cancellata',
+'Client status and controlc' => 'Stato del client e controllo:',
+'ConnSched action' => 'Azione:',
+'ConnSched add action' => 'Aggiungo azione',
+'ConnSched change profile title' => 'Cambio profilo:',
+'ConnSched days' => 'Giorno:',
+'ConnSched dial' => 'Connesso',
+'ConnSched down' => 'giu',
+'ConnSched hangup' => 'Disconnesso',
+'ConnSched ipsecstart' => 'IPsec (re)start',
+'ConnSched ipsecstop' => 'IPsec stop',
+'ConnSched reboot' => 'Riavvia',
+'ConnSched reconnect' => 'Riconnetto',
+'ConnSched scheduled actions' => 'Schedula Azione',
+'ConnSched scheduler' => 'Schedula',
+'ConnSched select profile' => 'seleziona profilo',
+'ConnSched shutdown' => 'Spegni',
+'ConnSched time' => 'Ora:',
+'ConnSched up' => 'Su',
+'ConnSched weekdays' => 'Giorno della settimana:',
+'Edit an existing route' => 'Modifica il percorso esistente',
+'Enter TOS' => 'Attivare o disattivare TOS-bits <br /> e premere <i>Salva</i>.',
+'Existing Files' => 'File nel database',
+'HDD temperature' => 'Temperatura HDD',
+'Level7 Protocol' => 'Level7-Protocollo',
+'Level7 Rule' => 'Level7-Rule',
+'Level7 rule' => 'Level7 rule',
+'Local VPN IP' => 'Network Interna (Verde):',
+'MB read' => 'MB Letti',
+'MB written' => 'MB Scritti',
+'MTU' => 'MTU Dimensione:',
+'Number of IPs for the pie chart' => 'Numero di IP per il grafico a torta',
+'Number of Ports for the pie chart' => 'Numero di porte per il grafico a torta',
+'OVPN' => 'OpenVPN',
+'OpenVPN' => 'OpenVPN',
+'Pages' => 'Pagine',
+'Ping' => 'Ping :',
+'Port Rule' => 'Regola-Porta',
+'QoS not enabled' => 'QoS non è abilitata!',
+'Queuelenght' => 'Queuelenght',
+'Remote IP' => 'IP Remoto / Hostname (DynDNS):',
+'Remote VPN IP' => 'VPN Subnet (e.g. 10.0.10.0/255.255.255.0):',
+'Resolv' => 'Resolv-Retry:',
+'Scan for Files' => 'Scansiona i files',
+'Scan from Directory' => 'Scansiona le directory',
+'Set time on boot' => 'Settare l orologio di sistema al boot',
+'Subclass' => 'Subclass',
+'TOS Bits' => 'TOS-Bits',
+'TOS Rule' => 'TOS-Rule',
+'TOS rule' => 'TOS rule',
+'The class number does not match the specified interface.' => 'La classe non corrisponde l interfaccia specificata.',
+'The destination IP address is invalid.' => 'L\' indirizzo IP di destinazione non è valido.',
+'The source IP address is invalid.' => 'L\' indirizzo IP di origine non è valido.',
+'Utilization on' => 'Utilizzo su',
+'Verbose' => 'Verbose:',
+'WakeOnLan' => 'Wake On Lan',
+'a ca certificate with this name already exists' => 'Un certificato CA con questo nome esiste gi&agrave.',
+'a connection with this common name already exists' => 'Una connessione con questo nome comune esiste gi&agrave.',
+'a connection with this name already exists' => 'Una connessione con questo nome esiste gi&agrave.',
+'abort' => 'Annulla',
+'access allowed' => 'Accesso consentito da:',
+'access refused with this oinkcode' => 'Accesso negato al presente Codice',
+'accounting' => 'Contabilità',
+'accounting user nonpdc' => 'Contabilità - Nessun PDC Mode',
+'accounting user pdc' => 'Contabilità - PDC Mode',
+'action' => 'Azione',
+'activate' => 'Attiva',
+'activate user' => 'Attiva Utente',
+'active' => 'Attiva',
+'add' => 'Aggiungi',
+'add a host' => 'Aggiungi host',
+'add a new rule' => 'Aggiungi nuova regola:',
+'add cron' => 'Aggiungi cronjob',
+'add device' => 'Aggiungi device',
+'add network' => 'Aggiungi network',
+'add new alias' => 'Aggiungi nuovo alias',
+'add new lease' => 'Aggiungi un lease fixed',
+'add new ovpn' => 'Impostazioni OpenVPN:',
+'add printer' => 'Aggiungi stampante',
+'add service' => 'Aggiungi servizio',
+'add share' => 'Aggiungi una condivisione',
+'add subclass' => 'Aggiungi subclass',
+'add user' => 'Aggiungi Utente',
+'add xtaccess' => 'Aggiungi un accesso esterno',
+'add-route' => 'Route addizionale',
+'added from dhcp lease list' => 'Aggiunto dalla lista dei lease DHCP',
+'addons' => 'Addons',
+'admin user password has been changed' => '&egrave stata modificata la Password di Admin.',
+'admin users' => 'Utente con privilegi di superutente',
+'administrator user password' => 'Password per l utente Admin:',
+'advanced' => 'avanzato',
+'advanced server' => 'Opzioni avanzate server',
+'advproxy AUTH always required' => 'Richiedere l\'autenticazione per indirizzi sorgente senza restrizioni',
+'advproxy AUTH auth cache TTL' => 'autenticazione cache TTL (in minuti)',
+'advproxy AUTH global settings' => 'Impostazioni di autenticazione globali',
+'advproxy AUTH limit of IP addresses' => 'Limiti IP per utente',
+'advproxy AUTH method' => 'Metodo di Autenticazione',
+'advproxy AUTH method ident' => 'identd',
+'advproxy AUTH method ldap' => 'LDAP',
+'advproxy AUTH method ncsa' => 'Locale',
+'advproxy AUTH method none' => 'None',
+'advproxy AUTH method ntlm' => 'Windows',
+'advproxy AUTH method radius' => 'RADIUS',
+'advproxy AUTH no auth' => 'Domini senza autenticazione (uno per riga)',
+'advproxy AUTH number of auth processes' => 'Numero di processi di autenticazione',
+'advproxy AUTH realm' => 'Authentication realm prompt',
+'advproxy AUTH user IP cache TTL' => 'User/IP cache TTL (in minutes)',
+'advproxy IDENT authorized users' => 'Gli utenti autorizzati (uno per riga)',
+'advproxy IDENT aware hosts' => 'Ident aware hosts (one per line)',
+'advproxy IDENT identd settings' => 'Impostazioni identd comuni',
+'advproxy IDENT required' => 'Richiesti l\’ identificazione identd',
+'advproxy IDENT timeout' => 'Ident timeout (in seconds)',
+'advproxy IDENT unauthorized users' => 'Gli utenti non autorizzati (uno per riga)',
+'advproxy IDENT use negative access list' => 'Utilizzare il controllo degli accessi negativo',
+'advproxy IDENT use positive access list' => 'Utilizzare il controllo degli accessi positivo',
+'advproxy IDENT user based access restrictions' => 'Restrizioni di accesso basato sull utente',
+'advproxy LDAP ADS' => 'Active Directory',
+'advproxy LDAP NDS' => 'Novell eDirectory',
+'advproxy LDAP V2' => 'LDAP versione 2',
+'advproxy LDAP V3' => 'LDAP versione 3',
+'advproxy LDAP auth' => 'LDAP autenticazione',
+'advproxy LDAP basedn' => 'Base DN',
+'advproxy LDAP binddn password' => 'Bind DN password',
+'advproxy LDAP binddn settings' => 'Bind DN settings',
+'advproxy LDAP binddn username' => 'Bind DN username',
+'advproxy LDAP common settings' => 'Common LDAP settings',
+'advproxy LDAP group access control' => 'Group based access control',
+'advproxy LDAP group required' => 'Required group',
+'advproxy LDAP port' => 'Porta',
+'advproxy LDAP server' => 'LDAP Server',
+'advproxy LDAP type' => 'LDAP type',
+'advproxy MIME block types' => ' Block these MIME types (one per line)',
+'advproxy MIME filter' => 'MIME type filter',
+'advproxy NCSA auth' => 'Autenticazione utente Local',
+'advproxy NCSA create user' => 'Crea utente',
+'advproxy NCSA group' => 'Group',
+'advproxy NCSA group membership' => 'Group membership',
+'advproxy NCSA grp disabled' => 'Disabled',
+'advproxy NCSA grp extended' => 'Extended',
+'advproxy NCSA grp standard' => 'Standard',
+'advproxy NCSA min password length' => 'Lunghezza minima della password',
+'advproxy NCSA no accounts' => 'No user accounts available',
+'advproxy NCSA password' => 'Password',
+'advproxy NCSA password confirm' => 'Password (conferma)',
+'advproxy NCSA redirector bypass' => 'Bypass redirection for members of the group',
+'advproxy NCSA update user' => 'Update user',
+'advproxy NCSA user accounts' => 'User accounts',
+'advproxy NCSA user management' => 'Gestione utenti',
+'advproxy NCSA username' => 'Username',
+'advproxy NTLM BDC hostname' => 'BDC hostname',
+'advproxy NTLM PDC hostname' => 'PDC hostname',
+'advproxy NTLM auth' => 'Windows NT/2003 autenticazione',
+'advproxy NTLM auth mode' => 'metodo di autenticazione',
+'advproxy NTLM authorized users' => 'Authorized domain users (one per line)',
+'advproxy NTLM domain' => 'Domain',
+'advproxy NTLM domain settings' => 'Common domain settings',
+'advproxy NTLM unauthorized users' => 'Unauthorized domain users (one per line)',
+'advproxy NTLM use integrated auth' => 'Enable Windows integrated authentication',
+'advproxy NTLM use negative access list' => 'Use negative access control',
+'advproxy NTLM use positive access list' => 'Use positive access control',
+'advproxy NTLM user based access restrictions' => 'User based access restrictions',
+'advproxy RADIUS authorized users' => 'Authorized users (one per line)',
+'advproxy RADIUS identifier' => 'Identifier',
+'advproxy RADIUS port' => 'Port',
+'advproxy RADIUS radius settings' => 'Common RADIUS settings',
+'advproxy RADIUS secret' => 'Shared secret',
+'advproxy RADIUS server' => 'RADIUS Server',
+'advproxy RADIUS unauthorized users' => 'Unauthorized users (one per line)',
+'advproxy RADIUS use negative access list' => 'Use negative access control',
+'advproxy RADIUS use positive access list' => 'Use positive access control',
+'advproxy RADIUS user based access restrictions' => 'User based access restrictions',
+'advproxy UA enable filter' => 'Attiva il controllo del browser',
+'advproxy access' => 'Access',
+'advproxy admin mail' => 'Cache administrator e-mail',
+'advproxy advanced proxy' => 'Advanced Proxy',
+'advproxy advanced web proxy' => 'Advanced Web Proxy',
+'advproxy advanced web proxy configuration' => 'Configurazione Avanzata del Proxy WEB',
+'advproxy allowed subnets' => 'basato sulle sottoreti (uno per riga)',
+'advproxy allowed web browsers' => 'sono permessi i seguenti clienti per l\'accesso web',
+'advproxy back to main page' => 'Torna alla pagina principale',
+'advproxy banned ip clients' => 'Indirizzi IP esclusi (uno per riga)',
+'advproxy banned mac clients' => 'Indirizzi MAC esclusi (uno per riga)',
+'advproxy cache management' => 'Cache management',
+'advproxy cache replacement policy' => 'Policy di sostituzione Cache',
+'advproxy cache-digest' => 'Enable Cache-Digest Generation',
+'advproxy chgwebpwd ERROR' => 'E R R O R E :',
+'advproxy chgwebpwd SUCCESS' => 'S U C C E S S :',
+'advproxy chgwebpwd change password' => 'Cambia password',
+'advproxy chgwebpwd change web password' => 'C a m b i a &nbsp; P a s s w o r d &nbsp; a c c e s s o &nbsp; W E B',
+'advproxy chgwebpwd new password' => 'Nuova password',
+'advproxy chgwebpwd new password confirm' => 'Nuova password (conferma)',
+'advproxy chgwebpwd old password' => 'Password attuale',
+'advproxy chgwebpwd username' => 'Username',
+'advproxy classroom extensions' => 'estensioni di classe',
+'advproxy clear cache' => 'Clear Cache',
+'advproxy client IP forwarding' => 'Indirizzo del client per inoltro IP',
+'advproxy common settings' => 'Impostazioni Comuni',
+'advproxy content based throttling' => 'Abilita limitazioni per contenuto',
+'advproxy cre disabled' => 'The management interface has been disabled by the administrator',
+'advproxy cre group definitions' => 'Definizioni del gruppo in classe',
+'advproxy cre supervisors' => 'Indirizzi IP Supervisore (uno per riga)',
+'advproxy destination ports' => 'Porte di destinatinazione',
+'advproxy download throttling' => 'Limiti Download',
+'advproxy enabled' => 'Abilitato',
+'advproxy enabled on' => 'Abilitato su',
+'advproxy errmsg acl cannot be empty' => 'Access control list cannot be empty',
+'advproxy errmsg auth cache ttl' => 'Invalid value for authentication cache TTL',
+'advproxy errmsg auth children' => 'Invalid number of authentication processes',
+'advproxy errmsg auth ipcache may not be null' => 'Authentication cache TTL may not be 0 when using IP address limits',
+'advproxy errmsg auth ipcache ttl' => 'Invalid value for user/IP cache TTL',
+'advproxy errmsg cache' => 'The RAM cache size is greater than the harddisk cache size:',
+'advproxy errmsg change fail' => 'Password could not be changed',
+'advproxy errmsg change success' => 'Password for web access sucessfully changed',
+'advproxy errmsg hdd cache size' => 'Invalid value for harddisk cache size (min 10 MB required)',
+'advproxy errmsg ident timeout' => 'Invalid ident timeout',
+'advproxy errmsg invalid bdc' => 'Invalid hostname for backup domain controller',
+'advproxy errmsg invalid destination port' => 'Invalid destination port',
+'advproxy errmsg invalid ip or mask' => 'Invalid IP address or network mask',
+'advproxy errmsg invalid mac' => 'Invalid MAC address',
+'advproxy errmsg invalid pdc' => 'Invalid hostname for primary domain controller',
+'advproxy errmsg invalid proxy port' => 'Invalid proxy port',
+'advproxy errmsg invalid upstream proxy' => 'Invalid upstream proxy IP/hostname',
+'advproxy errmsg invalid upstream proxy username or password setting' => 'Invalid upstream proxy username or password setting',
+'advproxy errmsg invalid user' => 'Username does not exist',
+'advproxy errmsg ldap base dn' => 'LDAP base DN required',
+'advproxy errmsg ldap bind dn' => 'LDAP bind DN username and password required',
+'advproxy errmsg ldap port' => 'Invalid LDAP port number',
+'advproxy errmsg ldap server' => 'Invalid IP address/hostname for LDAP Server',
+'advproxy errmsg max userip' => 'Invalid number of IP addresses per user',
+'advproxy errmsg mem cache size' => 'Invalid value for memory cache size',
+'advproxy errmsg no browser' => 'Almeno un browser o un client devono essere selezionati per l\'accesso web',
+'advproxy errmsg no password' => 'Password can not be empty',
+'advproxy errmsg no username' => 'Username can not be empty',
+'advproxy errmsg non-transparent proxy required' => 'Proxy Web deve essere eseguito in modalit&agrave; non trasparente per l\'autenticazione',
+'advproxy errmsg ntlm domain' => 'Windows domain name required',
+'advproxy errmsg ntlm pdc' => 'Hostname for primary domain controller required',
+'advproxy errmsg password incorrect' => 'Password incorrect',
+'advproxy errmsg password length' => 'Invalid value for password length',
+'advproxy errmsg password length 1' => 'Password must have at least ',
+'advproxy errmsg password length 2' => ' characters',
+'advproxy errmsg passwords different' => 'Passwords don\'t match',
+'advproxy errmsg proxy ports equal' => 'The proxy port and the transparent port cannot be equal.',
+'advproxy errmsg radius port' => 'Invalid RADIUS port number',
+'advproxy errmsg radius secret' => 'RADIUS shared secret required',
+'advproxy errmsg radius server' => 'Invalid IP address for RADIUS Server',
+'advproxy errmsg time restriction' => 'Invalid time restriction',
+'advproxy error design' => 'Design dei messaggi di errore',
+'advproxy error language' => 'Lingua dei messaggi di errore',
+'advproxy fake referer' => 'Fake referer submitted to external sites',
+'advproxy fake useragent' => 'Fake useragent submitted to external sites',
+'advproxy friday' => 'Ven',
+'advproxy from' => 'Da',
+'advproxy hdd cache size' => 'Harddisk cache size (MB)',
+'advproxy invalid num of children' => 'Invalid number of filter processes',
+'advproxy log enabled' => 'Abilito Log',
+'advproxy log query' => 'Termini di ricerca del LOG',
+'advproxy log settings' => 'Impostazioni di Log',
+'advproxy log useragent' => 'Log useragents',
+'advproxy max download size' => 'Max download size (KB)',
+'advproxy max size' => 'Max object size (KB)',
+'advproxy max upload size' => 'Max upload size (KB)',
+'advproxy memory replacement policy' => 'Polcy di sostituzione della memoria',
+'advproxy min size' => 'Min object size (KB)',
+'advproxy mode allow' => 'allow',
+'advproxy mode deny' => 'deny',
+'advproxy monday' => 'Lun',
+'advproxy network based access' => 'Controllo dell\'accesso alla rete ',
+'advproxy no cache sites' => 'Non memorizzare nella cache i domini (uno per riga)',
+'advproxy no clients defined' => 'No clients defined',
+'advproxy no connection auth' => 'No connection oriented authentication forwarding',
+'advproxy no cre groups' => 'There are no access groups available',
+'advproxy no internal proxy on blue' => 'Disable internal proxy access from Blu to other subnets',
+'advproxy no internal proxy on green' => 'Disabilitare l\'accesso al proxy interno dalle sottoreti',
+'advproxy number of L1 dirs' => 'Number of level-1 subdirectories',
+'advproxy off' => 'Proxy off',
+'advproxy offline mode' => 'Attiva modalit&agrave; offline',
+'advproxy on' => 'Proxy Acceso',
+'advproxy privacy' => 'Privacy',
+'advproxy proxy port' => 'Porta Proxy',
+'advproxy proxy port transparent' => 'Porta Transparente',
+'advproxy ram cache size' => 'Dimensione della Memoria di cache (MB)',
+'advproxy redirector children' => 'Numero dei processi',
+'advproxy reset' => 'Reset',
+'advproxy saturday' => 'Sab',
+'advproxy save and restart' => 'Save and Restart',
+'advproxy squid version' => 'Versione cache di Squid',
+'advproxy squidclamav' => 'SquidClamav',
+'advproxy ssadvanced proxy' => 'advanced proxy',
+'advproxy ssl ports' => 'Porte SSL sono ammessi (uno per riga)',
+'advproxy standard' => 'Standard',
+'advproxy standard ports' => 'Porte standard sono ammessi (uno per riga)',
+'advproxy sunday' => 'Dom',
+'advproxy supervisor password' => 'Password di Supervisore',
+'advproxy suppress version' => 'NON visualizare le informazioni della versione',
+'advproxy throttle binary' => 'Files Binary',
+'advproxy throttle dskimg' => 'Immagini CD',
+'advproxy throttle mmedia' => 'Multimedia',
+'advproxy throttling per host on' => 'Limite per host',
+'advproxy throttling total on' => 'Limite Globale',
+'advproxy throttling unlimited' => 'unlimited',
+'advproxy thursday' => 'Gio',
+'advproxy time restrictions' => 'Restrizioni temporali',
+'advproxy to' => 'A',
+'advproxy transfer limits' => 'limiti di trasferimento',
+'advproxy transparent on' => 'Transparente su',
+'advproxy tuesday' => 'Mar',
+'advproxy unknown' => 'Unknown',
+'advproxy unrestricted ip clients' => 'Gli indirizzi IP senza restrizioni (uno per riga)',
+'advproxy unrestricted mac clients' => 'Gli indirizzi MAC senza restrizioni (uno per riga)',
+'advproxy update accelerator' => 'Update accelerator',
+'advproxy update information' => 'There is an updated version available for download. Visit <a href="http://www.advproxy.net" target="_blank">http://www.advproxy.net</a> for more information.',
+'advproxy update notification' => 'Update notification!',
+'advproxy upstream password' => 'Upstream password',
+'advproxy upstream proxy' => 'Upstream proxy',
+'advproxy upstream proxy host:port' => 'Upstream proxy (host:port)',
+'advproxy upstream username' => 'Upstream username',
+'advproxy url filter' => 'Filtro URL',
+'advproxy username forwarding' => 'Nome Utente per inoltro',
+'advproxy via forwarding' => 'Indirizzo di inoltro del proxy',
+'advproxy visible hostname' => 'Hostname Visible',
+'advproxy web browser' => 'Web browser',
+'advproxy wednesday' => 'Mer',
+'again' => 'Again:',
+'age second' => 'Secondi',
+'age seconds' => 'Secondi',
+'age shour' => 'h',
+'age sminute' => 'min',
+'age ssecond' => 'sec',
+'aktiv' => 'Attivo',
+'album' => 'Album',
+'alcatelusb help' => 'To utilise the Speedtouch 330 or Speedtouch USB modem you must upload the firmware to your IPFire box. Please download the <b>Embedded Firmware</b> package for SpeedTouch 330 from speedtouch.com, unzip and then upload the appropriate file for your modem : KQD6_3.xxx when Rev<4 or ZZZL_3.xxx for Rev=4 using the form below.',
+'alcatelusb upload' => 'Upload Speedtouch USB firmware',
+'alias ip' => 'Alias IP',
+'aliases' => 'Aliases',
+'aliases not active' => 'Aliases will not be active unless your RED interface is STATIC',
+'all' => 'All',
+'all interfaces' => 'All Interfaces',
+'all services' => 'Tutti i Servizi',
+'all updates installed' => 'All updates installed',
+'allmsg' => 'Vedi Tutto',
+'alt dialup' => 'Dialup',
+'alt home' => 'Pagina Principale',
+'alt information' => 'Informazione',
+'alt logs' => 'Log',
+'alt ovpn' => 'OpenVPN',
+'alt proxy' => 'Proxy',
+'alt services' => 'Servizi',
+'alt system' => 'Sistema',
+'alt vpn' => 'VPNs',
+'and' => 'And',
+'ansi t1.483' => 'TO BE REMOVED',
+'apcupsd' => 'APC-UPS status',
+'apply' => 'Apply now',
+'april' => 'Aprile',
+'archive not exist' => 'Configuration archive does not exist',
+'are you sure' => 'Are you sure?',
+'arp table entries' => 'ARP Table Entries',
+'artist' => 'Artist',
+'atm device' => 'Device:',
+'atm settings' => 'ATM settings',
+'attemps' => 'Attempts',
+'attention' => 'ATTENTION',
+'august' => 'Agosto',
+'authentication' => 'Authentication:',
+'automatic' => 'Automatic',
+'available updates' => 'Available updates:',
+'average' => 'Average',
+'avoid dod' => 'Do not use this option with Dial on Demand! Mainly used if your IPFire is behind a router. Your RED IP must be inside one of the three reserved network numbers e.g. 10/8, 172.16/12, 192.168/16',
+'back' => 'BACK',
+'backup' => 'Backup',
+'backup archive' => 'Backup File (.dat)',
+'backup clear archive' => 'Clear Backup File (.gz)',
+'backup config floppy' => 'Backup Configuration - Floppy Disk',
+'backup configuration' => 'Backup Configuration:',
+'backup erase key' => 'Erase key',
+'backup explain key' => 'Backup are encrypted using a key. To avoid illegal backup manipulations, IPFire only restores a backup that is encrypted with the key you will specify here. You have three options available to you',
+'backup explain key li1' => 'let IPFire create key for you.',
+'backup explain key li2' => 'import a saved key (possibly password protected).',
+'backup explain key li3' => 'extract a key from a non-encrypted 1.4.10 backup only.',
+'backup explain key no1' => 'you should save this key if you plan to restore new machines, IPFire accepts only once key creation/import.',
+'backup explain key no2' => 'legacy floppy backups are not concerned with this key.',
+'backup export key' => 'Export key',
+'backup extract key' => 'Extract key',
+'backup from' => 'Backup from',
+'backup generate key' => 'Generate key',
+'backup import dat file' => 'Import a backup (.dat) file',
+'backup import key' => 'Import key',
+'backup key' => 'Backup Encryption Key',
+'backup key file' => 'Backup key file',
+'backup key info' => 'IPFire restricts access to the backup key, thus you must know root password. You have possibility to protect this key outside of IPFire with a password.',
+'backup media info' => 'Floppy and/or unformatted media may display stranges partitions sizes. In this case, select the whole device. Remenber to mount harddisk before removing device. Note: floppy created here are not usable with IPFire installer program!',
+'backup missing key' => 'Need the backup key to restore a set',
+'backup password' => 'Backup password',
+'backup protect key password' => 'Backup key password',
+'backup sets' => 'Backup sets',
+'backup to floppy' => 'Backup to floppy',
+'backupaddon' => 'Addon Backup',
+'backupprofile' => 'In case reconnection fails, switch to profile',
+'backups' => 'backups',
+'backupwarning' => 'Per favore prima di ripristinare il backup del sistema e/o il backup addon, Si prega di mantenere il nome del file originale, di quando &eacute; stato scaricato.',
+'bad characters in' => 'Bad characters in ',
+'bad characters in script field' => 'Bad characters in script field',
+'bad characters in the telephone number field' => 'Bad characters in the telephone number field.',
+'bad destination range' => 'The Destination port range has a first value that is greater than or equal to the second value.',
+'bad ignore filter' => 'Bad ignore filter:',
+'bad return code' => 'Helper program returned error code',
+'bad source range' => 'The Source port range has a first value that is greater than or equal to the second value.',
+'bandwidth usage' => 'bandwidth usage (external)',
+'bandwitherror' => 'You cannot change the bandwithsettings, with Qos being enabled. First disable Qos.<p>',
+'bandwithsettings' => 'Bandwithsettings',
+'basic options' => 'Opzioni di base',
+'beep when ppp connects or disconnects' => 'Segnale acustico quando IPFire si connette o disconnette',
+'behind a proxy' => 'Behind a proxy:',
+'bewan adsl pci st' => 'TO BE REMOVED',
+'bewan adsl usb' => 'TO BE REMOVED',
+'bit' => 'Bit',
+'bitrate' => 'Bitrate',
+'bleeding rules' => 'Bleeding Edge Snort Rules',
+'blue' => 'Blu',
+'blue access' => 'Blu Access',
+'blue access use hint' => 'You have to enter the MAC or the IP Address for a device. To enter both is also possible',
+'blue interface' => 'Blu Interface',
+'broadcast' => 'Broadcast',
+'broken pipe' => 'Broken pipe',
+'buffered memory' => 'Buffered Memory',
+'buffers' => 'buffers',
+'bytes per second' => 'Bytes per Second',
+'bytes received' => 'Bytes Received',
+'bytes sent' => 'Bytes Sent',
+'ca certificate' => 'CA Certificate',
+'ca name' => 'CA name',
+'cache management' => 'Gestione della cache',
+'cache size' => 'Cache size (MB):',
+'cached' => 'cached',
+'cached memory' => 'Cached Memory  ',
+'cached swap' => 'Cached Swap',
+'calamaris available reports' => 'Report disponibili',
+'calamaris byte unit' => 'Unità Byte',
+'calamaris create report' => 'Create report',
+'calamaris enable content report' => 'Abilita report contenuto',
+'calamaris enable distribution histogram' => 'Abilita distribuzione istogramma',
+'calamaris enable domain report' => 'Abilita rapporto di dominio',
+'calamaris enable performance report' => 'Abilita report di prestazioni',
+'calamaris enable requester report' => 'Abilita report richiedente',
+'calamaris enable verbose reporting' => 'Attiva la segnalazione dettagliata',
+'calamaris high' => 'high',
+'calamaris histogram resolution' => 'Risoluzione istogramma',
+'calamaris low' => 'low',
+'calamaris medium' => 'medium',
+'calamaris no reports available' => 'Non ci sono report disponibili',
+'calamaris none' => 'none',
+'calamaris number of content types' => 'Numero di tipi di contenuto',
+'calamaris number of domains' => 'Numero di domini',
+'calamaris number of requested urls' => 'Numero di URL richiesto',
+'calamaris number of requesting hosts' => 'Numero di host che lo richiedono',
+'calamaris performance options' => 'Opzione prestazione',
+'calamaris proxy reports' => 'Report del Proxy',
+'calamaris refresh list' => 'Refresh list',
+'calamaris report interval (in minutes)' => 'Intervallo del Report in minuti',
+'calamaris report options' => 'Opzioni del Report',
+'calamaris report period' => 'Periodo del Report',
+'calamaris run as background task' => 'Eseguito come processo in background',
+'calamaris show usernames' => 'Mostra usernames',
+'calamaris skip archived logfiles' => 'Ignora file di registro archiviati',
+'calamaris unlimited' => 'unlimited',
+'calamaris view' => 'View',
+'calamaris view report' => 'View report',
+'calc traffic all x minutes' => 'Calculate traffic all x minutes',
+'cancel' => 'Cancel',
+'cancel-adv-options' => 'Cancel',
+'cannot enable both nat traversal and compression' => 'Cannot enable both NAT traversal and compression.',
+'cannot enable ntp without specifying primary' => 'Cannot enable NTP without specifying primary.',
+'cannot specify secondary dns without specifying primary' => 'Cannot specify secondary DNS without specifying primary.',
+'cannot specify secondary ntp without specifying primary' => 'Cannot specify Secondary NTP server without specifying Primary',
+'cannot specify secondary wins without specifying primary' => 'Cannot specify secondary WINS without specifying primary.',
+'cant change certificates' => 'Can\'t change certificates.',
+'cant enable xtaccess' => 'The associated port forwarding rule is disabled, therefore you cannot enable external access for this rule.',
+'cant start openssl' => 'Can\'t start OpenSSL',
+'capabilities' => 'Capabilities',
+'caps all' => 'Tutti',
+'capsclosed' => 'SCOLLEGATO',
+'capsinactive' => 'INATTIVO',
+'capsopen' => 'COLLEGATO',
+'capswarning' => 'WARNING',
+'caption' => 'Caption',
+'ccd add' => 'Add network',
+'ccd choose net' => 'Choose network',
+'ccd client options' => 'Advanced client options',
+'ccd clientip' => 'Host address',
+'ccd dynrange' => 'Dynamic OpenVPN IP address pool',
+'ccd err blue' => 'This is the Blu subnet.',
+'ccd err green' => 'This is the Verde subnet.',
+'ccd err hostinnet' => 'You are not able to delete this network, while it still contains clients.',
+'ccd err inuse' => 'Already used by another client.',
+'ccd err invalidname' => 'Invalid name. Allowed characters are A-Z, a-z, dash and space.',
+'ccd err invalidnet' => 'Invalid IP address. Format: 192.168.0.0/24 or 192.168.0.0/255.255.255.0.',
+'ccd err iroute' => 'Network address for route is invalid.',
+'ccd err irouteexist' => 'This route is already in use.',
+'ccd err isipsecnet' => 'The given subnet address is already used by an IPsec network.',
+'ccd err isipsecrw' => 'The given subnet address is already used by the IPsec rw network.',
+'ccd err isovpnn2n' => 'The subnet address is already in use for an OpenVPN net-to-net connection.',
+'ccd err isovpnnet' => 'The subnet address is already in use for the OpenVPN server.',
+'ccd err issubnet' => 'Subnet address already in use.',
+'ccd err name' => 'Please choose a name.',
+'ccd err nameexist' => 'Name already exists.',
+'ccd err netadr' => 'Subnet address is invalid or range is too large.',
+'ccd err netadrexist' => 'Network already exists.',
+'ccd err orange' => 'This is the ORANGE subnet.',
+'ccd err red' => 'This is the RED subnet.',
+'ccd err routeovpn' => 'Already used by OpenVPN server.',
+'ccd err routeovpn2' => 'Already pushed from OpenVPN server.',
+'ccd hint' => 'On this page you are able to define static networks from which the roadwarrior clients can get fixed IP address assignments.',
+'ccd invalid' => 'Invalid.',
+'ccd iroute' => 'IPFire has access to these networks on the client\'s site',
+'ccd iroute2' => 'Client has access to these networks on IPFire\'s site',
+'ccd iroutehint' => 'Attention! If you change these settings, you have to restart the OpenVPN server that the changes take effect!',
+'ccd modify' => 'Change network',
+'ccd name' => 'Name',
+'ccd net' => 'Static IP address pools',
+'ccd noaddnet' => 'You can only add new static networks when OpenVPN server is stopped.',
+'ccd none' => 'None',
+'ccd routes' => 'Routing:',
+'ccd subnet' => 'Subnet',
+'ccd used' => 'Used addresses',
+'cert' => 'Certificate',
+'certificate' => 'Certificate',
+'certificate authorities' => 'Autorità di certificazione',
+'certificate does not have a valid ca associated with it' => 'Certificate does not have a valid CA associated with it.',
+'certificate file move failed' => 'Certificate file move failed',
+'cfg restart' => 'A reboot is suggested after restoring a configuration archive.',
+'chain' => 'Chain',
+'change passwords' => 'Change passwords',
+'change share' => 'edit share options',
+'check for net traffic update' => 'Check for Net-Traffic updates',
+'check vpn lr' => 'Check',
+'choose config' => 'Choose config',
+'choose media' => 'Choose media',
+'cipher' => 'Encryption:',
+'city' => 'City',
+'class in use' => 'The class is already in use.',
+'clear cache' => 'Clear Cache',
+'clear playlist' => 'Empty playlist',
+'clenabled' => 'Fornire il tempo alla rete locale',
+'click to disable' => 'Enabled (click to disable)',
+'click to enable' => 'Disabled (click to enable)',
+'client' => 'Workstation Name',
+'clock has not been synchronized' => 'Clock has not been synchronized',
+'clock last synchronized at' => 'L\'orologio è stato sincronizato il',
+'comment' => 'Description:',
+'common name' => 'Common name',
+'community rules' => 'Snort/VRT GPLv2 Community Rules',
+'comp-lzo' => 'LZO-Compression:',
+'compression' => 'Compression:',
+'computer to modem rate' => 'Computer to modem rate:',
+'concentrator name' => 'Concentrator name:',
+'confirmation' => 'confirmation',
+'connect' => 'OVPN Start / Connect',
+'connect the modem' => 'Connect the modem',
+'connect timeout' => 'Connect timeout:',
+'connected' => 'Connected',
+'connecting' => 'Connecting...',
+'connection' => 'connessione',
+'connection closed' => 'Not connected...',
+'connection debugging' => 'Connection debugging',
+'connection status and controlc' => 'Stato della connessione e controllo',
+'connection tracking' => 'iptables Connection Tracking',
+'connection type' => 'Connection Type',
+'connection type is invalid' => 'Connection type is invalid.',
+'connections' => 'Connessioni',
+'connections are associated with this ca.  deleting the ca will delete these connections as well.' => 'connections are associated with this CA. Deleting the CA will delete these connections as well.',
+'connscheduler' => 'Schedulazione e connessione',
+'core notice 1' => '<strong>Notice:</strong> There is an core-update from',
+'core notice 2' => 'to',
+'core notice 3' => 'available.',
+'could not be opened' => 'could not be opened.',
+'could not connect to' => 'Could not connect to',
+'could not connect to www ipcop org' => 'Could not connect to www.ipfire.org',
+'could not connect to www ipfire org' => 'Could not connect to www.ipfire.org',
+'could not create directory' => 'Could not create directory.',
+'could not download latest patch list' => 'Could not download latest patch list (not connected).',
+'could not download latest updates' => 'Could not download latest updates.',
+'could not download the available updates list' => 'Could not download the available updates list.',
+'could not open available updates file' => 'Could not open available updates file.',
+'could not open installed updates file' => 'Could not open installed updates file',
+'could not open update information file' => 'Could not open update information file.  The update file is corrupt.',
+'could not retrieve common name from certificate' => 'Could not retrieve common name from certificate.',
+'count' => 'Count',
+'countries' => 'Countries',
+'country' => 'Country',
+'country codes and flags' => 'Country Codes and Flags:',
+'countrycode' => 'Code',
+'cpu frequency per' => 'Frequenza CPU',
+'cpu idle usage' => 'Idle CPU Usage',
+'cpu interrupt usage' => 'Uso Interrupt dalla CPU',
+'cpu iowait usage' => 'attesa CPU di IO',
+'cpu irq usage' => 'Uso IRQ dalla CPU',
+'cpu nice usage' => 'Nice CPU Usage',
+'cpu steal usage' => 'Steal CPU Usage',
+'cpu system usage' => 'System CPU Usage',
+'cpu usage per' => 'CPU Usage per',
+'cpu user usage' => 'User CPU Usage',
+'create' => 'Create',
+'create mask' => 'UNIX rights for new created files',
+'create new backup' => 'Create a new backup set',
+'credits' => 'Credits',
+'crl' => 'Certificate Revocation List',
+'cron server' => 'CRON Server',
+'current' => 'Current',
+'current aliases' => 'Current aliases',
+'current class' => 'Current class',
+'current devices' => 'Current devices',
+'current dhcp leases on blue' => 'Current DHCP leases on Blu',
+'current dynamic leases' => 'Current dynamic leases',
+'current fixed leases' => 'Current fixed leases',
+'current hosts' => 'Attuali hosts',
+'current media' => 'Current media',
+'current ovpn' => 'Active OVPN-Connection:',
+'current playlist' => 'Current Playlist',
+'current profile' => 'Current profile:',
+'current rules' => 'Current rules:',
+'custom networks' => 'Custom networks',
+'custom services' => 'Servizio Custom',
+'daily firewallhits' => 'daily firewallhits',
+'dat without key' => 'An encrypted archive cannot be restored without the key.',
+'date' => 'Date',
+'date not in logs' => 'Non esistono dati registrati per il giorno interrogato',
+'day' => 'Giorno',
+'day after' => 'Domani',
+'day before' => 'Ieri',
+'day-graph' => 'Giorno',
+'days' => 'Giorni.',
+'dbfile' => 'Dbfile',
+'ddns help dnsmadeeasy' => 'In the field for hostname enter your ID (or a list of IDs seperated by;)',
+'ddns help freedns' => 'In the fied username enter your connect string',
+'ddns help plus' => '<b>+</b> marks a mandatory field',
+'ddns hostname added' => 'Dynamic DNS hostname added',
+'ddns hostname modified' => 'Dynamic DNS hostname modified',
+'ddns hostname removed' => 'Dynamic DNS hostname removed',
+'ddns minimize updates' => 'Minimize updates: before an update, compares the dns IP for hostname "[host.]domain" against RED IP.',
+'ddns noip prefix' => 'To use no-ip in group mode, prefix hostname with <b>%</b>',
+'deactivate' => 'deactivate',
+'deactivate user' => 'deactivate user',
+'dead peer detection' => 'Dead Peer Detection',
+'debugme' => 'Not yet implemented',
+'december' => 'Dicembre',
+'deep scan directories' => 'Scan recursive',
+'def lease time' => 'Default Lease Time',
+'default' => 'Default',
+'default ip' => 'Default IP address',
+'default lease time' => 'Tempo di lease predefinito (min):',
+'default networks' => 'Default networks',
+'default renewal time' => 'Default Renewal Time',
+'default services' => 'Default services',
+'defaultwarning' => 'WARNING - Your settings will be lost and replaced by the default ones.',
+'delete' => 'Cancella',
+'delete cron' => 'Delete cronjob',
+'delete pc' => 'Delete workstation',
+'delete share' => 'Delete share',
+'delete user' => 'Delete user',
+'demon login script' => 'Demon login script',
+'deprecated fs warn' => 'Deprecated filesystem! Newer kernel drop the support. Backup and reformat!',
+'description' => 'Description',
+'dest ip and port' => 'Ip Destinazione: Porta',
+'destination' => 'Destinazione',
+'destination ip' => 'IP destinazione',
+'destination ip bad' => 'IP Destinazione Invalido',
+'destination ip or net' => 'Destination IP or net',
+'destination net' => 'Destination Net',
+'destination port' => 'Porta di Destinazione',
+'destination port numbers' => 'Destination port must be a valid port number or port range.',
+'destination port overlaps' => 'Destination port range overlaps an existing port range.',
+'detail level' => 'Livello di dettaglio',
+'details' => 'Dettagli',
+'device' => 'Device',
+'devices on blue' => 'Devices on Blu',
+'dh' => 'Diffie-Hellman parameters',
+'dh key move failed' => 'Diffie-Hellman parameters move failed.',
+'dh key warn' => 'Creating DH-parameters with lengths of 1024 or 2048 bits takes up to several minutes. Lengths of 3072 or 4096 bits might needs several hours. Please be patient.',
+'dh key warn1' => 'For weak systems or systems with little entropy, it is recommended to upload long Diffie-Hellman parameters by usage of the upload function.',
+'dh name is invalid' => 'Name is invalid, please use "dh1024.pem".',
+'dh parameter' => 'Diffie-Hellman parameters',
+'dhcp advopt add' => 'Aggiungere un opzione DHCP',
+'dhcp advopt added' => 'Opzione DHCP aggiunto',
+'dhcp advopt blank value' => 'DHCP opzione non può essere vuoto.',
+'dhcp advopt custom definition' => 'Your custom option definition',
+'dhcp advopt definition' => 'Impostazione',
+'dhcp advopt definition exists' => 'Definition option already exists. You can only edit or remove it.',
+'dhcp advopt edit' => 'Edit a DHCP option',
+'dhcp advopt help' => 'List options',
+'dhcp advopt list' => 'Additional DHCP options',
+'dhcp advopt modified' => 'DHCP option modified',
+'dhcp advopt name' => 'Nome Opzione',
+'dhcp advopt removed' => 'DHCP option removed',
+'dhcp advopt scope' => 'Opzione scope',
+'dhcp advopt scope global' => 'Globale',
+'dhcp advopt scope help' => 'Global scope or limit scope to checked interfaces.',
+'dhcp advopt unknown' => 'DHCP option name not recognized',
+'dhcp advopt value' => 'Valore Opzione',
+'dhcp allow bootp' => 'Consenti client BOOTP',
+'dhcp base ip fixed lease' => 'Base IP for creating fix leases',
+'dhcp bootp pxe data' => 'Enter optional bootp pxe data for this fixed lease',
+'dhcp configuration' => 'DHCP configurazione',
+'dhcp create fixed leases' => 'Create fixed leases',
+'dhcp fixed lease err1' => 'For a fix lease you have to enter the MAC address or the hostname, or you enter both.',
+'dhcp fixed lease help1' => 'IP Addresses might be entered as FQDN',
+'dhcp mode' => 'DHCP',
+'dhcp server' => 'DHCP Server',
+'dhcp server disabled' => 'DHCP server disabled.  Stopped.',
+'dhcp server disabled on blue interface' => 'DHCP server disabled on Blu interface',
+'dhcp server enabled' => 'DHCP server enabled.  Restarting.',
+'dhcp server enabled on blue interface' => 'DHCP server enabled on Blu interface',
+'dhcp-options' => 'DHCP push options',
+'dial' => 'Connect',
+'dial profile' => 'Connect with profile',
+'dial user password' => 'Dial user password:',
+'dial user password has been changed' => 'Dial user password has been changed.',
+'dialing mode' => 'Dialing mode:',
+'dialup red not ppp' => 'Dialup profiles can only used if <b>RED</b> is set to <b>PPP Dialup</b><BR>Check the networking setup.',
+'dialup settings' => 'Dialup Settings',
+'directory mask' => 'UNIX directory rights',
+'directory writeable' => 'directory writeable',
+'disabled' => 'disabled',
+'disconnect' => 'OVPN Stop / Disconnect',
+'disconnects' => 'Disconnects',
+'disk access per' => 'Disk Access per',
+'disk usage' => 'utilizzo del disco',
+'display' => 'Display',
+'display charset' => 'Display Charset',
+'display hostname in window title' => 'Visualizza il nome hostname sulla barra del titolo della finestra',
+'display traffic at home' => 'Display calculated traffic on startpage',
+'display webinterface effects' => 'Activate effects',
+'dl client arch' => 'Download Client Package (zip)',
+'dmz' => 'DMZ',
+'dmz pinhole configuration' => 'DMZ pinhole configuration',
+'dmz pinhole rule added' => 'DMZ pinhole rule added; restarting DMZ pinhole',
+'dmz pinhole rule removed' => 'DMZ pinhole rule removed; restarting DMZ pinhole',
+'dmzpinholes for same net not necessary' => 'DMZ Pinholes are not necessary for same net. Select different source or destination net.',
+'dnat address' => 'Firewall Interface',
+'dns address deleted' => 'Successfully deleted!',
+'dns address deleted txt' => 'The DNS-Server addresses have been successfully deleted.<br />You have to reboot or reconnect that the changes have effect!',
+'dns address done' => 'The DNS-Server address settings are going to be saved.',
+'dns address recon' => 'Trying to reconnect!',
+'dns check failed' => 'DNS check failed',
+'dns desc' => 'Se l\'interfaccia red0 ottiene la configurazione e indirizzo IP tramite DHCP dal provider, gli indirizzi dei server DNS verranno impostati automaticamente. Qui si è in grado di modificare questi indirizzi IP dei server DNS con i vostri propri.',
+'dns error 0' => 'The IP address of the <strong>primary</strong> DNS server is not valid, please check your entries!<br />The entered <strong>secondary</strong> DNS server address is valid.',
+'dns error 01' => 'The entered IP address of the <strong>primary</strong> and <strong>secondary</strong> DNS server are not valid, please check your entries!',
+'dns error 1' => 'The IP address of the <strong>secondary</strong> DNS server is not valid, please check your entries!<br />The entered <strong>primary</strong> DNS server address is valid.',
+'dns header' => 'Assign DNS server addresses only for DHCP on red0',
+'dns list' => 'List of free public DNS servers',
+'dns menu' => 'Assign DNS-Server',
+'dns new 0' => 'Nuovo <strong>DNS primario</strong> IP:',
+'dns new 1' => 'Nuovo <strong>DNS secondario</strong> IP:',
+'dns proxy server' => 'DNS Proxy Server',
+'dns saved' => 'Successfully saved!',
+'dns saved txt' => 'The two entered DNS server addresses have been saved successfully.<br />You have to reboot or reconnect that the changes have effect!',
+'dns server' => 'DNS Server',
+'dns servers' => 'DNS Servers',
+'dns title' => 'Domain Name System',
+'dnsforward' => 'Inoltro DNS',
+'dnsforward add a new entry' => 'Aggiungere una nuova voce',
+'dnsforward configuration' => 'Configurazione di inoltro DNS',
+'dnsforward edit an entry' => 'Edit an existing entry',
+'dnsforward entries' => 'Voci correnti',
+'dnsforward forward_server' => 'Nameserver',
+'dnsforward zone' => 'Zona',
+'dnssec aware' => 'DNSSEC Aware',
+'dnssec information' => 'DNSSEC Information',
+'dnssec not supported' => 'DNSSEC Not supported',
+'dnssec validating' => 'DNSSEC Validating',
+'do not log this port list' => 'Drop this port list just before they are logged (reduces log size)',
+'dod' => 'Dial on Demand',
+'dod for dns' => 'Dial on Demand for DNS:',
+'dod not compatible with ddns' => 'Dial on demand is not compatible with dynamic dns services',
+'dod waiting' => 'Dial on Demand waiting',
+'domain' => 'Domain',
+'domain master' => 'Domain Master',
+'domain name' => 'Nome del Dominio',
+'domain name suffix' => 'Suffisso del Dominio:',
+'domain not set' => 'Domain not set.',
+'donation' => 'Donation',
+'donation-link' => 'https://www.paypal.com/en_US/GB/i/btn/btn_donateCC_LG.gif',
+'donation-text' => '<strong>IPFire</strong> is driven and maintained by volunteers in their free time. To keep this project running costs incurred, if you like to support us we would be pleased by a small donation.',
+'done' => 'Do it',
+'dos charset' => 'DOS Charset',
+'down and up speed' => 'Enter your Down- and Uplink-Speed <br /> and then press <i>Save</i>.',
+'downlink' => 'Downlink',
+'downlink speed' => 'Downlink speed (kbit/sec)',
+'downlink std class' => 'downlink standard class',
+'download' => 'download',
+'download ca certificate' => 'Download CA certificate',
+'download certificate' => 'Download certificate',
+'download dh parameter' => 'Download Diffie-Hellman parameters',
+'download host certificate' => 'Download host certificate',
+'download new ruleset' => 'Download new ruleset',
+'download pkcs12 file' => 'Download PKCS12 file',
+'download root certificate' => 'Download root certificate',
+'download tls-auth key' => 'Download tls-auth key',
+'dpd action' => 'Action',
+'dpd delay' => 'Delay',
+'dpd timeout' => 'Timeout',
+'driver' => 'Driver',
+'drop action' => 'Default behaviour of (forward) firewall in mode "Blocked"',
+'drop action1' => 'Default behaviour of (outgoing) firewall in mode "Blocked"',
+'drop action2' => 'Default behaviour of (input) firewall',
+'drop forward' => 'Log dropped forward packets',
+'drop input' => 'Registra pacchetti in ingresso ignorati',
+'drop newnotsyn' => 'Log dropped new not syn packets',
+'drop outgoing' => 'Log dropped outgoing packets',
+'drop portscan' => 'Log dropped portscan packets',
+'drop proxy' => 'Drop all packets not addressed to proxy',
+'drop samba' => 'Drop all Microsoft ports 135,137,138,139,445,1025',
+'drop wirelessforward' => 'Log dropped wireless forward packets',
+'drop wirelessinput' => 'Log dropped wireless input packets',
+'dst port' => 'Dst Port',
+'dstprt range overlaps' => 'Destination port range overlaps an already defined port.',
+'dstprt within existing' => 'Destination port is within an already defined port range.',
+'duplicate ip' => 'Duplicate IP address entered',
+'duplicate ip bold' => 'Duplicate addresses are in <b>bold</b>',
+'duplicate mac' => 'Duplicate MAC address entered',
+'duplicate name' => 'That name is already being used, please choose another.',
+'dyn dns source choice' => 'Dynamic DNS provider(s) will receive an IP address for this IPFire from:',
+'dynamic dns' => 'Dynamic DNS',
+'dynamic dns client' => 'Dynamic DNS Client',
+'e-mail address too long' => 'E-mail address is too long; it should not be longer than 40 characters.',
+'eciadsl help' => 'To utilise the ECI ADSL modem you must upload a synch.bin file to your IPFire box. Please download the file from the ECIADSL website and then upload the file <b>synch.bin</b> using the form below.',
+'eciadsl upload' => 'Upload ECI ADSL synch.bin file',
+'edit' => 'Edit',
+'edit a rule' => 'Edit an existing rule:',
+'edit advanced settings when done' => 'Edit advanced settings when done.',
+'edit an existing alias' => 'Edit an existing alias',
+'edit an existing host' => 'Edit an existing host',
+'edit an existing lease' => 'Edit an existing lease',
+'edit device' => 'Edit device',
+'edit hosts' => 'Edit Hosts',
+'edit network' => 'Edit network',
+'edit printer' => 'edit printer',
+'edit service' => 'Edit service',
+'edit share' => 'Edit share',
+'editor' => 'Editor',
+'eg' => 'e.g.:',
+'email server can not be empty' => 'E-mail server can not be empty',
+'emailreportlevel' => 'E-mailreportlevel',
+'emerging rules' => 'Emergingthreats.net Community Rules',
+'empty' => 'Questo campo pu&ograve; essere lasciato vuoto',
+'empty profile' => 'empty',
+'enable ignore filter' => 'Abilita ignorare filtro',
+'enable javascript' => 'Enable javascript',
+'enable wildcards' => 'Enable wildcards:',
+'enabled' => 'abilitato:',
+'enabled on' => 'abilitato su',
+'enabledtitle' => 'abilitato',
+'encapsulation' => 'Encapsulation',
+'encrypted' => 'Encrypted',
+'encryption' => 'Encryption:',
+'end address' => 'Indirizzo finale:',
+'enter ack class' => 'Enter the ACK- Class <br /> and then press <i>Save</i>.',
+'enter data' => 'Enter your settings <br /> and then press <i>Save</i>.',
+'entropy' => 'Entropy',
+'entropy graphs' => 'Entropy Graphs',
+'err bk 1' => 'Error creating archive',
+'err bk 10 password' => 'Error with backup password',
+'err bk 2 key' => 'Error creating key file',
+'err bk 3 tar' => 'Error appending files to archive',
+'err bk 4 gz' => 'Error compressing archive',
+'err bk 5 encrypt' => 'Error encrypting archive',
+'err rs 1' => 'Error restoring archive',
+'err rs 6 decrypt' => 'Error decrypting archive',
+'err rs 7 untartst' => 'Invalid decrypted archive',
+'err rs 8 untar' => 'Error untarring archive',
+'error config' => 'Could not open /var/ipfire/ovpn/config/ZERINA.ovpn !',
+'error external access' => 'Could not open /var/ipfire/xtaccess/config (external acccess could not be granted)!',
+'error messages' => 'Messaggi di errore',
+'esp encryption' => 'ESP Encryption:',
+'esp grouptype' => 'ESP Grouptype:',
+'esp integrity' => 'ESP Integrity:',
+'esp keylife' => 'ESP Keylife:',
+'esp keylife should be between 1 and 24 hours' => 'ESP keylife should be between 1 and 24 hours.',
+'every' => 'Ogni',
+'exampel' => 'esempio',
+'exclude logfiles' => 'Escludi File di log',
+'excluding buffers and cache' => '-/+ buffers/cache',
+'expected' => 'Expected',
+'expertoptions' => 'Expert options',
+'expires' => 'Scade',
+'export' => 'Export',
+'exportkey' => 'Export PSK',
+'external access' => 'External Access',
+'external access configuration' => 'External access configuration',
+'external access rule added' => 'External access rule added; restarting access controller',
+'external access rule changed' => 'External access rule changed; restarting access controller',
+'external access rule removed' => ' External access rule removed; restarting access controller',
+'external aliases configuration' => 'Configurazione alias esterni',
+'extrahd' => 'ExtraHD',
+'extrahd because there is already a device mounted' => ', because there is already a device mounted',
+'extrahd cant umount' => 'Can\'t umount',
+'extrahd detected drives' => 'detected drives',
+'extrahd install or load driver' => 'If your device isn\'t listed here, you need to install or load the driver.<br />If you can see your device but no partitions you have to create them first.',
+'extrahd maybe the device is in use' => '. Maybe the device is in use',
+'extrahd to' => 'to',
+'extrahd to root' => 'to root',
+'extrahd unable to read' => 'Unable to read',
+'extrahd unable to write' => 'Unable to write',
+'extrahd you cant mount' => 'You can\'t mount',
+'false classnumber' => 'The Class-Number does not match the interface.',
+'false max bandwith' => 'Maximum bandwith is false.',
+'false min bandwith' => 'Minimum bandwith is false.',
+'february' => 'Febbraio',
+'fetch ip from' => 'Guess the real public IP with help of an external server',
+'filename' => 'Filename',
+'filesystem full' => 'Filesystem full',
+'fireinfo ipfire version' => 'IPFire version',
+'fireinfo is disabled' => 'Fireinfo is disabled',
+'fireinfo is enabled' => 'Fireinfo is enabled',
+'fireinfo is submitted' => 'Your profile is submitted to the fireinfo service.',
+'fireinfo is submitted button' => 'No, I do not want to send my profile anymore',
+'fireinfo kernel version' => 'Kernel version',
+'fireinfo not submitted' => 'Your profile is not submitted to the fireinfo service.',
+'fireinfo not submitted button' => 'Yes, I want to send my profile',
+'fireinfo pakfire version' => 'Pakfire version',
+'fireinfo please enable' => 'Please enable the fireinfo service.',
+'fireinfo settings' => 'Fireinfo settings',
+'fireinfo system version' => 'Versione del Sistema',
+'fireinfo why descr1' => 'It is very important for the development of IPFire that you enable this',
+'fireinfo why descr2' => 'service. ',
+'fireinfo why enable' => 'Why should I enable fireinfo?',
+'fireinfo why read more' => 'Read more about the reasons.',
+'fireinfo your profile id' => 'Your profile ID',
+'firewall' => 'Firewall',
+'firewall graphs' => 'Firewall Graphs',
+'firewall hits' => 'Numero totale di visite per firewall',
+'firewall hits per' => 'firewallhits per',
+'firewall log' => 'Firewall log',
+'firewall log viewer' => 'Firewall Log Viewer',
+'firewall logs' => 'Firewall Logs',
+'firewall logs country' => 'Fw-Loggraphs (Country)',
+'firewall logs ip' => 'Fw-Loggraphs (IP)',
+'firewall logs port' => 'Fw-Loggraphs (Port)',
+'firewall rules' => 'Firewall Rules',
+'firewallhits' => 'firewallhits',
+'firmware' => 'Firmware',
+'firmware upload' => 'Upload Firmware/Drivers',
+'first' => 'First',
+'fixed ip lease added' => 'Fixed IP lease added',
+'fixed ip lease modified' => 'Fixed IP lease modified',
+'fixed ip lease removed' => 'Fixed IP lease removed',
+'flag' => 'Flag',
+'force update' => 'Force update',
+'force user' => 'force all new file to user',
+'forward firewall' => 'Firewall',
+'forwarding rule added' => 'Forwarding rule added; restarting forwarder',
+'forwarding rule removed' => 'Forwarding rule removed; restarting forwarder',
+'forwarding rule updated' => 'Forwarding rule updated; restarting forwarder',
+'free' => 'Libero',
+'free memory' => 'Memoria libera        ',
+'free swap' => 'Swap Libero',
+'frequency' => 'Frequency',
+'friday' => 'Venerdi',
+'fritzdsl help' => 'To utilise one of Fritz!DSL fcdsl / fcdslsl / fcdsl2 / fcdslusb / fcdslslusb modem, you must upload a package to your IPFire box. Please download the tarball corresponding to your version from the IPFire website and then upload the entire <b>fcdsl-(your_version).tgz</b> using the form below.',
+'fritzdsl upload' => 'Upload Fritz!DSL driver',
+'from' => 'Da',
+'from email adr' => 'From e-mail address',
+'from email pw' => 'From e-mail password',
+'from email server' => 'From Email server',
+'from email user' => 'From e-mail user',
+'from warn email bad' => 'From e-mail address is not valid',
+'fw blue' => 'Firewall options for Blu interface',
+'fw default drop' => 'Firewall policy',
+'fw logging' => 'Log Firewall',
+'fw settings' => 'Firewall settings',
+'fw settings color' => 'Show colors in ruletable',
+'fw settings dropdown' => 'Show all networks on rulecreation site',
+'fw settings remark' => 'Show remarks in ruletable',
+'fw settings ruletable' => 'Show empty ruletables',
+'fwdfw ACCEPT' => 'ACCEPT',
+'fwdfw DROP' => 'DROP',
+'fwdfw MODE1' => 'Drop all packets',
+'fwdfw MODE2' => 'Accept all packets',
+'fwdfw REJECT' => 'REJECT',
+'fwdfw action' => 'Action',
+'fwdfw additional' => 'Additional settings',
+'fwdfw addrule' => 'Add/Edit rule:',
+'fwdfw all icmp' => 'All ICMP types',
+'fwdfw change' => 'Update',
+'fwdfw copy' => 'Copy',
+'fwdfw delete' => 'Delete',
+'fwdfw dnat' => 'Destination NAT (Port forwarding)',
+'fwdfw dnat error' => 'You have to select a single host for DNAT. Groups or networks are not allowed.',
+'fwdfw dnat extport' => 'The external port has to be empty when using Source NAT rules.',
+'fwdfw dnat nochoice' => 'Please pick Source NAT or Destination NAT from the NAT section.',
+'fwdfw dnat porterr' => 'You have to select a single port or portrange (tcp/udp) for NAT',
+'fwdfw dnat porterr2' => 'Cannot use external port (NAT) when no destination port is defined.',
+'fwdfw edit' => 'Edit',
+'fwdfw err nosrc' => 'No source selected.',
+'fwdfw err nosrcip' => 'Please provide a source IP address.',
+'fwdfw err notgt' => 'No destination selected.',
+'fwdfw err notgtip' => 'Please provide a destination IP address.',
+'fwdfw err prot_port' => 'Source- or targetport are not allowed with selected protocol',
+'fwdfw err prot_port1' => 'When using Source- or targetport you have to select TCP or UDP for protocol',
+'fwdfw err remark' => 'Invalid characters in remark.',
+'fwdfw err ruleexists' => 'This rule already exists.',
+'fwdfw err same' => 'Source and destination are identical.',
+'fwdfw err samesub' => 'Source and destination IP addresses are from the same subnet.',
+'fwdfw err src_addr' => 'Invalid source MAC/IP address.',
+'fwdfw err tgt_addr' => 'Invalid destination IP address.',
+'fwdfw err tgt_grp' => 'The destination service group is empty',
+'fwdfw err tgt_mac' => 'A MAC addresses cannot be used as destination.',
+'fwdfw err tgt_port' => 'Invalid destination port.',
+'fwdfw err time' => 'You have to select at least one day.',
+'fwdfw external port nat' => 'External port (NAT)',
+'fwdfw final_rule' => 'Last rule: ',
+'fwdfw from' => 'Da:',
+'fwdfw hint ip1' => 'The last generated rule may never match, because source and destination subnets may overlap.',
+'fwdfw hint ip2' => 'Please double-check if this rule makes sense: ',
+'fwdfw hint mac' => 'The destination group contains MAC addresses, which will be skipped during rule creation.',
+'fwdfw iface' => 'Interface',
+'fwdfw ipsec network' => 'IPsec networks:',
+'fwdfw log' => 'Log',
+'fwdfw log rule' => 'Log rule',
+'fwdfw man port' => 'Port(s):',
+'fwdfw many' => 'Many',
+'fwdfw menu' => 'Firewall',
+'fwdfw movedown' => 'Move down',
+'fwdfw moveup' => 'Move up',
+'fwdfw natport used' => 'The given port for NAPT is already in use by an other DNAT rule.',
+'fwdfw newrule' => 'New rule',
+'fwdfw p2p txt' => 'Grant/deny access to P2P networks.',
+'fwdfw pol allow' => 'Allowed',
+'fwdfw pol block' => 'Blocked',
+'fwdfw pol text' => 'Sets the default firewall behaviour for connections from local networks. You may either allow all new connections or block them by default. Connections between the local networks are also blocked in the latter mode.',
+'fwdfw pol text1' => 'Sets the default firewall behaviour for connections initiated by the firewall itself. Attention! You may lock yourself out.',
+'fwdfw pol title' => 'Default firewall behaviour',
+'fwdfw prot41' => 'IPv6 Encapsulation (Protocol 41)',
+'fwdfw prot41 short' => 'IPv6 Encap',
+'fwdfw red' => 'ROSSO',
+'fwdfw reread' => 'Apply changes',
+'fwdfw rule action' => 'Rule action:',
+'fwdfw rule activate' => 'Activate rule',
+'fwdfw rulepos' => 'Rule position',
+'fwdfw rules' => 'Rules',
+'fwdfw snat' => 'Source NAT',
+'fwdfw source' => 'Source',
+'fwdfw sourceip' => 'Source address (MAC/IP address or network):',
+'fwdfw std network' => 'Standard networks:',
+'fwdfw target' => 'Destinazione',
+'fwdfw targetip' => 'Destination address (IP address or network):',
+'fwdfw till' => 'Until:',
+'fwdfw time' => 'Time Constraints',
+'fwdfw timeframe' => 'Use time constraints',
+'fwdfw toggle' => 'Activate or deactivate',
+'fwdfw togglelog' => 'Activate or deactivate logging',
+'fwdfw use nat' => 'Use Network Address Translation (NAT)',
+'fwdfw use srcport' => 'Source port:',
+'fwdfw use srv' => 'Destination port:',
+'fwdfw useless rule' => 'This rule is useless.',
+'fwdfw warn1' => 'This might lead to firewallrules which are applied to networks for which they are not intended to be.',
+'fwdfw wd_fri' => 'Ven',
+'fwdfw wd_mon' => 'Lun',
+'fwdfw wd_sat' => 'Sab',
+'fwdfw wd_sun' => 'Dom',
+'fwdfw wd_thu' => 'Gio',
+'fwdfw wd_tue' => 'Mar',
+'fwdfw wd_wed' => 'Mer',
+'fwdfw xt access' => 'Input',
+'fwhost Custom Host' => 'Host',
+'fwhost Custom Network' => 'RETE',
+'fwhost IpSec Host' => 'IPsec host',
+'fwhost IpSec Network' => 'IPsec network',
+'fwhost OpenVPN N-2-N' => 'OpenVPN Net-to-Net',
+'fwhost OpenVPN static host' => 'OpenVPN static host',
+'fwhost OpenVPN static network' => 'OpenVPN static network',
+'fwhost Standard Network' => 'Standard network',
+'fwhost addgrp' => 'Add new network/host group',
+'fwhost addgrpname' => 'Group name:',
+'fwhost addhost' => 'Add new host',
+'fwhost addnet' => 'Add new network',
+'fwhost addservice' => 'Add service',
+'fwhost addservicegrp' => 'Add new service group',
+'fwhost any' => 'Any',
+'fwhost attention' => 'ATTENTION',
+'fwhost back' => 'Back',
+'fwhost blue' => 'Blu',
+'fwhost ccdhost' => 'OpenVPN clients:',
+'fwhost ccdnet' => 'OpenVPN networks:',
+'fwhost change' => 'Modify',
+'fwhost changeremark' => 'You modified just the remark',
+'fwhost cust addr' => 'Hosts',
+'fwhost cust grp' => 'Network/Host Groups',
+'fwhost cust net' => 'Networks',
+'fwhost cust service' => 'Servizio',
+'fwhost cust srvgrp' => 'Service Groups',
+'fwhost deleted' => 'Deleted',
+'fwhost empty' => 'No rules defined',
+'fwhost err addr' => 'Invalid IP address or subnet',
+'fwhost err addrgrp' => 'Please provide a group name',
+'fwhost err empty' => 'Please fill in all input fields',
+'fwhost err emptytable' => 'No entries in this group',
+'fwhost err groupempty' => 'The selected group is empty',
+'fwhost err grpexist' => 'A group with the same name already exists',
+'fwhost err hostexist' => 'A host with the same name already exists',
+'fwhost err hostorip' => 'Invalid name or IP address',
+'fwhost err ip' => 'IP address invalid',
+'fwhost err ipcheck' => 'This IP address is already in use',
+'fwhost err ipmac' => 'IP/MAC address invalid',
+'fwhost err ipwithsub' => 'Please provide only an IP address (without subnet mask)',
+'fwhost err isccdhost' => 'This name is already used by an OpenVPN client connection',
+'fwhost err isccdiphost' => 'This IP address is already used by an OpenVPN client connection',
+'fwhost err isccdipnet' => 'This IP address is already used by an OpenVPN network connection',
+'fwhost err isccdnet' => 'This name is already used by an OpenVPN network',
+'fwhost err isingrp' => 'This entry already exists in the group',
+'fwhost err mac' => 'Invalid MAC address',
+'fwhost err maxservicetcp' => 'The maximal number of 15 TCP services has been reached in this group (port ranges count twice)',
+'fwhost err maxserviceudp' => 'The maximal number of 15 UDP services has been reached in this group (port ranges count twice)',
+'fwhost err name' => 'Invalid name. Allowed characters: Upper- and lowercase letters, digits, space and dash.',
+'fwhost err name1' => 'Empty name.',
+'fwhost err net' => 'Network/IP address already exists',
+'fwhost err netexist' => 'A network with the same name already exists',
+'fwhost err partofnet' => 'The network is a subnet of an already existing network.',
+'fwhost err port' => 'Port is empty',
+'fwhost err remark' => 'Invalid remark. Allowed characters: Upper- and lowercase letters, digits, space, dash, braces, semicolon, pipe and dot.',
+'fwhost err srv exists' => 'A service with the same name already exists',
+'fwhost err srvexist' => 'This service already exists in the group',
+'fwhost err sub32' => 'Please add a single host, not a network.',
+'fwhost green' => 'Verde',
+'fwhost hint' => 'Note',
+'fwhost hosts' => 'Firewall Hosts',
+'fwhost icmptype' => 'ICMP type:',
+'fwhost ip_mac' => 'IP/MAC address',
+'fwhost ipadr' => 'Indirizzo IP:',
+'fwhost ipsec host' => 'IPsec clients:',
+'fwhost ipsec net' => 'IPsec networks:',
+'fwhost menu' => 'Firewall Groups',
+'fwhost netaddress' => 'Network address',
+'fwhost newgrp' => 'Network/Host Groups',
+'fwhost newhost' => 'Hosts',
+'fwhost newnet' => 'Networks',
+'fwhost newservice' => 'Servizio',
+'fwhost newservicegrp' => 'Service Groups',
+'fwhost orange' => 'Orange',
+'fwhost ovpn_n2n' => 'OpenVPN Net-to-Net',
+'fwhost port' => 'Port(s)',
+'fwhost prot' => 'Protocolo',
+'fwhost reread' => 'Firewall rules need to be updated.',
+'fwhost reset' => 'Cancel',
+'fwhost services' => 'Servizio:',
+'fwhost srv_name' => 'Nome servizio',
+'fwhost stdnet' => 'Standard networks:',
+'fwhost type' => 'Type',
+'fwhost used' => 'Used',
+'fwhost welcome' => 'Over here, you can group single hosts, networks and services together, which will creating new rules more easy and faster.',
+'fwhost wo subnet' => '(without subnet)',
+'g.dtm' => 'TO BE REMOVED',
+'g.lite' => 'TO BE REMOVED',
+'gateway' => 'Gateway',
+'gateway ip' => 'Gateway IP',
+'gen dh' => 'Generate new Diffie-Hellman parameters',
+'gen static key' => 'Generate a static key',
+'generate' => 'Generate root/host zertifikate',
+'generate a certificate' => 'Generate a certificate:',
+'generate dh key' => 'Generate Diffie-Hellman parameters',
+'generate iso' => 'Genera file ISO',
+'generate root/host certificates' => 'Generate root/host certificates',
+'generate tripwire keys and init' => 'generate tripwire keys and init',
+'generatekeys' => 'Generate Keys',
+'generatepolicy' => 'Generate new policy',
+'generatereport' => 'Generate new report',
+'generating the root and host certificates may take a long time. it can take up to several minutes on older hardware. please be patient' => 'Generating the root and host certificates may take a long time.  It can take up to several minutes on older hardware. Please be patient.',
+'genkey' => 'Generate PSK',
+'genre' => 'Genre',
+'global settings' => 'Settaggio Globale',
+'gpl i accept these terms and conditions' => 'I accept these terms and conditions',
+'gpl license agreement' => 'License Agreement',
+'gpl please read carefully the general public license and accept it below' => 'Please read carefully the General Public License and accept it below',
+'gpl unofficial translation of the general public license v3' => 'Unofficial translation of the General Public License v3',
+'graph' => 'Grafico',
+'graph per' => 'per',
+'green' => 'Verde',
+'green interface' => 'Interface Verde',
+'grouptype' => 'Grouptype:',
+'guaranteed bandwith' => 'Guaranteed bandwith',
+'guardian alertfile' => 'Alertfile',
+'guardian configuration' => 'Guardian Configuration',
+'guardian ignorefile' => 'Ignorefile',
+'guardian interface' => 'Interface',
+'guardian logfile' => 'Logfile',
+'guardian timelimit' => 'Timelimit',
+'guest ok' => 'allow guests to access',
+'gui settings' => 'Settaggio GUI',
+'gz with key' => 'Only an encrypted archive can be restored on this machine.',
+'hangup' => 'Disconnect',
+'hangup string' => 'Hangup:',
+'harddisk temperature' => 'Temperatura Harddisk',
+'harddisk temperature graphs' => 'Grafico HDD',
+'hardware graphs' => 'Grafico Hardware',
+'hardware support' => 'Supporto Hardware',
+'hdd temperature in' => 'Temperatura Harddisk',
+'help' => 'Help',
+'high' => 'High',
+'high memory usage' => 'High memory usage',
+'hint' => 'Hint:',
+'holdoff' => 'Holdoff time (in seconds)',
+'host' => 'Host',
+'host allow' => 'list with allowed hosts',
+'host certificate' => 'Host Certificate',
+'host configuration' => 'Host Configuration',
+'host deny' => 'list with denied hosts',
+'host ip' => 'Indirizzo IP dell\'Host',
+'host to net vpn' => 'Host-to-Net Virtual Private Network (RoadWarrior)',
+'hostname' => 'Hostname',
+'hostname and domain already in use' => 'Hostname and domain already in use.',
+'hostname cant be empty' => 'Hostname can\'t be empty.',
+'hostname not set' => 'Hostname not set.',
+'hosts config added' => 'Hosts config added',
+'hosts config changed' => 'Hosts config changed',
+'hour' => 'Ora',
+'hour-graph' => 'Ora',
+'hours' => 'Ore',
+'hours2' => 'Ore',
+'ibod for dual isdn only' => 'iBOD can only be used with Dual ISDN.',
+'icmp selected but no type' => 'ICMP selected for protocol, but no ICMP type specified.',
+'icmp type' => 'ICMP Type',
+'id' => 'ID',
+'idle' => 'Idle',
+'idle timeout' => 'Idle timeout (mins; 0 to disable):',
+'idle timeout not set' => 'Idle timeout not set.',
+'ids log viewer' => 'IDS log viewer',
+'ids logs' => 'IDS Logs',
+'ids preprocessor' => 'IDS preprocessor',
+'ids rules license' => 'To utilize Sourcefire VRT Certified Rules, you need to register on',
+'ids rules license1' => '.',
+'ids rules license2' => 'Acknowledge the license, activate your account by visiting the url you got via mail. Then go to',
+'ids rules license3' => 'press the "Generate code"-button and copy the 40 character Oinkcode into the field below.',
+'ids rules update' => 'Snort rules update',
+'iface' => 'Iface',
+'ignore filter' => 'Ignora filtro',
+'ike encryption' => 'IKE Encryption:',
+'ike grouptype' => 'IKE Grouptype:',
+'ike integrity' => 'IKE Integrity:',
+'ike lifetime' => 'IKE Lifetime:',
+'ike lifetime should be between 1 and 8 hours' => 'IKE lifetime should be between 1 and 8 hours.',
+'imei' => 'IMEI',
+'import' => 'Import',
+'importkey' => 'Import PSK',
+'imsi' => 'IMSI',
+'in' => 'In',
+'inactive' => 'inactive',
+'include logfiles' => 'Includi File di log',
+'incoming' => 'incoming',
+'incoming firewall access' => 'Incoming Firewall Access',
+'incoming traffic in bytes per second' => 'Incoming Traffic',
+'incorrect password' => 'Incorrect password',
+'info' => 'Info',
+'init string' => 'Init:',
+'insert floppy' => 'To backup to floppy, insert a formatted floppy into the drive on IPFire and click <i>backup to floppy</i> to backup the system configuration. Please examine the results carefully to make sure the backup completed successfully. This can take a while to complete, so please be patient.<p>',
+'insert removable device' => 'Insert a removable device',
+'install' => 'Install',
+'install new update' => 'Install new update:',
+'installed' => 'Installed',
+'installed updates' => 'Installed updates:',
+'instant update' => 'Instant Update',
+'integrity' => 'Integrity:',
+'interface' => 'Interface',
+'interfaces' => 'Interfaces',
+'internet' => 'INTERNET',
+'intrusion detection' => 'Intrusion Detection',
+'intrusion detection system' => 'Intrusion Detection System',
+'intrusion detection system log viewer' => 'Intrusion Detection System Log Viewer',
+'intrusion detection system rules' => 'intrusion detection system rules',
+'intrusion detection system2' => 'Intrusion Detection System:',
+'invalid broadcast ip' => 'Invalid broadcast IP',
+'invalid cache size' => 'Invalid cache size.',
+'invalid characters found in pre-shared key' => 'Invalid characters found in pre-shared key.',
+'invalid date entered' => 'Invalid date entered.',
+'invalid default lease time' => 'Invalid default lease time.',
+'invalid domain name' => 'Invalid domain name.',
+'invalid downlink speed' => 'Invalid downlink speed.',
+'invalid end address' => 'Invalid end address.',
+'invalid fixed ip address' => 'Invalid fixed IP address',
+'invalid fixed mac address' => 'Invalid fixed MAC address',
+'invalid hostname' => 'Invalid hostname.',
+'invalid input' => 'Invalid input',
+'invalid input for authentication method' => 'Invalid input for authentication method.',
+'invalid input for city' => 'Invalid input for city.',
+'invalid input for country' => 'Invalid input for country.',
+'invalid input for department' => 'Invalid input for department.',
+'invalid input for dhcp dns' => 'Invalid input for DHCP DNS',
+'invalid input for dhcp domain' => 'Invalid input for DHCP domain',
+'invalid input for dhcp wins' => 'Invalid input for DHCP WINS',
+'invalid input for dpd delay' => 'Invalid input for DPD delay',
+'invalid input for dpd timeout' => 'Invalid input for DPD timeout',
+'invalid input for e-mail address' => 'Invalid input for e-mail address.',
+'invalid input for esp keylife' => 'Invalid input for ESP Keylife',
+'invalid input for hostname' => 'Invalid input for hostname.',
+'invalid input for ike lifetime' => 'Invalid input for IKE lifetime',
+'invalid input for keepalive 1' => 'Invalid input for Keepalive ping',
+'invalid input for keepalive 1:2' => 'Invalid input for Keepalive use at least a ratio of 1:2',
+'invalid input for keepalive 2' => 'Invalid input for Keepalive ping-restart',
+'invalid input for max clients' => 'Invalid input for Max Clients',
+'invalid input for name' => 'Invalid input for user\'s full name or system hostname',
+'invalid input for oink code' => 'Invalid input for Oink code',
+'invalid input for organization' => 'Invalid input for organization',
+'invalid input for remote host/ip' => 'Invalid input for remote host/ip.',
+'invalid input for state or province' => 'Invalid input for state or province.',
+'invalid ip' => 'Invalid IP Address',
+'invalid keep time' => 'Keep time must be a valid number',
+'invalid key' => 'Invalid key.',
+'invalid loaded file' => 'Invalid loaded file',
+'invalid local-remote id' => 'local & remote id must not be equal and begin with a "@" sign. These are leftid and rightid in strongswan terminology.',
+'invalid logserver address' => 'Invalid syslogd server address',
+'invalid mac address' => 'Invalid MAC address',
+'invalid max lease time' => 'Invalid max lease time.',
+'invalid maximum incoming size' => 'Invalid maximum incoming size.',
+'invalid maximum object size' => 'Invalid maximum object size.',
+'invalid maximum outgoing size' => 'Invalid maximum outgoing size.',
+'invalid md5sum' => 'Invalid MD5Sum.',
+'invalid minimum object size' => 'Invalid minimum object size.',
+'invalid mtu input' => 'Invalid MTU',
+'invalid netmask' => 'Invalid netmask',
+'invalid port' => 'Invalid port. Must be a valid port number.',
+'invalid port list' => 'Port list syntax is: port[,port]... where port is in /etc/services or number',
+'invalid primary dns' => 'DNS primario Invalido',
+'invalid primary ntp' => 'NTP server primario invalido',
+'invalid secondary dns' => 'DNS secondario Invalido',
+'invalid secondary ntp' => 'NTP server secondario invalido',
+'invalid start address' => 'Indirizzo di partenza non valido.',
+'invalid time entered' => 'Invalid time entered.',
+'invalid time period' => 'Invalid time period',
+'invalid uplink speed' => 'Invalid uplink speed.',
+'invalid upstream proxy username or password setting' => 'Invalid upstream proxy username or password setting.',
+'invalid users' => 'list with users denied to access',
+'invalid vpi vpci' => 'Invalid VPI/VPCI settings',
+'invalid wins address' => 'Invalid WINS server address.',
+'invert' => 'Invert',
+'ip address' => 'Indirizzo IP',
+'ip address in use' => 'IP address already in use',
+'ip address outside subnets' => 'IP Address outside subnets',
+'ip alias added' => 'External IP alias added',
+'ip alias changed' => 'External IP alias changed',
+'ip alias removed' => 'External IP alias removed',
+'ip info' => 'IP Information',
+'ipfire has now rebooted' => 'IPFire si sta Riavviando',
+'ipfire has now shutdown' => 'IPFire è in spegnimento.',
+'ipfire side' => 'IPFire side:',
+'ipfire side is invalid' => 'IPFire side is invalid.',
+'ipfires hostname' => 'IPFire\'s Hostname',
+'ipinfo' => 'IP info',
+'ipsec' => 'IPsec',
+'ipsec network' => 'IPsec network',
+'ipsec no connections' => 'No active IPsec connections',
+'iptable rules' => 'IPTable rules',
+'iptmangles' => 'IPTable Mangles',
+'iptnats' => 'IPTable Network Address Translation',
+'ipts' => 'iptables',
+'isdn' => 'ISDN',
+'isdn settings' => 'Additional ISDN settings:',
+'isdn1' => 'Single ISDN',
+'isdn2' => 'Dual ISDN',
+'january' => 'Gennaio',
+'javascript menu error1' => 'If the drop down menus aren\'t working, disable javascript on the',
+'javascript menu error2' => 'page.',
+'july' => 'Luglio',
+'june' => 'Giugno',
+'kernel' => 'Kernel',
+'kernel logging server' => 'Kernel Logging Server',
+'kernel version' => 'Kernel version:',
+'key stuff' => '2. Keys and Certificates',
+'keyreset' => 'Reset Keys',
+'keys' => 'keys',
+'lan' => 'LAN',
+'lang' => 'en',
+'languagepurpose' => 'Selezionare la lingua che si desidera usare in IPFire:',
+'last' => 'Last',
+'last activity' => 'Last Activity',
+'lateprompting' => 'Lateprompting',
+'lease expires' => 'Lease expires',
+'least preferred' => 'least preferred',
+'legend' => 'Legenda',
+'length' => 'Length',
+'lifetime' => 'Lifetime:',
+'line' => 'Line',
+'linkq' => 'Link Quality',
+'load printer' => 'Load Printer',
+'loaded modules' => 'Loaded modules:',
+'local hard disk' => 'Hard disk',
+'local master' => 'Local Master',
+'local ntp server specified but not enabled' => 'Local NTP server specified but not enabled',
+'local subnet' => 'Local Subnet:',
+'local subnet is invalid' => 'Local subnet is invalid.',
+'local vpn hostname/ip' => 'Local VPN Hostname/IP',
+'localkey' => 'Localkey',
+'localkeyfile' => 'Localkeyfile',
+'log' => 'Log',
+'log enabled' => 'Abilito Log',
+'log level' => 'Log Level',
+'log lines per page' => 'Line per pagina',
+'log server address' => 'Syslog server:',
+'log settings' => 'Impostazioni di Log',
+'log summaries' => 'Sommario Log',
+'log summary' => 'Sommario Log',
+'log var messages' => 'Impostazioni per /var/log/messages:',
+'log view' => 'Log View',
+'log viewer' => 'Log viewer',
+'log viewing options' => 'Opzioni di visualizzazione del Log',
+'log-options' => 'Logfile options',
+'loged in at' => 'Logged in at',
+'logging' => 'Logging',
+'logging server' => 'Logging Server',
+'loginlogout' => 'Login/Logout',
+'logs' => 'Gestione Log',
+'lookup failed' => 'Reverse lookup failed',
+'loosedirectorychecking' => 'Loosedirectorychecking',
+'low' => 'Low',
+'ls_dhcpd' => 'DHCP Server:',
+'ls_disk space' => 'Disk space:',
+'ls_free/swan' => 'VPN:',
+'ls_httpd' => 'HTTP Server:',
+'ls_init' => 'Init:',
+'ls_kernel' => 'Kernel and Firewall:',
+'ls_modprobe' => 'Module loader:',
+'ls_pam_unix' => 'Local user logins:',
+'ls_sshd' => 'User per Login Remoto:',
+'ls_syslogd' => 'Syslogd:',
+'mac address' => 'MAC Address',
+'mac address deleted' => 'Successfully deleted!',
+'mac address deleted txt' => 'The MAC address has been successfully deleted, but changes will only take effect after <strong>reboot</strong>.',
+'mac address done' => 'The MAC address settings are going to be saved.',
+'mac address error not 00' => 'MAC addresse has to start with 00!',
+'mac address error not valid' => 'MAC addresse not valid!',
+'mac address header' => 'Indirizzo MAC address red0',
+'mac address in use' => 'MAC address already in use',
+'mac address menu' => 'Assegna MAC Address',
+'mac address recon' => 'Trying to reconnect!',
+'mac address saved' => 'Successfully saved!',
+'mac address saved txt' => 'The MAC address has been successfully saved, but changes will only take effect after reboot or reconnection.',
+'mac address title' => 'Assegna MAC Address',
+'mac desc' => 'Qui si &egrave; in grado di cambiare l\'indirizzo MAC della scheda red0. L\'indirizzo deve essere immesso in formato esadecimale (0-9, af), una voce valida &egrave; <br />Esempio 00-01-02-0e-b8-d6 or 00:01:02:0e:b8:d6.',
+'mac filter' => 'Filtro MAC',
+'mac new' => 'Nuovo MAC address:',
+'mac1 new' => 'Nuovo MAC address 1 (vdsl-inet):',
+'mac2 new' => 'Nuovo MAC address 2 (vdsl-iptv):',
+'magic packet send to:' => 'Magic packet send to:',
+'mailmethod' => 'Mailmethod',
+'mailprogramm' => 'Mailprogramm',
+'main page' => 'Pagina Principale',
+'manage ovpn' => '5. Tunnel Management:',
+'manage printers' => 'manage printers',
+'manage shares' => 'Manage Shares',
+'manual' => 'Manual',
+'manual control and status' => 'Manual control and status:',
+'manually' => 'Manuale',
+'map to guest' => 'Map to Guest',
+'march' => 'Marzo',
+'marked' => 'Marked',
+'max bandwith' => 'Maximum bandwith',
+'max incoming size' => 'Max incoming size (KB):',
+'max lease time' => 'Tempo massimo lease (min):',
+'max outgoing size' => 'Max outgoing size (KB):',
+'max reliability' => 'Maximum reliability',
+'max renewal time' => 'Maximum Renewal Time',
+'max retries not set' => 'Max retries not set.',
+'max size' => 'Max object size (KB):',
+'max throughput' => 'Maximum throughput',
+'maximal' => 'Maximal',
+'maximum' => 'Maximum',
+'maximum retries' => 'Maximum retries:',
+'may' => 'Maggio',
+'mbmon display' => 'Display',
+'mbmon fan' => 'Fan Speed',
+'mbmon fan in' => 'Fan speed in',
+'mbmon graphs' => 'mbmon Graphs',
+'mbmon label' => 'Label',
+'mbmon settings' => 'mbmongraph settings',
+'mbmon temp' => 'Temperatura',
+'mbmon temp in' => 'Temperatura in',
+'mbmon value' => 'Value',
+'mbmon volt' => 'Tensione',
+'meaning' => 'meaning',
+'media' => 'Media',
+'media information' => 'Informazioni Media',
+'medium' => 'Medium',
+'memory' => 'Memoria',
+'memory information' => 'informazione Memoria',
+'memory usage per' => 'Memory Usage per',
+'messages logging' => 'Log settings for /var/log/messages',
+'method' => 'Method:',
+'min costs' => 'Minimum costs',
+'min delay' => 'Minimum delay',
+'min size' => 'Dimensione minima (KB):',
+'minimal' => 'Minimal',
+'minimum' => 'Minimum',
+'minute' => 'Minuto',
+'minutes' => 'Minuti',
+'misc-options' => 'Miscellaneous options',
+'missing dat' => 'Encrypted archive not found',
+'missing gz' => 'Unencrypted archive not found',
+'mode' => 'Mode',
+'model' => 'Model',
+'modem' => 'Modem',
+'modem configuration' => 'Configurazione Modem',
+'modem hardware details' => 'Modem Hardware',
+'modem information' => 'Modem Informazione',
+'modem network bit error rate' => 'Bit Error Rate',
+'modem network information' => 'Network Information',
+'modem network mode' => 'Network Mode',
+'modem network operator' => 'Network Operator',
+'modem network registration' => 'Network Registration',
+'modem network signal quality' => 'Signal Quality',
+'modem no connection' => 'No Connection',
+'modem no connection message' => 'No connection to the modem could be established.',
+'modem on com1' => 'Modem on COM1',
+'modem on com2' => 'Modem on COM2',
+'modem on com3' => 'Modem on COM3',
+'modem on com4' => 'Modem on COM4',
+'modem on com5' => 'Modem on COM5',
+'modem settings have errors' => 'Modem settings have errors',
+'modem sim information' => 'SIM Information',
+'modem speaker on' => 'Modem speaker on:',
+'modem status' => 'Modem Status',
+'modify' => 'Modify',
+'modulation' => 'Modulation',
+'monday' => 'Lunedi',
+'monitor interface' => 'Monitor Interface',
+'month' => 'Mese',
+'month-graph' => 'Mese',
+'monthly firewallhits' => 'monthly firewallhits',
+'monthly start day bad' => 'Monthly start day is not correct',
+'monthly traffic bad' => 'Monthly volume is not correct',
+'monthly volume' => 'Monthly volume',
+'monthly volume start day' => 'First day of monthly period',
+'monthly volume start day short' => 'Primo giorno',
+'months' => 'months',
+'more' => 'more',
+'most preferred' => 'most preferred',
+'mount' => 'Mount',
+'mounted on' => 'Montato su',
+'mpfire' => 'Media Player for IPFire',
+'mpfire controls' => 'MPFire Control',
+'mpfire playlist' => 'MPFire Playlist',
+'mpfire scanning' => 'Scan for new files',
+'mpfire search' => 'MPFire Search',
+'mpfire songs' => 'MPFire songlist',
+'mpfire webradio' => 'MPFire Webradio',
+'mtu QoS' => 'This does not change the global MTU, it only sets MTU for QoS.',
+'my new share' => 'My new share',
+'name' => 'Nome',
+'name is invalid' => 'Name is invalid',
+'name must only contain characters' => 'Name must only contain characters.',
+'name too long' => 'User\'s full name or system hostname is too long',
+'nameserver' => 'Nameserver',
+'nat-traversal' => 'Nat Traversal:',
+'needreboot' => 'An update requires a restart',
+'net' => 'Net',
+'net address' => 'net address',
+'net config' => 'Network configuration',
+'net config type' => 'kind of network configuration',
+'net config type help' => 'Verde is the local network, RED is the internet, Blu is WLAN, ORANGE is the DMZ.',
+'net to net vpn' => 'Net-to-Net Virtual Private Network',
+'net traffic newversion' => 'New Net-Traffic version is available:',
+'net-traffic configuration' => 'Net-Traffic Configuration',
+'netbios name' => 'Netbios Name',
+'netmask' => 'Netmask',
+'network' => 'RETE',
+'network added' => 'Custom network added',
+'network configuration' => 'Network Configuration',
+'network internal' => 'Rete (interna)',
+'network options' => 'Network options',
+'network other' => 'Rete (altro)',
+'network red' => 'Rete (Esterna)',
+'network removed' => 'Custom network removed',
+'network status information' => 'Informazioni e stato Rete',
+'network time' => 'Use a network time server',
+'network time from' => 'Impostare l\'ora da un server in rete',
+'network traffic graphs' => 'Network traffic graphs',
+'network traffic graphs external' => 'Net-Traffic grafici (Esterna)',
+'network traffic graphs internal' => 'Net-Traffic grafici (interna)',
+'network traffic graphs others' => 'Rete (altro)',
+'network updated' => 'Custom Network updated',
+'networks settings' => 'Firewall - Network settings',
+'never' => 'Never',
+'new optionsfw later' => 'Some options need a reboot to take effect',
+'new optionsfw must boot' => 'You must reboot your IPFire',
+'newer' => 'più recente',
+'next' => 'next',
+'no' => 'No',
+'no alcatelusb firmware' => 'No Alcatel USB firmware. Please upload.',
+'no cfg upload' => 'No data was uploaded',
+'no dhcp lease' => 'No DHCP lease has been acquired',
+'no eciadsl synch.bin file' => 'No ECI ADSL synch.bin file. Please upload.',
+'no filter pass' => 'Enter the standard class for non-filtered packets.',
+'no fritzdsl driver' => 'No Fritz!DSL driver.  Please upload.',
+'no hardware random number generator' => 'This system has no source for entropy.',
+'no information available' => 'No information available.',
+'no log selected' => 'No log selected',
+'no modem selected' => 'No modem selected',
+'no set selected' => 'No set was selected',
+'no time limit' => 'unlimited time',
+'none found' => 'none found',
+'nonetworkname' => 'No Network Name entered',
+'noservicename' => 'No Service Name entered',
+'not a valid ca certificate' => 'Not a valid CA certificate.',
+'not a valid dh key' => 'Not a valid Diffie-Hellman parameters file. Please use a length of 1024, 2048, 3072 or 4096 bits and the PKCS#3 format.',
+'not enough disk space' => 'Not enough disk space',
+'not present' => '<b>Not</b> present',
+'not running' => 'not running',
+'not set' => 'not set',
+'notes' => 'Notes',
+'notice' => 'Notice',
+'november' => 'Novembre',
+'ntp common settings' => 'Impostazioni Comuni',
+'ntp configuration' => 'NTP Configuration',
+'ntp must be enabled to have clients' => 'NTP must be enabled to have clients.',
+'ntp server' => 'NTP Server',
+'ntp sync' => 'Sincronizzazione',
+'ntp syncro disabled' => 'Sincronizzazione NTP disabilitata',
+'ntp syncro enabled' => 'Sincronizzazione NTP abilitata',
+'ntpd restarted' => 'Restart ntpd',
+'number' => 'Number:',
+'o-no' => 'Inactiv',
+'o-yes' => 'Activ',
+'october' => 'Ottobre',
+'off' => 'off',
+'ok' => 'OK',
+'older' => 'più vecchio',
+'on' => 'on',
+'online help en' => 'Online help (in english)',
+'only digits allowed in holdoff field' => 'Only digits allowed in holdoff field',
+'only digits allowed in max retries field' => 'Only digits allowed in max retries field.',
+'only digits allowed in the idle timeout' => 'Only digits allowed in the idle timeout.',
+'only red' => 'Only RED',
+'open to all' => 'Override external access to ALL',
+'openssl produced an error' => 'OpenSSL produced an error',
+'openvpn client' => 'OpenVPN client',
+'openvpn default' => 'Default',
+'openvpn destination port used' => 'The destination port is already used by another OpenVPN server.',
+'openvpn disabled' => 'DISABLED',
+'openvpn enabled' => 'ENABLED',
+'openvpn fragment allowed with udp' => 'Using fragment is only allowed when using the UDP protocol.',
+'openvpn log' => 'OpenVPN Log',
+'openvpn mssfix allowed with udp' => 'Using "mssfix" is only allowed when using the UDP protocol.',
+'openvpn network' => 'OpenVPN networks',
+'openvpn prefix local subnet' => 'Using the prefix notation is not supported for the local subnet. Please enter a subnet mask like 255.255.255.0.',
+'openvpn prefix openvpn subnet' => 'Using the prefix notation is not supported for the OpenVPN subnet. Please enter a subnet mask like 255.255.255.0.',
+'openvpn prefix remote subnet' => 'Using the prefix notation is not supported for the remote subnet. Please enter a subnet mask like 255.255.255.0.',
+'openvpn server' => 'OpenVPN server',
+'openvpn subnet is used' => 'The given subnet is used by another OpenVPN server.',
+'optional at cmd' => 'optional AT command',
+'optional data' => '3. Optional Settings:',
+'options' => 'Options',
+'options fw' => 'Firewall Options',
+'optionsfw portlist hint' => 'The list of ports has to be comma separated (e.g. 137,138). You can specify up to a maximum of 15 ports per protocol.',
+'optionsfw warning' => 'Modifying these options implies restart of firewall',
+'or' => 'or',
+'orange' => 'ORANGE',
+'organization cant be empty' => 'Organization can\'t be empty.',
+'organization name' => 'Organization Name',
+'organization too long' => 'Organization is too long; it should not be longer than 60 characters.',
+'original' => 'Original',
+'os level' => 'OS Level',
+'other' => 'Other',
+'other countries' => 'Other countries',
+'other login script' => 'Other login script',
+'otherip' => 'other IP',
+'otherport' => 'other Port',
+'our donors' => 'Our donors',
+'out' => 'Out',
+'outgoing' => 'outgoing',
+'outgoing firewall' => 'Outgoing Firewall',
+'outgoing firewall access' => 'Outgoing Firewall Access',
+'outgoing firewall add ip group' => 'Add IP Address Group',
+'outgoing firewall add mac group' => 'Add MAC Address Group',
+'outgoing firewall edit ip group' => 'Edit IP Address Group',
+'outgoing firewall edit mac group' => 'Edit MAC Address Group',
+'outgoing firewall group error' => 'A group with the same name exists.',
+'outgoing firewall groups' => 'Firewall Groups',
+'outgoing firewall ip groups' => 'Outgoing Firewall IP Address Groups',
+'outgoing firewall mac groups' => 'Outgoing Firewall MAC Address Groups',
+'outgoing firewall mode0' => 'Using this mode, all clients are able to access the internet without any restrictions.',
+'outgoing firewall mode1' => 'Using this mode, only connections based on the defined rules are allowed.',
+'outgoing firewall mode2' => 'Using this mode, all connections are allowed despited off the defined ones.',
+'outgoing firewall outgoing firewall reserved groupname' => 'Please use another group name, this name is reserved.',
+'outgoing firewall p2p allow' => 'Using the P2P protocol is allowed',
+'outgoing firewall p2p deny' => 'Using the P2P protocol is forbidden',
+'outgoing firewall p2p description 1' => 'The button',
+'outgoing firewall p2p description 2' => 'means that the p2p protocol is allowed or',
+'outgoing firewall p2p description 3' => 'that the p2p protocol is denied.',
+'outgoing firewall reset' => 'Reset all',
+'outgoing firewall view group' => 'View group',
+'outgoing firewall warning' => 'Not selecting source ip or mac ignores them',
+'outgoing traffic in bytes per second' => 'Outgoing Traffic',
+'override mtu' => 'Override default MTU',
+'ovpn' => 'OpenVPN',
+'ovpn con stat' => 'OpenVPN Connection Statistics',
+'ovpn config' => 'OVPN-Config',
+'ovpn crypt options' => 'Cryptographic options',
+'ovpn device' => 'OpenVPN device:',
+'ovpn dh' => 'Diffie-Hellman parameters length',
+'ovpn dh new key' => 'Generate new Diffie-Hellman parameters',
+'ovpn dh parameters' => 'Diffie-Hellman parameters options',
+'ovpn dh upload' => 'Upload new Diffie-Hellman parameters',
+'ovpn dl' => 'OVPN-Config Download',
+'ovpn engines' => 'Crypto engine',
+'ovpn errmsg green already pushed' => 'Route for Verde network is always set',
+'ovpn errmsg invalid ip or mask' => 'Invalid network-address or subnetmask',
+'ovpn generating the root and host certificates' => 'Generating the root and host certifictae can take a long time.',
+'ovpn ha' => 'Hash algorithm',
+'ovpn hmac' => 'HMAC options',
+'ovpn log' => 'OVPN-Log',
+'ovpn mgmt in root range' => 'A port number of 1024 or higher is required.',
+'ovpn mtu-disc' => 'Path MTU Discovery',
+'ovpn mtu-disc and mtu not 1500' => 'Path MTU Discovery requires a MTU of 1500.',
+'ovpn mtu-disc maybe' => 'Optionally',
+'ovpn mtu-disc no' => 'Never',
+'ovpn mtu-disc off' => 'Disabled',
+'ovpn mtu-disc with mssfix or fragment' => 'Path MTU Discovery cannot be used with mssfix or fragment.',
+'ovpn mtu-disc yes' => 'Forced',
+'ovpn no connections' => 'No active OpenVPN connections',
+'ovpn on blue' => 'OpenVPN on Blu',
+'ovpn on orange' => 'OpenVPN on ORANGE',
+'ovpn on red' => 'OpenVPN on RED',
+'ovpn port in root range' => 'A port number of 1024 or higher is required.',
+'ovpn reneg sec' => 'Session key lifetime:',
+'ovpn routes push' => 'Routes (one per line) e.g. 192.168.10.0/255.255.255.0 192.168.20.0/24',
+'ovpn routes push options' => 'Route push options',
+'ovpn server status' => 'Current OpenVPN server status:',
+'ovpn subnet' => 'OpenVPN subnet (e.g. 10.0.10.0/255.255.255.0)',
+'ovpn subnet is invalid' => 'OpenVPN subnet is invalid.',
+'ovpn subnet overlap' => 'OpenVPN Subnet overlaps with : ',
+'ovpn_fastio' => 'Fast-IO',
+'ovpn_mssfix' => 'MSSFIX Size',
+'ovpn_mtudisc' => 'MTU-Discovery',
+'ovpn_processprio' => 'Process priority',
+'ovpn_processprioD' => 'Deeply',
+'ovpn_processprioED' => 'Extremely deeply',
+'ovpn_processprioEH' => 'Extremely high',
+'ovpn_processprioEN' => 'More highly than normal',
+'ovpn_processprioH' => 'High',
+'ovpn_processprioLN' => 'More deeply than normal',
+'ovpn_processprioN' => 'Normal',
+'ovpn_processprioVD' => 'Very deeply',
+'ovpn_processprioVH' => 'Very high',
+'ovpnstatus log' => 'OVPN-Status-Log',
+'ovpnsys log' => 'OVPN-System-Log',
+'p2p block' => 'P2P networks',
+'p2p block save notice' => 'Please reload the firewall ruleset in order to apply your changes.',
+'package failed to install' => 'Package failed to install.',
+'pagerefresh' => 'Page is beeing refreshed, please wait.',
+'pakfire accept all' => 'Do you want to install all packages?',
+'pakfire ago' => 'ago.',
+'pakfire available addons' => 'Addons disponibili:',
+'pakfire configuration' => 'Configurazione Pakfire',
+'pakfire core update auto' => 'Install core and addon updates automatically:',
+'pakfire core update level' => 'Core-Update-Level',
+'pakfire health check' => 'Controllare se il mirror è raggiungibile (ping):',
+'pakfire install description' => 'Si prega di scegliere uno o più elementi dalla lista qui sotto e <br /> fai clic sul segno più per installare.',
+'pakfire install package' => 'You want to install the following packages: ',
+'pakfire installed addons' => 'Addons installati:',
+'pakfire last core list update' => 'Last core list update made',
+'pakfire last package update' => 'Last packages list update made',
+'pakfire last serverlist update' => 'Last server list update made',
+'pakfire last update' => 'Last update made',
+'pakfire possible dependency' => ' There may be depending packages, here is a list of packages that need to be installed.',
+'pakfire register' => 'Registrati sul pakfire-server:',
+'pakfire system state' => 'Stato del Sistema',
+'pakfire uninstall description' => 'Si prega di scegliere uno o più elementi dalla lista qui sotto e <br /> fare clic sul meno per disinstallare..',
+'pakfire uninstall package' => 'You want to uninstall the following packages: ',
+'pakfire update daily' => 'Ricerca gli aggiornamenti una volta al giorno:',
+'pakfire updates' => 'Available Update:',
+'pakfire working' => 'Pakfire is working ... Please wait until all operations have completed successfully.',
+'pap or chap' => 'PAP or CHAP',
+'parentclass' => 'Parentclass',
+'parentclass add' => 'Add parentclass',
+'password' => 'Password:',
+'password contains illegal characters' => 'Password contains illegal characters.',
+'password crypting key' => 'Password crypting the key',
+'password not set' => 'Password not set.',
+'password too short' => 'Password is too short.',
+'passwords do not match' => 'Passwords do not match.',
+'passwords must be at least 6 characters in length' => 'Passwords must be at least 6 characters in length',
+'path to directory' => 'path to share',
+'pc' => 'Workstation',
+'pc add' => 'Add workstation',
+'pdc options' => 'PDC options',
+'percentage' => 'percentuale',
+'persistent' => 'Persistent',
+'pfs yes no' => 'Perfect Forward Secrecy (PFS)',
+'phase1 group' => 'Phase1 Group',
+'phonebook entry' => 'Phonebook entry:',
+'ping disabled' => 'Disable ping response',
+'pkcs12 file password' => 'PKCS12 File Password',
+'play' => 'Play',
+'polfile' => 'Polfile',
+'policy' => 'Policy',
+'port' => 'Port',
+'port forwarding configuration' => 'Port forwarding configuration',
+'ports' => 'Ports',
+'portscans' => 'portscancs',
+'pots' => 'Analog classic line',
+'ppp setup' => 'PPP setup',
+'pppoe' => 'PPPoE',
+'pppoe settings' => 'Additional PPPoE settings:',
+'pptp settings' => 'Additional PPTP settings:',
+'pre-shared key is too short' => 'Pre-shared key is too short.',
+'prefered master' => 'Prefered Master',
+'present' => 'Present',
+'prev' => 'previous',
+'primary dns' => 'DNS Primario:',
+'primary ntp server' => 'NTP server Primario',
+'primary wins server address' => 'WINS server primario',
+'printcap name' => 'Printercap name',
+'printer' => 'Printer',
+'printername' => 'Printername',
+'printing' => 'Printing',
+'printing options' => 'printing options',
+'priority' => 'Priority',
+'processes' => 'Processo',
+'profile' => 'Profile',
+'profile deleted' => 'Profile deleted: ',
+'profile has errors' => 'Profile has errors',
+'profile made current' => 'Profile made current: ',
+'profile name' => 'Profile name:',
+'profile name not given' => 'Profile name not given.',
+'profile saved' => 'Profile saved: ',
+'profiles' => 'Profiles:',
+'proto' => 'Proto',
+'protocol' => 'Protocolo',
+'proxy' => 'Proxy',
+'proxy access graphs' => 'Proxy access graphs',
+'proxy admin password' => 'Cache administrator password',
+'proxy cachemgr' => 'Attiva cachemanager',
+'proxy errmsg filedescriptors' => 'Wrong amount of filedescriptors',
+'proxy filedescriptors' => 'Quantita filedescriptors',
+'proxy log viewer' => 'Proxy log viewer',
+'proxy logs' => 'Proxy Log',
+'proxy no proxy extend' => 'or specify a list of not proxied destination',
+'proxy no proxy local' => 'Disallow local proxying on Blu/Verde networks',
+'proxy port' => 'Porta Proxy',
+'proxy reconfigure' => 'Save and Reload',
+'proxy reports' => 'Report del Proxy',
+'proxy reports daily' => 'Daily reports',
+'proxy reports monthly' => 'Monthly reports',
+'proxy reports today' => 'Oggi',
+'proxy reports weekly' => 'Weekly reports',
+'psk' => 'PSK',
+'pulse' => 'Pulse',
+'pulse dial' => 'Pulse dial:',
+'qos add subclass' => 'Add subclass',
+'qos enter bandwidths' => 'You will need to enter your downstream and upstream bandwidth!',
+'qos graphs' => 'Qos Graphs',
+'qos warning' => 'The rule <strong>must</strong> be saved, otherwise it will be discarded!',
+'quick control' => 'Quick Control',
+'quick playlist' => 'Quick Playlist',
+'ram' => 'RAM',
+'random number generator daemon' => 'Random Number Generator Daemon',
+'read bytes' => 'Read Bytes',
+'read list' => 'list with readonly hosts',
+'real address' => 'Real Address',
+'reboot' => 'Riavvia',
+'reboot ask' => 'Riavvia?',
+'reboot question' => 'Extra query for restart and shutdown',
+'reboot schedule' => 'Schedule IPFire reboots',
+'reboot sure' => 'Are you sure that you want to reboot?',
+'rebooting' => 'Rebooting',
+'rebooting ipfire' => 'Rebooting IPFire',
+'reconnect' => 'Reconnect',
+'reconnection' => 'Reconnection',
+'red' => 'Internet',
+'red1' => 'ROSSO',
+'references' => 'References',
+'refresh' => 'Refresh',
+'refresh index page while connected' => 'Aggiorna la pagina index.cgi mentre si &eacute; collegati',
+'refresh update list' => 'Refresh update list',
+'registered user rules' => 'Sourcefire VRT rules for registered users',
+'released' => 'Released',
+'reload' => 'reload',
+'remark' => 'Commento',
+'remark title' => 'Commento:',
+'remote access' => 'Remote access',
+'remote announce' => 'Remote Announce',
+'remote browse sync' => 'Remote Browse Sync',
+'remote host/ip' => 'Remote host/IP',
+'remote logging' => 'Log remoto',
+'remote subnet' => 'Remote subnet:',
+'remote subnet is invalid' => 'Remote subnet is invalid.',
+'removable device advice' => 'Plug in a device, refresh, select and mount before usage. Umount before removal.',
+'remove' => 'Remove',
+'remove ca certificate' => 'Remove CA certificate',
+'remove x509' => 'Remove x509',
+'repeat' => 'Repeat',
+'reportfile' => 'Reportfile',
+'reportlevel' => 'Reportlevel',
+'request' => 'Request',
+'requested data' => '1. Connection Settings:',
+'reserved dst port' => 'Destination port is reserved for IPFire use only:',
+'reserved src port' => 'Source port is reserved for IPFire use only:',
+'reset' => 'Reset',
+'reset shares' => 'Reset share',
+'resetglobals' => 'Reset global settings',
+'resetpolicy' => 'Reset policy to default',
+'resetshares' => 'Reset shares?',
+'resetting the vpn configuration will remove the root ca, the host certificate and all certificate based connections' => 'Resetting the VPN configuration will remove the root CA, the host certificate and all certificate based connections',
+'restart' => 'Restart',
+'restart ovpn server' => 'Restart OpenVPN server',
+'restore' => 'Ripristinare',
+'restore defaults' => 'Ripristina defaults',
+'restore hardware settings' => 'Restore hardware settings',
+'restore settings' => 'Reset Settings',
+'reverse sort' => 'Ordina in ordine cronologico inverso',
+'root' => 'Root',
+'root certificate' => 'Root certificate',
+'root path' => 'Root path',
+'root user password' => 'Root password',
+'route subnet is invalid' => 'Additional push route subnet is invalid',
+'router ip' => 'Router IP address:',
+'routing table entries' => 'Instradamento delle voci di tabella',
+'rsvd dst port overlap' => 'Destination Port Range overlaps a port reserved for IPFire:',
+'rsvd src port overlap' => 'Source Port Range overlaps a port reserved for IPFire:',
+'rules already up to date' => 'Rules already up to date',
+'running' => 'AVVIATO',
+'safe removal of umounted device' => 'You can safely remove the unmounted device',
+'samba' => 'Samba',
+'samba status' => 'Samba Status',
+'saturday' => 'Sabato',
+'save' => 'Salva',
+'save config' => 'save settings',
+'save error' => 'Unable to save configuration archive file',
+'save settings' => 'Save settings',
+'save-adv-options' => 'Save advanced options',
+'script name' => 'Script name:',
+'secondary dns' => 'DNS Secondario:',
+'secondary ntp server' => 'NTP server secondario',
+'secondary wins server address' => 'WINS server secondario',
+'seconds' => 'Secondi',
+'section' => 'Sezione',
+'secure shell server' => 'Secure Shell Server',
+'security' => 'Sicurezza',
+'security options' => 'Opzioni sicurezza',
+'select' => 'selezionare',
+'select dest net' => 'Select a destination net.',
+'select media' => 'Select media <br />(only FAT supported for removable media)',
+'select source net' => 'Select a source net. If you have no ORAGNE or Blu net configured, you need no DMZ Pinholes.',
+'selecttraffic' => 'Select utilization-overview:',
+'send cr' => 'ISP requires Carriage Return:',
+'send email notification' => 'Enabled, send e-mail notification',
+'send test mail' => 'Send Teste-mail',
+'september' => 'Settembre',
+'serial' => 'Serial',
+'server reserved' => 'The connection name server is reserved and not allowed',
+'server restart' => 'You are not able to save any changes while the OpenVPN server is running.',
+'server string' => 'Server String',
+'service' => 'Service',
+'service added' => 'Custom network service added',
+'service name' => 'Service name:',
+'service removed' => 'Custom network service removed',
+'service updated' => 'Custom network service updated',
+'servicename' => 'Service Name',
+'services' => 'Servizio',
+'services settings' => 'Firewall-Impostazioni Servizi',
+'set' => 'set',
+'set time now' => 'Set time now',
+'set time now help' => 'Per accodare un evento di sincronizzazione in qualsiasi momento (anche durante l\'utilizzo di un programma di ripetizione), premere il pulsante Imposta ora ora. Si prega di notare che potrebbe essere necessario attendere per cinque minuti, o più, prima che si verifichi un evento di sincronizzazione.',
+'settings' => 'Impostazioni',
+'shaping add options' => 'Add service',
+'shaping list options' => 'Traffic shaping services',
+'shared' => 'shared',
+'sharename' => 'Sharename',
+'shares' => 'Shares',
+'show ajax speedmeter in footer' => 'Mostra la velocita tramita Ajax',
+'show areas' => 'show areas',
+'show ca certificate' => 'Show CA certificate',
+'show certificate' => 'Show file',
+'show crl' => 'Show certificate revocation list',
+'show dh' => 'Show Diffie-Hellman parameters',
+'show host certificate' => 'Show host certificate',
+'show last x lines' => 'Show last x lines',
+'show lines' => 'Show lines',
+'show root certificate' => 'Show root certificate',
+'show share options' => 'Show shares options',
+'show tls-auth key' => 'Show tls-auth key',
+'shuffle' => 'Shuffle',
+'shutdown' => 'Spegni',
+'shutdown ask' => 'Spegni?',
+'shutdown control' => 'Sistema di Controllo per Riavvio',
+'shutdown sure' => 'Are you sure that you want to shutdown?',
+'shutdown2' => 'Spegni:',
+'shutting down' => 'Shutting down',
+'shutting down ipfire' => 'Shutting down IPFire',
+'since' => 'since',
+'sitekey' => 'Sitekey',
+'sitekeyfile' => 'Sitekeyfile',
+'size' => 'grandezza',
+'smart information' => 'Informazione S.M.A.R.T.',
+'smartwarn1' => 'Device:',
+'smartwarn2' => 'reports S.M.A.R.T. error',
+'smbreload' => 'Reload samba',
+'smbrestart' => 'Restart samba',
+'smbstart' => 'Start samba',
+'smbstop' => 'Stop samba',
+'smtphost' => 'SMTP host',
+'smtpport' => 'SMTP port',
+'snat new source ip address' => 'New source IP address',
+'snort hits' => 'Totale numero di regole antintrusione attivate ​​per',
+'snort working' => 'Snort is working ... Please wait until all operations have completed successfully.',
+'socket options' => 'Socket options',
+'software version' => 'Versione software ',
+'sort ascending' => 'Sort ascending',
+'sort descending' => 'Sort descending',
+'sound' => 'Suono',
+'source' => 'Source',
+'source ip' => 'Sorgente IP',
+'source ip and port' => 'IP Sorgente: Porta',
+'source ip bad' => 'Not a valid IP address or a network address.',
+'source ip country' => 'Source IP Country',
+'source ip in use' => 'Source IP in use:',
+'source ip or net' => 'Source IP or Net',
+'source net' => 'Source Net',
+'source network' => 'Source IP, or network (blank for "ALL"):',
+'source port' => 'Source port',
+'source port in use' => 'Source port in use:',
+'source port numbers' => 'Source port must be a valid port number or port range.',
+'source port overlaps' => 'Source port range overlaps an existing port range.',
+'speaker off' => 'Speaker off:',
+'speaker on' => 'Speaker on:',
+'squid extension methods' => 'Your <tt>extension_methods</tt> list',
+'squid extension methods invalid' => 'Your \'extension_methods\' list can only contain uppercase words of letters and digits, separated with a space. ',
+'squid fix cache' => 'Repair cache',
+'src port' => 'Src Port',
+'srcprt range overlaps' => 'Source port range overlaps an already defined port.',
+'srcprt within existing' => 'Source port is within an already defined port range.',
+'ssdmz pinholes' => 'DMZ Pinholes',
+'ssh' => 'SSH',
+'ssh access' => 'Acesso SSH',
+'ssh access tip' => 'IPFire SSH is not using default port 222!',
+'ssh fingerprint' => 'Fingerprint',
+'ssh host keys' => 'SSH Host Keys',
+'ssh is disabled' => 'SSH is disabled.  Stopping.',
+'ssh is enabled' => 'SSH is enabled.  Restarting.',
+'ssh key' => 'Key',
+'ssh key size' => 'Size (bits)',
+'ssh keys' => 'Chiave basata Autenticazione pubblica',
+'ssh no auth' => 'You have not allowed any authentication methods; this will stop you logging in',
+'ssh passwords' => 'Consenti autenticazione basata su password',
+'ssh port' => 'SSH porta TCP/IP 22 (default &eacute; 222)',
+'ssh portfw' => 'Consenti inoltro TCP',
+'ssh tempstart15' => 'Stop SSH dopo 15 minuti',
+'ssh tempstart30' => 'Stop SSH dopo 30 minuti',
+'ssh1 disabled' => 'SSHv1 is disabled, a version 2 client will be required.',
+'ssh1 enabled' => 'SSHv1 is enabled, old clients will be supported.',
+'ssh1 support' => 'Support SSH protocol version 1 (required only for old clients)',
+'ssnetwork status' => 'Network Status',
+'sspasswords' => 'Passwords',
+'ssport forwarding' => 'Port Forwarding',
+'ssproxy graphs' => 'Proxy Graphs',
+'sssystem status' => 'Stato del sistema',
+'sstraffic' => 'Traffico di rete',
+'sstraffic graphs' => 'Traffic Graphs',
+'standard login script' => 'Standard login script',
+'start' => 'Start',
+'start address' => 'Indirizzo di partenza:',
+'start ovpn server' => 'Start OpenVPN Server',
+'state or province' => 'State or Province',
+'static ip' => 'Static IP',
+'static routes' => 'Percorsi statici',
+'status' => 'Stato',
+'status information' => 'Informazioni e Stato',
+'status ovpn' => 'OpenVPN',
+'std classes' => 'Standardclasses',
+'stop' => 'Stop',
+'stop ovpn server' => 'Stop OpenVPN Server',
+'stopped' => 'FERMO',
+'subject' => 'Subject',
+'subject test' => 'Teste-mail',
+'subject warn' => 'Warning - warnlevel reached',
+'subnet' => 'Subnet',
+'subnet is invalid' => 'Netmask is invalid',
+'subscripted user rules' => 'Sourcefire VRT rules with subscription',
+'successfully refreshed updates list' => 'Successfully refreshed updates list.',
+'summaries kept' => 'Tenere il sommaro per',
+'sunday' => 'Domenica',
+'support donation' => 'Support the IPFire project with your donation',
+'swap' => 'Swap',
+'swap usage per' => 'Swap usage per',
+'system' => 'Sistema',
+'system graphs' => 'Grafico sistema',
+'system has hwrng' => 'This system has got a hardware random number generator.',
+'system has rdrand' => 'This system has got support for Intel(R) RDRAND.',
+'system information' => 'Informazione Sistema',
+'system log viewer' => 'System Log Viewer',
+'system logs' => 'Log di Sistema',
+'system status information' => 'Informazioni e stato del sistema',
+'ta key' => 'TLS-Authentification-Key',
+'telephone not set' => 'Telephone not set.',
+'template' => 'Preset',
+'template warning' => 'You have two options to set up Qos. The First, you press the save button and generate the classes and rules on your own. The second, you press the preset button and classes and rules will be set up by a template.',
+'teovpn_fragment' => 'Fragmentsize',
+'test' => 'test',
+'test email could not be sent' => 'Could not sent Testemail',
+'test email was sent' => 'Testemail was send successfully',
+'the following update was successfully installed' => 'The following update was successfully installed',
+'the statistics were last updated at' => 'The statistics were last updated at',
+'theme' => 'Teme Grafico',
+'there are updates' => 'There are updates available for your system. Please go to the "updates" section for more information.',
+'there are updates available' => 'There are updates available for your system. It is strongly urged that you install them as soon as possible.',
+'there was no file upload' => 'There was no file upload.',
+'this feature has been sponsored by' => 'This feature has been sponsored by',
+'this field may be blank' => 'Questo campo pu&ograve; essere vuoto.',
+'this is not a valid archive' => 'This is not a valid archive.',
+'this is not an authorised update' => 'This is not an authorised update.',
+'this months volume' => 'This months volume',
+'this update is already installed' => 'This update is already installed.',
+'this weeks volume' => 'This weeks volume',
+'thursday' => 'Giovedi',
+'time' => 'Ora',
+'time date manually reset' => 'Time/Date manually reset.',
+'time server' => 'Ora Server',
+'timeout must be a number' => 'Timeout must be a number.',
+'title' => 'Title',
+'to' => 'To',
+'to email adr' => 'To e-mail address',
+'to install an update' => 'To install an update please upload the .tgz.gpg file below:',
+'to warn email bad' => 'To e-mail address is not valid',
+'toggle' => 'pause/resume',
+'toggle enable disable' => 'Enable or disable',
+'tone' => 'Tone',
+'tone dial' => 'Tone dial:',
+'too long 80 char max' => ' is too long, maximum allowed is 80 characters',
+'tor' => 'Tor',
+'tor 0 = disabled' => '0 = disabled',
+'tor accounting' => 'Accounting',
+'tor accounting bytes' => 'Traffic (read/written)',
+'tor accounting bytes left' => 'left',
+'tor accounting interval' => 'Interval (UTC)',
+'tor accounting limit' => 'Accounting limit (MB)',
+'tor accounting period' => 'Accounting period',
+'tor accounting period daily' => 'giornaliero',
+'tor accounting period monthly' => 'Mensile',
+'tor accounting period weekly' => 'weekly',
+'tor acls' => 'Access Control',
+'tor allowed subnets' => 'Allowed subnets (one per line)',
+'tor bandwidth burst' => 'Max. burst',
+'tor bandwidth rate' => 'Max. rate',
+'tor bandwidth settings' => 'Bandwidth Settings',
+'tor bandwidth unlimited' => 'unlimited',
+'tor bridge enabled' => 'Enable Tor bridge',
+'tor common settings' => 'Impostazioni Comuni',
+'tor configuration' => 'Tor Configuration',
+'tor connected relays' => 'Connected relays',
+'tor contact info' => 'Contact Info',
+'tor daemon' => 'Daemon',
+'tor directory port' => 'Directory port',
+'tor enabled' => 'Enable Tor',
+'tor errmsg invalid accounting limit' => 'Invalid accounting limit',
+'tor errmsg invalid directory port' => 'Invalid directory port',
+'tor errmsg invalid ip or mask' => 'Invalid IP subnet',
+'tor errmsg invalid node id' => 'Invalid node ID',
+'tor errmsg invalid relay address' => 'Invalid relay address',
+'tor errmsg invalid relay name' => 'Invalid relay nickname',
+'tor errmsg invalid relay port' => 'Invalid relay port',
+'tor errmsg invalid socks port' => 'Invalid SOCKS port',
+'tor exit country' => 'Exit country',
+'tor exit country any' => 'Any country',
+'tor exit nodes' => 'Exit Nodes',
+'tor relay address' => 'Relay address',
+'tor relay configuration' => 'Tor Relay Configuration',
+'tor relay enabled' => 'Enable Tor Relay',
+'tor relay external address' => 'Relay external address',
+'tor relay fingerprint' => 'Relay fingerprint',
+'tor relay mode' => 'Relay mode',
+'tor relay mode bridge' => 'Bridge',
+'tor relay mode exit' => 'Exit-Node',
+'tor relay mode private bridge' => 'Private bridge',
+'tor relay mode relay' => 'Relay only',
+'tor relay nickname' => 'Relay nickname',
+'tor relay port' => 'Relay port',
+'tor service' => 'Tor Service',
+'tor socks port' => 'SOCKS port',
+'tor stats' => 'Statistics',
+'tor traffic limit hard' => 'Traffic limit has been reached.',
+'tor traffic limit soft' => 'Traffic limit almost reached. Not accepting any new connections.',
+'tor traffic read written' => 'Total traffic (read/written)',
+'tor use exit nodes' => 'Use only these exit nodes (one per line)',
+'total connection time' => 'Total connection time',
+'total hits for log section' => 'Total hits for log section',
+'traffic back' => 'Back',
+'traffic calc time' => 'Time of calculation',
+'traffic calc time bad' => 'Calculation time is not correct',
+'traffic info messages' => 'Info messages',
+'traffic monitor' => 'Traffic Monitor',
+'traffic on' => 'Traffic on',
+'traffic shaping' => 'Traffic Shaping',
+'traffic shaping settings' => 'Traffic Shaping Settings',
+'traffic warn level bad' => 'Warnlevel is not correct',
+'trafficblue' => 'WLAN',
+'trafficdate' => 'Date',
+'trafficfrom' => 'Da',
+'trafficgreen' => 'Internal net',
+'trafficin' => 'Input',
+'trafficorange' => 'DMZ',
+'trafficout' => 'Output',
+'trafficred' => 'Internet',
+'traffics' => 'Panoramica-Utilizzo',
+'trafficsum' => 'Totals',
+'trafficto' => 'To',
+'transfer limits' => 'Transfer limits',
+'transparent on' => 'Transparente on',
+'tripwire' => 'Tripwire',
+'tripwire cronjob' => 'tripwire cronjob',
+'tripwire functions' => 'tripwire functions',
+'tripwire reports' => 'tripwire reports',
+'tripwireoperating' => 'The process was started. This may take serverall minutes, please wait the window will automaticly refresh after the process has finished.',
+'tripwirewarningdatabase' => 'WARNING - Your database will be updated with the data of the last report. Please ensure that no unauthorized changes are reported. Therefor the local-key is needed.',
+'tripwirewarningkeys' => 'WARNING - This will erase your current keys, config, and database and generate them new.',
+'tripwirewarningpolicy' => 'WARNING - Your policy will be rebuild, after that your database will be reinitalised. Therefor the site-key and the local-key are neeeded.',
+'tuesday' => 'Martedi',
+'type' => 'Type',
+'umount' => 'Umount',
+'umount removable media before to unplug' => 'Umount removable media before unplugging the device',
+'unable to alter profiles while red is active' => 'Unable to alter profiles while RED is active.',
+'unable to contact' => 'Unable to contact',
+'unencrypted' => 'Unencrypted',
+'uninstall' => 'Uninstall',
+'unix charset' => 'UNIX Charset',
+'unix group' => ' UNIX usergroup',
+'unix password sync' => 'Unix Password Sync',
+'unix shell' => 'UNIX Shell',
+'unknown' => 'UNKNOWN',
+'unnamed' => 'Unnamed',
+'update' => 'Update',
+'update accelerator' => 'Update Accelerator',
+'update time' => 'Aggiornamento ora:',
+'update transcript' => 'Update transcript',
+'updatedatabase' => 'Update Database with last report',
+'updates' => 'Updates',
+'updates installed' => 'Ruleset update from',
+'updates is old1' => 'Your update file is ',
+'updates is old2' => 'days old. We recommend you update it on the <b>System>Updates</b> page.',
+'updxlrtr 3 months' => 'three months',
+'updxlrtr 6 months' => 'six  months',
+'updxlrtr all files' => 'all files ...',
+'updxlrtr cache dir' => 'Cache directory',
+'updxlrtr cache maintenance' => 'Cache maintenance',
+'updxlrtr cache size' => 'Cache size (bytes)',
+'updxlrtr cache statistics' => 'Cache statistics',
+'updxlrtr cancel download' => 'Cancel download',
+'updxlrtr children' => 'Number of accelerator processes',
+'updxlrtr common settings' => 'Impostazioni Comuni',
+'updxlrtr condition download' => 'Download',
+'updxlrtr condition nosource' => 'No source',
+'updxlrtr condition ok' => 'Up to date',
+'updxlrtr condition outdated' => 'Out of date',
+'updxlrtr condition suspended' => 'Suspended',
+'updxlrtr condition unknown' => 'Unknown',
+'updxlrtr configuration' => 'Update accelerator configuration',
+'updxlrtr current downloads' => 'Files being downloaded into the local cache',
+'updxlrtr current files' => 'Current files in local cache',
+'updxlrtr daily' => 'giornaliero',
+'updxlrtr data from cache' => 'Data from cache (bytes)',
+'updxlrtr disk usage' => 'Uso del disco',
+'updxlrtr efficiency index' => 'Cache efficiency index',
+'updxlrtr empty repository' => 'Local cache is empty',
+'updxlrtr enable autocheck' => 'Enable automatic source checkup',
+'updxlrtr enable log' => 'Abilita log',
+'updxlrtr filename' => 'Name',
+'updxlrtr files' => 'Files',
+'updxlrtr filesize' => 'Size',
+'updxlrtr full autosync' => 'Replace outdated files during checkup',
+'updxlrtr invalid disk usage' => 'Invalid value for max. disk usage',
+'updxlrtr invalid download rate' => 'Invalid value for max. download rate',
+'updxlrtr invalid num of children' => 'Invalid number of accelerator processes',
+'updxlrtr last access' => 'Last cache access',
+'updxlrtr last checkup' => 'Last source checkup',
+'updxlrtr low download priority' => 'Priorità della CPU per i download',
+'updxlrtr maintenance' => 'Maintenance',
+'updxlrtr marked as' => 'marked as',
+'updxlrtr max disk usage' => 'Max. disk usage',
+'updxlrtr max download rate' => 'Max. external download rate (kBit/s)',
+'updxlrtr month' => 'one month',
+'updxlrtr monthly' => 'Mensile',
+'updxlrtr not accessed' => 'not accessed since',
+'updxlrtr not enabled' => 'Update Accelerator is not enabled on the web proxy page',
+'updxlrtr other' => 'Other',
+'updxlrtr passive mode' => 'Enable passive mode',
+'updxlrtr pending downloads' => 'Pending downloads',
+'updxlrtr performance options' => 'Performance options',
+'updxlrtr progress' => 'Progress',
+'updxlrtr purge' => 'Purge',
+'updxlrtr remove file' => 'Remove from cache',
+'updxlrtr save and restart' => 'Save and Restart',
+'updxlrtr source' => 'Source',
+'updxlrtr source checkup' => 'Source checkup',
+'updxlrtr source checkup schedule' => 'Source checkup schedule',
+'updxlrtr sources' => 'Sources',
+'updxlrtr standard view' => 'Standard view',
+'updxlrtr statistics' => 'Statistics',
+'updxlrtr statistics by source' => 'Statistics by source',
+'updxlrtr summary' => 'Summary',
+'updxlrtr total cache size' => 'Total cache size (bytes)',
+'updxlrtr total data from cache' => 'Total data delivered from cache (bytes)',
+'updxlrtr total files' => 'Total files in cache',
+'updxlrtr unknown' => 'Unknown',
+'updxlrtr update accelerator' => 'Update Accelerator',
+'updxlrtr update information' => 'There is an updated version available for download. Visit <a href="http://update-accelerator.advproxy.net" target="_blank">http://update-accelerator.advproxy.net</a> for more information.',
+'updxlrtr update notification' => 'Update notification!',
+'updxlrtr used by' => 'Used by',
+'updxlrtr web proxy service required' => 'Web proxy service must be enabled to use Update Accelerator',
+'updxlrtr week' => 'one week',
+'updxlrtr weekly' => 'weekly',
+'updxlrtr year' => 'one year',
+'upgrade' => 'upgrade',
+'uplink' => 'Uplink',
+'uplink speed' => 'Uplink speed (kbit/sec)',
+'uplink std class' => 'uplink standard class',
+'upload' => 'Upload',
+'upload a certificate' => 'Upload a certificate:',
+'upload a certificate request' => 'Upload a certificate request:',
+'upload ca certificate' => 'Upload CA certificate',
+'upload dh key' => 'Upload Diffie-Hellman parameters',
+'upload fcdsl.o' => 'TO BE REMOVED',
+'upload file' => 'Upload file',
+'upload new ruleset' => 'Upload new ruleset',
+'upload p12 file' => 'Upload PKCS12 file',
+'upload static key' => 'Upload a static key',
+'upload successful' => 'Upload successful.',
+'upload synch.bin' => 'Upload synch.bin',
+'upload update file' => 'Upload update file:',
+'upstream password' => 'Upstream password:',
+'upstream proxy host:port' => 'Upstream proxy (host:port)',
+'upstream username' => 'Upstream username:',
+'uptime' => 'Uptime',
+'uptime and users' => 'Uptime and users:',
+'uptime load average' => 'Load average',
+'url filter' => 'Filtro URL',
+'urlfilter access' => 'Accesso',
+'urlfilter activity detection' => 'Activity detection',
+'urlfilter add new time constraint rule' => 'Aggiungere una regola con il vincolo del tempo',
+'urlfilter add new user quota rule' => 'Add new user quota rule',
+'urlfilter add rule' => 'Add',
+'urlfilter advanced settings' => 'impostazioni avanzate',
+'urlfilter allow' => 'Allow',
+'urlfilter allow access' => 'Allow access',
+'urlfilter allowed domains' => 'Domini ammessi (uno per riga)',
+'urlfilter allowed urls' => 'URL ammessi (uno per riga)',
+'urlfilter assigned quota users' => 'Assigned users (one per line)',
+'urlfilter assigned users' => 'Assigned users',
+'urlfilter automatic blacklist update' => 'Aggiornamento automatico blacklist',
+'urlfilter automatic update schedule' => 'Pianificazione dell\'aggiornamento automatico',
+'urlfilter back to main page' => 'Torna alla pagina principale',
+'urlfilter background image' => 'urlfilter background image',
+'urlfilter background text' => 'To use a custom background image for the block page upload the .jpg file below',
+'urlfilter backup' => 'Crea file backup',
+'urlfilter backup error' => 'Unable to create backup file',
+'urlfilter backup settings' => 'Backup del filtro URL',
+'urlfilter banned clients' => 'Indirizzi IP Banned',
+'urlfilter blacklist age 1' => 'Ultimo aggiornamento blacklist eseguito ',
+'urlfilter blacklist age 2' => 'giorni fa',
+'urlfilter blacklist category name' => 'Blacklist category name',
+'urlfilter blacklist editor' => 'Editor di Blacklist',
+'urlfilter blacklist editor info' => 'Crea e modifica la blacklist personaliata',
+'urlfilter blacklist name' => 'Blacklist name',
+'urlfilter blacklist update' => 'Aggiornamento Blacklist',
+'urlfilter block' => 'Block',
+'urlfilter block access' => 'Block access',
+'urlfilter block all' => 'Blocca tutti gli URL non esplicitamente autorizzati',
+'urlfilter block archives' => 'Archivi e file compressi bloccati',
+'urlfilter block audio-video' => 'File audio/video Bloccati',
+'urlfilter block categories' => 'Categorie Bloccate',
+'urlfilter block executables' => 'File eseguibili Bloccati',
+'urlfilter block ip' => 'Bloccare i siti a cui si accede da esso tramite indirizzo IP',
+'urlfilter block settings' => 'Impostazioni della pagina Blocco',
+'urlfilter blocked domains' => 'Domini bloccati (uno per riga)',
+'urlfilter blocked expressions' => 'Espressioni bloccati (espressioni regolari)',
+'urlfilter blocked urls' => 'URL bloccati (uno per riga)',
+'urlfilter category' => 'Category',
+'urlfilter category all' => 'any',
+'urlfilter category data error' => 'Blacklist is empty',
+'urlfilter category log' => 'Dividere log per categorie',
+'urlfilter category name error' => 'Blacklist category name required',
+'urlfilter client' => 'Client',
+'urlfilter configuration' => 'Configurazione filttri per URL',
+'urlfilter constraint definition' => 'Impostazione',
+'urlfilter constraint outside' => 'outside',
+'urlfilter constraint within' => 'within',
+'urlfilter copy rule' => 'Copy',
+'urlfilter current files' => 'Current files in local repository',
+'urlfilter custom blacklist' => 'Blacklist personalizzata',
+'urlfilter custom expression list' => 'Espressione personalizzata',
+'urlfilter custom url' => 'Sorgente personalizzato, URL',
+'urlfilter custom url required' => 'Custom source URL required',
+'urlfilter custom whitelist' => 'Whitelist personalizzata',
+'urlfilter daily' => 'giornaliero',
+'urlfilter disabled' => 'disabled',
+'urlfilter domains' => 'Domains (one per line)',
+'urlfilter dont restart urlfilter' => 'Do not restart URL filter',
+'urlfilter dst' => 'Destinazione',
+'urlfilter dst error' => 'There must be at least one category selected',
+'urlfilter edit domains urls expressions' => 'Edit domains, URLs and expressions',
+'urlfilter edit time constraint rule' => 'Edit an existing time constraint rule',
+'urlfilter edit user quota rule' => 'Edit an existing user quota rule',
+'urlfilter empty ads' => 'Blocca "ADS" con finestra vuota',
+'urlfilter empty repository' => 'Local file repository is empty',
+'urlfilter enable automatic blacklist update' => 'Attiva aggiornamento automatico',
+'urlfilter enable custom blacklist' => 'Abilito blacklist Personalizata',
+'urlfilter enable custom expression list' => 'Abilito Espressione Personalizata',
+'urlfilter enable custom whitelist' => 'Abilito whitelist Personalizata',
+'urlfilter enable expression lists' => 'Abilita liste di espressione',
+'urlfilter enable full backup' => 'Inserire blacklist completa',
+'urlfilter enable jpeg' => 'Enable background image',
+'urlfilter enable log' => 'Abilita log',
+'urlfilter enable rewrite rules' => 'Attiva redirezione di file locale',
+'urlfilter enabled' => 'Enabled:',
+'urlfilter example' => 'Esempio: www.domain.com',
+'urlfilter example ads' => 'Esempio: www.domain.com/ads/',
+'urlfilter export blacklist' => 'Export blacklist',
+'urlfilter export error' => 'Unable to create export file',
+'urlfilter expressions' => 'Expressions (one per line)',
+'urlfilter file ext block' => 'Blocco estenzione file',
+'urlfilter filename' => 'Name',
+'urlfilter filesize' => 'Size',
+'urlfilter filter settings' => 'Impostazioni del filtro URL',
+'urlfilter fri' => 'F',
+'urlfilter friday' => 'Ven',
+'urlfilter from' => 'Da',
+'urlfilter hourly' => 'hourly',
+'urlfilter import blacklist' => 'Import blacklist',
+'urlfilter import text' => 'To import a previously saved blacklist editor file upload the .tar.gz file below',
+'urlfilter install blacklist' => 'Install blacklist',
+'urlfilter install information' => 'The new blacklist will be automatically compiled to prebuilt databases. Depending on the size of the blacklist, this may take several minutes.',
+'urlfilter invalid content' => 'File is not a squidGuard compatible blacklist',
+'urlfilter invalid import file' => 'File is not a valid URL filter blacklist editor file',
+'urlfilter invalid ip or mask error' => 'Invalid IP address or network mask',
+'urlfilter invalid restore file' => 'File is not a valid URL filter backup file',
+'urlfilter invalid user error' => 'Invalid username',
+'urlfilter load blacklist' => 'Load blacklist',
+'urlfilter local file redirection' => 'Redirezione di file locale',
+'urlfilter log' => 'urlfilter log',
+'urlfilter log summary' => 'Numero totale di URL filtrati per',
+'urlfilter log viewer' => 'URL filter log viewer',
+'urlfilter logs' => 'LOG del filtro URL',
+'urlfilter maintenance' => 'Manutenzione del filtro URL',
+'urlfilter manage local file repository' => 'Gestire file repository locale',
+'urlfilter manage repository' => 'Manager repository',
+'urlfilter minutes' => 'minutes',
+'urlfilter mode allow' => 'allow',
+'urlfilter mode block' => 'block',
+'urlfilter mon' => 'M',
+'urlfilter monday' => 'Lun',
+'urlfilter monthly' => 'Mensile',
+'urlfilter msg text 1' => 'riga di messaggio 1',
+'urlfilter msg text 2' => 'riga di messaggio 2',
+'urlfilter msg text 3' => 'riga di messaggio 3',
+'urlfilter network access control' => 'Controllo di accesso basato sulla rete',
+'urlfilter no categories' => 'No categories available',
+'urlfilter not enabled' => 'URL filter is not enabled on the Web proxy page',
+'urlfilter quota restart message' => 'Note: The counters will be reset for all users when restarting the URL filter',
+'urlfilter quota time error' => 'Invalid value for time quota',
+'urlfilter quota user error' => 'At least one username is required',
+'urlfilter redirect template' => 'Reindirizza modello di pagina',
+'urlfilter redirectpage' => 'Reindirizza a questo URL',
+'urlfilter remove file' => 'Remove file from repository',
+'urlfilter renewal' => 'Renewal',
+'urlfilter renewal period' => 'Renewal period',
+'urlfilter repository information' => 'La richieste di questi file verranno reindirizzati dalla fonte originale al file locale.',
+'urlfilter reset' => 'Reset',
+'urlfilter restart' => 'Restart Filtro URL',
+'urlfilter restart message' => 'The URL filter must be restarted to activate the changed rules',
+'urlfilter restart notification' => 'Activate changed rules',
+'urlfilter restore' => 'Import backup file',
+'urlfilter restore results' => 'Restore results',
+'urlfilter restore settings' => 'Ripristina configurazione filtro URL',
+'urlfilter restore success' => 'URL filter configuration has been restored. The URL filter must be restarted to activate the new settings.',
+'urlfilter restore text' => 'Per ripristinare una configurazione precedentemente salvata caricare il file di backup tar.gz.',
+'urlfilter safesearch' => 'Attiva SafeSearch',
+'urlfilter sat' => 'S',
+'urlfilter saturday' => 'Sab',
+'urlfilter save and restart' => 'Save and Restart',
+'urlfilter save schedule' => 'Salva e aggiorna configurazione',
+'urlfilter select blacklist' => 'Select existing blacklist',
+'urlfilter select multi' => 'Press ctrl key to select multiple categories',
+'urlfilter select source' => 'Selezionare la sorgente del download',
+'urlfilter set time constraints' => 'Impostare limiti di tempo',
+'urlfilter set user quota' => 'Impostare quota utente',
+'urlfilter show category' => 'Visualizza categoria sulla pagina di blocco',
+'urlfilter show dnserror' => 'Utilizzare "errore DNS" per bloccare gli URL',
+'urlfilter show ip' => 'Mostra IP sulla pagina di blocco',
+'urlfilter show url' => 'Mostra URL nella pagina di blocco',
+'urlfilter source' => 'Source host(s) or network(s)',
+'urlfilter src' => 'Source',
+'urlfilter src error' => 'Source cannot be empty',
+'urlfilter sun' => 'S',
+'urlfilter sunday' => 'Dom',
+'urlfilter tar error' => 'Could not extract files from tar archive',
+'urlfilter thu' => 'T',
+'urlfilter thursday' => 'Gio',
+'urlfilter time' => 'Ora',
+'urlfilter time quota' => 'Time quota',
+'urlfilter time space' => 'Time space',
+'urlfilter timebased access control' => 'Controllo degli accessi in base al tempo',
+'urlfilter timespace error' => 'Error in time space declaration',
+'urlfilter to' => 'To',
+'urlfilter tue' => 'T',
+'urlfilter tuesday' => 'Mar',
+'urlfilter unfiltered clients' => 'Gli indirizzi IP non filtrati',
+'urlfilter update information' => 'There is an updated version available for download. Visit <a href="http://www.urlfilter.net" target="_blank">http://www.urlfilter.net</a> for more information.',
+'urlfilter update notification' => 'Update notification!',
+'urlfilter update now' => 'Aggiorna ora',
+'urlfilter update results' => 'Blacklist update results',
+'urlfilter update rule' => 'Update',
+'urlfilter upload background' => 'Upload image',
+'urlfilter upload blacklist' => 'Upload blacklist',
+'urlfilter upload file' => 'Upload file',
+'urlfilter upload file information 1' => 'Note',
+'urlfilter upload file information 2' => 'Il filtro URL deve essere riavviato per attivare le modifiche al repository.',
+'urlfilter upload file text' => 'Per aggiungere un file al repository locale caricare il file qui sotto',
+'urlfilter upload information' => 'Il nuova database di Blacklist verr&agrave; compilato automaticamente. A seconda delle dimensioni del database, potrebbe richiedere alcuni minuti. Si prega di attendere che finisca prima di riavviare il filtro URL.',
+'urlfilter upload success' => 'Blacklist upload successfully completed.',
+'urlfilter upload text' => 'Per installare una blacklist aggiornata caricare il file tar.gz qui sotto.',
+'urlfilter url filter' => 'Filtro URL',
+'urlfilter urlfilter blacklist editor' => 'URL filter blacklist editor',
+'urlfilter urls' => 'URLs (one per line)',
+'urlfilter user time quota' => 'Time quota (in minutes)',
+'urlfilter username' => 'Username',
+'urlfilter username log' => 'Registro username',
+'urlfilter web proxy service required' => 'Web proxy service must be enabled to use URL filter',
+'urlfilter wed' => 'W',
+'urlfilter wednesday' => 'Mer',
+'urlfilter weekday error' => 'There must be at least one day selected',
+'urlfilter weekly' => 'settimanale',
+'urlfilter whitelist always allowed' => 'Consentire whitelist personalizzate per i clienti vietati',
+'urlfilter wrong filetype' => 'File has not the extension .tar.gz',
+'use' => 'Use',
+'use a pre-shared key' => 'Use a pre-shared key:',
+'use dov' => 'Use data over voice (DOV):',
+'use ibod' => 'Use Bandwidth on Demand (iBOD):',
+'use ipfire red ip' => 'The classical RED IP used by IPFire during connection',
+'use only proposed settings' => 'Use only proposed settings.',
+'used' => 'Usato',
+'used memory' => 'Memoria Usata        ',
+'used swap' => 'Swap Usato',
+'user' => 'User',
+'user log' => 'user log',
+'user proxy logs' => 'user proxy log',
+'username' => 'Username:',
+'username not set' => 'Username not set.',
+'users department' => 'User\'s department',
+'users email' => 'User\'s E-mail address',
+'users fullname or system hostname' => 'User\'s full name or system hostname',
+'valid root certificate already exists' => 'A valid root certificate already exists.',
+'valid till' => 'Valid till',
+'vci number' => 'VCI number:',
+'vendor' => 'Vendor',
+'view log' => 'view log',
+'virtual address' => 'Virtual Address',
+'virtual private networking' => 'Virtual Private Networking',
+'visible in browselist' => 'visible in browselist',
+'visit us at' => 'Visit us at',
+'voldown10' => 'Decrease volume by 10',
+'voldown5' => 'Decrease volume by 5',
+'volup10' => 'Increase volume by 10',
+'volup5' => 'Increase volume by 5',
+'vpi number' => 'VPI number:',
+'vpn' => 'VPN',
+'vpn aggrmode' => 'IKE aggressive mode allowed. Avoid if possible (preshared key is transmitted in clear text)!',
+'vpn altname syntax' => 'SubjectAltName is a comma separated list of e-mail, dns, uri, rid and ip objects.<br />email:an email address. Syntax email:copy takes the email field from the cert to be used.<br />DNS:a valid domain name.<br />URI:any valid uri.<br />RID:registered object identifier.<br />IP:an IP address.<br />Note:charset is limited and case is significant.<br />Example:<br /><b>e-mail:</b>ipfire@foo.org<b>,email:</b>copy<b>,DNS:</b>www.ipfire.org<b>,IP:</b>127.0.0.1<b>,URI:</b>http://url/to/something',
+'vpn auth-dn' => 'Peer is identified by either IPV4_ADDR, FQDN, USER_FQDN or DER_ASN1_DN string in remote ID field',
+'vpn configuration main' => 'VPN Configuration',
+'vpn delayed start' => 'Ritardo prima di avviare la VPN (secondi)',
+'vpn delayed start help' => 'Se necessario, questo ritardo può essere utilizzata per consentire gli aggiornamenti dinamici DNS per propagare correttamente. 60 secondi è un valore comune quando RED è un IP dinamico.',
+'vpn incompatible use of defaultroute' => 'hostname=%defaultroute not allowed',
+'vpn keyexchange' => 'Keyexchange',
+'vpn local id' => 'Local ID',
+'vpn missing remote id' => 'You must specify a correct Distinguished Name (DN) for this authentication.',
+'vpn mtu invalid' => 'MTU must be a numeric value!',
+'vpn no full pki' => 'missing private key to generate cert',
+'vpn on blue' => 'VPN on Blu',
+'vpn on green' => 'VPN on Verde',
+'vpn on orange' => 'VPN on Arancio',
+'vpn payload compression' => 'Negotiate payload compression',
+'vpn red name' => 'IP pubblico o il nome di dominio completo per l\'interfaccia RED o <%defaultroute>',
+'vpn remote id' => 'Remote ID',
+'vpn subjectaltname' => 'Subject Alt Name',
+'vpn vhost' => 'Roadwarrior virtual IP (sometimes called Inner-IP)',
+'vpn watch' => 'Restart net-to-net vpn when remote peer IP changes (dyndns).',
+'waiting to synchronize clock' => 'Waiting to synchronize clock',
+'warn when traffic reaches' => 'Warn when traffic reaches x %',
+'warning messages' => 'Warning messages',
+'was deleted' => 'was deleted',
+'web hits' => 'Numero totale di siti web che soddisfano i criteri selezionati per',
+'web proxy' => 'Proxy Web',
+'web proxy configuration' => 'Web proxy configuration',
+'web server' => 'Web Server',
+'webradio playlist' => 'Webradio Playlist',
+'website' => 'Website',
+'wednesday' => 'Mercoledi',
+'week' => 'Settimana',
+'week-graph' => 'Settimana',
+'weekly firewallhits' => 'weekly firewallhits',
+'weeks' => 'Settimane',
+'wildcards' => 'Wildcards',
+'wins server' => 'Wins Server',
+'wins support' => 'Wins Support',
+'wireless' => 'Wireless',
+'wireless config added' => 'Wireless config added',
+'wireless config changed' => 'Wireless config changed',
+'wireless configuration' => 'Configuratione Wireless',
+'wlan client' => 'Wireless client',
+'wlan client advanced settings' => 'impostazioni avanzate Wireless client',
+'wlan client and' => 'and',
+'wlan client bssid' => 'BSSID',
+'wlan client ccmp' => 'CCMP',
+'wlan client configuration' => 'Wireless Client Configuration',
+'wlan client disconnected' => 'Disconnesso',
+'wlan client duplicate ssid' => 'Duplicate SSID',
+'wlan client edit entry' => 'Edit wireless client configuration',
+'wlan client encryption' => 'Encryption',
+'wlan client encryption none' => 'None',
+'wlan client encryption wep' => 'WEP',
+'wlan client encryption wpa' => 'WPA',
+'wlan client encryption wpa2' => 'WPA2',
+'wlan client group cipher' => 'Group cipher',
+'wlan client group key algorithm' => 'GKA',
+'wlan client invalid key length' => 'Invalid key length.',
+'wlan client new entry' => 'Crea nuova configuratione wireless client',
+'wlan client new network' => 'Nuovo network',
+'wlan client pairwise cipher' => 'Pairwise cipher',
+'wlan client pairwise key algorithm' => 'PKA',
+'wlan client pairwise key group key' => 'Pairwise key/group key',
+'wlan client psk' => 'Pre-shared key',
+'wlan client ssid' => 'SSID',
+'wlan client tkip' => 'TKIP',
+'wlan client wpa mode' => 'WPA mode',
+'wlan client wpa mode all' => 'Auto',
+'wlan client wpa mode ccmp ccmp' => 'CCMP-CCMP',
+'wlan client wpa mode ccmp tkip' => 'CCMP-TKIP',
+'wlan client wpa mode tkip tkip' => 'TKIP-TKIP',
+'wlan clients' => 'Wireless clients',
+'wlanap access point' => 'Access Point',
+'wlanap channel' => 'Channel',
+'wlanap country' => 'Country Code',
+'wlanap debugging' => 'Debugging',
+'wlanap del interface' => 'Rimuovi interfaccia selezionata?',
+'wlanap encryption' => 'Encryption',
+'wlanap informations' => 'Informationi',
+'wlanap interface' => 'Selezione interfaccia',
+'wlanap invalid wpa' => 'Invalid length in WPA Passphrase. Deve contenere dai 6 ai 63 caratteri.',
+'wlanap link dhcp' => 'Configuratione Wireless Lan DHCP',
+'wlanap link wireless' => 'Activate Wireless Lan clients',
+'wlanap no interface' => 'Selected interface is not a Wirless Lan card!',
+'wlanap none' => 'none',
+'wlanap notifications' => 'Notifications',
+'wlanap select interface' => 'Please select the Wireless Lan interface.',
+'wlanap verbose' => 'Verbose',
+'wlanap warnings' => 'Warnings',
+'wlanap wlan card' => 'WLan Card',
+'wlanap wlan services' => 'Servizio WLan',
+'wlanap wlan settings' => 'Configurazione WLan',
+'wlanap wlan status' => 'Stato WLan',
+'wol wakeup' => 'WakeUp',
+'workgroup' => 'Workgroup',
+'written bytes' => 'Writen Bytes',
+'xtaccess all error' => 'You cannot set an external access to ALL, that is done in the port forwarding record.',
+'xtaccess bad transfert' => 'If you specify a port destination range, the source range must be identical !',
+'year' => 'Anno',
+'year-graph' => 'Anno',
+'yearly firewallhits' => 'yearly firewallhits',
+'yes' => 'Si',
+'you can only define one roadwarrior connection when using pre-shared key authentication' => 'You can only define one Roadwarrior connection when using pre-shared key authentication.<br />Either you already have a Roadwarrior connection with pre-shared key authentication, or you\'re trying to add one now.',
+'your department' => 'Your department',
+'your e-mail' => 'Your e-mail address',
+);
+
+#EOF
index 552ca87e731c8842535b6bf56f75ac15300b08fa..ed59c86b4373a39b012e4541be8074efe51b2a99 100644 (file)
@@ -6,3 +6,4 @@ pl:Polski:Polish
 ru:Русский:Russian
 nl:Nederlands:Dutch
 tr:Türkçe:Turkish
+it:Italiano:Italian
diff --git a/langs/nl/install/lang_nl.c b/langs/nl/install/lang_nl.c
deleted file mode 100644 (file)
index cd43fc5..0000000
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
- * Dutch (nl) Data File
- *
- * This file is part of the IPFire.
- * 
- * IPCop 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.
- * 
- * IPCop 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 IPCop; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- * 
- * (c) IPFire Team  <info@ipfire.org>
- *
- * based on work of SmoothWall and IPCop
- *
- * (c) The SmoothWall Team
- *  
- */
-#include "libsmooth.h"
-
-char *nl_tr[] = {
-
-/* TR_ISDN */
-"ISDN",
-/* TR_ERROR_PROBING_ISDN */
-"Kan ISDN-apparaten niet detecteren.",
-/* TR_PROBING_ISDN */
-"Detecteren en configureren van ISDN-apparaten.",
-/* TR_MISSING_GREEN_IP */
-"Groen IP-adres ontbreekt!",
-/* TR_CHOOSE_FILESYSTEM */
-"Kies uw bestandssysteem:",
-/* TR_NOT_ENOUGH_INTERFACES */
-"Onvoldoende netwerkkaarten voor uw keuze.\n\nNodig: %d - Beschikbaar: %d\n",
-/* TR_INTERFACE_CHANGE */
-"Kies de interface die u wilt wijzigen.\n\n",
-/* TR_NETCARD_COLOR */
-"Toegewezen kaarten",
-/* TR_REMOVE */
-"Verwijder",
-/* TR_MISSING_DNS */
-"DNS ontbreekt.\n",
-/* TR_MISSING_DEFAULT */
-"Standaard gateway ontbreekt.\n",
-/* TR_JOURNAL_EXT3 */
-"Aanmaken journal voor Ext3...",
-/* TR_CHOOSE_NETCARD */
-"Kies een netwerkkaart voor de volgende interface - %s.",
-/* TR_NETCARDMENU2 */
-"Uitgebreide Netwerkmenu",
-/* TR_ERROR_INTERFACES */
-"Er zijn geen vrije interfaces op uw systeem.",
-/* TR_REMOVE_CARD */
-"Moet de toewijzing voor de netwerkkaart worden verwijderd? - %s",
-/* TR_JOURNAL_ERROR */
-"Kon het journaalboek niet aanmaken, valt terug op gebruik van ext2.",
-/* TR_FILESYSTEM */
-"Kies uw bestandssysteem",
-/* TR_ADDRESS_SETTINGS */
-"Adresinstellingen",
-/* TR_ADMIN_PASSWORD */
-"'admin' wachtwoord",
-/* TR_AGAIN_PROMPT */
-"Nogmaals:",
-/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */
-"Alle kaarten zijn succesvol toegewezen.",
-/* TR_AUTODETECT */
-"* AUTOMATISCH DETECTEREN *",
-/* TR_BUILDING_INITRD */
-"Aanmaken ramdisk...",
-/* TR_CANCEL */
-"Annuleren",
-/* TR_CARD_ASSIGNMENT */
-"Kaart toewijzing",
-/* TR_CHECKING */
-"Controleert URL...",
-/* TR_CHECKING_FOR */
-"Controleert voor: %s",
-/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */
-"Kies de ISDN-kaart die geïnstalleerd is op deze computer.",
-/* TR_CHOOSE_THE_ISDN_PROTOCOL */
-"Kies het ISDN-protocol dat u nodig heeft.",
-/* TR_CONFIGURE_DHCP */
-"Configureer de DHCP server door de instellingen in te voeren.",
-/* TR_CONFIGURE_NETWORKING */
-"Configureer het netwerk",
-/* TR_CONFIGURE_NETWORKING_LONG */
-"U moet nu het netwerk configureren door eerst de juiste driver te laden voor de GROENE interface. U kunt dit doen door ofwel automatisch te zoeken naar een netwerkkaart, of door de juiste driver te kiezen uit een lijst. Als u meer dan een kaart in uw machine heeft, dan kunt u die later in het installatieproces configureren. Mocht u meer dan een kaart van hetzelfde type als GROEN gebruiken en iedere kaart vereist speciale moduleparameters, dan moet u de parameters voor alle kaarten van dit type invoeren zodat alle kaarten actief kunnen worden waneer u de GROENE interface configureert.",
-/* TR_CONFIGURE_NETWORK_DRIVERS */
-"Configureer netwerkdrivers en bepaal welke interface iedere kaart krijgt toegewezen.\nDe huidige configuratie is als volgt:\n\n",
-/* TR_CONFIGURE_THE_CDROM */
-"Configureer de CDROM door het juiste IO-adres en/of IRQ te kiezen.",
-/* TR_CONGRATULATIONS */
-"Gefeliciteerd!",
-/* TR_CONGRATULATIONS_LONG */
-"%s is succesvol geïnstalleerd. Verwijder a.u.b. de CDROM's in uw computer. U kunt nu de netwerkkaarten en ISDN configureren en de systeemwachtwoorden instellen. Nadat de setup is afgerond, kunt u met de webbrowser naar https://%s:444 (of hoe u %s ook genoemd heeft) en het inbelnetwerk configureren (als nodig) en de remote toegang.", 
-/* TR_CONTINUE_NO_SWAP */
-"Uw vaste schijf is erg klein, maar u kunt verder gaan met een zeer kleine swap. (Wees hier voorzichtig mee).",
-/* TR_CURRENT_CONFIG */
-"Huidige configuratie: %s%s",
-/* TR_DEFAULT_GATEWAY */
-"Standaard Gateway:",
-/* TR_DEFAULT_GATEWAY_CR */
-"Standaard Gateway\n",
-/* TR_DEFAULT_LEASE */
-"Standaard lease (min.):",
-/* TR_DEFAULT_LEASE_CR */
-"Standaard leasetijd\n",
-/* TR_DETECTED */
-"Gedetecteerd: %s",
-/* TR_DHCP_HOSTNAME */
-"DHCP Hostnaam:",
-/* TR_DHCP_HOSTNAME_CR */
-"DHCP Hostnaam\n",
-/* TR_DHCP_SERVER_CONFIGURATION */
-"DHCP serverconfiguratie",
-/* TR_DISABLED */
-"Uitgeschakeld",
-/* TR_DISABLE_ISDN */
-"ISDN uitschakelen",
-/* TR_DISK_TOO_SMALL */
-"Uw vaste schijf is te klein.",
-/* TR_DNS_AND_GATEWAY_SETTINGS */
-"DNS en Gateway instellingen",
-/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */
-"Voer de DNS en gateway informatie in. Deze instellingen worden alleen gebruikt met statische IP-adressen (en DHCP als DNS is ingesteld) op de RODE interface.",
-/* TR_DNS_GATEWAY_WITH_GREEN */
-"Uw configuratie gebruikt geen ethernetadapter voor z'n RODE interface. DNS en gateway voor inbelgebruikers worden automatisch geconfigureerd tijdens inbellen.",
-/* TR_DOMAINNAME */
-"Domeinnaam",
-/* TR_DOMAINNAME_CANNOT_BE_EMPTY */
-"Domeinnaam mag niet leeg zijn.",
-/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */
-"Domeinnaam mag geen spaties bevatten.",
-/* TR_DOMAINNAME_NOT_VALID_CHARS */
-"Domeinnaam mag alleen letters, getallen, koppeltekens en punten bevatten.",
-/* TR_DOMAIN_NAME_SUFFIX */
-"Domeinnaam toevoeging:",
-/* TR_DOMAIN_NAME_SUFFIX_CR */
-"Domeinnaam toevoeging\n",
-/* TR_DONE */
-"Klaar",
-/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */
-"\nWilt u deze instellingen wijzigen?",
-/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */
-"Drivers en kaarttoewijzingen",
-/* TR_ENABLED */
-"Ingeschakeld",
-/* TR_ENABLE_ISDN */
-"Inschakelen ISDN",
-/* TR_END_ADDRESS */
-"Eindadres:",
-/* TR_END_ADDRESS_CR */
-"Eindadres\n",
-/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */
-"Bepaalde ISDN-kaarten (met name de ISA-kaarten) kunnen extra moduleparameters vereisen voor het instellen van IRQ- en IO-adressen. Als u zo'n ISDN-kaart heeft, voer deze parameters dan hier in. Bijvoorbeeld: \"io=0x280 irq=9\". Deze gegevens worden gebruikt tijdens de kaartdetectie.",
-/* TR_ENTER_ADMIN_PASSWORD */
-"Voer het %s 'admin' wachtwoord in. Dit is de gebruikersnaam die gebruikt wordt om in te loggen op de %s webbeheerpagina's.",
-/* TR_ENTER_DOMAINNAME */
-"Voer de domeinnaam in",
-/* TR_ENTER_HOSTNAME */
-"Voer de machinehostnaam in",
-/* TR_ENTER_IP_ADDRESS_INFO */
-"Voer de IP-adres informatie in",
-/* TR_ENTER_NETWORK_DRIVER */
-"Automatisch detecteren van netwerkkaart is mislukt. Voer de drivernaam en optionele parameters in voor de netwerkkaart.",
-/* TR_ENTER_ROOT_PASSWORD */
-"Voer het 'root' wachtwoord in. Log in als deze gebruiker voor commandoregel toegang.",
-/* TR_ENTER_SETUP_PASSWORD */
-"WORDT VERWIJDERD",
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
-"Voer de IP-adres informatie in voor de %s interface.",
-/* TR_ENTER_THE_LOCAL_MSN */
-"Voer lokaal telefoonnummer in (MSN/EAZ).",
-/* TR_ENTER_URL */
-"Voer het URL-pad in naar de ipcop-<versie>.tgz en images/scsidrv-<versie>.img bestanden. WAARSCHUWING: DNS is niet beschikbaar! Dit zou http://X.X.X.X/<directory> moeten zijn",
-/* TR_ERROR */
-"Fout",
-/* TR_ERROR_PROBING_CDROM */
-"Geen CDROM-speler gevonden.",
-/* TR_ERROR_WRITING_CONFIG */
-"Fout bij wegschrijven van configuratie informatie.",
-/* TR_EURO_EDSS1 */
-"Euro (EDSS1)",
-/* TR_EXTRACTING_MODULES */
-"Uitpakken modules...",
-/* TR_FAILED_TO_FIND */
-"URL-bestand niet gevonden.",
-/* TR_FOUND_NIC */
-"%s heeft de volgende NIC in uw machine gedetecteerd: %s",
-/* TR_GERMAN_1TR6 */
-"German 1TR6",
-/* TR_HELPLINE */
-"        <Tab>/<Alt-Tab> schakel tussen elementen   |  <Spatie> selecteer",
-/* TR_HOSTNAME */
-"Hostnaam",
-/* TR_HOSTNAME_CANNOT_BE_EMPTY */
-"Hostnaam mag niet leeg zijn.",
-/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */
-"Hostnaam mag geen spaties bevatten.",
-/* TR_HOSTNAME_NOT_VALID_CHARS */
-"Hostnaam mag alleen letters, getallen en koppeltekens bevatten.",
-/* TR_INITIALISING_ISDN */
-"Initialiseert ISDN...",
-/* TR_INSERT_CDROM */
-"Plaats de %s CD in the CDROM-speler a.u.b.",
-/* TR_INSERT_FLOPPY */
-"Plaats de %s driver-diskette in het station a.u.b.",
-/* TR_INSTALLATION_CANCELED */
-"Installatie afgebroken.",
-/* TR_INSTALLING_FILES */
-"Installeert bestanden...",
-/* TR_INSTALLING_GRUB */
-"Installeert GRUB...",
-/* TR_INSTALLING_LANG_CACHE */
-"Installeert taalbestanden...",
-/* TR_INTERFACE */
-"Interface - %s",
-/* TR_INTERFACE_FAILED_TO_COME_UP */
-"Interface kwam niet op.",
-/* TR_INVALID_FIELDS */
-"De volgende velden zijn ongeldig:\n\n",
-/* TR_INVALID_IO */
-"De ingevoerde IO-poortgegevens zijn ongeldig. ",
-/* TR_INVALID_IRQ */
-"De ingevoerde IRQ gegevens zijn ongeldig.",
-/* TR_IP_ADDRESS_CR */
-"IP-adres\n",
-/* TR_IP_ADDRESS_PROMPT */
-"IP-adres:",
-/* TR_ISDN_CARD */
-"ISDN-kaart",
-/* TR_ISDN_CARD_NOT_DETECTED */
-"ISDN-kaart niet gedetecteerd. Mogelijk dient u extra moduleparameters op te geven als het een ISA type betreft of heeft het speciale eisen.",
-/* TR_ISDN_CARD_SELECTION */
-"ISDN kaartselectie",
-/* TR_ISDN_CONFIGURATION */
-"ISDN configuratie",
-/* TR_ISDN_CONFIGURATION_MENU */
-"ISDN configuratiemenu",
-/* TR_ISDN_NOT_SETUP */
-"ISDN niet ingesteld. Sommige items zijn niet geselecteerd.",
-/* TR_ISDN_NOT_YET_CONFIGURED */
-"ISDN is nog niet geconfigureerd. Selecteer het item dat u wilt configureren.",
-/* TR_ISDN_PROTOCOL_SELECTION */
-"ISDN protocolselectie",
-/* TR_ISDN_STATUS */
-"ISDN is momenteel %s.\n\n   Protocol: %s\n   Kaart: %s\n   Lokaal telefoonnummer: %s\n\nSelecteer het item dat u wilt herconfigureren, of kies voor de huidige instellingen.",
-/* TR_KEYBOARD_MAPPING */
-"Toetsenbordindeling",
-/* TR_KEYBOARD_MAPPING_LONG */
-"Kies het type toetsenbord dat u gebruikt uit de lijst hieronder.",
-/* TR_LEASED_LINE */
-"Vaste verbinding",
-/* TR_LOADING_MODULE */
-"Laadt module...",
-/* TR_LOADING_PCMCIA */
-"Laadt PCMCIA modules...",
-/* TR_LOOKING_FOR_NIC */
-"Zoekt naar: %s",
-/* TR_MAKING_BOOT_FILESYSTEM */
-"Aanmaken boot bestandssysteem...",
-/* TR_MAKING_LOG_FILESYSTEM */
-"Aanmaken log bestandssysteem...",
-/* TR_MAKING_ROOT_FILESYSTEM */
-"Aanmaken root bestandssysteem...",
-/* TR_MAKING_SWAPSPACE */
-"Aanmaken swap...",
-/* TR_MANUAL */
-"* HANDMATIG *",
-/* TR_MAX_LEASE */
-"Max. lease (min.):",
-/* TR_MAX_LEASE_CR */
-"Max. leasetijd\n",
-/* TR_MISSING_BLUE_IP */
-"Ontbrekende IP-informatie op de BLAUWE interface.",
-/* TR_MISSING_ORANGE_IP */
-"Ontbrekende IP-informatie op de ORANJE interface.",
-/* TR_MISSING_RED_IP */
-"Ontbrekende IP-informatie op de RODE interface.",
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */
-"Modulenaam mag niet leeg zijn.",
-/* TR_MODULE_PARAMETERS */
-"Voer de modulenaam en parameters in voor de driver die u nodig hebt.",
-/* TR_MOUNTING_BOOT_FILESYSTEM */
-"Koppelen van het boot bestandssysteem...",
-/* TR_MOUNTING_LOG_FILESYSTEM */
-"Koppelen van het log bestandssysteem...",
-/* TR_MOUNTING_ROOT_FILESYSTEM */
-"Koppelen van het root bestandssysteem...",
-/* TR_MOUNTING_SWAP_PARTITION */
-"Koppelen van de swap partitie...",
-/* TR_MSN_CONFIGURATION */
-"Lokaal telefoonnummer (MSN/EAZ)",
-/* TR_NETMASK_PROMPT */
-"Netwerkmasker:",
-/* TR_NETWORKING */
-"Netwerk",
-/* TR_NETWORK_ADDRESS_CR */
-"Netwerkadres\n",
-/* TR_NETWORK_ADDRESS_PROMPT */
-"Netwerkadres:",
-/* TR_NETWORK_CONFIGURATION_MENU */
-"Netwerk configuratiemenu",
-/* TR_NETWORK_CONFIGURATION_TYPE */
-"Netwerk configuratietype",
-/* TR_NETWORK_CONFIGURATION_TYPE_LONG */
-"Selecteer de netwerkconfiguratie voor %s. De volgende configuratiesoorten vermelden welke interfaces op ethernet aangesloten zijn. Als u deze instellingen wijzigt, dan is een netwerk herstart nodig en u moet de netwerkdriver toewijzingen opnieuw maken.",
-/* TR_NETWORK_MASK_CR */
-"Netwerkmasker\n",
-/* TR_NETWORK_SETUP_FAILED */
-"Netwerkinstelling mislukt.",
-/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */
-"Er zijn onvoldoende kaarten toegewezen.",
-/* TR_NO_BLUE_INTERFACE */
-"Er is geen BLAUWE interface toegewezen.",
-/* TR_NO_CDROM */
-"Geen CD-ROM gevonden.",
-/* TR_NO_GREEN_INTERFACE */
-"Er is geen GROENE interface toegewezen.",
-/* TR_NO_HARDDISK */
-"Geen vaste schijf gevonden.",
-/* TR_NO_IPCOP_TARBALL_FOUND */
-"Er is geen ipcop tarball gevonden op de webserver.",
-/* TR_NO_ORANGE_INTERFACE */
-"Er is geen ORANJE interface toegewezen.",
-/* TR_NO_RED_INTERFACE */
-"Er is geen RODE interface toegewezen.",
-/* TR_NO_SCSI_IMAGE_FOUND */
-"Er is geen SCSI image gevonden op de webserver.",
-/* TR_NO_UNALLOCATED_CARDS */
-"Er zijn geen vrije kaarten over, er zijn er meer vereist. U kunt automatisch detecteren proberen en op zoek gaan naar meer kaarten, of u kiest een driver uit de lijst.",
-/* TR_OK */
-"Ok",
-/* TR_PARTITIONING_DISK */
-"Partitioneert schijf...",
-/* TR_PASSWORDS_DO_NOT_MATCH */
-"Wachtwoorden komen niet overeen.",
-/* TR_PASSWORD_CANNOT_BE_BLANK */
-"Wachtwoord mag niet leeg zijn.",
-/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */
-"Wachtwoord mag geen spaties bevatten.",
-/* TR_PASSWORD_PROMPT */
-"Wachtwoord:",
-/* TR_PHONENUMBER_CANNOT_BE_EMPTY */
-"Telefoonnummer mag niet leeg zijn.",
-/* TR_PREPARE_HARDDISK */
-"Het installatieprogramma zal nu de vaste schijf voorbereiden op %s. Eerst wordt de schijf gepartitioneerd, daarna zullen de bestandssystemen erop worden gezet.\n\nALLE DATA OP DE SCHIJF ZAL WORDEN GEWIST. Wilt u hiermee doorgaan?",
-/* TR_PRESS_OK_TO_REBOOT */
-"Druk Ok om te herstarten.",
-/* TR_PRIMARY_DNS */
-"Primaire DNS:",
-/* TR_PRIMARY_DNS_CR */
-"Primaire DNS\n",
-/* TR_PROBE */
-"Opsporen",
-/* TR_PROBE_FAILED */
-"Automatisch detecteren mislukt.",
-/* TR_PROBING_HARDWARE */
-"Opsporen van hardware...",
-/* TR_PROBING_FOR_NICS */
-"Zoeken naar NIC's...",
-/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */
-"Er is een probleem met het instellen van %s 'admin' gebruikerswachtwoord.",
-/* TR_PROBLEM_SETTING_ROOT_PASSWORD */
-"Er is een probleem met het instellen van %s 'root' gebruikerswachtwoord.",
-/* TR_PROBLEM_SETTING_SETUP_PASSWORD */
-"WORDT VERWIJDERD",
-/* TR_PROTOCOL_COUNTRY */
-"Protocol/Land",
-/* TR_PULLING_NETWORK_UP */
-"Netwerk opbrengen...",
-/* TR_PUSHING_NETWORK_DOWN */
-"Netwerk stoppen...",
-/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */
-"Niet-lokaal netwerk stoppen...",
-/* TR_QUIT */
-"Stoppen",
-/* TR_RED_IN_USE */
-"ISDN (of een andere externe verbinding) is momenteel in gebruik. U kunt ISDN niet configureren zolang de RODE interface actief is.",
-/* TR_RESTART_REQUIRED */
-"\n\nAls de configuratie gereed is moet het netwerk herstart worden.",
-/* TR_RESTORE */
-"Terugzetten",
-/* TR_RESTORE_CONFIGURATION */
-"Als u een diskette heeft met een %s systeemconfiguratie daarop, plaats dan de diskette in het station en druk op de terugzetten-knop.",
-/* TR_ROOT_PASSWORD */
-"'root' wachtwoord",
-/* TR_SECONDARY_DNS */
-"Secundaire DNS:",
-/* TR_SECONDARY_DNS_CR */
-"Secundaire DNS\n",
-/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */
-"Secundaire DNS opgegeven zonder een primaire DNS",
-/* TR_SECTION_MENU */
-"Sectiemenu",
-/* TR_SELECT */
-"Selecteer",
-/* TR_SELECT_CDROM_TYPE */
-"Selecteer CDROM type",
-/* TR_SELECT_CDROM_TYPE_LONG */
-"Er is geen CD-ROM gedetecteerd in deze machine. Maak een keuze uit de volgende drivers waarmee %s de CD-ROM kan benaderen.",
-/* TR_SELECT_INSTALLATION_MEDIA */
-"Selecteer installatiemedium",
-/* TR_SELECT_INSTALLATION_MEDIA_LONG */
-"%s kan worden geïnstalleerd vanuit verschillende bronnen. De eenvoudigste manier is om de CDROM-speler van de machine te gebruiken. Als de computer geen CDROM-speler heeft, dan kunt vanaf een andere machine installeren die de installatiebestanden beschikbaar kan maken over het netwerk via HTTP of FTP.",
-/* TR_SELECT_NETWORK_DRIVER */
-"Selecteer netwerkdriver",
-/* TR_SELECT_NETWORK_DRIVER_LONG */
-"Selecteer de netwerkdriver voor de aanwezige kaart in deze machine. Als u HANDMATIG selecteert, krijgt u de mogelijkheid om de driver modulenaam en parameters op te geven voor drivers met speciale eisen, zoals voor ISA-kaarten.",
-/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */
-"Selecteer de interface die u wilt herconfigureren.",
-/* TR_SELECT_THE_ITEM */
-"Selecteer het item dat u wilt configureren.",
-/* TR_SETTING_ADMIN_PASSWORD */
-"Instellen van %s 'admin' gebruikerswachtwoord...",
-/* TR_SETTING_ROOT_PASSWORD */
-"Instellen van 'root' wachtwoord....",
-/* TR_SETTING_SETUP_PASSWORD */
-"WORDT VERWIJDERD",
-/* TR_SETUP_FINISHED */
-"Setup is afgerond. Druk Ok.",
-/* TR_SETUP_NOT_COMPLETE */
-"Initiële setup was niet volledig afgerond. Verzeker u ervan dat de setup goed is afgerond door het setup programma nogmaals vanaf de commandoregel te starten.",
-/* TR_SETUP_PASSWORD */
-"WORDT VERWIJDERD",
-/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */
-"Instellen additionele moduleparameters",
-/* TR_SINGLE_GREEN */
-"Uw configuratie is ingesteld voor een enkele GROENE interface.",
-/* TR_SKIP */
-"Overslaan",
-/* TR_START_ADDRESS */
-"Beginadres:",
-/* TR_START_ADDRESS_CR */
-"Beginadres\n",
-/* TR_STATIC */
-"Statisch",
-/* TR_SUGGEST_IO */
-"(voorstel %x)",
-/* TR_SUGGEST_IRQ */
-"(voorstel %d)",
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
-"Deze drivermodule is al geladen.",
-/* TR_TIMEZONE */
-"Tijdzone",
-/* TR_TIMEZONE_LONG */
-"Kies de tijdzone waar u zich bevindt uit de lijst hieronder.",
-/* TR_UNABLE_TO_EJECT_CDROM */
-"Kan de CDROM niet uitwerpen.",
-/* TR_UNABLE_TO_EXTRACT_MODULES */
-"Kan de modules niet uitpakken.",
-/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */
-"Kan geen additionele drivers vinden.",
-/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */
-"Kan geen ISDN-kaart vinden in deze computer. U kunt extra module parameters opgeven als het een ISA-kaart betreft of als het speciale eisen heeft.",
-/* TR_UNABLE_TO_INITIALISE_ISDN */
-"Kan de ISDN-kaart niet initialiseren.",
-/* TR_UNABLE_TO_INSTALL_FILES */
-"Kan de bestanden niet installeren.",
-/* TR_UNABLE_TO_INSTALL_LANG_CACHE */
-"Kan de taalbestanden niet installeren.",
-/* TR_UNABLE_TO_INSTALL_GRUB */
-"Kan GRUB niet installeren.",
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
-"Kan de drivermodule niet laden.",
-/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */
-"Kan het boot bestandssysteem niet aanmaken.",
-/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */
-"Kan het log bestandssysteem niet aanmaken.",
-/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */
-"Kan het root bestandssysteem niet aanmaken.",
-/* TR_UNABLE_TO_MAKE_SWAPSPACE */
-"Kan het swap bestandssysteem niet aanmaken.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */
-"Kan de symlink /dev/harddisk niet aanmaken.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */
-"Kan de symlink /dev/harddisk1 niet aanmaken.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */
-"Kan de symlink /dev/harddisk2 niet aanmaken.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */
-"Kan de symlink /dev/harddisk3 niet aanmaken.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */
-"Kan de symlink /dev/harddisk4 niet aanmaken.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */
-"Kan de symlink /dev/root niet aanmaken.",
-/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */
-"Kan het boot bestandssysteem niet koppelen.",
-/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */
-"Kan het log bestandssysteem niet koppelen.",
-/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */
-"Kan het proc bestandssysteem niet koppelen.",
-/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */
-"Kan het root bestandssysteem niet koppelen.",
-/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */
-"Kan de swap partitie niet koppelen.",
-/* TR_UNABLE_TO_OPEN_HOSTS_FILE */
-"Kan het hosts-bestand niet openen.",
-/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */
-"Kan het instellingenbestand niet openen",
-/* TR_UNABLE_TO_PARTITION */
-"Kan de schijf niet partitioneren.",
-/* TR_UNABLE_TO_REMOVE_TEMP_FILES */
-"Kan de tijdelijke gedownloade bestanden niet verwijderen.",
-/* TR_UNABLE_TO_SET_HOSTNAME */
-"Kan de hostnaam niet instellen.",
-/* TR_UNABLE_TO_UNMOUNT_CDROM */
-"Kan het CDROM-/diskettestation niet ontkoppelen.",
-/* TR_UNABLE_TO_UNMOUNT_HARDDISK */
-"Kan de vaste schijf niet ontkoppelen.",
-/* TR_UNABLE_TO_WRITE_ETC_FSTAB */
-"Kan /etc/fstab niet wegschrijven",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */
-"Kan /etc/hostname niet wegschrijven",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS */
-"Kan /etc/hosts niet wegschrijven.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */
-"Kan /etc/hosts.allow niet wegschrijven.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */
-"Kan /etc/hosts.deny niet wegschrijven.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */
-"Kan %s/ethernet/settings niet wegschrijven.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */
-"Kan %s/main/hostname.conf niet wegschrijven.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */
-"Kan %s/main/settings niet wegschrijven.",
-/* TR_UNCLAIMED_DRIVER */
-"Er is een ongebruikte ethernetkaart van het type:\n%s\n\nU kunt deze toewijzen aan:",
-/* TR_UNKNOWN */
-"ONBEKEND",
-/* TR_UNSET */
-"NIET INGESTELD",
-/* TR_USB_KEY_VFAT_ERR */
-"Deze USB-sleutel is ongeldig (geen vfat partitie gevonden).",
-/* TR_US_NI1 */
-"US NI1",
-/* TR_WARNING */
-"WAARSCHUWING",
-/* TR_WARNING_LONG */
-"Als u dit IP-adres wijzigt, en u bent op afstand ingelogd, dan zal de verbinding naar de %s machine worden verbroken en u zult opnieuw moeten verbinden naar het nieuwe IP-adres. Dit is een riskante handeling en moet alleen geprobeerd worden als u fysieke toegang tot de machine hebt, in het geval er iets fout gaat.",
-/* TR_WELCOME */
-"Welkom bij het %s installatieprogramma. Als u 'annuleren' kiest op een van de volgende schermen selecteert zal de computer herstarten.",
-/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */
-"Uw configuratie is ingesteld voor een enkele GROENE interface, welke al een driver toegewezen heeft.",
-/* TR_YES */
-"Ja",
-/* TR_NO */
-"Nee",
-/* TR_AS */
-"als",
-/* TR_IGNORE */
-"Negeer",
-/* TR_PPP_DIALUP */
-"PPP DIALUP (PPPoE, modem, ATM ...)",
-/* TR_DHCP */
-"DHCP",
-/* TR_DHCP_STARTSERVER */
-"Start DHCP-server ...",
-/* TR_DHCP_STOPSERVER */
-"Stopt DHCP-server ...",
-/* TR_LICENSE_ACCEPT */
-"Ik accepteer deze licentie.",
-/* TR_LICENSE_NOT_ACCEPTED */
-"Licentie niet geaccepteerd. Stopt!",
-/* TR_EXT2FS_DESCR */
-"Ext2 - Bestandssysteem zonder journal (geschikt voor flashdrives)",
-/* TR_EXT3FS_DESCR */
-"Ext3 - Bestandssysteem met journal",
-/* TR_EXT4FS_DESCR */
-"Ext4 - Bestandssysteem met journal",
-/* TR_REISERFS_DESCR */
-"ReiserFS - Bestandssysteem met journal",
-/* TR_NO_LOCAL_SOURCE */
-"Geen lokale bronmedia gevonden. Start download.",
-/* TR_DOWNLOADING_ISO */
-"Downloaden van installatie-image ...",
-/* TR_DOWNLOAD_ERROR */
-"Fout tijdens downloaden!",
-/* TR_DHCP_FORCE_MTU */
-"Forceer DHCP mtu:",
-/* TR_IDENTIFY */
-"Identificeer",
-/* TR_IDENTIFY_SHOULD_BLINK */
-"Geselecteerde poort zou nu moeten knipperen ...",
-/* TR_IDENTIFY_NOT_SUPPORTED */
-"Functie wordt niet ondersteund door deze poort.",
-};
diff --git a/langs/pl/install/lang_pl.c b/langs/pl/install/lang_pl.c
deleted file mode 100644 (file)
index dddf551..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- * Polish (pl) Data File
- *
- * This file is part of the IPFire.
- * 
- * IPCop 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.
- * 
- * IPCop 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 IPCop; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- * 
- * (c) IPFire Team  <info@ipfire.org>
- *
- */
-#include "libsmooth.h"
-
-char *pl_tr[] = {
-
-/* TR_ISDN */
-"ISDN",
-/* TR_ERROR_PROBING_ISDN */
-"Nie można przeprowadzić wyszukiwania urządzeń ISDN.",
-/* TR_PROBING_ISDN */
-"Wyszukiwanie i konfiguracja urządzeń ISDN.",
-/* TR_MISSING_GREEN_IP */
-"Brak adresu IP interfejsu Green!",
-/* TR_CHOOSE_FILESYSTEM */
-"Proszę wybrać system plików:",
-/* TR_NOT_ENOUGH_INTERFACES */
-"Brak wystarczającej liczby urządzeń sieciowych.\n\nPotrzebne: %d - Dostępne: %d\n",
-/* TR_INTERFACE_CHANGE */
-"Proszę wybrać interfejs dla którego chcesz wprowadzić zmiany.\n\n",
-/* TR_NETCARD_COLOR */
-"Przypisane karty",
-/* TR_REMOVE */
-"Usuń",
-/* TR_MISSING_DNS */
-"Brakujący DNS.\n",
-/* TR_MISSING_DEFAULT */
-"Brak bramy domyślnej.\n",
-/* TR_JOURNAL_EXT3 */
-"Tworzenie dziennika dla Ext3...",
-/* TR_CHOOSE_NETCARD */
-"Proszę wybrać urządzenie sieciowe dla interfejsu - %s.",
-/* TR_NETCARDMENU2 */
-"Rozszerzone menu sieci",
-/* TR_ERROR_INTERFACES */
-"W twoim systemie nie ma wolnych interfejsów.",
-/* TR_REMOVE_CARD */
-"Czy usunąć przydział dla tej karty sieciowej? - %s",
-/* TR_JOURNAL_ERROR */
-"Nie można utworzyć dziennika, nastąpi powrót do ext2.",
-/* TR_FILESYSTEM */
-"Wybierz system plików",
-/* TR_ADDRESS_SETTINGS */
-"Ustawienia adresów",
-/* TR_ADMIN_PASSWORD */
-"hasło 'admina' ",
-/* TR_AGAIN_PROMPT */
-"Powtórz:",
-/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */
-"Wszystkie karty przypisano poprawnie.",
-/* TR_AUTODETECT */
-"* AUTODETECT *",
-/* TR_BUILDING_INITRD */
-"Tworzenie ramdisk...",
-/* TR_CANCEL */
-"Anuluj",
-/* TR_CARD_ASSIGNMENT */
-"Przypisywanie kart",
-/* TR_CHECKING */
-"Sprawdzanie URL...",
-/* TR_CHECKING_FOR */
-"Sprawdzanie dla: %s",
-/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */
-"Wybierz kartę ISDN zainstalowaną w tym komputerze.",
-/* TR_CHOOSE_THE_ISDN_PROTOCOL */
-"Wybierz wymagany protokół ISDN.",
-/* TR_CONFIGURE_DHCP */
-"Skonfiguruj serwer DHCP wprowadzając odpowiednie ustawienia.",
-/* TR_CONFIGURE_NETWORKING */
-"Konfiguruj sieć",
-/* TR_CONFIGURE_NETWORKING_LONG */
-"Teraz powinieneś skonfigurować sieć poprzez załadowanie odpowiedniego sterownika dla interfejsu GREEN. Możesz skorzystać z automatycznego wykrywania kart sieciowych lub wybrać odpowiedni sterownik z listy. Pamiętaj - jeżeli posiadasz zainstalowaną więcej niż jedną kartę sieciową ich konfigurację będzie można przeprowadzić w dalszej części procesu instalacji. Pamiętaj także, że jeżeli posiadasz więcej niż jedną kartę sieciową takiego samego typu jak GREEN i każda z nich wymaga specjalnych parametrów modułu należy wprowadzić parametry dla wszystkich kart tego typu tak aby możliwe było aktywowanie interfejsu GREEN po jego konfiguracji.",
-/* TR_CONFIGURE_NETWORK_DRIVERS */
-"Konfiguracja sterowników oraz przydział kart sieciowych do interfejsów. Aktualna konfiguracja wygląda następująco:\n\n",
-/* TR_CONFIGURE_THE_CDROM */
-"Skonfiguruj CDROM wybierając odpowiedni adres IO i/lub IRQ.",
-/* TR_CONGRATULATIONS */
-"Gratulacje!",
-/* TR_CONGRATULATIONS_LONG */
-"%s został prawidłowo zainstalowany. Proszę usunąć płytę CD z komputera. Uruchomiony zostanie program konfiguracyjny umożliwiający ustawienie połączenia ISDN, kart sieciowych oraz haseł. Po wprowadzeniu ustawień powinieneś otworzyć w przeglądare adres https://%s:444 (lub wprowadzoną nazwę %s) aby przejść do panelu zarządzania systemem.",
-/* TR_CONTINUE_NO_SWAP */
-"Twój dysk twardy jest bardzo mały. Możesz kontynuować, ale utworzona zostanie bardzo mała przestrzeń swap. (Używaj ostrożnie).",
-/* TR_CURRENT_CONFIG */
-"Aktualna konfiguracja: %s%s",
-/* TR_DEFAULT_GATEWAY */
-"Brama domyślna:",
-/* TR_DEFAULT_GATEWAY_CR */
-"Brama domyślna\n",
-/* TR_DEFAULT_LEASE */
-"Domyślny czas dzierżawy (minut):",
-/* TR_DEFAULT_LEASE_CR */
-"Domyślny czas dzierżawy\n",
-/* TR_DETECTED */
-"Wykryto: %s",
-/* TR_DHCP_HOSTNAME */
-"Nazwa hosta DHCP:",
-/* TR_DHCP_HOSTNAME_CR */
-"Nazwa hosta DHCP\n",
-/* TR_DHCP_SERVER_CONFIGURATION */
-"Konfiguracja serwera DHCP",
-/* TR_DISABLED */
-"Wyłączone",
-/* TR_DISABLE_ISDN */
-"Wyłącz ISDN",
-/* TR_DISK_TOO_SMALL */
-"Twój dysk jest za mały.",
-/* TR_DNS_AND_GATEWAY_SETTINGS */
-"Ustawienia DNS i bramy",
-/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */
-"Wprowadź informacje o DNS i bramie. Te ustawienie są używane tylko dla statycznego IP (i DHCP jeżeli ustawiono DNS) na interfejsie RED.",
-/* TR_DNS_GATEWAY_WITH_GREEN */
-"Twoja konfiguracja nie wykorzystuje karty ethernet jako interfejsu RED.  Informacje o DNS i bramie są wprowadzane automatycznie dla połączeń typu dialup przy połączeniu.",
-/* TR_DOMAINNAME */
-"Nazwa domeny",
-/* TR_DOMAINNAME_CANNOT_BE_EMPTY */
-"Nazwa domeny nie może być pusta.",
-/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */
-"Nazwa domeny nie może zawierać spacji.",
-/* TR_DOMAINNAME_NOT_VALID_CHARS */
-"Domain name may only contain letters, numbers, hyphens and periods.",
-/* TR_DOMAIN_NAME_SUFFIX */
-"Sufix nazwy domeny:",
-/* TR_DOMAIN_NAME_SUFFIX_CR */
-"Sufix nazwy domeny\n",
-/* TR_DONE */
-"Gotowe",
-/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */
-"\nCzy chcesz zmienić te ustawienia?",
-/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */
-"Przypisywanie sterowników i kart",
-/* TR_ENABLED */
-"Włączone",
-/* TR_ENABLE_ISDN */
-"Włącz ISDN",
-/* TR_END_ADDRESS */
-"Adres końcowy:",
-/* TR_END_ADDRESS_CR */
-"Adres końcowy\n",
-/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */
-"Niektóre karty ISDN (w szczególności ISA) mogą wymagać dodatkowych parametrów modułu w celu ustawienia IRQ i adresu IO. Jeżeli posiadasz tego typu kartę wprowadź te dodatkowe parametry tutaj. Na przykład: \"io=0x280 irq=9\". Zostaną one użyte podczas wykrywania kart.",
-/* TR_ENTER_ADMIN_PASSWORD */
-"Podaj hasło użytkownika 'admin' dla %s .  Jest to użytkownik na którego będziesz logował się do interfejsu WWW aby zarządzać %s .",
-/* TR_ENTER_DOMAINNAME */
-"Wprowadź nazwę domeny",
-/* TR_ENTER_HOSTNAME */
-"Podaj nazwę hosta dla maszyny.",
-/* TR_ENTER_IP_ADDRESS_INFO */
-"Wprowadź informacje o adresie IP",
-/* TR_ENTER_NETWORK_DRIVER */
-"Nie można wykryć kart sieciowych automatycznie. Wprowadź sterownik oraz dodatkowe parametry dla karty sieciowej.",
-/* TR_ENTER_ROOT_PASSWORD */
-"Podaj hasło użytkownika 'root' . Jest to użytkownik wykorzystywany do logowania do linii poleceń.",
-/* TR_ENTER_SETUP_PASSWORD */
-"TO BE REMOVED",
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
-"Wprowadź informacje o adresie IP dla interfejsu %s .",
-/* TR_ENTER_THE_LOCAL_MSN */
-"Wprowadź lokalny numer telefonu (MSN/EAZ).",
-/* TR_ENTER_URL */
-"Wprowadź adres URL do ipcop-<version>.tgz i plików images/scsidrv-<version>.img . UWAGA: DNS niedostępny! URL powinien wyglądać następująco http://X.X.X.X/<katalog>",
-/* TR_ERROR */
-"Błąd",
-/* TR_ERROR_PROBING_CDROM */
-"Nie znaleziono napędu CDROM.",
-/* TR_ERROR_WRITING_CONFIG */
-"Błąd zapisywania informacji o konfiguracji.",
-/* TR_EURO_EDSS1 */
-"Euro (EDSS1)",
-/* TR_EXTRACTING_MODULES */
-"Wypakowywanie modułów...",
-/* TR_FAILED_TO_FIND */
-"Nie można odnaleźć pliku URL.",
-/* TR_FOUND_NIC */
-"%s wykrył następujące urządzenia NIC w twojej maszynie: %s",
-/* TR_GERMAN_1TR6 */
-"German 1TR6",
-/* TR_HELPLINE */
-"              <Tab>/<Alt-Tab> pomiędzy pozycjami   |  <Space> wybór",
-/* TR_HOSTNAME */
-"Nazwa hosta",
-/* TR_HOSTNAME_CANNOT_BE_EMPTY */
-"Nazwa hosta nie może być pusta.",
-/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */
-"Nazwa hosta nie może zawierać spacji.",
-/* TR_HOSTNAME_NOT_VALID_CHARS */
-"Nazwa hosta może zawierać tylko listery, cyfry i łączniki.",
-/* TR_INITIALISING_ISDN */
-"Inicjalizacja ISDN...",
-/* TR_INSERT_CDROM */
-"Proszę włożyć %s CD do napędu CDROM.",
-/* TR_INSERT_FLOPPY */
-"Proszę włożyć dyskietkę ze sterownikami %s do napędu.",
-/* TR_INSTALLATION_CANCELED */
-"Instalacja anulowana.",
-/* TR_INSTALLING_FILES */
-"Instalowanie plików...",
-/* TR_INSTALLING_GRUB */
-"Instalowanie GRUB...",
-/* TR_INSTALLING_LANG_CACHE */
-"Instalowanie plików językowych...",
-/* TR_INTERFACE */
-"Interfejs - %s",
-/* TR_INTERFACE_FAILED_TO_COME_UP */
-"Nie można uruchomić interfejsu.",
-/* TR_INVALID_FIELDS */
-"Poniższe pola są niepoprawne:\n\n",
-/* TR_INVALID_IO */
-"Szczegóły portu IO są nieprawidłowe. ",
-/* TR_INVALID_IRQ */
-"Wprowadzone dane IRQ są niepoprawne.",
-/* TR_IP_ADDRESS_CR */
-"Adres IP\n",
-/* TR_IP_ADDRESS_PROMPT */
-"Adres IP:",
-/* TR_ISDN_CARD */
-"Karta ISDN",
-/* TR_ISDN_CARD_NOT_DETECTED */
-"Nie wykryto karty ISDN. Możesz wprowadzić dodatkowe parametry modułu jeżeli posiadasz kartę ISA lub twoja karta ma specyficzne wymagania.",
-/* TR_ISDN_CARD_SELECTION */
-"Wybór karty ISDN",
-/* TR_ISDN_CONFIGURATION */
-"Konfiguracja ISDN",
-/* TR_ISDN_CONFIGURATION_MENU */
-"Menu konfiguracji ISDN",
-/* TR_ISDN_NOT_SETUP */
-"Nie skonfigurowano ISDN. Pewne pozycje nie zostały wybrane.",
-/* TR_ISDN_NOT_YET_CONFIGURED */
-"ISDN nie został jeszcze skonfigurowany. Wybierz tą pozycję aby skonfigurować.",
-/* TR_ISDN_PROTOCOL_SELECTION */
-"Wybór protokołu ISDN",
-/* TR_ISDN_STATUS */
-"ISDN jest obecnie %s.\n\n   Protokół: %s\n   Karta: %s\n   Lokalny numer telefonu: %s\n\nWybierz pozycję którą chcesz zmienić lub pozostaw obecną konfigurację.",
-/* TR_KEYBOARD_MAPPING */
-"Układ klawiatury",
-/* TR_KEYBOARD_MAPPING_LONG */
-"Z poniższej listy wybierz układ klawiatury którego chcesz używać.",
-/* TR_LEASED_LINE */
-"Linia dzierżawiona",
-/* TR_LOADING_MODULE */
-"Ładowanie modułu...",
-/* TR_LOADING_PCMCIA */
-"Ładowanie modułów PCMCIA...",
-/* TR_LOOKING_FOR_NIC */
-"Wyszukiwanie: %s",
-/* TR_MAKING_BOOT_FILESYSTEM */
-"Tworzenie systemu plików boot...",
-/* TR_MAKING_LOG_FILESYSTEM */
-"Tworzenie systemu plików log...",
-/* TR_MAKING_ROOT_FILESYSTEM */
-"Tworzenie systemu plików root...",
-/* TR_MAKING_SWAPSPACE */
-"Tworzenie przestrzeni swap...",
-/* TR_MANUAL */
-"* RĘCZNIE *",
-/* TR_MAX_LEASE */
-"Maks czas dzierżawy (minut):",
-/* TR_MAX_LEASE_CR */
-"Maks czas dzierżawy\n",
-/* TR_MISSING_BLUE_IP */
-"Brak informacji o IP dla interfejsu BLUE.",
-/* TR_MISSING_ORANGE_IP */
-"Brak informacji o IP dla interfejsu ORANGE.",
-/* TR_MISSING_RED_IP */
-"Brak informacji o IP dla interfejsu RED.",
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */
-"Nazwa modułu nie może być pusta.",
-/* TR_MODULE_PARAMETERS */
-"Wprowadź nazwę modułu i parametry dla sterownika.",
-/* TR_MOUNTING_BOOT_FILESYSTEM */
-"Montowanie systemu plików boot...",
-/* TR_MOUNTING_LOG_FILESYSTEM */
-"Montowanie systemu plików log...",
-/* TR_MOUNTING_ROOT_FILESYSTEM */
-"Montowanie systemu plików root...",
-/* TR_MOUNTING_SWAP_PARTITION */
-"Montowanie przestrzeni wymiany swap...",
-/* TR_MSN_CONFIGURATION */
-"Lokalny numer telefonu (MSN/EAZ)",
-/* TR_NETMASK_PROMPT */
-"Maska sieci:",
-/* TR_NETWORKING */
-"Sieć",
-/* TR_NETWORK_ADDRESS_CR */
-"Adres sieci\n",
-/* TR_NETWORK_ADDRESS_PROMPT */
-"Adres sieci:",
-/* TR_NETWORK_CONFIGURATION_MENU */
-"Menu konfiguracji sieci",
-/* TR_NETWORK_CONFIGURATION_TYPE */
-"Typ konfiguracji sieci",
-/* TR_NETWORK_CONFIGURATION_TYPE_LONG */
-"Wybierz typ konfiguracji sieci dla %s.  Poniższe typy konfiguracji uwzględniają podłączone interfejsy typu ethernet. Jeżeli zmienisz te ustawienia sieć zostanie uruchomiona ponownie i koniecznie będzie ponowne przypisanie sterowników kart.",
-/* TR_NETWORK_MASK_CR */
-"Maska sieci\n",
-/* TR_NETWORK_SETUP_FAILED */
-"Błąd konfiguracji sieci.",
-/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */
-"Nie można przydzielić wymaganej liczby kart.",
-/* TR_NO_BLUE_INTERFACE */
-"Nie przypisano interfejsu BLUE.",
-/* TR_NO_CDROM */
-"Nie znaleziono CD-ROM'u.",
-/* TR_NO_GREEN_INTERFACE */
-"Nie przypisano interfejsu GREEN.",
-/* TR_NO_HARDDISK */
-"Nie znaleziono dysku twardego.",
-/* TR_NO_IPCOP_TARBALL_FOUND */
-"Nie znaleziono archiwum tar ipcop na serwerze Web.",
-/* TR_NO_ORANGE_INTERFACE */
-"Nie przypisano interfejsu ORANGE.",
-/* TR_NO_RED_INTERFACE */
-"Nie przypisano interfejsu RED.",
-/* TR_NO_SCSI_IMAGE_FOUND */
-"Nie znaleziono obrazu SCSI na serwerze Web.",
-/* TR_NO_UNALLOCATED_CARDS */
-"Nie pozostało więcej nieprzypisanych kart. Możesz wykorzystać automatyczne wykrywanie aby poszukać więcej kart, lub ręcznie wybrać sterownik z listy.",
-/* TR_OK */
-"Ok",
-/* TR_PARTITIONING_DISK */
-"Partycjonowanie dysku...",
-/* TR_PASSWORDS_DO_NOT_MATCH */
-"Hasła nie są identyczne.",
-/* TR_PASSWORD_CANNOT_BE_BLANK */
-"Hasło nie może być puste.",
-/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */
-"Hasło nie może zawierać spacji.",
-/* TR_PASSWORD_PROMPT */
-"Hasło:",
-/* TR_PHONENUMBER_CANNOT_BE_EMPTY */
-"Numer telefonu nie może być pusty.",
-/* TR_PREPARE_HARDDISK */
-"Program instalacyjny przygotuje dysk na %s. Nastąpi partycjonowanie dysku, a następnie utworzone zostaną systemy plików na partycjach.",
-/* TR_PRESS_OK_TO_REBOOT */
-"Naciśnij OK aby uruchomić ponownie.",
-/* TR_PRIMARY_DNS */
-"Podstawowy DNS:",
-/* TR_PRIMARY_DNS_CR */
-"Podstawowy DNS\n",
-/* TR_PROBE */
-"Sprawdź",
-/* TR_PROBE_FAILED */
-"Błąd automatycznego wykrywania.",
-/* TR_PROBING_HARDWARE */
-"Sprawdzanie sprzętu...",
-/* TR_PROBING_FOR_NICS */
-"Sprawdzanie interfejsów NIC...",
-/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */
-"Problem podczas ustawiania hasła dla użytkownika %s 'admin' .",
-/* TR_PROBLEM_SETTING_ROOT_PASSWORD */
-"Problem podczas ustawiania hasła dla użytkownika 'root' .",
-/* TR_PROBLEM_SETTING_SETUP_PASSWORD */
-"TO BE REMOVED",
-/* TR_PROTOCOL_COUNTRY */
-"Protokół/Kraj",
-/* TR_PULLING_NETWORK_UP */
-"Uruchamianie sieci...",
-/* TR_PUSHING_NETWORK_DOWN */
-"Wyłączanie sieci...",
-/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */
-"Wyłączanie sieci innych niż lokalna...",
-/* TR_QUIT */
-"Wyjście",
-/* TR_RED_IN_USE */
-"ISDN (lub inne zewnętrzne połączenie) jest aktualnie w użyciu.  Nie możesz skonfigurować ISDN kiedy interfejs RED jest aktywny.",
-/* TR_RESTART_REQUIRED */
-"\n\nPo zakończeniu konfiguracji wymagane będzie ponowne uruchomienie sieci.",
-/* TR_RESTORE */
-"Przywróć",
-/* TR_RESTORE_CONFIGURATION */
-"Jeżeli posiadasz dyskietkę zawierającą konfigurację systemu %s , umieść ją w napędzie dyskietek i naciśnij przycisk Przywróć.",
-/* TR_ROOT_PASSWORD */
-"hasło 'root'",
-/* TR_SECONDARY_DNS */
-"Drugi DNS:",
-/* TR_SECONDARY_DNS_CR */
-"Drugi DNS\n",
-/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */
-"Zdefiniowano drugi DNS bez podania podstawowego",
-/* TR_SECTION_MENU */
-"Section menu",
-/* TR_SELECT */
-"Wybierz",
-/* TR_SELECT_CDROM_TYPE */
-"Wybierz typ CDROM",
-/* TR_SELECT_CDROM_TYPE_LONG */
-"Nie wykryto CD-ROM'u w tym komputerze. Proszę wybrać sterowniki których chcesz użyć aby %s mógł uzyskać dostęp do CD-ROM.",
-/* TR_SELECT_INSTALLATION_MEDIA */
-"Wybierz nośnik instalacji",
-/* TR_SELECT_INSTALLATION_MEDIA_LONG */
-"%s może być zainstalowany z wielu źródeł. Najprostszym sposobem jest instalacja z napędu CDROM. Jeżeli ten komputer nie posiada takiego napędu możesz przeprowadzić instalację z innego komputera w sieci LAN udostępniającego pliki przez HTTP lub FTP.",
-/* TR_SELECT_NETWORK_DRIVER */
-"Wybierz sterownik karty sieciowej",
-/* TR_SELECT_NETWORK_DRIVER_LONG */
-"Wybierz sterownik dla karty sieciowej zainstalowanej w komputerze. Jeżeli wybierzesz ręczne przypisywanie sterowników będziesz miał możliwość wprowadzenie modułu sterownika i dodatkowych parametrów wymaganych przez niektóre karty (np. ISA).",
-/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */
-"Wybierz interfejs którego konfigurację chcesz zmienić.",
-/* TR_SELECT_THE_ITEM */
-"Wybierz pozycję którą chcesz konfigurować.",
-/* TR_SETTING_ADMIN_PASSWORD */
-"Ustawianie hasła dla użytkownika 'admin' %s ...",
-/* TR_SETTING_ROOT_PASSWORD */
-"Ustawianie hasła użytkownika 'root' ....",
-/* TR_SETTING_SETUP_PASSWORD */
-"TO BE REMOVED",
-/* TR_SETUP_FINISHED */
-"Zakończono konfigurowanie.  Naciśnij Ok.",
-/* TR_SETUP_NOT_COMPLETE */
-"Początkowo konfiguracja nie jest kompletna. Należy upewnić się, że ustawienia są poprawne przez uruchomienie programu konfiguracyjnego (polecenia setup z linii poleceń).",
-/* TR_SETUP_PASSWORD */
-"TO BE REMOVED",
-/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */
-"Ustaw dodatkowe parametry modułu",
-/* TR_SINGLE_GREEN */
-"Twoja konfiguracja zezwala tylko na 1 interfejs GREEN.",
-/* TR_SKIP */
-"Pomiń",
-/* TR_START_ADDRESS */
-"Adres początkowy:",
-/* TR_START_ADDRESS_CR */
-"Adres początkowy\n",
-/* TR_STATIC */
-"Statycznie",
-/* TR_SUGGEST_IO */
-"(sugerowane %x)",
-/* TR_SUGGEST_IRQ */
-"(sugerowane %d)",
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
-"Moduł sterownika jest już załadowany.",
-/* TR_TIMEZONE */
-"Strefa czasowa",
-/* TR_TIMEZONE_LONG */
-"Wybierz strefę czasową z poniższej listy.",
-/* TR_UNABLE_TO_EJECT_CDROM */
-"Nie można wysunąć CDROM'u.",
-/* TR_UNABLE_TO_EXTRACT_MODULES */
-"Nie można wypakować modułów.",
-/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */
-"Nie można odnaleźć dodatkowych sterowników.",
-/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */
-"Nie można odnaleźć karty ISDN w tym komputerze. Może być konieczne zdefiniowanie dodatkowych parametrów modułu jeżeli karta jest typu ISA lub ma specyficzne wymagania.",
-/* TR_UNABLE_TO_INITIALISE_ISDN */
-"Nie można zainicjować ISDN.",
-/* TR_UNABLE_TO_INSTALL_FILES */
-"Nie można zainstalować plików.",
-/* TR_UNABLE_TO_INSTALL_LANG_CACHE */
-"Nie można zainstalować plików językowych.",
-/* TR_UNABLE_TO_INSTALL_GRUB */
-"Nie można zainstalować GRUB'a.",
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
-"Nie można zainstalować modułu sterownika.",
-/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */
-"Nie można utowrzyć systemu plików boot.",
-/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */
-"Nie można utowrzyć systemu plików log.",
-/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */
-"Nie można utowrzyć systemu plików root.",
-/* TR_UNABLE_TO_MAKE_SWAPSPACE */
-"Nie można utworzyć przestrzeni swap.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */
-"Nie można utworzyć linku symbolicznego /dev/harddisk.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */
-"Nie można utworzyć linku symbolicznego /dev/harddisk1.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */
-"Nie można utworzyć linku symbolicznego /dev/harddisk2.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */
-"Nie można utworzyć linku symbolicznego /dev/harddisk3.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */
-"Nie można utworzyć linku symbolicznego /dev/harddisk4.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */
-"Nie można utworzyć linku symbolicznego /dev/root.",
-/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */
-"Nie można zamontować systemu plików boot.",
-/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */
-"Nie można zamontować systemu plików log.",
-/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */
-"Nie można zamontować systemu plików proc.",
-/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */
-"Nie można zamontować systemu plików root.",
-/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */
-"Nie można zamontować partycji swap.",
-/* TR_UNABLE_TO_OPEN_HOSTS_FILE */
-"Nie można otworzyć głównego plików z hostami.",
-/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */
-"Nie można utworzyć pliku ustawień",
-/* TR_UNABLE_TO_PARTITION */
-"Nie można utworzyć partycji na dysku.",
-/* TR_UNABLE_TO_REMOVE_TEMP_FILES */
-"Nie można usunąć pobranych plików tymczasowych.",
-/* TR_UNABLE_TO_SET_HOSTNAME */
-"Nie można ustawić nazwy hosta.",
-/* TR_UNABLE_TO_UNMOUNT_CDROM */
-"Nie można odmontować CDROM'u lub dyskietki.",
-/* TR_UNABLE_TO_UNMOUNT_HARDDISK */
-"Nie można odmontować harddisk.",
-/* TR_UNABLE_TO_WRITE_ETC_FSTAB */
-"Nie można zapisać /etc/fstab",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */
-"Nie można zapisać /etc/hostname",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS */
-"Nie można zapisać /etc/hosts.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */
-"Nie można zapisać /etc/hosts.allow.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */
-"Nie można zapisać /etc/hosts.deny.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */
-"Nie można zapisać %s/ethernet/settings.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */
-"Nie można zapisać %s/main/hostname.conf",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */
-"Nie można zapisać %s/main/settings.",
-/* TR_UNCLAIMED_DRIVER */
-"Istnieje nieprzydzielona karta ethernet typu:\n%s\n\nMożesz ją przypisać do:",
-/* TR_UNKNOWN */
-"NIEZNANY",
-/* TR_UNSET */
-"UNSET",
-/* TR_USB_KEY_VFAT_ERR */
-"Ten nośnik USB jest nieprawidłowy (nie znaleziono partycji vfat).",
-/* TR_US_NI1 */
-"US NI1",
-/* TR_WARNING */
-"UWAGA",
-/* TR_WARNING_LONG */
-"Jeżeli zmienisz ten adres IP i jesteś zdalnie zalogowany twoje połączenie z %s zostnie przerwane i konieczne będzie ponowne zalogowanie na nowy adres IP. Jest to ryzykowna operacja i powinna być wykonywana tylko w sytuacji kiedy możliwy jest fizyczny dostęp do maszyny gdyby coś poszło nie tak.",
-/* TR_WELCOME */
-"Witaj w programie instalacyjnym %s . Wybranie przycisku Anuluj na kolejnych ekranach spowoduje ponowne uruchomienie komputera.",
-/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */
-"Twoja konfiguracja zezwala na jeden interfejs GREEN, który posiada już przypisany sterownik.",
-/* TR_YES */
-"Tak",
-/* TR_NO */
-"Nie",
-/* TR_AS */
-"jako",
-/* TR_IGNORE */
-"Ignoruj",
-/* TR_PPP_DIALUP */
-"PPP DIALUP (PPPoE, modem, ATM ...)",
-/* TR_DHCP */
-"DHCP",
-/* TR_DHCP_STARTSERVER */
-"Uruchamianie serwera DHCP ...",
-/* TR_DHCP_STOPSERVER */
-"Zatrzymywanie serwera DHCP ...",
-/* TR_LICENSE_ACCEPT */
-"Akceptuję licencję.",
-/* TR_LICENSE_NOT_ACCEPTED */
-"Nie zaakceptowano licencji.Wyjście!",
-/* TR_EXT2FS_DESCR */
-"Ext2 - System plików bez dziennika (zalecany dla napędów flash)",
-/* TR_EXT3FS_DESCR */
-"Ext3 - System plików z dziennikiem",
-/* TR_EXT4FS_DESCR */
-"Ext4 - System plików z dziennikiem",
-/* TR_REISERFS_DESCR */
-"ReiserFS - System plików z dziennikiem",
-/* TR_NO_LOCAL_SOURCE */
-"Brak lokalnego źródła. Rozpoczynanie pobierania.",
-/* TR_DOWNLOADING_ISO */
-"Pobieranie obrazu instalacyjnego ...",
-/* TR_DOWNLOAD_ERROR */
-"Błąd podczas pobierania!",
-/* TR_DHCP_FORCE_MTU */
-"Wymuś mtu DHCP:",
-/* TR_IDENTIFY */
-"Identify",
-/* TR_IDENTIFY_SHOULD_BLINK */
-"Selected port should blink now ...",
-/* TR_IDENTIFY_NOT_SUPPORTED */
-"Function is not supported by this port.",
-};
diff --git a/langs/ru/install/lang_ru.c b/langs/ru/install/lang_ru.c
deleted file mode 100644 (file)
index 40293a2..0000000
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * Russian (ru) Data File
- *
- * This file is part of the IPFire.
- * 
- * IPFire 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.
- * 
- * IPFire 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 IPCop; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- * 
- * (c) IPFire Team  <info@ipfire.org>
- *
- */
-#include "libsmooth.h"
-
-char *ru_tr[] = {
-/* TR_ISDN */
-"ISDN",
-/* TR_ERROR_PROBING_ISDN */
-"Невозможно просканировать ISDN устройства.",
-/* TR_PROBING_ISDN */
-"ISDN устройства сканируются и настраиваются.",
-/* TR_MISSING_GREEN_IP */
-"Не найден Green IP!",
-/* TR_CHOOSE_FILESYSTEM */
-"Пожалуйста укажите вашу файловую систему:",
-/* TR_NOT_ENOUGH_INTERFACES */
-"Недостаточно сетевых карт для Вашего выбора.\n\nНеобходимо: %d - Доступно: %d\n",
-/* TR_INTERFACE_CHANGE */
-"Пожалуйста укажите интерфейс, который хотите изменить.\n\n",
-/* TR_NETCARD_COLOR */
-"Назначенные карты",
-/* TR_REMOVE */
-"Удалить",
-/* TR_MISSING_DNS */
-"Не найден DNS.\n",
-/* TR_MISSING_DEFAULT */
-"Не найден шлюз.\n",
-/* TR_JOURNAL_EXT3 */
-"Создаются журналы для Ext3...",
-/* TR_CHOOSE_NETCARD */
-"Пожалуйста укажите сетевую карту для следующего интерфейса - %s.",
-/* TR_NETCARDMENU2 */
-"Расширенное сетевое меню",
-/* TR_ERROR_INTERFACES */
-"В Вашей системе нет свободных интерфейсов.",
-/* TR_REMOVE_CARD */
-"Удалить сетевую карту? - %s",
-/* TR_JOURNAL_ERROR */
-"Не получилось создать журнал, пробуем ext2.",
-/* TR_FILESYSTEM */
-"Укажите файловую систему",
-/* TR_ADDRESS_SETTINGS */
-"Настройки адреса",
-/* TR_ADMIN_PASSWORD */
-"Пароль 'admin'",
-/* TR_AGAIN_PROMPT */
-"Ещё раз:",
-/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */
-"Все карты успешно установлены.",
-/* TR_AUTODETECT */
-"* АВТООПРЕДЕЛЕНИЕ *",
-/* TR_BUILDING_INITRD */
-"Создаётся ramdisk...",
-/* TR_CANCEL */
-"Отмена",
-/* TR_CARD_ASSIGNMENT */
-"Установка карт",
-/* TR_CHECKING */
-"Проверяется URL...",
-/* TR_CHECKING_FOR */
-"Проверка для: %s",
-/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */
-"Укажите ISDN карту, установленную в этом компьютере.",
-/* TR_CHOOSE_THE_ISDN_PROTOCOL */
-"Укажите необходимый ISDN протокол.",
-/* TR_CONFIGURE_DHCP */
-"Введите необходимые настройки DHCP сервера.",
-/* TR_CONFIGURE_NETWORKING */
-"Настройка сети",
-/* TR_CONFIGURE_NETWORKING_LONG */
-"Необходимо настроить сеть, загрузив драйвер для  GREEN интерфейса. Вы можете воспользоваться автоподбором драйвера для сетевой карты или самостоятельно указать его из списка. Позже Вы сможете подобрать драйвер и для остальных сетевых карт. Также, если у Вас более одной карты такого же типа, как для GREEN интерфейса, и каждая требует особых параметров, то Вам следует указать эти параметры, чтобы все карты были активны во время настройки GREEN интерфейса.",
-/* TR_CONFIGURE_NETWORK_DRIVERS */
-"Назначьте драйверы интерфейсам. Текущая конфигурация следующая:\n\n",
-/* TR_CONFIGURE_THE_CDROM */
-"Для настройки CDROM необходимо указать его IO адрес и/или IRQ.",
-/* TR_CONGRATULATIONS */
-"Поздравляем!",
-/* TR_CONGRATULATIONS_LONG */
-"%s был успешно установлен. Пожалуйста достаньте CD диск из привода. Далее будет предложена настройка ISDN, сетевых карт, и системных паролей. После окончания установки появится возможность настройки сервера с помощью браузера через веб-интерфейс по адресу https://%s:444 (или по имени, которое Вы указали для %s), где будет предложена настройка dialup подключения (если требуется) и удалённого доступа.",
-/* TR_CONTINUE_NO_SWAP */
-"Ваш жёсткий диск слишком мал, но установка всё же возможна с очень маленьким разделом swap. (Будьте внимательны).",
-/* TR_CURRENT_CONFIG */
-"Текущая конфигурация: %s%s",
-/* TR_DEFAULT_GATEWAY */
-"Основной шлюз:",
-/* TR_DEFAULT_GATEWAY_CR */
-"Основной шлюз\n",
-/* TR_DEFAULT_LEASE */
-"Аренда по умолчанию (в минутах):",
-/* TR_DEFAULT_LEASE_CR */
-"Время аренды по умолчанию\n",
-/* TR_DETECTED */
-"Обнаружен: %s",
-/* TR_DHCP_HOSTNAME */
-"Имя хоста DHCP:",
-/* TR_DHCP_HOSTNAME_CR */
-"Имя хоста DHCP\n",
-/* TR_DHCP_SERVER_CONFIGURATION */
-"Настройка DHCP сервера",
-/* TR_DISABLED */
-"Выключен",
-/* TR_DISABLE_ISDN */
-"Выключить ISDN",
-/* TR_DISK_TOO_SMALL */
-"Ваш жёсткий диск слишком мал.",
-/* TR_DNS_AND_GATEWAY_SETTINGS */
-"Настройка DNS и шлюза",
-/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */
-"Введите DNS шлюз.  Эти настройки используются только со статическим IP (и DHCP если указан DNS) на RED интерфейсе.",
-/* TR_DNS_GATEWAY_WITH_GREEN */
-"Ваши настройки не используются ethernet адаптером для  RED интерфейса.  Информация о DNS и шлюзе для пользователей dialup получается автоматически при подключении.",
-/* TR_DOMAINNAME */
-"Имя домена",
-/* TR_DOMAINNAME_CANNOT_BE_EMPTY */
-"Имя домена не может быть пустым.",
-/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */
-"В имени домена не должно быть пробелов.",
-/* TR_DOMAINNAME_NOT_VALID_CHARS */
-"Имя домена может содержать только буквы, цифры, дефисы и нижние подчёркивания.",
-/* TR_DOMAIN_NAME_SUFFIX */
-"Префикс доменного имени:",
-/* TR_DOMAIN_NAME_SUFFIX_CR */
-"Префикс доменного имени\n",
-/* TR_DONE */
-"Готово",
-/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */
-"\nХотите поменять эти настройки?",
-/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */
-"Назначение драйверов и карт",
-/* TR_ENABLED */
-"Включено",
-/* TR_ENABLE_ISDN */
-"Включить ISDN",
-/* TR_END_ADDRESS */
-"Конечный адрес:",
-/* TR_END_ADDRESS_CR */
-"Конечный адрес\n",
-/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */
-"Некоторые ISDN карты (особенно ISA) Могут потребовать дополнительных параметров для задания IRQ и IO адреса. Если у Вас такая  ISDN карта, введите эти параметры тут. Пример: \"io=0x280 irq=9\". Эти параметры будут использоваться во время определения карты.",
-/* TR_ENTER_ADMIN_PASSWORD */
-"Введите %s 'admin' пароль.  Эта учётная запись используется для входа на веб интерфейс %s.",
-/* TR_ENTER_DOMAINNAME */
-"Введите имя домена",
-/* TR_ENTER_HOSTNAME */
-"Введите имя хоста.",
-/* TR_ENTER_IP_ADDRESS_INFO */
-"введите IP адрес",
-/* TR_ENTER_NETWORK_DRIVER */
-"Не удалось автоматически определить сетевую карту. Введите дополнительные параметры для этой сетевой карты.",
-/* TR_ENTER_ROOT_PASSWORD */
-"Введите пароль для 'root'. Эта учётная запись используется для доступа с командной строки.",
-/* TR_ENTER_SETUP_PASSWORD */
-"БУДЕТ УДАЛЁН",
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
-"Введите IP адрес для %s интерфейса.",
-/* TR_ENTER_THE_LOCAL_MSN */
-"Введите номер телефона (MSN/EAZ).",
-/* TR_ENTER_URL */
-"Укажите URL к ipcop-<version>.tgz и images/scsidrv-<version>.img файлам. ВНИМАНИЕ: DNS не работает! Пример: http://X.X.X.X/<directory>",
-/* TR_ERROR */
-"Ошибка",
-/* TR_ERROR_PROBING_CDROM */
-"Не найден привод CDROM.",
-/* TR_ERROR_WRITING_CONFIG */
-"Ошибка записи настроек.",
-/* TR_EURO_EDSS1 */
-"Евро (EDSS1)",
-/* TR_EXTRACTING_MODULES */
-"Модули извлекаются...",
-/* TR_FAILED_TO_FIND */
-"Не удалось найти файл по этому URL.",
-/* TR_FOUND_NIC */
-"%s обнаружил следующий NIC в Вашем компьютере: %s",
-/* TR_GERMAN_1TR6 */
-"German 1TR6",
-/* TR_HELPLINE */
-"              <Tab>/<Alt-Tab> Переключает   |  <Space> Выделяет",
-/* TR_HOSTNAME */
-"Имя хоста",
-/* TR_HOSTNAME_CANNOT_BE_EMPTY */
-"Имя хоста не может быть пустым.",
-/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */
-"Имя хоста не может содержать пробелы.",
-/* TR_HOSTNAME_NOT_VALID_CHARS */
-"В имени хоста могут быть только буквы, цифры дефисы.",
-/* TR_INITIALISING_ISDN */
-"Устанавливается ISDN...",
-/* TR_INSERT_CDROM */
-"Пожалуйста вставьте %s CD в привод CDROM.",
-/* TR_INSERT_FLOPPY */
-"Пожалуйста вставьте %s дискету с драйверами в привод floppy.",
-/* TR_INSTALLATION_CANCELED */
-"Установка отменена.",
-/* TR_INSTALLING_FILES */
-"Устанавливаются файлы...",
-/* TR_INSTALLING_GRUB */
-"Устанавливается GRUB...",
-/* TR_INSTALLING_LANG_CACHE */
-"Устанавливаются языковые пакеты...",
-/* TR_INTERFACE */
-"Интерфейс - %s",
-/* TR_INTERFACE_FAILED_TO_COME_UP */
-"Не удалось поднять интерфейс.",
-/* TR_INVALID_FIELDS */
-"В следующих полях есть ошибки:\n\n",
-/* TR_INVALID_IO */
-"Параметры IO порта содержат ошибки. ",
-/* TR_INVALID_IRQ */
-"Параметры IRQ details содержат ошибки.",
-/* TR_IP_ADDRESS_CR */
-"IP адрес\n",
-/* TR_IP_ADDRESS_PROMPT */
-"IP адреса:",
-/* TR_ISDN_CARD */
-"ISDN карта",
-/* TR_ISDN_CARD_NOT_DETECTED */
-"ISDN карта не найдена. Возможно стоит указать дополнительные параметры модулю, если у вас карта типа ISA или имеет особые параметры.",
-/* TR_ISDN_CARD_SELECTION */
-"выбор ISDN карты",
-/* TR_ISDN_CONFIGURATION */
-"Настройка ISDN",
-/* TR_ISDN_CONFIGURATION_MENU */
-"Меню настройки ISDN",
-/* TR_ISDN_NOT_SETUP */
-"ISDN не настроена. Некоторые элементы не были указаны.",
-/* TR_ISDN_NOT_YET_CONFIGURED */
-"ISDN ещё не настроена. Укажите элемент, который хотите настроить.",
-/* TR_ISDN_PROTOCOL_SELECTION */
-"выбор ISDN протокола",
-/* TR_ISDN_STATUS */
-"ISDN сейчас %s.\n\n   Протокол: %s\n   Карта: %s\n   Телефон: %s\n\nУкажите элемент для перенастройки, или сохраните текущие настройки.",
-/* TR_KEYBOARD_MAPPING */
-"Раскладка клавиатуры",
-/* TR_KEYBOARD_MAPPING_LONG */
-"Укажите тип используемой клавиатуры из списка ниже. (обычно подходит ru_win )",
-/* TR_LEASED_LINE */
-"Зарезервированная строка",
-/* TR_LOADING_MODULE */
-"Грузится модуль...",
-/* TR_LOADING_PCMCIA */
-"Грузятся PCMCIA модули...",
-/* TR_LOOKING_FOR_NIC */
-"Поиск: %s",
-/* TR_MAKING_BOOT_FILESYSTEM */
-"Создаётся файловой системы загрузчика...",
-/* TR_MAKING_LOG_FILESYSTEM */
-"Создаётся файловая система под логи...",
-/* TR_MAKING_ROOT_FILESYSTEM */
-"Создаётся корневая файловая система...",
-/* TR_MAKING_SWAPSPACE */
-"Создаётся swap...",
-/* TR_MANUAL */
-"* MANUAL *",
-/* TR_MAX_LEASE */
-"Max аренда (минуты):",
-/* TR_MAX_LEASE_CR */
-"Время Max аренды\n",
-/* TR_MISSING_BLUE_IP */
-"Не указан IP на BLUE интерфейсе.",
-/* TR_MISSING_ORANGE_IP */
-"Не указан IP на ORANGE интерфейсе.",
-/* TR_MISSING_RED_IP */
-"Не указан IP на RED интерфейсе.",
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */
-"Имя модуля не может быть пустым.",
-/* TR_MODULE_PARAMETERS */
-"Введите имя модуля и параметры для нужного драйвера.",
-/* TR_MOUNTING_BOOT_FILESYSTEM */
-"Монтируется файловая система для загрузчика...",
-/* TR_MOUNTING_LOG_FILESYSTEM */
-"Монтируется файловая система для логов...",
-/* TR_MOUNTING_ROOT_FILESYSTEM */
-"Монтируется корневая файловая система...",
-/* TR_MOUNTING_SWAP_PARTITION */
-"Монтируется swap...",
-/* TR_MSN_CONFIGURATION */
-"Номер телефона (MSN/EAZ)",
-/* TR_NETMASK_PROMPT */
-"Маска подсети:",
-/* TR_NETWORKING */
-"Сеть",
-/* TR_NETWORK_ADDRESS_CR */
-"Сетевой адрес\n",
-/* TR_NETWORK_ADDRESS_PROMPT */
-"Сетевой адрес:",
-/* TR_NETWORK_CONFIGURATION_MENU */
-"Меню настройки сети",
-/* TR_NETWORK_CONFIGURATION_TYPE */
-"Настройка типа сетевого подключения",
-/* TR_NETWORK_CONFIGURATION_TYPE_LONG */
-"Укажите сетевые настройки для %s.  Ниже представлен список для интернет подключения. Если Вы решите поменять эти настройки,Потребуется перезапуск сети, а так же потребуется переназначить драйвера сетевых карт.",
-/* TR_NETWORK_MASK_CR */
-"Маска подсети\n",
-/* TR_NETWORK_SETUP_FAILED */
-"Не удалось настроить сеть.",
-/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */
-"Выделено недостаточно сетевых карт.",
-/* TR_NO_BLUE_INTERFACE */
-"Не назначен BLUE интерфейс.",
-/* TR_NO_CDROM */
-"Не найден CD-ROM.",
-/* TR_NO_GREEN_INTERFACE */
-"Не назначен  GREEN интерфейс.",
-/* TR_NO_HARDDISK */
-"Не найден жсткий диск.",
-/* TR_NO_IPCOP_TARBALL_FOUND */
-"На сервере не найден архив ipcop.",
-/* TR_NO_ORANGE_INTERFACE */
-"Не назначен ORANGE интерфейс.",
-/* TR_NO_RED_INTERFACE */
-"Не назначен RED интерфейс.",
-/* TR_NO_SCSI_IMAGE_FOUND */
-"По этому адресу не найден образ SCSI.",
-/* TR_NO_UNALLOCATED_CARDS */
-"Нужно больше карт. Можно попытаться поискать или указать другие карты на этой машине, или указать драйвер из списка ниже.",
-/* TR_OK */
-"Ok",
-/* TR_PARTITIONING_DISK */
-"Разбивка диска...",
-/* TR_PASSWORDS_DO_NOT_MATCH */
-"Пароли не совпадают.",
-/* TR_PASSWORD_CANNOT_BE_BLANK */
-"Пароль не может быть пустым.",
-/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */
-"Пароль не должен содержать пробелы.",
-/* TR_PASSWORD_PROMPT */
-"Пароль:",
-/* TR_PHONENUMBER_CANNOT_BE_EMPTY */
-"Номер телефона не может быть пустым.",
-/* TR_PREPARE_HARDDISK */
-"Мастер установки сейчас подготовит диски на %s. Сперва будет проводиться разбиение диска, а затем разделам будут назначены файловые системы.",
-/* TR_PRESS_OK_TO_REBOOT */
-"Нажмите Ok для перезагрузки.",
-/* TR_PRIMARY_DNS */
-"Основной DNS:",
-/* TR_PRIMARY_DNS_CR */
-"Основной DNS\n",
-/* TR_PROBE */
-"Пробовать",
-/* TR_PROBE_FAILED */
-"Не удалось определить автоматически.",
-/* TR_PROBING_HARDWARE */
-"Определение железа...",
-/* TR_PROBING_FOR_NICS */
-"Определение NIC...",
-/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */
-"Возникли проблемы при установке на %s пароля для 'admin'.",
-/* TR_PROBLEM_SETTING_ROOT_PASSWORD */
-"Возникли проблемы при установке пароля для 'root'.",
-/* TR_PROBLEM_SETTING_SETUP_PASSWORD */
-"БУДЕТ УДАЛЁН",
-/* TR_PROTOCOL_COUNTRY */
-"Протокол/Страна",
-/* TR_PULLING_NETWORK_UP */
-"Поднимаем сеть...",
-/* TR_PUSHING_NETWORK_DOWN */
-"Отключаем сеть...",
-/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */
-"Отключаем нелокальную сеть...",
-/* TR_QUIT */
-"Выход",
-/* TR_RED_IN_USE */
-"ISDN (или другое внешнее подключение) задействовано в данный момент.  Не получится настроить ISDN пока RED интерфейс активен.",
-/* TR_RESTART_REQUIRED */
-"\n\nПосле настройки потребуется перезапуск сети.",
-/* TR_RESTORE */
-"Восстановить",
-/* TR_RESTORE_CONFIGURATION */
-"Если у Вас есть floppy с настройками %s , вставьте floppy диск и нажмите кнопку восстановления.",
-/* TR_ROOT_PASSWORD */
-"пароль 'root'",
-/* TR_SECONDARY_DNS */
-"Второй DNS:",
-/* TR_SECONDARY_DNS_CR */
-"Второй DNS\n",
-/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */
-"Второй DNS указан без основного DNS",
-/* TR_SECTION_MENU */
-"Меню разделов",
-/* TR_SELECT */
-"Выбрать",
-/* TR_SELECT_CDROM_TYPE */
-"Выделить тип CDROM",
-/* TR_SELECT_CDROM_TYPE_LONG */
-"Не найден CD-ROM на этой машине.  Пожалуйста укажите какой драйвер Вы собираетесь использовать, чтобы %s увидел CD-ROM.",
-/* TR_SELECT_INSTALLATION_MEDIA */
-"Укажите носитель с установщиком",
-/* TR_SELECT_INSTALLATION_MEDIA_LONG */
-"%s может быть установлен разными способами.  Самый простой - использовать привод CDROM. Если его нет, то можно попробовать установку с другой машины в LAN сети, где установочные файлы доступны по HTTP или FTP протоколу.",
-/* TR_SELECT_NETWORK_DRIVER */
-"Укажите сетевой драйвер",
-/* TR_SELECT_NETWORK_DRIVER_LONG */
-"Укажите драйвер для сетевой карты, установленной на этой машине. Если Вы указываете ВРУЧНУЮ, у Вас появится возможность задать название модуля драйвера и параметра для драйвера с особыми настройками, например для ISA карты.",
-/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */
-"Укажите интерфейс для перенастройки.",
-/* TR_SELECT_THE_ITEM */
-"Укажите, что хотите настроить.",
-/* TR_SETTING_ADMIN_PASSWORD */
-"Записывается 'admin' пароль для %s...",
-/* TR_SETTING_ROOT_PASSWORD */
-"Записывается 'root' пароль....",
-/* TR_SETTING_SETUP_PASSWORD */
-"БУДЕТ УДАЛЁН",
-/* TR_SETUP_FINISHED */
-"Установка окончена.  Нажмите Ok.",
-/* TR_SETUP_NOT_COMPLETE */
-"Первоначальная установка не была завершена полностью.  Необходимо убедиться, что настройка полностью завершена выполнив команду setup ещё раз в shell оболочке.",
-/* TR_SETUP_PASSWORD */
-"БУДЕТ УДАЛЁН",
-/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */
-"Задать дополнительные параметры модуля",
-/* TR_SINGLE_GREEN */
-"Ваши настройки задаются для одного GREEN интерфейса.",
-/* TR_SKIP */
-"Пропустить",
-/* TR_START_ADDRESS */
-"Начальный адрес:",
-/* TR_START_ADDRESS_CR */
-"Начальный адрес\n",
-/* TR_STATIC */
-"Статический",
-/* TR_SUGGEST_IO */
-"(Предлагаемый %x)",
-/* TR_SUGGEST_IRQ */
-"(Предлагаемый %d)",
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
-"Модуль этого драйвера уже установлен.",
-/* TR_TIMEZONE */
-"Часовой пояс",
-/* TR_TIMEZONE_LONG */
-"Укажите свою временную зону из списка ниже.",
-/* TR_UNABLE_TO_EJECT_CDROM */
-"Не могу открыть CDROM.",
-/* TR_UNABLE_TO_EXTRACT_MODULES */
-"Не удалось распаковать модули.",
-/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */
-"Не удалось найти какие-либо дополнительные драйверы.",
-/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */
-"Не удалось найти ISDN карты на этом компьютере. Возможно стоит указать дополнительные параметры, если у вас карта типа ISA или имеет особые настройки.",
-/* TR_UNABLE_TO_INITIALISE_ISDN */
-"Не удаётся инициализировать ISDN.",
-/* TR_UNABLE_TO_INSTALL_FILES */
-"Не удалось установить файлы.",
-/* TR_UNABLE_TO_INSTALL_LANG_CACHE */
-"Не удалось установить языковые пакеты.",
-/* TR_UNABLE_TO_INSTALL_GRUB */
-"Не удалось установить GRUB.",
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
-"Не удалось подгрузить модули драйверов.",
-/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */
-"Не удалось создать файловую систему для boot.",
-/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */
-"Не удалось создать файловую систему для логов.",
-/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */
-"Не удалось создать корневую файловую систему.",
-/* TR_UNABLE_TO_MAKE_SWAPSPACE */
-"Не удалось создать swap.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */
-"Не удалось создать симлинк /dev/harddisk.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */
-"Не удалось создать симлинк /dev/harddisk1.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */
-"Не удалось создать симлинк /dev/harddisk2.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */
-"Не удалось создать симлинк /dev/harddisk3.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */
-"Не удалось создать симлинк /dev/harddisk4.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */
-"Не удалось создать симлинк /dev/root.",
-/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */
-"Не удалось смонтировать раздел boot.",
-/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */
-"Не удалось смонтировать раздел с логами.",
-/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */
-"Не удалось смонтировать раздел proc.",
-/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */
-"Не удалось смонтировать корневой раздел .",
-/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */
-"Не удалось смонтировать раздел swap.",
-/* TR_UNABLE_TO_OPEN_HOSTS_FILE */
-"Не удалось открыть основной файл хостов.",
-/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */
-"Не удалось открыть файл настроек",
-/* TR_UNABLE_TO_PARTITION */
-"Не удалось разбить диск на разделы.",
-/* TR_UNABLE_TO_REMOVE_TEMP_FILES */
-"Не удаётся удалить временные загруженные файлы.",
-/* TR_UNABLE_TO_SET_HOSTNAME */
-"Не удалось задать имя хоста.",
-/* TR_UNABLE_TO_UNMOUNT_CDROM */
-"Не удаётся смонтировать привод CDROM/floppy.",
-/* TR_UNABLE_TO_UNMOUNT_HARDDISK */
-"Не получается отмонтировать жёсткие диски.",
-/* TR_UNABLE_TO_WRITE_ETC_FSTAB */
-"Не могу записать в /etc/fstab",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */
-"Не могу записать в /etc/hostname",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS */
-"Не могу записать в /etc/hosts.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */
-"Не могу записать в /etc/hosts.allow.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */
-"Не могу записать в /etc/hosts.deny.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */
-"Не могу записать в %s/ethernet/settings.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */
-"Не могу записать в %s/main/hostname.conf",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */
-"Не могу записать в %s/main/settings.",
-/* TR_UNCLAIMED_DRIVER */
-"Обнаружена невостребованная сетевая карта типа:\n%s\n\nМожно ей назначить:",
-/* TR_UNKNOWN */
-"НЕИЗВЕСТНО",
-/* TR_UNSET */
-"НЕЗАДАНО",
-/* TR_USB_KEY_VFAT_ERR */
-"Неправильный USB носитель (не найден раздел vfat).",
-/* TR_US_NI1 */
-"Использовать NI1",
-/* TR_WARNING */
-"ВНИМАНИЕ",
-/* TR_WARNING_LONG */
-"Если изменить этот IP адрес, и в данный момент Вы подключены удалённо, то естественным образм Ваше соединение с %s будет потеряно. Придётся переподключиться к НОВОМУ IP. Эта процедура довольно рискована, есть у Вас нет возможности физического доступа к машине, на случай если что-то пойдёт не так.",
-/* TR_WELCOME */
-"Добро пожаловать в мастер настройки %s . Отмена установки на любом этапе приведёт к перезагрузке.",
-/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */
-"Ваша конфигурация настроена на один GREEN интерфейс, который уже оснащён драйвером.",
-/* TR_YES */
-"Да",
-/* TR_NO */
-"Нет",
-/* TR_AS */
-"как",
-/* TR_IGNORE */
-"Игнорировать",
-/* TR_PPP_DIALUP */
-"PPP DIALUP (PPPoE, модем, ATM ...)",
-/* TR_DHCP */
-"DHCP",
-/* TR_DHCP_STARTSERVER */
-"Запуск DHCP-server ...",
-/* TR_DHCP_STOPSERVER */
-"Остановка DHCP-server ...",
-/* TR_LICENSE_ACCEPT */
-"Я принимаю эту лицензию.",
-/* TR_LICENSE_NOT_ACCEPTED */
-"Лицензия не принята. Выход!",
-/* TR_EXT2FS_DESCR */
-"Ext2 - Файловая система без журналирования (Рекомендуется для флеш-носителей)",
-/* TR_EXT3FS_DESCR */
-"Ext3 - Файловая система с журналированием",
-/* TR_EXT4FS_DESCR */
-"Ext4 - Файловая система с журналированием",
-/* TR_REISERFS_DESCR */
-"ReiserFS - Файловая система с журналированием",
-/* TR_NO_LOCAL_SOURCE */
-"Локальный источник не найден. Начинаю загрузку.",
-/* TR_DOWNLOADING_ISO */
-"Загружается установочный образ ...",
-/* TR_DOWNLOAD_ERROR */
-"Во время загрузки произошла ошибка!",
-/* TR_DHCP_FORCE_MTU */
-"Форсировать DHCP mtu:",
-/* TR_IDENTIFY */
-"Identify",
-/* TR_IDENTIFY_SHOULD_BLINK */
-"Selected port should blink now ...",
-/* TR_IDENTIFY_NOT_SUPPORTED */
-"Function is not supported by this port.",
-};
diff --git a/langs/tr/install/lang_tr.c b/langs/tr/install/lang_tr.c
deleted file mode 100644 (file)
index 814949a..0000000
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
- * Turkish (tr) Data File
- *
- * This file is part of the IPFire.
- * 
- * IPCop 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.
- * 
- * IPCop 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 IPCop; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- * 
- * (c) IPFire Team  <info@ipfire.org>
- *
- * based on work of SmoothWall and IPCop
- *
- * (c) The SmoothWall Team
- *  
- */
-#include "libsmooth.h"
-
-char *tr_tr[] = {
-
-/* TR_ISDN */
-"ISDN",
-/* TR_ERROR_PROBING_ISDN */
-"ISDN aygıtları taramak için açılamıyor.",
-/* TR_PROBING_ISDN */
-"Tara ve ISDN aygıtlarını yapılandır.",
-/* TR_MISSING_GREEN_IP */
-"Yeşil IP yok!",
-/* TR_CHOOSE_FILESYSTEM */
-"Lütfen dosya sistemini seçin:",
-/* TR_NOT_ENOUGH_INTERFACES */
-"Seçiminize göre yeterli ağ kartı yok.\n\nGerekli: %d - Mevcut: %d\n",
-/* TR_INTERFACE_CHANGE */
-"Değiştirmek istediğiniz ara birimi seçiniz.\n\n",
-/* TR_NETCARD_COLOR */
-"Atanan Kartlar",
-/* TR_REMOVE */
-"Kaldır",
-/* TR_MISSING_DNS */
-"Eksik DNS.\n",
-/* TR_MISSING_DEFAULT */
-"Varsayılan Ağ Geçidi Eksik.\n",
-/* TR_JOURNAL_EXT3 */
-"Ext3 için günlük oluşturuluyor...",
-/* TR_CHOOSE_NETCARD */
-"Aşağıdan şu ara birim için bir ağ kartı seçin - %s",
-/* TR_NETCARDMENU2 */
-"Genişletilmiş Ağ Listesi",
-/* TR_ERROR_INTERFACES */
-"Sisteminizde hiç boş ara birim bulunmamaktadır.",
-/* TR_REMOVE_CARD */
-"Ağ kartı için tahsis edilenler silinsin mi? - %s",
-/* TR_JOURNAL_ERROR */
-"Günlük oluşturulamadı son çare olarak ext2 kullanılacak.",
-/* TR_FILESYSTEM */
-"Dosya Sistemini Seçin",
-/* TR_ADDRESS_SETTINGS */
-"Adres ayarları",
-/* TR_ADMIN_PASSWORD */
-"'admin' parolası",
-/* TR_AGAIN_PROMPT */
-"Tekrar:",
-/* TR_ALL_CARDS_SUCCESSFULLY_ALLOCATED */
-"Tüm kartalar başarılı bir şekilde atandı.",
-/* TR_AUTODETECT */
-"* OTOMATİK ALGILAMA *",
-/* TR_BUILDING_INITRD */
-"Ramdisk oluşturuluyor...",
-/* TR_CANCEL */
-"İptal",
-/* TR_CARD_ASSIGNMENT */
-"Kart ataması",
-/* TR_CHECKING */
-"URL kontrol ediliyor...",
-/* TR_CHECKING_FOR */
-"Kontrol: %s",
-/* TR_CHOOSE_THE_ISDN_CARD_INSTALLED */
-"Bu bilgisayarda yüklü ISDN kartını seçin.",
-/* TR_CHOOSE_THE_ISDN_PROTOCOL */
-"İstediğiniz ISDN iletişim kuralını seçin.",
-/* TR_CONFIGURE_DHCP */
-"DHCP ayar bilgilerini girerek DHCP sunucusunu yapılandırın.",
-/* TR_CONFIGURE_NETWORKING */
-"Ağ yapılandırması",
-/* TR_CONFIGURE_NETWORKING_LONG */
-"Şimdi öncelikle YEŞİL ara birim için doğru sürücüyü yükleyerek ağınızı yapılandırmanız gerekir. Bir ağ kartı yüklemek için otomatik tarama yapabilir ya da listeden doğru sürücüyü seçebilirsiniz. Eğer birden fazla ağ kartınız varsa yapılandırmadan sonra da bu ağ kartlarının yüklenebileceğini unutmayın. Ayrıca birden fazla aynı türde ağ kartınız varsa hangi kartı YEŞİL ara birime atadığınızı unutmayın. Her kart için özel modül parametreleri eklemeniz gerekebilir. Eğer YEŞİL ara birimi yapılandırırken tüm ağ kartları aktifse tüm türdeki kartlar için parametreleri girmeniz gerekir.",
-/* TR_CONFIGURE_NETWORK_DRIVERS */
-"Ağ sürücüleri ve hangi ara birim için hangi kartların atanacağını yapılandırın. Mevcut yapılandırma:\n\n",
-/* TR_CONFIGURE_THE_CDROM */
-"Uygun GÇ ve/veya IRQ seçerek CDROM yapılandır.",
-/* TR_CONGRATULATIONS */
-"Tebrikler!",
-/* TR_CONGRATULATIONS_LONG */
-"%s başarıyla yüklendi. Şimdi bilgisayarınızdaki cdyi çıkartın. Kurulum; ISDN, ağ kartları, sistem parolalarını yapılandırabileceğiniz programı çalıştıracaktır. Kurulum tamamlandıktan sonra bir internet tarayıcısı açıp adres satırına https://%s:444 (ya da %s sistem adınız) yazıp çevirmeli ağ (gerekliyse) ve uzaktan erişim yapılandırmalarınızı yapabilirsiniz.",
-/* TR_CONTINUE_NO_SWAP */
-"Sabit diskiniz çok küçük, ancak küçük bir takas alanı ile devam edebilirsiniz. (Dikkatli kullanın).",
-/* TR_CURRENT_CONFIG */
-"Geçerli yapılandırma: %s%s",
-/* TR_DEFAULT_GATEWAY */
-"Varsayılan Ağ Geçidi:",
-/* TR_DEFAULT_GATEWAY_CR */
-"Varsayılan Ağ Geçidi\n",
-/* TR_DEFAULT_LEASE */
-"Varsayılan kira (dakika):",
-/* TR_DEFAULT_LEASE_CR */
-"Varsayılan kira süresi\n",
-/* TR_DETECTED */
-"Algılanan: %s",
-/* TR_DHCP_HOSTNAME */
-"DHCP Ana bilgisayar adı:",
-/* TR_DHCP_HOSTNAME_CR */
-"DHCP Ana bilgisayar adı\n",
-/* TR_DHCP_SERVER_CONFIGURATION */
-"DHCP sunucu yapılandırması",
-/* TR_DISABLED */
-"Devre Dışı",
-/* TR_DISABLE_ISDN */
-"ISDN Devre Dışı",
-/* TR_DISK_TOO_SMALL */
-"Sabit diskiniz çok küçük.",
-/* TR_DNS_AND_GATEWAY_SETTINGS */
-"DNS ve Ağ Geçidi ayarları",
-/* TR_DNS_AND_GATEWAY_SETTINGS_LONG */
-"DNS ve ağ geçidi bilgilerini girin. Bu ayarlar sadece KIRMIZI ara birim adres ayarlarında Statik seçenği seçilmişse kullanılır. Eğer KIRMIZI ara birim adres ayarlarında DHCP seçeneğini seçtiyseniz bu alanı boş bırakabilirsiniz.",
-/* TR_DNS_GATEWAY_WITH_GREEN */
-"Yapılandırmanız KIRMIZI ara birim için ethernet adaptörünü kullanamaz. DNS ve Çevirmeli ağ kullanıcıları için ağ geçidi bilgisi çevirmeli ağda otomatik olarak yapılandırılır.",
-/* TR_DOMAINNAME */
-"Alan adı",
-/* TR_DOMAINNAME_CANNOT_BE_EMPTY */
-"Alan adı boş olamaz.",
-/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */
-"Alan adı boşluk içeremez.",
-/* TR_DOMAINNAME_NOT_VALID_CHARS */
-"Alan adı sadece harfler, sayılar, tire ve noktadan oluşturulabilir.",
-/* TR_DOMAIN_NAME_SUFFIX */
-"Alan adı son eki:",
-/* TR_DOMAIN_NAME_SUFFIX_CR */
-"Alan adı son eki\n",
-/* TR_DONE */
-"Bitti",
-/* TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS */
-"\nBu ayarları değiştirmek istiyor musunuz?",
-/* TR_DRIVERS_AND_CARD_ASSIGNMENTS */
-"Sürücüler ve kart atamaları",
-/* TR_ENABLED */
-"Aktif",
-/* TR_ENABLE_ISDN */
-"ISDN aktif",
-/* TR_END_ADDRESS */
-"Bitiş adresi:",
-/* TR_END_ADDRESS_CR */
-"Bitiş adresi\n",
-/* TR_ENTER_ADDITIONAL_MODULE_PARAMS */
-"Bazı ISDN kartları (özellikle ISA olanlar) IRQ ve GÇ adres bilgilerini ayarlamak için ek modül parametrelerine ihtiyaç duyar.Böyle bir ISDN kartınız varsa burada bu ek parametreleri girin. Örneğin: \"io = 0x280 irq = 9 \". Bunlar kart algılama sırasında kullanılacaktır.",
-/* TR_ENTER_ADMIN_PASSWORD */
-"%s 'admin' kullanıcı parolasını girin. Bu, %s web yönetimi sayfalarının kayıtlarına erişebilen kullanıcıdır.",
-/* TR_ENTER_DOMAINNAME */
-"Alan adını girin",
-/* TR_ENTER_HOSTNAME */
-"Makinenin ana bilgisayar adını girin.",
-/* TR_ENTER_IP_ADDRESS_INFO */
-"IP adres bilgilerini girin.",
-/* TR_ENTER_NETWORK_DRIVER */
-"Otomatik olarak bir ağ kartı algılanamadı. Ağ kartı için sürücü ve isteğe bağlı olan parametreleri girin.",
-/* TR_ENTER_ROOT_PASSWORD */
-"IPFire 'root' kullanıcı parolasını girin. Komut satırı erişimi için bu kullanıcı ile oturum açın.",
-/* TR_ENTER_SETUP_PASSWORD */
-"KALDIRILACAK",
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
-"%s ara birimi için IP adres bilgilerini girin.",
-/* TR_ENTER_THE_LOCAL_MSN */
-"Yerel telefon numarasını girin (MSN/EAZ).",
-/* TR_ENTER_URL */
-"IPFire-<version>.tgz ve images/scsidrv-<version>.img dosyaları için URL adresini girin. UYARI: DNS mevcut deği! Bu sadece http://X.X.X.X/<directory> olmalıdır.",
-/* TR_ERROR */
-"Hata",
-/* TR_ERROR_PROBING_CDROM */
-"CD-ROM sürücüsü bulunamadı.",
-/* TR_ERROR_WRITING_CONFIG */
-"Yapılandırma bilgilerini yazma hatası.",
-/* TR_EURO_EDSS1 */
-"Avrupa (EDSS1)",
-/* TR_EXTRACTING_MODULES */
-"Modüller açılıyor...",
-/* TR_FAILED_TO_FIND */
-"URL dosyası bulunamadı.",
-/* TR_FOUND_NIC */
-"%s makinenizde aşağıdaki NIC tespit edildi: %s",
-/* TR_GERMAN_1TR6 */
-"Alman 1TR6",
-/* TR_HELPLINE */
-"              <Tab>/<Alt-Tab> öğeler arasında geçiş   |  <Space> seçim",
-/* TR_HOSTNAME */
-"Ana bilgisayar adı",
-/* TR_HOSTNAME_CANNOT_BE_EMPTY */
-"Ana bilgisayar adı boş olamaz.",
-/* TR_HOSTNAME_CANNOT_CONTAIN_SPACES */
-"Ana bilgisayar adı boşluk içeremez.",
-/* TR_HOSTNAME_NOT_VALID_CHARS */
-"Ana bilgisayar adı sadece harf, rakam ve tire içerebilir.",
-/* TR_INITIALISING_ISDN */
-"ISDN başlatılıyor...",
-/* TR_INSERT_CDROM */
-"Lütfen CD_ROM sürücüsüne %s CDsi yerleştirin.",
-/* TR_INSERT_FLOPPY */
-"Lütfen disket sürücüsüne %s sürücü disketini yerleştirin.",
-/* TR_INSTALLATION_CANCELED */
-"Kurulum iptal edildi.",
-/* TR_INSTALLING_FILES */
-"Dosyalar yükleniyor...",
-/* TR_INSTALLING_GRUB */
-"GRUB yükleniyor...",
-/* TR_INSTALLING_LANG_CACHE */
-"Dil dosyası yükleniyor...",
-/* TR_INTERFACE */
-"Ara birim - %s",
-/* TR_INTERFACE_FAILED_TO_COME_UP */
-"Ara birim yükseltmesi başarısız oldu.",
-/* TR_INVALID_FIELDS */
-"Aşağıdaki alan geçersiz:\n\n",
-/* TR_INVALID_IO */
-"Girilen GÇ bağlantı noktası detayları geçersiz. ",
-/* TR_INVALID_IRQ */
-"Girilen IRQ ayrıntıları geçersiz.",
-/* TR_IP_ADDRESS_CR */
-"IP adresi\n",
-/* TR_IP_ADDRESS_PROMPT */
-"IP adresi:",
-/* TR_ISDN_CARD */
-"ISDN kartı",
-/* TR_ISDN_CARD_NOT_DETECTED */
-"ISDN kartı algılanamdı. Kart bir ISA türü veya özel gereksinimleri olan bir kartsa ek modül parametreleri belirtmeniz gerekebilir.",
-/* TR_ISDN_CARD_SELECTION */
-"ISDN kart seçimi",
-/* TR_ISDN_CONFIGURATION */
-"ISDN Yapılandırması",
-/* TR_ISDN_CONFIGURATION_MENU */
-"ISDN yapılandırma listesi",
-/* TR_ISDN_NOT_SETUP */
-"ISDN kurulamadı. Bazı ürünleri seçmediniz.",
-/* TR_ISDN_NOT_YET_CONFIGURED */
-"ISDN henüz yapılandırılmamış. Yapılandırmak istediğiniz öğeyi seçin.",
-/* TR_ISDN_PROTOCOL_SELECTION */
-"ISDN kural seçimi",
-/* TR_ISDN_STATUS */
-"ISDN şu anda %s.\n\n   Kural: %s\n   Kart: %s\n   Yerel telefon numarası: %s\n\nYeniden yapılandırmanız için istediğiniz öğeyi seçin ya da geçerli ayarları kullanmayı tercih edin.",
-/* TR_KEYBOARD_MAPPING */
-"Klavye haritası",
-/* TR_KEYBOARD_MAPPING_LONG */
-"Aşağıdaki listeden kullandığınız klavye türünü seçin.",
-/* TR_LEASED_LINE */
-"Kiralık hat",
-/* TR_LOADING_MODULE */
-"Modül yükleniyor...",
-/* TR_LOADING_PCMCIA */
-"PCMCIA modülleri yükleniyor...",
-/* TR_LOOKING_FOR_NIC */
-"Arayan: %s",
-/* TR_MAKING_BOOT_FILESYSTEM */
-"Önyükleme dosya sistemi yapılandırılıyor...",
-/* TR_MAKING_LOG_FILESYSTEM */
-"Günlük dosya sistemi yapılandırılıyor...",
-/* TR_MAKING_ROOT_FILESYSTEM */
-"Root dosya sistemi yapılandırılıyor...",
-/* TR_MAKING_SWAPSPACE */
-"Takas alanı yapılandırılıyor...",
-/* TR_MANUAL */
-"* EL İLE *",
-/* TR_MAX_LEASE */
-"En fazla kira (dak):",
-/* TR_MAX_LEASE_CR */
-"En fazla kira süresi\n",
-/* TR_MISSING_BLUE_IP */
-"MAVİ ara birimdeki IP bilgileri eksik.",
-/* TR_MISSING_ORANGE_IP */
-"TURUNCU ara birimdeki IP bilgileri eksik.",
-/* TR_MISSING_RED_IP */
-"KIRMIZI ara birimdeki IP bilgileri eksik.",
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */
-"Modül adı boş olamaz.",
-/* TR_MODULE_PARAMETERS */
-"Size gereken sürücü için modül adı ve parametrelerini girin.",
-/* TR_MOUNTING_BOOT_FILESYSTEM */
-"Önyükleme dosya sistemi bağlanıyor...",
-/* TR_MOUNTING_LOG_FILESYSTEM */
-"Günlük dosya sistemi bağlanıyor...",
-/* TR_MOUNTING_ROOT_FILESYSTEM */
-"Root dosya sistemi bağlanıyor...",
-/* TR_MOUNTING_SWAP_PARTITION */
-"Takas bölümü bağlanıyor...",
-/* TR_MSN_CONFIGURATION */
-"Yerel telefon numarası (MSN/EAZ)",
-/* TR_NETMASK_PROMPT */
-"Ağ maskesi:",
-/* TR_NETWORKING */
-"Ağ",
-/* TR_NETWORK_ADDRESS_CR */
-"Ağ adresi\n",
-/* TR_NETWORK_ADDRESS_PROMPT */
-"Ağ adresi:",
-/* TR_NETWORK_CONFIGURATION_MENU */
-"Ağ yapılandırma listesi",
-/* TR_NETWORK_CONFIGURATION_TYPE */
-"Ağ yapılandırma türü",
-/* TR_NETWORK_CONFIGURATION_TYPE_LONG */
-"%s için ağ yapılandırmasını seçin. Aşağıdaki yapılandırma türleri ethernet kartına atanmış ara birimleri listeler. Eğer bu ayarları değiştirirseniz ağın yeniden başlatılması gerekir ve yeniden ağ sürücülerinin atanması gerekir.",
-/* TR_NETWORK_MASK_CR */
-"Ağ maskesi\n",
-/* TR_NETWORK_SETUP_FAILED */
-"Ağ kurulumu başarısız oldu.",
-/* TR_NOT_ENOUGH_CARDS_WERE_ALLOCATED */
-"Yeterince kart tahsis edilemedi.",
-/* TR_NO_BLUE_INTERFACE */
-"Hiçbir MAVİ ara birim atanmamış.",
-/* TR_NO_CDROM */
-"CD-ROM bulunamadı.",
-/* TR_NO_GREEN_INTERFACE */
-"Hiçbir YEŞİL ara birim atanmamış.",
-/* TR_NO_HARDDISK */
-"Sabit disk bulunamadı.",
-/* TR_NO_IPCOP_TARBALL_FOUND */
-"Web sunucuda hiçbir ipfire arşivi bulunamadı.",
-/* TR_NO_ORANGE_INTERFACE */
-"Hiçbir TURUNCU ara birim atanmamış.",
-/* TR_NO_RED_INTERFACE */
-"Hiçbir KIRMIZI ara birim atanmamış.",
-/* TR_NO_SCSI_IMAGE_FOUND */
-"Web sunucuda hiçbir SCSI kalıbı bulunamadı.",
-/* TR_NO_UNALLOCATED_CARDS */
-"Daha fazla ayrılmamış kart bulunmaktadır. Otamatik olarak daha fazla kartı aratabilir veya listeden bir sürücü seçebilirsiniz.",
-/* TR_OK */
-"Tamam",
-/* TR_PARTITIONING_DISK */
-"Disk bölümleniyor...",
-/* TR_PASSWORDS_DO_NOT_MATCH */
-"Parolalar eşeleşmiyor.",
-/* TR_PASSWORD_CANNOT_BE_BLANK */
-"Parola boş olamaz.",
-/* TR_PASSWORD_CANNOT_CONTAIN_SPACES */
-"Parla boşluk içeremez.",
-/* TR_PASSWORD_PROMPT */
-"Parola:",
-/* TR_PHONENUMBER_CANNOT_BE_EMPTY */
-"Telefon numarası boş olamaz.",
-/* TR_PREPARE_HARDDISK */
-"Sabit disk kurulum programı %s üzerindeki sabit diski hazırlayacak. İlk olarak diskiniz bölümlendirilir ve daha sonra bu bölüme dosya sistemleri oluşturulur.\n\nDİSKTEKİ TÜM VERİLER SİLİNECEKTİR. Kabul ediyor musunuz?",
-/* TR_PRESS_OK_TO_REBOOT */
-"Yeniden Başlat",
-/* TR_PRIMARY_DNS */
-"Birincil DNS:",
-/* TR_PRIMARY_DNS_CR */
-"Birincil DNS\n",
-/* TR_PROBE */
-"Araştır",
-/* TR_PROBE_FAILED */
-"Otomatik algılama başarısız oldu.",
-/* TR_PROBING_HARDWARE */
-"Donanım algılanıyor...",
-/* TR_PROBING_FOR_NICS */
-"Ağ kartları algılanıyor...",
-/* TR_PROBLEM_SETTING_ADMIN_PASSWORD */
-"%s 'admin' kullanıcı parolası ayarları sorunlu.",
-/* TR_PROBLEM_SETTING_ROOT_PASSWORD */
-"'root' parola ayarları sorunlu.",
-/* TR_PROBLEM_SETTING_SETUP_PASSWORD */
-"KALDIRILACAK",
-/* TR_PROTOCOL_COUNTRY */
-"Kural/Ülke",
-/* TR_PULLING_NETWORK_UP */
-"Ağ başlatılıyor...",
-/* TR_PUSHING_NETWORK_DOWN */
-"Ağ duruduruluyor...",
-/* TR_PUSHING_NON_LOCAL_NETWORK_DOWN */
-"Düşmeyen ağ bitirliyor...",
-/* TR_QUIT */
-"Çık",
-/* TR_RED_IN_USE */
-"ISDN (ya da herhangi bir harici bağlantı) şu anda kullanımda. Kırmızı arabirim aktifken ISDN seçeneğini yapılandıramazsınız.",
-/* TR_RESTART_REQUIRED */
-"\n\nYapılandırma tamamlandığında ağı yeniden başlatmanız gerekir.",
-/* TR_RESTORE */
-"Geri Yükle",
-/* TR_RESTORE_CONFIGURATION */
-"Eğer %s sistem yapılandırması ile ilgili bir disketiniz varsa disketinizi disket sürücüsüne yerleştirin ve Geri Yükle düğmesine basın.",
-/* TR_ROOT_PASSWORD */
-"'root' parolası",
-/* TR_SECONDARY_DNS */
-"İkincil DNS:",
-/* TR_SECONDARY_DNS_CR */
-"İkincil DNS\n",
-/* TR_SECONDARY_WITHOUT_PRIMARY_DNS */
-"Birincil DNS olmadan ikincil DNS belirtilmiş.",
-/* TR_SECTION_MENU */
-"Bölüm listesi",
-/* TR_SELECT */
-"Seç",
-/* TR_SELECT_CDROM_TYPE */
-"CD-ROM türünü seç",
-/* TR_SELECT_CDROM_TYPE_LONG */
-"Bu makinede CD-ROM bulunamadı. %s ile CD-ROM sürücüsüne erişilebilmesi için kullanmak istediğiniz sürücüyü aşağıdan seçin.",
-/* TR_SELECT_INSTALLATION_MEDIA */
-"Kurulum ortamını seçin",
-/* TR_SELECT_INSTALLATION_MEDIA_LONG */
-"%s birden fazla kaynaktan kurulabilir. En basit makineler de CD-ROM sürücüsü kullanmaktadır. Eğer bilgisayarınızda bir sürücü yoksa HTTP veya FTP üzerinden ayrıca kurulum dosyaları olan başka bir LAN üzerindeki makineden kurulum yapabilirsiniz.",
-/* TR_SELECT_NETWORK_DRIVER */
-"Ağ sürücüsünü seçin",
-/* TR_SELECT_NETWORK_DRIVER_LONG */
-"Bu makinede kurulu olan kart için bir ağ sürücüsü seçin. EL İLE seçeneğini seçerseniz özel gereksinimleri olan bir kart için (ISA kartlar gibi) sürücü modül adı ve parametrelerini yazmanız istenecektir",
-/* TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE */
-"Yeniden yapılandırmak istediğiniz ara birimi seçin.",
-/* TR_SELECT_THE_ITEM */
-"Yapılandırmak istediğiniz nesneyi seçin.",
-/* TR_SETTING_ADMIN_PASSWORD */
-"%s 'admin' kullanıcı parolası ayarlanıyor...",
-/* TR_SETTING_ROOT_PASSWORD */
-"'root' parolası ayarlanıyor....",
-/* TR_SETTING_SETUP_PASSWORD */
-"KALDIRILACAK",
-/* TR_SETUP_FINISHED */
-"Kurulum tamamlandı. Tamam seçneği ile ilerleyin.",
-/* TR_SETUP_NOT_COMPLETE */
-"Başlangıç kurulumu tamamlanamadı. Şimdi kurulumu tekrar çalıştırarak ayarlarınızın düzgün yapılmış olduğundan emin olun.",
-/* TR_SETUP_PASSWORD */
-"KALDIRILACAK",
-/* TR_SET_ADDITIONAL_MODULE_PARAMETERS */
-"Ek modül parametreleri ayarlayın",
-/* TR_SINGLE_GREEN */
-"Sadece YEŞİL ara birim için ayarlarınızı yapılandırın.",
-/* TR_SKIP */
-"Atla",
-/* TR_START_ADDRESS */
-"Başlangıç adresi:",
-/* TR_START_ADDRESS_CR */
-"Başlangıç adresi\n",
-/* TR_STATIC */
-"Statik",
-/* TR_SUGGEST_IO */
-"(öneri %x)",
-/* TR_SUGGEST_IRQ */
-"(öneri %d)",
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
-"Bu sürücü modülü zaten yüklü.",
-/* TR_TIMEZONE */
-"Zaman dilimi",
-/* TR_TIMEZONE_LONG */
-"Aşağıdaki listeden bulunduğunuz zaman dilimini seçin.",
-/* TR_UNABLE_TO_EJECT_CDROM */
-"CD-ROM çıkarmak için açılamıyor.",
-/* TR_UNABLE_TO_EXTRACT_MODULES */
-"Modüller ayıklanamıyor.",
-/* TR_UNABLE_TO_FIND_ANY_ADDITIONAL_DRIVERS */
-"Herhangi bir ek sürücü bulmak için açılamıyor.",
-/* TR_UNABLE_TO_FIND_AN_ISDN_CARD */
-"Bu bilgisayar da bir ISDN kartı bulunamadı. Kart bir ISA türüdür veya özel gereksinimleri olan bir kart olabilir. Bu durumda ek modül parametreleri belirtmeniz gerekebilir.",
-/* TR_UNABLE_TO_INITIALISE_ISDN */
-"ISDN başlatmak için açılamıyor.",
-/* TR_UNABLE_TO_INSTALL_FILES */
-"Dosyaları kurmak için açılamıyor.",
-/* TR_UNABLE_TO_INSTALL_LANG_CACHE */
-"Dil dosyalarını kurmak için açılamıyor.",
-/* TR_UNABLE_TO_INSTALL_GRUB */
-"GRUB kurulamıyor.",
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
-"Sürücü modülü yüklenemiyor.",
-/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */
-"Ön yükleme dosya sistemi oluşturulamıyor.",
-/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */
-"Günlük dosya sistemi oluşturulamıyor.",
-/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */
-"Root dosya sistemi oluşturulamıyor.",
-/* TR_UNABLE_TO_MAKE_SWAPSPACE */
-"Takas alanı oluşturulamıyor.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */
-"Sembolik bağı oluşturulamıyor: /dev/harddisk.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */
-"Sembolik bağı oluşturulamıyor: /dev/harddisk1.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */
-"Sembolik bağı oluşturulamıyor: /dev/harddisk2.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */
-"Sembolik bağı oluşturulamıyor: /dev/harddisk3.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */
-"Sembolik bağı oluşturulamıyor: /dev/harddisk4.",
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */
-"Sembolik bağı oluşturulamıyor: /dev/root.",
-/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */
-"Ön yükleme dosya sistemi bağlanamadı.",
-/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */
-"Günlük dosya sistemi bağlanamadı.",
-/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */
-"Proc dosya sistemi bağlanamadı.",
-/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */
-"Root dosya sistemi bağlanamadı.",
-/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */
-"Takas bölümü bağlanamadı.",
-/* TR_UNABLE_TO_OPEN_HOSTS_FILE */
-"Ana bilgisayar dosyası açılamadı.",
-/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */
-"Ayarlar dosyası açılamadı.",
-/* TR_UNABLE_TO_PARTITION */
-"Dsik bölümleri açılamadı.",
-/* TR_UNABLE_TO_REMOVE_TEMP_FILES */
-"Geçici olarak indirilen dosyalar kaldırılamıyor.",
-/* TR_UNABLE_TO_SET_HOSTNAME */
-"Ana bilgisayar adı ayarlamak için açılamıyor.",
-/* TR_UNABLE_TO_UNMOUNT_CDROM */
-"CDROM/floppydisk ayrılamıyor.",
-/* TR_UNABLE_TO_UNMOUNT_HARDDISK */
-"Sabit disk ayrılamıyor.",
-/* TR_UNABLE_TO_WRITE_ETC_FSTAB */
-"Yazmak için açılamıyor: /etc/fstab",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTNAME */
-"Yazmak için açılamıyor: /etc/hostname",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS */
-"Yazmak için açılamıyor: /etc/hosts.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW */
-"Yazmak için açılamıyor: /etc/hosts.allow.",
-/* TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY */
-"Yazmak için açılamıyor: /etc/hosts.deny.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_ETHERNET_SETTINGS */
-"Yazmak için açılamıyor: %s/ethernet/settings.",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF */
-"Yazmak için açılamıyor: %s/main/hostname.conf",
-/* TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_SETTINGS */
-"Yazmak için açılamıyor: %s/main/settings.",
-/* TR_UNCLAIMED_DRIVER */
-"Bu türe ait sahipsiz bir ethernet kartı yok:\n%s\n\nBunu atayabilirsiniz:",
-/* TR_UNKNOWN */
-"BİLİNMEYEN",
-/* TR_UNSET */
-"KURULMAMIŞ",
-/* TR_USB_KEY_VFAT_ERR */
-"Bu USB anahtarı geçersiz (vfat bölümü bulunamadı).",
-/* TR_US_NI1 */
-"US NI1",
-/* TR_WARNING */
-"UYARI",
-/* TR_WARNING_LONG */
-"Bu IP adresini değiştiriseniz %s makinesi ile uzak oturum bağlantısı kopar ve yeniden IP adresi girmeniz gerekir. Bu riskli bir işlemdir. Bu işlem sırasında bir şeyler ters giderse düzeltmek için makineye fiziksel erişiminiz olmalıdır. Makineye fiziksel erişiminiz varsa bu işlemi gerçekleştirin.",
-/* TR_WELCOME */
-"%s kurulum programına hoş geldiniz. Sonraki ekranların herhangi birinde İptal seçeneğini seçtiğinizde bilgisayar yeniden başlatılacaktır.",
-/* TR_YOUR_CONFIGURATION_IS_SINGLE_GREEN_ALREADY_HAS_DRIVER */
-"Zaten atanmış bir sürücünüz var. Yapılandırma sadece YEŞİL ara birim için yapılır.",
-/* TR_YES */
-"Evet",
-/* TR_NO */
-"Hayır",
-/* TR_AS */
-"-",
-/* TR_IGNORE */
-"Yok say",
-/* TR_PPP_DIALUP */
-"PPP ÇEVİRMELİ AĞ (PPPoE, modem, ATM ...)",
-/* TR_DHCP */
-"DHCP",
-/* TR_DHCP_STARTSERVER */
-"DHCP-sunucusu başlatılıyor ...",
-/* TR_DHCP_STOPSERVER */
-"DHCP-sunucusu durduruluyor ...",
-/* TR_LICENSE_ACCEPT */
-"Bu lisansı kabul ediyorum.",
-/* TR_LICENSE_NOT_ACCEPTED */
-"Lisans kabul edilmedi. Çık!",
-/* TR_EXT2FS_DESCR */
-"Ext2 - Günlük olmadan dosya sistemi (flash sürücüler için önerilen)",
-/* TR_EXT3FS_DESCR */
-"Ext3 - Günlük ile dosya sistemi",
-/* TR_EXT4FS_DESCR */
-"Ext4 - Günlük ile dosya sistemi",
-/* TR_REISERFS_DESCR */
-"ReiserFS - Günlük ile dosya sistemi",
-/* TR_NO_LOCAL_SOURCE */
-"Yerel kaynak medya bulunamadı. İndirme başlatılıyor​​.",
-/* TR_DOWNLOADING_ISO */
-"Kurulum kalıbı indiriliyor ...",
-/* TR_DOWNLOAD_ERROR */
-"İndirirken hata!",
-/* TR_DHCP_FORCE_MTU */
-"DHCP mtu zorla:",
-/* TR_IDENTIFY */
-"Belirle",
-/* TR_IDENTIFY_SHOULD_BLINK */
-"Seçilen bağlantı noktasının şimdi yanıp sönmesi gerekir...",
-/* TR_IDENTIFY_NOT_SUPPORTED */
-"İşlev bu bağlantı noktası tarafından desteklenmiyor.",
-};
index c75895124590524f412a2072cb08393487c93d2b..c215b5a32c71e2cabb1a0bf77656c4f18384de5a 100644 (file)
--- a/lfs/bash
+++ b/lfs/bash
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2007-2014   IPFire Team   <info@ipfire.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        #
index 5a85002bae545d35d6b3bb75e086505bcaaaf796..79920b8ddbb787ad555ad4392e5822d09a08c12e 100644 (file)
--- a/lfs/cdrom
+++ b/lfs/cdrom
@@ -78,7 +78,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        tar -x -C /tmp -f /$(SNAME).tar
        rm -f /$(SNAME).tar
        @mkdir /tmp/sys
-       cd /tmp && tar  cf /install/cdrom/$(SNAME)-$(VERSION).tlz $(TAR_OPTIONS) * && rm -rf *
+       cd /tmp && tar  cf /install/cdrom/distro.img $(TAR_OPTIONS) * && rm -rf *
 
        # Other files
        touch /install/cdrom/$(SNAME)-$(VERSION)-core$(CORE).media
@@ -86,16 +86,12 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cp $(DIR_SRC)/doc/COPYING                               /install/cdrom/
        cp $(DIR_SRC)/doc/{ChangeLog,packages-list.txt} /install/cdrom/doc
 
-       # Configuration
-       mkdir -p /install/cdrom/boot
-       cp $(DIR_SRC)/config/syslinux/unattended.conf    /install/cdrom/boot/unattended.conf
-
        # Make the ISO
        mkdir -p /install/cdrom/boot/isolinux
        dd if=/dev/zero  bs=1k count=2            > /install/cdrom/boot/isolinux/boot.catalog
 ifneq "$(MACHINE_TYPE)" "arm"
        cp /boot/vmlinuz-$(KVER)-ipfire             /install/cdrom/boot/isolinux/vmlinuz
-       cp /install/images/initrd                   /install/cdrom/boot/isolinux/instroot
+       dracut --force -a "installer" --strip --xz /install/cdrom/boot/isolinux/instroot $(KVER)-ipfire
        cp $(DIR_SRC)/config/syslinux/boot.png      /install/cdrom/boot/isolinux/boot.png
        cp /usr/lib/memtest86+/memtest.bin          /install/cdrom/boot/isolinux/memtest
        cp /usr/share/ipfire-netboot/ipxe.lkrn      /install/cdrom/boot/isolinux/netboot
@@ -109,8 +105,8 @@ endif
        cd /install/cdrom && find -type f ! -name md5sum.txt | grep -v "./boot" | \
                                                xargs md5sum > md5sum.txt
 
-ifeq "$(MACHINE_TYPE)" "arm"
        mkdir -p /install/images
+ifeq "$(MACHINE_TYPE)" "arm"
        cd /install/cdrom && mkisofs -J -r -V "$(NAME)_$(VERSION)" \
                . > /install/images/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso
 else
diff --git a/lfs/compat-drivers b/lfs/compat-drivers
deleted file mode 100644 (file)
index 57a9b16..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2013  IPFire Team <info@ipfire.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 3 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, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VERSUFIX=ipfire$(KCFG)
-
-VER        = 3.8.3-2-snpu
-
-ifeq "$(KCFG)" "-xen"
-       KVER = 2.6.32.61
-endif
-
-THISAPP    = compat-drivers-$(VER)
-DL_FILE    = compat-drivers-$(VER).tar.bz2
-DL_FROM    = $(URL_IPFIRE)
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX)
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-objects = $(DL_FILE) asix-4.7.0a.tar.xz asix_gb-1.4.0a.tar.xz
-
-$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-asix-4.7.0a.tar.xz = $(DL_FROM)/asix-4.7.0a.tar.xz
-asix_gb-1.4.0a.tar.xz = $(DL_FROM)/asix_gb-1.4.0a.tar.xz
-
-$(DL_FILE)_MD5 = 5a1e27e5b694aa5022116a5a3220bfdc
-asix-4.7.0a.tar.xz_MD5=491f7e8c3ee74433975812d86a0fa98b
-asix_gb-1.4.0a.tar.xz_MD5=9c9db731631abf00da2069d03253f9a7
-
-install : $(TARGET)
-
-check : $(patsubst %,$(DIR_CHK)/%,$(objects))
-
-download :$(patsubst %,$(DIR_DL)/%,$(objects))
-
-md5 : $(subst %,%_MD5,$(objects))
-
-###############################################################################
-# Downloading, checking, md5sum
-###############################################################################
-
-$(patsubst %,$(DIR_CHK)/%,$(objects)) :
-       @$(CHECK)
-
-$(patsubst %,$(DIR_DL)/%,$(objects)) :
-       @$(LOAD)
-
-$(subst %,%_MD5,$(objects)) :
-       @$(MD5)
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-       @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar xaf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-drivers-3.8-1-u-kref_get_unless_zero.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-drivers-3.8.3-ath_ignore_eeprom_regdomain.patch
-
-       # kfifo has no license info and taints kernel
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless-2.6.39_kfifo_module_info.patch
-
-       # Codel patches
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless_codel-avoid-a-nul-rec_inv_sqrt.patch
-
-       # Build ath5k only if target has pci
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless-3.5-build_ath5k_only_with_pci.patch
-
-       # Copy USB-Net drivers from Kernel...
-       mkdir $(DIR_APP)/drivers/net/usb/new
-       cp $(DIR_APP)/drivers/net/usb/*.c $(DIR_APP)/drivers/net/usb/new
-       cp /usr/src/linux/drivers/net/usb/{*.c,*.h,Makefile} $(DIR_APP)/drivers/net/usb
-       cp $(DIR_APP)/drivers/net/usb/new/*.c $(DIR_APP)/drivers/net/usb
-
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless-2.6.34-usbnet_compile.patch
-
-       # Build Updated asix usb lan driver
-       cd $(DIR_APP)/drivers/net/usb && tar xvJf $(DIR_DL)/asix-4.7.0a.tar.xz
-
-       # Build Updated asix usb gigabit lan driver
-       cd $(DIR_APP)/drivers/net/usb && tar xvJf $(DIR_DL)/asix_gb-1.4.0a.tar.xz
-       echo 'obj-$$(CONFIG_USB_ASIX_GB) += asix_gb.o' >> $(DIR_APP)/drivers/net/usb/Makefile
-       cd $(DIR_APP) && echo export CONFIG_USB_ASIX_GB=m >> config.mk
-
-       # Add libartas uAP driver
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-wireless-3.5-libertas_uap.patch
-
-       # uAP will not build with xen-kernel (2.6)
-ifneq "$(KCFG)" "-xen"
-       cd $(DIR_APP) && echo export CONFIG_LIBERTAS_UAP=m >> config.mk
-endif
-
-ifeq "$(MACHINE_TYPE)" "arm"
-       # disable video because it not build on Arm
-       cd $(DIR_APP) && sed -i -e \
-               "s/export CONFIG_COMPAT_VIDEO_MODULES=y//g" config.mk
-endif
-
-       # Erase some modules that are obsolete or moved to other path
-       rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/net/bluetooth
-       rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/wireless/wl12*
-
-       cd $(DIR_APP) && make KLIB=/lib/modules/$(KVER)-$(VERSUFIX) \
-               KLIB_BUILD=/lib/modules/$(KVER)-$(VERSUFIX)/build \
-               KMODPATH_ARG='INSTALL_MOD_PATH=' KMODDIR=kernel install-modules
-
-       # Install firmware udev files...
-       cd $(DIR_APP)/udev && install -m 644 50-compat_firmware.rules /lib/udev/rules.d/
-       cd $(DIR_APP)/udev && install -m 755 compat_firmware.sh /lib/udev/
-
-       -rm -rf $(DIR_APP)
-       @$(POSTBUILD)
index d0f35c205a080e9dfbdcd3f0db00479d6f3fcf99..63d0a889823900ce3170771a354a9d53f5c53fb0 100644 (file)
 
 include Config
 
-VER        = 5.96
+VER        = 8.23
 
 THISAPP    = coreutils-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
+DL_FILE    = $(THISAPP).tar.xz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 
@@ -35,17 +35,22 @@ DIR_APP    = $(DIR_SRC)/$(THISAPP)
 #
 ifeq "$(ROOT)" ""
   TARGET = $(DIR_INFO)/$(THISAPP)
-  EXTRA_CONFIG = --prefix=/usr --disable-nls
-  EXTRA_MAKE =
-  EXTRA_INSTALL =
+  CONFIGURE_OPTIONS = --prefix=/usr
 else
   TARGET = $(DIR_INFO)/$(THISAPP)-tools
-  EXTRA_CONFIG = --prefix=/tools --disable-nls
-  EXTRA_MAKE = 
-  EXTRA_INSTALL = 
+  CONFIGURE_OPTIONS = --prefix=/tools
 endif
 
-EXTRA_CONFIG += ac_cv_func_working_mktime=yes
+CONFIGURE_OPTIONS += \
+       --disable-selinux \
+       --enable-largefile \
+       --disable-rpath \
+       --enable-install-program=arch \
+       --enable-no-install-program=hostname,kill \
+       --with-tty-group \
+       gl_cv_func_mknod_works=yes
+
+CFLAGS += -fno-strict-aliasing
 
 ###############################################################################
 # Top-level Rules
@@ -55,7 +60,7 @@ objects =$(DL_FILE)
 
 $(DL_FILE)                      = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5                  = bf55d069d82128fd754a090ce8b5acff
+$(DL_FILE)_MD5                  = abed135279f87ad6762ce57ff6d89c41
 
 install : $(TARGET)
 
@@ -84,24 +89,12 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/coreutils-5.96-rename-tee.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/coreutils-5.96-futimes.patch
-ifeq "$(ROOT)" ""
-ifeq "$(MACHINE)" "i586"
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-uname-1.patch
-endif
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-suppress_uptime_kill_su-1.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-i18n-1.patch
-       cd $(DIR_APP) && chmod +x tests/sort/sort-mb-tests
-       cd $(DIR_APP) && sed -i 's/_LEN 6/_LEN 20/' src/who.c
-endif
-       cd $(DIR_APP) && ./configure $(EXTRA_CONFIG)
-       cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE)
-       cd $(DIR_APP) && make $(EXTRA_INSTALL) install
-       #use hostname from inet-tools
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && ./configure $(CONFIGURE_OPTIONS)
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+
 ifeq "$(ROOT)" ""
-       rm /usr/bin/hostname
        mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
        mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
        mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
@@ -110,8 +103,7 @@ ifeq "$(ROOT)" ""
        ln -sf test /bin/[
        #ln -sf ../../bin/install /usr/bin
        dircolors -p > /etc/DIR_COLORS
-else
-       rm /tools/bin/hostname
 endif
+
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index 14e463e2bf5d1bb7ec5f38531511094c7aafa8a1..00e83e7c8a6107f26bc8c25b51cb4a6b27275cb8 100644 (file)
@@ -30,7 +30,7 @@ endif
 
 VERSUFIX=ipfire$(KCFG)
 
-VER        = 1.4
+VER        = 6aa62a2c320b04f55fdfe0ed015c3d9b48997239
 
 THISAPP    = cryptodev-linux-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -46,7 +46,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 7b0ac1c0a88d8fbe7316db02f21666e6
+$(DL_FILE)_MD5 = ddf7876487c876f6676ef0e050e9d204
 
 install : $(TARGET)
 
index 8f74c5a305f8e37376fb3f16d2f655510da85c4e..2a826cd7039b7996feab4e4ce242189739167f6b 100644 (file)
@@ -79,7 +79,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/cyrus-imapd-2.2.12-autocreate-0.9.4.diff
        cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/cyrus-imapd-2.2.12-gcc4.patch
-#      cp -f /usr/include/et/com_err.h /usr/include/com_err.h
        cd $(DIR_APP) && ./configure --prefix=/usr --with-service-path=/usr/lib/cyrus \
                                --with-cyrus-prefix=/usr/lib/cyrus --sysconfdir=/var/ipfire/cyrusimap \
                                --with-auth=unix --with-perl --with-sasl --with-idle=idled \
index aacf7474f69da3408d0a334c99a245d0615bd3ee..fef3ad77d3b074621345923fc123869f6d0da997 100644 (file)
 
 include Config
 
-VER        = 006
+VER        = 038
 
 THISAPP    = dracut-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
+DL_FILE    = $(THISAPP).tar.xz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 016052b57001789ec2acf89d382a82f5
+$(DL_FILE)_MD5 = 4487bd98000cc536c5c3839a2f112831
 
 install : $(TARGET)
 
@@ -69,40 +69,15 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dracut-038-always-enable-mdraid.patch
 
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dracut-006_lzma.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dracut-006_remove_cdrom_wait.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dracut-006_add_run_dir.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dracut-006_remove_scsi_wait.patch
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install sbindir=/sbin sysconfdir=/etc
 
-       cd $(DIR_APP) && cp -vf $(DIR_SRC)/src/dracut/switch_root.c .
+       rm -rf /usr/lib/dracut/modules.d/*{biosdevname,bootchart,dash,fips*,modsign,busybox,convertfs,network,ifcfg,url-lib,gensplash,cms,plymouth,btrfs,crypt*,dm,dmraid,dmsquash-live,livenet,lvm,multipath,qemu*,cifs,dasd*,fcoe*,iscsi,nbd,nfs,resume,ssh-client,zfcp*,systemd*,znet,securityfs,masterkey,selinux,usrmount,uefi-lib}
 
-       cd $(DIR_APP) && make $(MAKETUNING) WITH_SWITCH_ROOT=1
-       cd $(DIR_APP) && make install WITH_SWITCH_ROOT=1 \
-               sbindir=/sbin sysconfdir=/etc
+       cp -vf $(DIR_SRC)/config/dracut/dracut.conf /etc/dracut.conf
 
-       cp -vf $(DIR_SRC)/src/dracut/dracut.conf /etc/dracut.conf.d/
-
-       rm -rf /usr/share/dracut/modules.d/*{dash,fips,redhat-i18n,rpmversion,network,ifcfg,plymouth,btrfs,crypt,dm,dmraid,dmsquash-live,lvm,mdraid,multipath,dasd,dasd_mod,fcoe,iscsi,nbd,nfs,resume,uswsusp,zfcp,znet,selinux}
-
-       sed -e "s/--resolve-names=never//g" -i \
-               /usr/share/dracut/modules.d/99base/init
-
-       # Build initramdisk
-       # Strip all binaries in that initrd, because no debugging code is
-       # needed.
-
-ifeq "$(MACHINE_TYPE)" "arm"
-       # kirkwood kernel
-       /sbin/dracut --force --verbose --strip /boot/ipfirerd-$(KVER)-kirkwood.img $(KVER)-ipfire-kirkwood
-       cd /boot && mkimage -A arm -T ramdisk -C lzma -d ipfirerd-$(KVER)-kirkwood.img uInit-ipfire-kirkwood
-       # arm7 multi kernel
-       /sbin/dracut --force --verbose --strip /boot/ipfirerd-$(KVER)-multi.img $(KVER)-ipfire-multi
-       cd /boot && mkimage -A arm -T ramdisk -C lzma -d ipfirerd-$(KVER)-multi.img uInit-ipfire-multi
-#      cd /boot && cp -f ipfirerd-$(KVER)-multi.img zInit-ipfire-multi
-else
-       /sbin/dracut --force --verbose --strip /boot/ipfirerd-$(KVER).img $(KVER)-ipfire
-endif
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index 10a42ee766c09fa764e571fc9a68bbb5effbcc34..d23369c569b88da2e81b11df8feeff411c9d9a36 100644 (file)
@@ -25,9 +25,9 @@
 include Config
 
 VERSUFIX = ipfire$(KCFG)
-MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/e1000e
+MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/intel/e1000e
 
-VER        = 3.0.4
+VER        = 3.1.0.2
 
 THISAPP    = e1000e-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -43,7 +43,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 2d8364cd2043ef5c71291a4ca8b8084e
+$(DL_FILE)_MD5 = b8d770160691edd247a90070f45642ce
 
 install : $(TARGET)
 
index d8fe8fbd9c4058716339bf0cdf86520d714bbe80..5cc2cd62aafa78bdf3fdea9c9e13e7feaeb19e58 100644 (file)
--- a/lfs/fcron
+++ b/lfs/fcron
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2014  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # 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        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 3.0.4
+VER        = 3.2.0
 
 THISAPP    = fcron-$(VER)
 DL_FILE    = $(THISAPP).src.tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 5a26a1dfd91fdc7e87401e98aef870e6
+$(DL_FILE)_MD5 = 4b031c2fba32a98fa814d1557158b0e9
 
 install : $(TARGET)
 
index 70a38e24df8aa3aee05ff1edfb670b3704268a73..bfd7552867f7ecedb0962122ae3e6f6b3310f3fb 100644 (file)
--- a/lfs/file
+++ b/lfs/file
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2014  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # 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        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 5.11
+VER        = 5.20
 
 THISAPP    = file-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 16a407bd66d6c7a832f3a5c0d609c27b
+$(DL_FILE)_MD5 = 5d5e13eb3e0e13839da869a31790faf2
 
 install : $(TARGET)
 
index 0c36706569199978645aff06c6eeb397c3586711..0bc8d44dab30cf7a5d34acdcf6bf3f2b75c151d7 100644 (file)
@@ -71,6 +71,9 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
 
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch
+
        cd $(DIR_APP) && [ -x "configure" ] || sh ./autogen.sh
        cd $(DIR_APP) && ./configure --prefix=/usr
        cd $(DIR_APP) && make $(MAKETUNING)
index 4e28e4cd37746eb01d4d1211a5ff1ece6ea7acd4..d2050b4ab3ead388f4b86e55f0845aaebabd57e5 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2012  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2014  IPFire Team  <info@ipfire.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        #
@@ -29,6 +29,18 @@ VER = ipfire
 THISAPP    = flash-image
 TARGET     = $(DIR_INFO)/$(THISAPP)
 
+DEVICE     = $(shell losetup -f)
+PART_BOOT  = /dev/mapper/$(patsubst /dev/%,%,$(DEVICE))p1
+PART_ROOT  = /dev/mapper/$(patsubst /dev/%,%,$(DEVICE))p3
+
+ifeq "$(SCON)" "1"
+       IMAGE_FILE = /install/images/$(SNAME)-$(VERSION).1gb-ext4-scon.$(MACHINE)-full-core$(CORE).img.gz
+else
+       IMAGE_FILE = /install/images/$(SNAME)-$(VERSION).1gb-ext4.$(MACHINE)-full-core$(CORE).img.gz
+endif
+
+FSTAB_FMT = UUID=%s %-8s %-4s %-10s %d %d\n
+
 ###############################################################################
 # Top-level Rules
 ###############################################################################
@@ -44,21 +56,19 @@ md5 :
 ###############################################################################
 # Installation Details
 ###############################################################################
-IMGinst  := /install/images/$(SNAME)-$(VERSION).1gb-ext4.$(MACHINE)-full-core$(CORE).img
-IMGinsts := /install/images/$(SNAME)-$(VERSION).1gb-ext4-scon.$(MACHINE)-full-core$(CORE).img
 MNThdd   := /install/harddisk
-IMGpart  := /install/images/part_area
-IMGboot  := /install/images/bootfs
-IMGroot  := /install/images/rootfs
+IMG      := /install/images/image.img
 
 # All sizes in blocks
 ifeq "$(MACHINE_TYPE)" "arm"
+ BOOTLOADER =
  S_OFFSET = 8192
 
  # FAT32
  PART_TYPE = c
 else
- S_OFFSET = 32
+ BOOTLOADER = grub
+ S_OFFSET = 8192
 
  # Logical
  PART_TYPE = L
@@ -69,34 +79,42 @@ endif
 S_BOOT := $(shell echo $$(( 131072 - $(S_OFFSET) )))
 S_ROOT := 1433600
 
+PADDING = 100 # MB
+
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-       rm -rf $(MNThdd) $(IMGinst) $(IMGpart) $(IMGboot) $(IMGroot) && mkdir -p $(MNThdd)
+       # Stop if $(MNThdd) is still mounted
+       mountpoint $(MNThdd) && exit 1 || exit 0
+
+       rm -rf $(IMG) $(MNThdd) && mkdir -p $(MNThdd)
 
-       # Create first 32 sectors of image
-       dd if=/dev/zero of=$(IMGpart) bs=512 count=$(S_OFFSET)
+       # Allocate image on disk
+       dd if=/dev/zero of=$(IMG) bs=512 count=$$(( $(S_OFFSET) + $(S_BOOT) + $(S_ROOT) ))
+       losetup $(DEVICE) $(IMG)
+
+       # Write Partition table
+       echo -e "$(S_OFFSET),$(S_BOOT),$(PART_TYPE),*\n,0,0\n$$(( $(S_BOOT) + $(S_OFFSET) )),$(S_ROOT),L\n" \
+               | sfdisk -D -uS -H 64 -S 32 $(DEVICE)
 
-       # Create images for filesystems
-       dd if=/dev/zero of=$(IMGboot) bs=512 count=$(S_BOOT)
-       dd if=/dev/zero of=$(IMGroot) bs=512 count=$(S_ROOT)
+       kpartx -v -a $(DEVICE)
 
        # Format them
 ifeq "$(PART_TYPE)" "c"
-       mkfs.vfat $(IMGboot)
+       mkfs.vfat $(PART_BOOT)
 else
-       mkfs.ext2 -F $(IMGboot)
+       mkfs.ext2 -F $(PART_BOOT)
 endif
-       mkfs.ext4 -O ^has_journal,extent -F $(IMGroot)
+       mkfs.ext4 -O ^has_journal,extent -F $(PART_ROOT)
 
        # Most systems that use Flashimages has no RTC at boot
        # so the interval check should disables
-       tune2fs -i0 $(IMGroot)
+       tune2fs -i0 $(PART_ROOT)
 
-       # Mount Images
-       mount -o loop $(IMGroot) $(MNThdd)
-       mkdir $(MNThdd)/boot
-       mkdir $(MNThdd)/var
-       mkdir $(MNThdd)/var/log
-       mount -o loop $(IMGboot) $(MNThdd)/boot
+       # Mount root partition
+       mount $(PART_ROOT) $(MNThdd)
+
+       # Mount boot partition
+       mkdir -pv $(MNThdd)/boot
+       mount $(PART_BOOT) $(MNThdd)/boot
 
        # Install MLO and uboot first
 ifeq "$(MACHINE_TYPE)" "arm"
@@ -105,138 +123,99 @@ ifeq "$(MACHINE_TYPE)" "arm"
        cp -v /boot/zImage-ipfire-multi $(MNThdd)/boot/
        sync
        umount $(MNThdd)/boot
-       mount -o loop $(IMGboot) $(MNThdd)/boot
+       mount $(PART_BOOT) $(MNThdd)/boot
 endif
 
        # Install IPFire
-       tar -C $(MNThdd)/ -xvaf /install/cdrom/$(SNAME)-$(VERSION).tlz
+ifneq "$(MACHINE_TYPE)" "arm"
+       tar -x --lzma -C $(MNThdd)/ -f /install/cdrom/distro.img
+else
+       tar -x -C $(MNThdd)/ -f /install/cdrom/distro.img
+endif
        echo "LANGUAGE=en" >> $(MNThdd)/var/ipfire/main/settings
        echo "HOSTNAME=$(SNAME)" >> $(MNThdd)/var/ipfire/main/settings
        echo "THEME=ipfire" >> $(MNThdd)/var/ipfire/main/settings
+
+ifeq "$(SCON)" "1"
+       # Enable serial console
+       sed -i -e "s|1:2345:respawn:|#1:2345:respawn:|g" $(MNThdd)/etc/inittab
+       sed -i -e "s|2:2345:respawn:|#2:2345:respawn:|g" $(MNThdd)/etc/inittab
+       sed -i -e "s|3:2345:respawn:|#3:2345:respawn:|g" $(MNThdd)/etc/inittab
+       sed -i -e "s|4:2345:respawn:|#4:2345:respawn:|g" $(MNThdd)/etc/inittab
+       sed -i -e "s|5:2345:respawn:|#5:2345:respawn:|g" $(MNThdd)/etc/inittab
+       sed -i -e "s|6:2345:respawn:|#6:2345:respawn:|g" $(MNThdd)/etc/inittab
+       sed -i -e "s|#7:2345:respawn:|7:2345:respawn:|g" $(MNThdd)/etc/inittab
+
+ifeq "$(MACHINE_TYPE)" "arm"
+       sed -i -e "s| console=tty1 | console=ttyAMA0,115200n8 |g" $(MNThdd)/boot/cmdline.txt
+       sed -i -e "s| console=tty1 | console=ttyO2,115200n8 |g" $(MNThdd)/boot/boot.script
+       cd $(MNThdd)/boot && ./convert_bootscript
+endif
+endif
+
        -touch $(MNThdd)/lib/modules/$(KVER)-ipfire/modules.dep
        mkdir $(MNThdd)/proc
        mount --bind /proc $(MNThdd)/proc
        mount --bind /dev  $(MNThdd)/dev
        mount --bind /sys  $(MNThdd)/sys
-       chroot $(MNThdd) /usr/bin/perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
-       sed -i -e "s|DEVICE1|UUID=$$(blkid -sUUID $(IMGboot) | cut -d'"' -f2)|g" $(MNThdd)/etc/fstab
-ifeq "$(PART_TYPE)" "c"
-       # ARM flash images have a VFAT partition for /boot.
-       sed -i -e "s|ext2|vfat|" $(MNThdd)/etc/fstab
-endif
-       sed -i -e "s|DEVICE2|#DEVICE2|g" $(MNThdd)/etc/fstab
-       sed -i -e "s|DEVICE3|UUID=$$(blkid -sUUID $(IMGroot) | cut -d'"' -f2)|g" $(MNThdd)/etc/fstab
-       sed -i -e "s|DEVICE4|#DEVICE4|g" $(MNThdd)/etc/fstab
-       sed -i -e "s|FSTYPE|ext4|g" $(MNThdd)/etc/fstab
-
-ifneq "$(MACHINE_TYPE)" "arm"
-       sed -i -e "s|MOUNT|ro|g" $(MNThdd)/boot/grub/grub.conf
-       sed -i -e "s|KVER|$(KVER)|g" $(MNThdd)/boot/grub/grub.conf
-       sed -i -e "s|ROOT|UUID=$$(blkid -sUUID $(IMGroot) | cut -d'"' -f2)|g" $(MNThdd)/boot/grub/grub.conf
-       ln -s grub.conf $(MNThdd)/boot/grub/menu.lst
-
-       # Copy grub files manually
-       cp -f $(MNThdd)/usr/lib/grub/i386-pc/* $(MNThdd)/boot/grub/
-endif
 
-       # Setup symlink for partresize at first boot...
-       ln -sf ../init.d/partresize $(MNThdd)/etc/rc.d/rcsysinit.d/S25partresize
-       # Setup symlink for fsresize at second boot...
-       ln -sf ../init.d/fsresize $(MNThdd)/etc/rc.d/rcsysinit.d/S42fsresize
-
-       # Unmount
-       umount $(MNThdd)/proc
-       umount $(MNThdd)/dev
-       umount $(MNThdd)/sys
-       umount $(MNThdd)/boot
-       umount $(MNThdd)
-
-       # zerofree the ext2 images to get better compression
-ifneq "$(PART_TYPE)" "c"
-       zerofree $(IMGboot)
-       -fsck.ext2 -f -y $(IMGboot)
-       fsck.ext2 -f -y $(IMGboot)
-endif
-       zerofree $(IMGroot)
-       -fsck.ext4 -f -y  $(IMGroot)
-       fsck.ext4 -f -y  $(IMGroot)
+       chroot $(MNThdd) /usr/bin/perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
 
-       # Cat to an image
-       cat $(IMGpart) $(IMGboot) $(IMGroot) > $(IMGinst)
+       # Create /etc/fstab
+       printf "$(FSTAB_FMT)" "$$(blkid -o value -s UUID $(PART_BOOT))" "/boot" \
+               "auto" "defaults" 1 2 >  $(MNThdd)/etc/fstab
+       printf "$(FSTAB_FMT)" "$$(blkid -o value -s UUID $(PART_ROOT))" "/" \
+               "auto" "defaults" 1 1 >> $(MNThdd)/etc/fstab
 
-       # Write Partition table
-       echo -e "$(S_OFFSET),$(S_BOOT),$(PART_TYPE),*\n,0,0\n$$(( $(S_BOOT) + $(S_OFFSET) )),$(S_ROOT),L\n,0,0\n" \
-               | sfdisk -D -uS -H 64 -S 32 $(IMGinst)
+ifeq "$(BOOTLOADER)" "grub"
+ifeq "$(SCON)" "1"
+       # Enable serial console on GRUB
+       echo "GRUB_TERMINAL=\"serial\"" >> $(MNThdd)/etc/default/grub
+       echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> $(MNThdd)/etc/default/grub
 
-ifneq "$(MACHINE_TYPE)" "arm"
-       # Install grub
-       echo "device (hd0) $(IMGinst)" > /tmp/grubinst.tmp
-       echo "root (hd0,0)"           >> /tmp/grubinst.tmp
-       echo "setup (hd0)"            >> /tmp/grubinst.tmp
-       echo "quit"                   >> /tmp/grubinst.tmp
-       grub < /tmp/grubinst.tmp
-       rm -f /tmp/grubinst.tmp
+       sed -i -e "s|panic=10|& console=ttyS0,115200n8|g" $(MNThdd)/etc/default/grub
 endif
 
-       # Compress Image
-       gzip -f9 $(IMGinst)
+       # Create configuration
+       mkdir -pv $(MNThdd)/boot/grub
+       chroot $(MNThdd) grub-mkconfig -o /boot/grub/grub.cfg
 
-       # Now Build serialcon Version
-       # Mount Images
-       mount -o loop $(IMGroot) $(MNThdd)
-       mount -o loop $(IMGboot) $(MNThdd)/boot
+       # Insert the UUID because grub-mkconfig fails to detect that correctly
+       sed -i $(MNThdd)/boot/grub/grub.cfg \
+               -e "s/root=[a-z0-9\/]*/root=UUID=$$(blkid -o value -s UUID $(PART_ROOT))/g"
 
-ifneq "$(MACHINE_TYPE)" "arm"
-       sed -i -e "s|splashimage|#splashimage|g" $(MNThdd)/boot/grub/grub.conf
-       sed -i -e "s|#serial|serial|g" $(MNThdd)/boot/grub/grub.conf
-       sed -i -e "s|#terminal|terminal|g" $(MNThdd)/boot/grub/grub.conf
-       sed -i -e "s| panic=10 | console=ttyS0,115200n8 panic=10 |g" $(MNThdd)/boot/grub/grub.conf
-else
-       sed -i -e "s| console=tty1 | console=ttyAMA0,115200n8 |g" $(MNThdd)/boot/cmdline.txt
-       sed -i -e "s| console=tty1 | console=ttyO2,115200n8 |g" $(MNThdd)/boot/boot.script
-       cd $(MNThdd)/boot && ./convert_bootscript
+       # Install GRUB
+       grub-install --force --recheck --no-floppy \
+               --root-directory=$(MNThdd) $(DEVICE)
 endif
 
-       sed -i -e "s|1:2345:respawn:|#1:2345:respawn:|g" $(MNThdd)/etc/inittab
-       sed -i -e "s|2:2345:respawn:|#2:2345:respawn:|g" $(MNThdd)/etc/inittab
-       sed -i -e "s|3:2345:respawn:|#3:2345:respawn:|g" $(MNThdd)/etc/inittab
-       sed -i -e "s|4:2345:respawn:|#4:2345:respawn:|g" $(MNThdd)/etc/inittab
-       sed -i -e "s|5:2345:respawn:|#5:2345:respawn:|g" $(MNThdd)/etc/inittab
-       sed -i -e "s|6:2345:respawn:|#6:2345:respawn:|g" $(MNThdd)/etc/inittab
-       sed -i -e "s|#7:2345:respawn:|7:2345:respawn:|g" $(MNThdd)/etc/inittab
+       # Automatically resize the root partition to its maximum size at first boot
+       touch $(MNThdd)/.partresize
 
+       # Unmount
+       umount $(MNThdd)/proc
+       umount $(MNThdd)/sys
+       umount $(MNThdd)/dev
        umount $(MNThdd)/boot
        umount $(MNThdd)
 
-       # zerofree the ext3 images to get better compression
+       # zerofree the ext2 images to get better compression
 ifneq "$(PART_TYPE)" "c"
-       zerofree $(IMGboot)
-       -fsck.ext2 -f -y  $(IMGboot)
-       fsck.ext2 -f -y  $(IMGboot)
+       zerofree $(PART_BOOT)
+       -fsck.ext2 -f -y $(PART_BOOT)
+       fsck.ext2 -f -y $(PART_BOOT)
 endif
-       zerofree $(IMGroot)
-       -fsck.ext4 -f -y  $(IMGroot)
-       fsck.ext4 -f -y  $(IMGroot)
+       zerofree $(PART_ROOT)
+       -fsck.ext4 -f -y $(PART_ROOT)
+       fsck.ext4 -f -y $(PART_ROOT)
 
-       # Cat to an image
-       cat $(IMGpart) $(IMGboot) $(IMGroot) > $(IMGinsts)
-       rm -vf $(IMGpart) $(IMGboot) $(IMGroot)
+       kpartx -d -v $(DEVICE)
+       losetup -d $(DEVICE)
 
-       # Write Partition table
-       echo -e "$(S_OFFSET),$(S_BOOT),$(PART_TYPE),*\n,0,0\n$$(( $(S_BOOT) + $(S_OFFSET) )),$(S_ROOT),L\n,0,0\n" \
-               | sfdisk -D -uS -H 64 -S 32 $(IMGinsts)
-
-ifneq "$(MACHINE_TYPE)" "arm"
-       # Install grub
-       echo "device (hd0) $(IMGinsts)" > /tmp/grubinst.tmp
-       echo "root (hd0,0)"            >> /tmp/grubinst.tmp
-       echo "setup (hd0)"             >> /tmp/grubinst.tmp
-       echo "quit"                    >> /tmp/grubinst.tmp
-       grub < /tmp/grubinst.tmp
-       rm -f /tmp/grubinst.tmp
-endif
+       # Add padding at the end of the image (to fix alignment issues if the image is
+       # not copied to a block device)
+       dd if=/dev/zero bs=1M count=$(PADDING) >> $(IMG)
 
        # Compress Image
-       gzip -f9 $(IMGinsts)
-
-       rm -rf $(MNThdd) $(IMGpart) $(IMGboot) $(IMGroot)
+       pigz -f9 < $(IMG) > $(IMAGE_FILE)
+       rm -rf $(IMG) $(MNThdd)
diff --git a/lfs/gcc b/lfs/gcc
index a9f124b8cee0a393baa355d5acec5d44fd53db51..0264d37f8308aa989604c40f15303aa2c69ddbab 100644 (file)
--- a/lfs/gcc
+++ b/lfs/gcc
@@ -97,6 +97,9 @@ else
   EXTRA_MAKE = 
   EXTRA_INSTALL = 
 endif
+
+  # Disable stack protection in toolchain.
+  CFLAGS += -fno-stack-protector
 endif
 
 ifeq "$(MACHINE_TYPE)" "arm"
index 32c494f24388a06cbb18d45530f3372d148ca564..df3e39224f749f264de68ed2cdcacc659d2bc840 100644 (file)
--- a/lfs/glibc
+++ b/lfs/glibc
@@ -284,6 +284,11 @@ endif
        #   Makefile:235: *** mixed implicit and normal rules.  Stop.
        cd $(DIR_APP) && sed -i 's/ot \$$/ot:\n\ttouch $$@\n$$/' manual/Makefile
 
+ifeq "$(MACHINE_TYPE)" "arm"
+       # http://sourceware.org/ml/libc-ports/2011-09/msg00018.html
+       cd $(DIR_APP) && sed -e "s/PIC/SHARED/g" -i ports/sysdeps/arm/{,eabi/}{set,__long}jmp.S
+endif
+
 ifeq "$(ROOT)" ""
 ifeq "$(MACHINE_TYPE)" "arm"
        cd $(DIR_APP) && sed -i 's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.3 -o|' \
@@ -297,8 +302,21 @@ endif
        cd $(DIR_SRC)/glibc-build && \
                CFLAGS="$(CFLAGS) -fno-asynchronous-unwind-tables" \
                $(DIR_APP)/configure $(EXTRA_CONFIG)
+
+       sed -i $(DIR_SRC)/glibc-build/config.make \
+               -e "s/^build-pic-default=.*/build-pic-default=yes/"
+
+       # Build the glibc libraries without stack protection (as this is not supported)
+       echo "build-programs=no" >> $(DIR_SRC)/glibc-build/configparms
+       cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=$(MAKETUNING) \
+               CFLAGS="$(CFLAGS) -fno-stack-protector -U_FORTIFY_SOURCE" \
+               CXXFLAGS="$(CXXFLAGS) -fno-stack-protector -U_FORTIFY_SOURCE"
+
+       # Build the programs with hardening
+       : > $(DIR_SRC)/glibc-build/configparms
        cd $(DIR_SRC)/glibc-build && make PARALLELMFLAGS=$(MAKETUNING) \
                CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)"
+
        cd $(DIR_SRC)/glibc-build && make $(EXTRA_INSTALL) install
 
 ifeq "$(ROOT)" ""
index 5e5ead919a3d1d563fb72c7626342e6f203f856d..29835e0825430f892a1d3b88c57a35cb8736d209 100644 (file)
--- a/lfs/gnupg
+++ b/lfs/gnupg
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2014  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # 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        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 1.4.12
+VER        = 1.4.18
 
 THISAPP    = gnupg-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = ce3742e5c7912559cab7894ad8ba7f6b
+$(DL_FILE)_MD5 = 54db1be9588b11afbbdd8b82d4ea883a
 
 install : $(TARGET)
 
index e9b0b18d4db801dc629b81ccd7caf1751023bb79..ac201613d684520f699cf5f24c8ddad67d20ba73 100644 (file)
--- a/lfs/grep
+++ b/lfs/grep
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.14
+VER        = 2.21
 
 THISAPP    = grep-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -54,7 +54,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = d4a3f03849d1e17ce56ab76aa5a24cab
+$(DL_FILE)_MD5 = 43c48064d6409862b8a850db83c8038a
 
 install : $(TARGET)
 
index 2b0544bd7c053cac6a754d2d2168b62f5410e5bc..04aaa0b2542b283918f0628e167fdf06588aa3b3 100644 (file)
--- a/lfs/grub
+++ b/lfs/grub
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2012  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2014  IPFire Team  <info@ipfire.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        #
 
 include Config
 
-VER        = 0.97
+VER        = 2.00
 
 THISAPP    = grub-$(VER)
-DL_FILE    = $(THISAPP).tar.gz
+DL_FILE    = $(THISAPP).tar.xz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 SUP_ARCH   = i586
+
 CFLAGS     =
 CXXFLAGS   =
 
@@ -39,11 +40,14 @@ CXXFLAGS   =
 # Top-level Rules
 ###############################################################################
 
-objects = $(DL_FILE)
+objects = $(DL_FILE) \
+       unifont-7.0.03.pcf.gz
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+unifont-7.0.03.pcf.gz = $(DL_FROM)/unifont-7.0.03.pcf.gz
 
-$(DL_FILE)_MD5 = cd3f3eb54446be6003156158d51f4884
+$(DL_FILE)_MD5 = a1043102fbc7bcedbf53e7ee3d17ab91
+unifont-7.0.03.pcf.gz_MD5 = f6903ac8c1caeeb30c1e9a2975028401
 
 install : $(TARGET)
 
@@ -72,31 +76,37 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-
-       # Applying patches.
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-gentoo-14.patch
-       cd $(DIR_APP) && autoreconf
-       cd $(DIR_APP) && autoconf
-
-       # Build.
-       cd $(DIR_APP) && CFLAGS="$(CFLAGS)" ./configure --prefix=/usr \
-               --disable-auto-linux-mem-opt
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-2.00_disable_vga_fallback.patch
+       cd $(DIR_APP) && \
+               ./configure \
+                       --prefix=/usr \
+                       --sysconfdir=/etc \
+                       --with-platform=pc \
+                       --with-grubdir=grub \
+                       --program-transform-name=s,grub,grub, \
+                       --disable-grub-mount \
+                       --disable-werror
        cd $(DIR_APP) && make $(MAKETUNING)
        cd $(DIR_APP) && make install
 
-       # grub files
-       mkdir -vp /boot/grub
-       cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub
-       for i in $(DIR_SRC)/config/grub/*; do \
-           [ -f $$i ] && cp -f $$i /boot/grub; \
-       done
+       -mkdir -pv /boot/grub
+       touch /boot/grub/grub.cfg
+       ln -svf ../boot/grub/grub.cfg /etc/grub2.cfg
+       install -m 644 $(DIR_SRC)/config/grub2/splash.png /boot/grub/splash.png
+
+       -mkdir -pv /etc/default
+       install -m 644 $(DIR_SRC)/config/grub2/default /etc/default/grub
 
-       # generate default file
-       grub-set-default 0
+       # Disable hardening.
+       paxctl -mpes /usr/sbin/grub-bios-setup /usr/sbin/grub-probe
 
-       # Disable PaX mprotect for grub
-       paxctl -m /usr/sbin/grub
+       # We don't need to install unifont just to generate a grub2 compatible
+       # font archive for the graphical boot menu. The following command only
+       # converts Latin-1, Latin Extended A+B, Arrows, Box and Block characters.
+       /usr/bin/grub-mkfont --output /boot/grub/unifont.pf2 \
+               --range=0x0000-0x0241,0x2190-0x21FF,0x2500-0x259f \
+               $(DIR_DL)/unifont-7.0.03.pcf.gz
 
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index e4a44bf82f821db5928b8338b1b50b105953c013..e4e2e535bd7d59342259719930629dcd8fc6ff04 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2012  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2014  IPFire Team  <info@ipfire.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        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 9.42
+VER        = 9.45
 
 THISAPP    = hdparm-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 0af5a38b212fe08f5afbe5e37f34b40b
+$(DL_FILE)_MD5 = 1c75d0751a44928b6c4bc81fb16d7fe8
 
 install : $(TARGET)
 
index 691d83d93140ec6d4c7517abfd768b13aeb7aa36..ab562f24c94ff378a75f6ecea19a105b1fe89322 100644 (file)
@@ -112,7 +112,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
                        --prefix=/usr \
                        --libexecdir=/usr/lib/icinga/plugins \
                        --with-nagios-user=nobody \
-                       --with-nagios-group=nobody
+                       --with-nagios-group=nobody \
+                       --without-ipv6
        cd $(DIR_SRC)/nagios-plugins-$(PLUGIN_VER) && make $(MAKETUNING)
 
        # Install core
diff --git a/lfs/igb b/lfs/igb
index b8aadc48b66f414024bd35d06fcacc34effda492..fa762e093f20b773405d5da8332db85493067670 100644 (file)
--- a/lfs/igb
+++ b/lfs/igb
@@ -27,7 +27,7 @@ include Config
 VERSUFIX   = ipfire$(KCFG)
 MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/intel/igb/
 
-VER        = 5.1.2
+VER        = 5.2.9.3
 
 THISAPP    = igb-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -43,7 +43,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = c222b04f7e43afffc105d0d0db60c6c0
+$(DL_FILE)_MD5 = 814395d3b76090f378002bddecfd2dfc
 
 install : $(TARGET)
 
diff --git a/lfs/initrd b/lfs/initrd
deleted file mode 100644 (file)
index 42da9bc..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2014  IPFire Team  <info@ipfire.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 3 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, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VER = ipfire
-
-THISAPP    = initrd
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)
-
-SUP_ARCH   = i586
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-install : $(TARGET)
-
-check :
-
-download :
-
-md5 :
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) :
-       @$(PREBUILD)
-       rm -f /install/images/initrd
-
-       # Finish up initrd directory
-       -mkdir -p /install/initrd/{dev,etc,mnt,root,lib/modules/$(KVER)-ipfire/kernel/drivers,cdrom,dev,harddisk,proc,tmp,usr/share/terminfo/l,var/run,sys}
-       cd /install/initrd && lzma -d -c /boot/ipfirerd-$(KVER).img | cpio -i
-
-       # Copy Files packages for installer
-       find $(DIR_SRC)/config/rootfiles/installer/* -maxdepth 1 | xargs cat | grep -v "^#" > /tmp/ROOTFILES
-
-       # Patch Kernel Version to rootfiles
-       sed -e "s/KVER/$(KVER)/g" -i /tmp/ROOTFILES
-
-       -cd / && cpio -d -p /install/initrd < /tmp/ROOTFILES
-
-       # Copy hid and network modules (and deps)
-       cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/hid \
-               /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/
-       cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/net \
-               /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/
-       cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/pcmcia \
-               /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/
-       cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/ssb \
-               /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/
-       cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/uio \
-               /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/
-       cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/ptp \
-               /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/
-       cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/dca \
-               /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/
-       cp -aRf /lib/modules/$(KVER)-ipfire/kernel/drivers/pps \
-               /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/
-       # Remove wireless modules
-       rm -rf /install/initrd/lib/modules/$(KVER)-ipfire/kernel/drivers/net/wireless
-
-       cd /install/initrd/etc && rm -f fstab
-       cp -aRf $(DIR_SRC)/config/install/* /install/initrd/etc/
-       rm -rf /install/initrd/usr/share/man
-       chmod 755 /install/initrd/etc/halt /install/initrd/etc/rc_installer
-
-       cd /install/initrd/ && patch -Np0 < $(DIR_SRC)/src/patches/dracut-init_start_ipfireinstaller.patch
-
-       # Hide udev messages
-       sed -i -e "s|err|none|g" /install/initrd/etc/udev/udev.conf
-
-       # make new dependencies 
-       depmod -a -F /boot/System.map-$(KVER)-ipfire $(KVER)-ipfire
-
-       -mkdir -p /install/{images,mnt}
-       rm -rf /install/mnt/*
-
-       #Build Module deps for installer.
-       depmod -a -b /install/initrd/ -F /boot/System.map-$(KVER)-ipfire $(KVER)-ipfire
-
-       #Name service from dhcpcd
-       cp -f /etc/nsswitch.conf /install/initrd/etc/
-       cp -f $(DIR_SRC)/config/initrd/dhcpc/* /install/initrd/var/ipfire/dhcpc/dhcpcd-hooks/
-
-       # Install needed locales.
-       -mkdir -pv /install/initrd/usr/lib/locale
-       for lang in $(DIR_SRC)/langs/*; do \
-               for path in /usr/lib/locale/$${lang##*/}*; do \
-                       [ -d "$${path}" ] && cp -lrvf "$${path}" /install/initrd/usr/lib/locale/; \
-               done; \
-       done
-
-       cd /install/initrd && find . | cpio -o -H newc | lzma > /install/images/initrd
-       cd /install/initrd && find ./ -ls > $(DIR_INFO)/_build.initrd.log
-
-       @$(POSTBUILD)
index 4acf65e13eb965ae8673e0a40e72786a30d3a5c9..4894710ac371923dc6c0921723e69593fbb9f726 100644 (file)
@@ -162,8 +162,11 @@ $(TARGET) :
        ln -sf ../init.d/udev        /etc/rc.d/rcsysinit.d/S10udev
        ln -sf ../init.d/waitdrives  /etc/rc.d/rcsysinit.d/S19waitdrives
        ln -sf ../init.d/swap        /etc/rc.d/rcsysinit.d/S20swap
+       ln -sf ../init.d/partresize  /etc/rc.d/rcsysinit.d/S25partresize
        ln -sf ../init.d/checkfs     /etc/rc.d/rcsysinit.d/S30checkfs
        ln -sf ../init.d/mountfs     /etc/rc.d/rcsysinit.d/S40mountfs
+       ln -sf ../init.d/fsresize    /etc/rc.d/rcsysinit.d/S42fsresize
+       ln -sf ../init.d/mounttmpfs  /etc/rc.d/rcsysinit.d/S43mounttmpfs
        ln -sf ../init.d/udev_retry  /etc/rc.d/rcsysinit.d/S45udev_retry
        ln -sf ../init.d/cleanfs     /etc/rc.d/rcsysinit.d/S50cleanfs
        ln -sf ../init.d/setclock    /etc/rc.d/rcsysinit.d/S60setclock
index c02e0bac5c6f374212048e017b255f72e9eb3a1d..3364a4d7fd9849790821521554737c0d0be09a8a 100644 (file)
@@ -30,6 +30,9 @@ THISAPP    = installer
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 
+SLOGAN     = An Open Source Firewall Solution
+DOWNLOAD_URL = http://downloads.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso
+
 ###############################################################################
 # Top-level Rules
 ###############################################################################
@@ -48,25 +51,19 @@ md5 :
 
 $(TARGET) :
        @$(PREBUILD)
-       -mkdir -p /install/initrd/bin
-       @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/install+setup/* $(DIR_APP)
-       for i in $(DIR_SRC)/langs/*/install/lang_*.c ; do \
-           cp $$i $(DIR_APP)/libsmooth; \
-       done
-       cd $(DIR_APP)/libsmooth && chmod 755 makelangs.pl
-       cd $(DIR_APP)/libsmooth && make CFLAGS="-Os -fomit-frame-pointer -Wall \
-           -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \
-            -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'" 
-       cd $(DIR_APP)/install && make CFLAGS="-Os -fomit-frame-pointer -Wall \
-           -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \
-            -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"' -DKERNEL_VERSION='\"$(KVER)\"'"
-       cd $(DIR_APP)/install && install -v -m 0755 install probenic.sh \
-               downloadsource.sh mountsource.sh mountdest.sh /install/initrd/bin
-       #Patch ISO Name for download ...
-       sed -i -e "s|ipfire.iso|download.ipfire.org/releases/ipfire-2.x/$(VERSION)-core$(CORE)/$(SNAME)-$(VERSION).$(MACHINE)-full-core$(CORE).iso|g" \
-                               /install/initrd/bin/downloadsource.sh
-       #Patch version for mediacheck ...
-       sed -i -e "s|FullIPFireVersion|$(SNAME)-$(VERSION)-core$(CORE)|g" \
-                               /install/initrd/bin/mountsource.sh
+       @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/installer/* $(DIR_APP)
+
+       cd $(DIR_APP) && ./autogen.sh
+       cd $(DIR_APP) && ./configure \
+               --prefix=/usr \
+               --with-distro-name="$(NAME)" \
+               --with-distro-sname="$(SNAME)" \
+               --with-distro-slogan="$(SLOGAN)" \
+               --with-config-root="$(CONFIG_ROOT)" \
+               --with-download-url="$(DOWNLOAD_URL)"
+
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
similarity index 85%
rename from lfs/e1000
rename to lfs/ixgbe
index d9ae7c63f8c0cc63b3ab7946e0097b67e32bf67b..00dd320800e88d4f166a2a75088391ff17748193 100644 (file)
--- a/lfs/e1000
+++ b/lfs/ixgbe
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2012  IPFire Team <info@ipfire.org>                      #
+# Copyright (C) 2007-2014  IPFire Team <info@ipfire.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        #
 
 include Config
 
-VERSUFIX = ipfire$(KCFG)
+VERSUFIX   = ipfire$(KCFG)
+MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/intel/ixgbe
 
-# e1000 vendor modul is only for legacy xen kernel
-# The 3.2.x kernel has newer module.
+VER        = 3.21.2
 
-KVER = 2.6.32.61
-MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/e1000/
-
-VER        = 8.0.35
-
-THISAPP    = e1000-$(VER)
+THISAPP    = ixgbe-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
@@ -48,7 +43,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 0f452b979f7a7b9ea0b5a87a117f7408
+$(DL_FILE)_MD5 = dc635736d7e0ef5373131753f6609f38
 
 install : $(TARGET)
 
@@ -80,11 +75,11 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       #Save original e1000 module
-       -mv $(MODPATH)/e1000.ko \
-           $(MODPATH)/e1000.ko.org
+       #Save original ixgbe module
+       -mv $(MODPATH)/ixgbe.ko \
+           $(MODPATH)/ixgbe.ko.org
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
        cd $(DIR_APP)/src && make BUILD_KERNEL=$(KVER)-$(VERSUFIX)
-       cd $(DIR_APP)/src && install -m 644 e1000.ko $(MODPATH)
+       cd $(DIR_APP)/src && install -m 644 ixgbe.ko $(MODPATH)
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
diff --git a/lfs/libsmooth b/lfs/libsmooth
new file mode 100644 (file)
index 0000000..0f7a135
--- /dev/null
@@ -0,0 +1,59 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+#                                                                             #
+# 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 3 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, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER = ipfire
+
+THISAPP    = libsmooth
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+install : $(TARGET)
+
+check :
+
+download :
+
+md5 :
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) :
+       @$(PREBUILD)
+       @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/libsmooth/* $(DIR_APP)
+
+       cd $(DIR_APP) && ./autogen.sh
+       cd $(DIR_APP) && ./configure --prefix=/usr
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
+
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
index 6beb75c5707b21e7fc50057d66929e7cd3958dad..2644711c9543ce3a2eb1587914b0641589d08072 100644 (file)
--- a/lfs/linux
+++ b/lfs/linux
 
 include Config
 
-VER        = 3.10.44
+VER        = 3.14.25
 
-RPI_PATCHES = linux-3.10.38-grsec-1b49b45
-GRS_PATCHES = grsecurity-2.9.1-3.10.44-ipfire1.patch.xz
+RPI_PATCHES = 3.14.25-grsec-ipfire1
+A7M_PATCHES = 3.14.25-grsec-ipfire1
+GRS_PATCHES = grsecurity-3.0-3.14.25-201411220954.patch.xz
 
 THISAPP    = linux-$(VER)
 DL_FILE    = linux-$(VER).tar.xz
@@ -36,7 +37,7 @@ DIR_APP    = $(DIR_SRC)/$(THISAPP)
 CFLAGS     =
 CXXFLAGS   =
 
-PAK_VER    = 51
+PAK_VER    = 53
 DEPS      = ""
 
 VERSUFIX=ipfire$(KCFG)
@@ -67,16 +68,19 @@ endif
 ###############################################################################
 objects =$(DL_FILE) \
        rpi-patches-$(RPI_PATCHES).patch.xz \
+       arm7-multi-patches-$(A7M_PATCHES).patch.xz \
        $(GRS_PATCHES)
 
 
-$(DL_FILE)                             = $(URL_IPFIRE)/$(DL_FILE)
-rpi-patches-$(RPI_PATCHES).patch.xz    = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz
-$(GRS_PATCHES)                         = $(URL_IPFIRE)/$(GRS_PATCHES)
+$(DL_FILE)                                     = $(URL_IPFIRE)/$(DL_FILE)
+rpi-patches-$(RPI_PATCHES).patch.xz            = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz
+arm7-multi-patches-$(A7M_PATCHES).patch.xz     = $(URL_IPFIRE)/arm7-multi-patches-$(A7M_PATCHES).patch.xz
+$(GRS_PATCHES)                                 = $(URL_IPFIRE)/$(GRS_PATCHES)
 
-$(DL_FILE)_MD5                         = 8a4006eff3bbd8aff58fe4b443223e7a
-rpi-patches-$(RPI_PATCHES).patch.xz_MD5        = a7408e8bad57b4b2cb677dd5a0bfb7ff
-$(GRS_PATCHES)_MD5                     = 07e5d812146063ed5b2ce49d0d24099b
+$(DL_FILE)_MD5                                 = 3ae910d35292706d85870c3939547123
+rpi-patches-$(RPI_PATCHES).patch.xz_MD5                = b573af847c28ebed8c15a74542360db1
+arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = 8b47b81a530db68cb2c2f6bb6418ca28
+$(GRS_PATCHES)_MD5                             = 6b2c8669e39304cfe647f9de16260929
 
 install : $(TARGET)
 
@@ -112,35 +116,30 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        ln -svf linux-$(VER) $(DIR_SRC)/linux
 
        # Linux Intermediate Queueing Device
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.30-imq.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-imq.patch
 
        # ipp2p 0.8.2-ipfire
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-ipp2p-0.8.2-ipfire.patch
 
        # Layer7-patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-layer7-filter.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14-layer7-filter.patch
 
-       # pie packet scheduler
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.39-pie_packet_sch.patch
-
-       # Grsecurity-patches
 ifneq "$(KCFG)" "-headers"
+       # Grsecurity-patches
        cd $(DIR_APP) && xz -c -d $(DIR_DL)/$(GRS_PATCHES) | patch -Np1
        cd $(DIR_APP) && rm localversion-grsec
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.7-disable-compat_vdso.patch
 endif
 
-       # Remove ACPI Blacklist message
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6-silence-acpi-blacklist.patch
-
        # DVB Patches
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.9-dvbsky-wot2.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-dvbsky.patch
        cd $(DIR_APP) && patch -Np2 < $(DIR_SRC)/src/patches/v4l-dvb_fix_tua6034_pll.patch
 
        # Wlan Patches
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/compat-drivers-3.8.3-ath_ignore_eeprom_regdomain.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.34-iwlwifi-noibss_only_on_radar_chan.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.37-rt2800usb_add_dlink_dwa137_usbid.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.39-add_libertas_uap.patch
 
        # mISDN Patches
@@ -148,7 +147,7 @@ endif
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/mISDN-hfcusb-reportl1down.patch
 
        # Add LED trigger
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.9-ledtrig-netdev-1.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-ledtrig_netdev.patch
 
        # cs5535audio spams syslog if no ac97 was present (geos router)
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.30_cs5535audio_fix_logspam_on_geos.patch
@@ -160,81 +159,16 @@ endif
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2.33_ipg-fix-driver-name.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.32.27_mcs7830-fix-driver-name.patch
 
-       # Moschip 7830 link detection
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.y-usbnet_mcs7830_rework_link_detect.patch
-
-
 ifeq "$(KCFG)" "-kirkwood"
-       # Add dreamplug,guruplug and icy 62x0  support on ARM-kirkwood
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.10-arm_kirkwood_setups.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.10-mv_cesa_disable_failing_hmac_sha1.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch
 endif
 
 ifeq "$(KCFG)" "-multi"
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.27-fs-exec-atomic64-operand-requires-impossible-reload.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-smsc95xx-add_mac_addr_param.patch
 
-       # Patchset for Omap (beagle/panda).
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch
-
-       # Patchset for Wandboard.
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0001-imx6qdl-wandboard-dts-backport.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0002-ARM-dts-imx6qdl-wandboard-add-gpio-lines-to-wandboar.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0003-ARM-dts-imx6qdl-wandboard-Add-support-for-i2c1.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0004-ARM-dts-wandboard-add-binding-for-wand-rfkill-driver.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0005-ARM-dts-imx6qdl-add-pcie-device-node.patch
-
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0001-i2c-imx-retry-on-NAK.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0002-i.MX6-Wandboard-add-CKO1-clock-output.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0003-thermal-add-imx-thermal-driver-support.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0004-ARM-i.MX6-Wandboard-add-wifi-bt-rfkill-driver.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0005-Add-IMX6Q-AHCI-support.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0006-imx-Add-IMX53-AHCI-support.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0007-imx6-enable-sata-clk-if-SATA_AHCI_PLATFORM.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0008-ARM-imx6q-update-the-sata-bits-definitions-of-gpr13.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0009-ahci_imx-add-ahci-sata-support-on-imx-platforms.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0010-ahci_imx-depend-on-CONFIG_MFD_SYSCON.patch
-       cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0011-add-pcie-designware.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0012-pcie-backport-fixes.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0013-of-pci-Provide-support-for-parsing-PCI-DT-ranges-pro.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0014-ARM-imx6q-Add-PCIe-bits-to-GPR-syscon-definition.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0015-PCI-imx6-Add-support-for-i.MX6-PCIe-controller.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0016-imx6-pci-tweaks.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0017-ARM-imx-Add-LVDS-general-purpose-clocks-to-i.MX6Q.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/imx/0018-ARM-imx6q-clock-and-Kconfig-update-for-PCIe-support.patch
-
-       # Patchset for Compulab Utilite.
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/utilite/linux-3.10-compulab-utilite-support.patch
+       # Apply Arm7-multiarch kernel patches.
+       cd $(DIR_APP) && xzcat $(DIR_DL)/arm7-multi-patches-$(A7M_PATCHES).patch.xz | patch -Np1
 endif
 
 ifeq "$(KCFG)" "-rpi"
@@ -277,13 +211,12 @@ ifeq "$(KCFG)" "-rpi"
 else
        cd $(DIR_APP) && make $(MAKETUNING) bzImage modules
        cd $(DIR_APP) && cp -v arch/i386/boot/bzImage /boot/vmlinuz-$(VER)-$(VERSUFIX)
-       ln -sf vmlinuz-$(VER)-$(VERSUFIX) /boot/vmlinuz-$(VERSUFIX)
 endif
 endif
 endif
+
        cd $(DIR_APP) && cp -v System.map /boot/System.map-$(VER)-$(VERSUFIX)
        cd $(DIR_APP) && cp -v .config /boot/config-$(VER)-$(VERSUFIX)
-       ln -sf System.map-$(VER)-$(VERSUFIX) /boot/System.map-$(VERSUFIX)
        cd $(DIR_APP) && make $(MAKETUNING) modules_install
        cd $(DIR_APP) && make $(MAKETUNING) firmware_install
 
@@ -322,5 +255,9 @@ ifeq "$(LASTKERNEL)" "1"
 endif
 endif
 
+       #force new build of external modules and initrd if the kernel was rebuild
+       -rm -f /usr/src/log/*-kmod-$(VER)-$(VERSUFIX)
+       -rm -f /usr/src/log/linux-initrd-$(VER)-$(VERSUFIX)
+
        @rm -rf $(DIR_SRC)/patch-o-matic* $(DIR_SRC)/iptables* $(DIR_SRC)/squashfs* $(DIR_SRC)/netfilter-layer7-*
        @$(POSTBUILD)
diff --git a/lfs/linux-initrd b/lfs/linux-initrd
new file mode 100644 (file)
index 0000000..b5cc422
--- /dev/null
@@ -0,0 +1,77 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2014  IPFire Team <info@ipfire.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 3 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, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER        = $(KVER)
+
+THISAPP    = linux-initrd-$(VER)
+
+VERSUFIX=ipfire$(KCFG)
+
+TARGET = $(DIR_INFO)/$(THISAPP)-$(VERSUFIX)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+install : $(TARGET)
+
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
+
+md5 : $(subst %,%_MD5,$(objects))
+
+dist:
+       @$(PAK)
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+       @$(PREBUILD)
+
+       # rebuild module deps
+       depmod -a $(KVER)-$(VERSUFIX)
+
+       #skip initrd build on pae and rpi kernel.
+ifneq "$(KCFG)" "-rpi"
+ifneq "$(KCFG)" "-pae"
+
+       # Create initramfs images
+       dracut --force --verbose --strip --xz /boot/initramfs-$(KVER)-$(VERSUFIX).img $(KVER)-$(VERSUFIX)
+
+ifeq "$(KCFG)" "-kirkwood"
+       cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-$(VERSUFIX).img uInit-$(VERSUFIX)
+endif
+
+ifeq "$(KCFG)" "-multi"
+       cd /boot && mkimage -A arm -T ramdisk -C lzma -d initramfs-$(KVER)-$(VERSUFIX).img uInit-$(VERSUFIX)
+endif
+
+endif
+endif
+       @$(POSTBUILD)
similarity index 88%
rename from lfs/mktemp
rename to lfs/lvm2
index 73d834424635638aba03ee4ab0a3bbdd69ebab80..6314db0cc45101ca13a894aa52197cf52fcaac42 100644 (file)
+++ b/lfs/lvm2
 
 include Config
 
-VER        = 1.5
+VER        = 2.02.95
 
-THISAPP    = mktemp-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
+THISAPP    = LVM2.$(VER)
+DL_FILE    = $(THISAPP).tgz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 3359aa075083aeae3ed6ca67ec5d944b
+$(DL_FILE)_MD5 = bd470a802046c807603618a443732ea7
 
 install : $(TARGET)
 
@@ -50,6 +50,9 @@ download :$(patsubst %,$(DIR_DL)/%,$(objects))
 
 md5 : $(subst %,%_MD5,$(objects))
 
+dist: 
+       @$(PAK)
+
 ###############################################################################
 # Downloading, checking, md5sum
 ###############################################################################
@@ -69,11 +72,13 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/$(THISAPP)-add_tempfile-3.patch
-       cd $(DIR_APP) && ./configure --prefix=/usr --with-libc
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && \
+               ./configure \
+                       --prefix=/usr \
+                       --with-usrlibdir=/usr/lib \
+                       --enable-pkgconfig
        cd $(DIR_APP) && make $(MAKETUNING)
        cd $(DIR_APP) && make install
-       cd $(DIR_APP) && make install-tempfile
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
diff --git a/lfs/mISDN b/lfs/mISDN
deleted file mode 100644 (file)
index 5cd4972..0000000
--- a/lfs/mISDN
+++ /dev/null
@@ -1,119 +0,0 @@
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2012  IPFire Team  <info@ipfire.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 3 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, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VERSUFIX=ipfire$(KCFG)
-
-ifeq "$(KCFG)" "-xen"
-       KVER = "2.6.32.61"
-endif
-
-VER        = 20121008
-
-THISAPP    = mISDN-$(VER)
-DL_FILE    = $(THISAPP).tar.xz
-DL_FROM    = $(URL_IPFIRE)
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)-kmod-$(VERSUFIX)
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-objects = $(DL_FILE)
-
-$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-
-$(DL_FILE)_MD5 = 7fee0514fd523176b36fca53b02b45cc
-
-install : $(TARGET)
-
-check : $(patsubst %,$(DIR_CHK)/%,$(objects))
-
-download :$(patsubst %,$(DIR_DL)/%,$(objects))
-
-md5 : $(subst %,%_MD5,$(objects))
-
-###############################################################################
-# Downloading, checking, md5sum
-###############################################################################
-
-$(patsubst %,$(DIR_CHK)/%,$(objects)) :
-       @$(CHECK)
-
-$(patsubst %,$(DIR_DL)/%,$(objects)) :
-       @$(LOAD)
-
-$(subst %,%_MD5,$(objects)) :
-       @$(MD5)
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-       @$(PREBUILD)
-       @rm -rf $(DIR_SRC)/mISDN* && cd $(DIR_SRC) && tar Jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_SRC)/mISDN && patch -Np1 < $(DIR_SRC)/src/patches/mISDN-hfcusb-reportl1down.patch
-       cd $(DIR_SRC)/mISDN && patch -Np1 < $(DIR_SRC)/src/patches/mISDN_hfc-s_add_id.patch
-ifeq "$(MACHINE_TYPE)" "arm"
-       # Remove unsupported timestampcounter on arm. the result seems to be unused
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|rdtscl(pChan->ulTimestampIn);||g" drivers/isdn/mISDN/octvqe/octvqe_linux.c
-endif
-ifeq "$(NOPCI)" "1"
-       # Disable PCI drivers if kernel has no PCI
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_HFCPCI|#&|g" mISDN.cfg.default
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_HFCMULTI|#&|g" mISDN.cfg.default
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_XHFC|#&|g" mISDN.cfg.default
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_AVMFRITZ|#&|g" mISDN.cfg.default
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_SPEEDFAX|#&|g" mISDN.cfg.default
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_INFINEON|#&|g" mISDN.cfg.default
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_W6692|#&|g" mISDN.cfg.default
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_NETJET|#&|g" mISDN.cfg.default
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_IPAC|#&|g" mISDN.cfg.default
-       cd $(DIR_SRC)/mISDN && sed -i -e "s|^CONFIG_MISDN_ISAR|#&|g" mISDN.cfg.default
-endif
-       cd $(DIR_SRC)/mISDN && ./configure --with-kerneldir=/usr/src/linux
-       cd $(DIR_SRC)/mISDN && make KVERS=$(KVER)-$(VERSUFIX) modules
-       cd $(DIR_SRC)/mISDN && make KVERS=$(KVER)-$(VERSUFIX) \
-                       INSTALL_PREFIX=$(DIR_SRC)/mISDN/dest/ \
-                       modules_install
-       mv $(DIR_SRC)/mISDN/dest/lib/modules/*/extra \
-               /lib/modules/$(KVER)-$(VERSUFIX)/mISDN
-
-ifneq "$(XEN)" "1"
-       # Blacklist misdn modules
-       for f in $$(find /lib/modules/$(KVER)-$(VERSUFIX)/mISDN -name *.ko); do \
-               echo "blacklist $$(basename $$f)" >> /etc/modprobe.d/mISDN.conf ; \
-       done
-       sed -i -e "s|.ko||g" /etc/modprobe.d/mISDN.conf
-endif
-
-       # Remove mISDN modules that was shipped with the kernel
-       rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/isdn/mISDN
-       rm -rf /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/isdn/hardware/mISDN
-
-       @rm -rf $(DIR_SRC)/mISDN*
-       @$(POSTBUILD)
index 5c4024700fccf823db6e3c8465982b43f06139c6..29d495d605f0520de3c0ee8899ab537297442b3f 100644 (file)
--- a/lfs/mdadm
+++ b/lfs/mdadm
 
 include Config
 
-VER        = 3.2.1
+VER        = 3.3.2
 
 THISAPP    = mdadm-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
+DL_FILE    = $(THISAPP).tar.xz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
-PROG       = mdadm
-PAK_VER    = 2
-
-DEPS       = ""
 
 ###############################################################################
 # Top-level Rules
@@ -44,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = d1e2549202bd79d9e99f1498d1109530
+$(DL_FILE)_MD5 = 44698d351501cac6a89072dc877eb220
 
 install : $(TARGET)
 
@@ -76,11 +72,8 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
        cd $(DIR_APP) && make $(MAKETUNING)
        cd $(DIR_APP) && make install
-       ln -sf ../init.d/mdadm /etc/rc.d/rcsysinit.d/S11mdadm
-       ln -sf ../init.d/mdadm /etc/rc.d/rc0.d/S85mdadm
-       ln -sf ../init.d/mdadm /etc/rc.d/rc6.d/S75mdadm
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index 6902ccac19165116982fce88e9e8bb5dc93a1bcc..c0e3919f5537f7c0895a842da29660389a099c1d 100644 (file)
@@ -48,16 +48,8 @@ md5 :
 
 $(TARGET) :
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) $(DIR_SRC)/install+setup && cp -R $(DIR_SRC)/src/misc-progs/ $(DIR_SRC)
-       cp -R $(DIR_SRC)/src/install+setup/ $(DIR_SRC)
-       for i in $(DIR_SRC)/langs/*/install/lang_*.c ; do \
-           cp $$i $(DIR_SRC)/install+setup/libsmooth; \
-       done
-       cd $(DIR_SRC)/install+setup/libsmooth && chmod 755 makelangs.pl
-       cd $(DIR_SRC)/install+setup/libsmooth && make CFLAGS="$(CFLAGS) -Wall \
-           -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \
-            -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'" 
+       @rm -rf $(DIR_APP) && cp -R $(DIR_SRC)/src/misc-progs/ $(DIR_SRC)
        cd $(DIR_APP) && make CFLAGS="$(CFLAGS) -Wall -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"' -DSNAME='\"$(SNAME)\"'"
        cd $(DIR_APP) && make install
-       @rm -rf $(DIR_APP) $(DIR_SRC)/install+setup
+       @rm -rf $(DIR_APP)
        @$(POSTBUILD)
similarity index 78%
rename from lfs/r8168
rename to lfs/multipath-tools
index 98267370ab03dede08b2bfb6188347bc06c32d03..ac00e2b2488aa79ab5f7d4a4b7dfe627071f653c 100644 (file)
--- a/lfs/r8168
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2013  IPFire Team <info@ipfire.org>                      #
+# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # 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        #
 
 include Config
 
-VERSUFIX = ipfire$(KCFG)
-ifeq "$(KCFG)" "-xen"
-       KVER = 2.6.32.61
-       MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net
-       MODNAME = r8168.ko
-else
-       MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/realtek
-       MODNAME = r8168.ko.vendor
-endif
+VER        = 120613
 
-VER        = 8.035.00
-
-THISAPP    = r8168-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
+THISAPP    = multipath-tools-$(VER)
+DL_FILE    = $(THISAPP).tgz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX)
+TARGET     = $(DIR_INFO)/$(THISAPP)
 
 ###############################################################################
 # Top-level Rules
@@ -50,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 80b8d23e463e5408dced1b1377579dae
+$(DL_FILE)_MD5 = 84632b08dbca9fa04179edd8c469c92a
 
 install : $(TARGET)
 
@@ -61,7 +51,7 @@ download :$(patsubst %,$(DIR_DL)/%,$(objects))
 md5 : $(subst %,%_MD5,$(objects))
 
 dist: 
-       $(PAK)
+       @$(PAK)
 
 ###############################################################################
 # Downloading, checking, md5sum
@@ -82,8 +72,8 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && make -C /lib/modules/$(KVER)-$(VERSUFIX)/build/ SUBDIRS=$(DIR_APP)/src modules
-       cd $(DIR_APP)/src && install -m 644 r8168.ko $(MODPATH)/$(MODNAME)
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP)/kpartx && make $(MAKETUNING)
+       cd $(DIR_APP)/kpartx && make install PREFIX=/usr
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index a9cef536f750de9f8ff53ed4ca5a15056013a9e0..868272bb30f28cabef5f7ff3d4d6cbe46f841b22 100644 (file)
@@ -102,7 +102,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cd $(DIR_SRC) && tar xfz $(DIR_DL)/nagios-plugins-1.4.13.tar.gz
        cd $(DIR_SRC)/nagios-plugins* && ./configure --prefix=/usr \
                --libexecdir=/usr/lib/nagios \
-               --with-nagios-user=nobody --with-nagios-group=nobody
+               --with-nagios-user=nobody --with-nagios-group=nobody \
+               --without-ipv6
        cd $(DIR_SRC)/nagios-plugins* && make
        cd $(DIR_SRC)/nagios-plugins* && make install
        chown -R nobody:nobody /var/nagios
index b5c57d0d6b017bc6b8c9f41589814b964b551c49..daad9dce9198f9714152ac2836395f8b0dfc1fdb 100644 (file)
--- a/lfs/newt
+++ b/lfs/newt
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 0.51.6
+VER        = 0.52.17
 
 THISAPP    = newt-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -38,9 +38,9 @@ TARGET     = $(DIR_INFO)/$(THISAPP)
 
 objects = $(DL_FILE)
 
-$(DL_FILE)                 = $(DL_FROM)/$(DL_FILE)
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5             = 98567d5a18535e3a926dca5b4527b4a9
+$(DL_FILE)_MD5 = f36d4d908965a0c89fd6fd8b61a6118b
 
 install : $(TARGET)
 
@@ -69,13 +69,10 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/newt-0.51.6-if1close.patch
-       cd $(DIR_APP) && ./configure --without-gpm-support
-       cd $(DIR_APP) && sed -i 's%^CFLAGS.*$$%CFLAGS = $(CFLAGS) -Wall -D_GNU_SOURCE%' Makefile
-       cd $(DIR_APP) && make
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && ./configure --prefix=/usr \
+               --without-gpm-support --without-tcl
+       cd $(DIR_APP) && make $(MAKETUNING)
        cd $(DIR_APP) && make install
-       cd $(DIR_APP) && install -m 0644 newt.h /usr/include
-       ln -sf libnewt.so.0.51 /usr/lib/libnewt.so
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index 8c7c81a4916843702b71031ae9e222fc795db05d..44a8b469785b2fd916b91b7f929063fc055046d1 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.3.4
+VER        = 2.3.6
 
 THISAPP    = openvpn-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 9b70be9fb45e407117c3c9b118e4ba22
+$(DL_FILE)_MD5 = bcc30c296566df14feebdd8aa0e408ca
 
 install : $(TARGET)
 
index 46036c8b8770f93c5dabedceae71641cb8189503..b5bd78771c5c56c38fac9d2e54f390ba771e82c8 100644 (file)
--- a/lfs/patch
+++ b/lfs/patch
 
 include Config
 
-VER        = 2.5.4
+VER        = 2.7.1
 
 THISAPP    = patch-$(VER)
-DL_FILE    = $(THISAPP).tar.gz
+DL_FILE    = $(THISAPP).tar.xz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 
@@ -53,7 +53,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = ee5ae84d115f051d87fcaaef3b4ae782
+$(DL_FILE)_MD5 = e9ae5393426d3ad783a300a338c09b72
 
 install : $(TARGET)
 
@@ -82,8 +82,8 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && CPPFLAGS=-D_GNU_SOURCE ./configure $(EXTRA_CONFIG)
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && ./configure $(EXTRA_CONFIG)
        cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE)
        cd $(DIR_APP) && make $(EXTRA_INSTALL) install
        @rm -rf $(DIR_APP)
diff --git a/lfs/pigz b/lfs/pigz
new file mode 100644 (file)
index 0000000..51c3b85
--- /dev/null
+++ b/lfs/pigz
@@ -0,0 +1,80 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+#                                                                             #
+# 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 3 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, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER        = 2.3.1
+
+THISAPP    = pigz-$(VER)
+DL_FILE    = $(THISAPP).tar.gz
+DL_FROM    = $(URL_IPFIRE)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = e803f8bc0770c7a5e96dccb1d2dd2aab
+
+install : $(TARGET)
+
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
+
+md5 : $(subst %,%_MD5,$(objects))
+
+dist: 
+       @$(PAK)
+
+###############################################################################
+# Downloading, checking, md5sum
+###############################################################################
+
+$(patsubst %,$(DIR_CHK)/%,$(objects)) :
+       @$(CHECK)
+
+$(patsubst %,$(DIR_DL)/%,$(objects)) :
+       @$(LOAD)
+
+$(subst %,%_MD5,$(objects)) :
+       @$(MD5)
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+       @$(PREBUILD)
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && make CFLAGS="$(CFLAGS)" $(MAKETUNING)
+       cd $(DIR_APP) && install -m 755 pigz /usr/bin/pigz
+       ln -svf pigz /usr/bin/unpigz
+       @rm -rf $(DIR_APP)
+       @$(POSTBUILD)
diff --git a/lfs/r8101 b/lfs/r8101
deleted file mode 100644 (file)
index fb03e56..0000000
--- a/lfs/r8101
+++ /dev/null
@@ -1,90 +0,0 @@
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2013  IPFire Team <info@ipfire.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 3 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, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VERSUFIX = ipfire$(KCFG)
-ifeq "$(KCFG)" "-xen"
-       KVER = 2.6.32.61
-       MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net
-       MODNAME = r8101.ko
-else
-       MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/realtek
-       MODNAME = r8101.ko.vendor
-endif
-
-VER        = 1.023.00
-
-THISAPP    = r8101-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
-DL_FROM    = $(URL_IPFIRE)
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX)
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-objects = $(DL_FILE)
-
-$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-
-$(DL_FILE)_MD5 = 03cfc34e41522cd34ac6f4b1b6508896
-
-install : $(TARGET)
-
-check : $(patsubst %,$(DIR_CHK)/%,$(objects))
-
-download :$(patsubst %,$(DIR_DL)/%,$(objects))
-
-md5 : $(subst %,%_MD5,$(objects))
-
-dist: 
-       $(PAK)
-
-###############################################################################
-# Downloading, checking, md5sum
-###############################################################################
-
-$(patsubst %,$(DIR_CHK)/%,$(objects)) :
-       @$(CHECK)
-
-$(patsubst %,$(DIR_DL)/%,$(objects)) :
-       @$(LOAD)
-
-$(subst %,%_MD5,$(objects)) :
-       @$(MD5)
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-       @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/r8101_add_missing_pciids.patch
-       cd $(DIR_APP) && make -C /lib/modules/$(KVER)-$(VERSUFIX)/build/ SUBDIRS=$(DIR_APP)/src modules
-       cd $(DIR_APP)/src && install -m 644 r8101.ko $(MODPATH)/$(MODNAME)
-       @rm -rf $(DIR_APP)
-       @$(POSTBUILD)
diff --git a/lfs/r8169 b/lfs/r8169
deleted file mode 100644 (file)
index 5a8be3c..0000000
--- a/lfs/r8169
+++ /dev/null
@@ -1,95 +0,0 @@
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2013  IPFire Team <info@ipfire.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 3 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, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VERSUFIX = ipfire$(KCFG)
-ifeq "$(KCFG)" "-xen"
-       KVER = 2.6.32.61
-       MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net
-       MODNAME = r8169.ko
-else
-       MODPATH = /lib/modules/$(KVER)-$(VERSUFIX)/kernel/drivers/net/ethernet/realtek
-       MODNAME = r8169.ko.vendor
-endif
-
-VER        = 6.017.00
-
-THISAPP    = r8169-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
-DL_FROM    = $(URL_IPFIRE)
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX)
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-objects = $(DL_FILE)
-
-$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-
-$(DL_FILE)_MD5 = 396d7e28d573bde416fbdfdef723f4bd
-
-install : $(TARGET)
-
-check : $(patsubst %,$(DIR_CHK)/%,$(objects))
-
-download :$(patsubst %,$(DIR_DL)/%,$(objects))
-
-md5 : $(subst %,%_MD5,$(objects))
-
-dist: 
-       $(PAK)
-
-###############################################################################
-# Downloading, checking, md5sum
-###############################################################################
-
-$(patsubst %,$(DIR_CHK)/%,$(objects)) :
-       @$(CHECK)
-
-$(patsubst %,$(DIR_DL)/%,$(objects)) :
-       @$(LOAD)
-
-$(subst %,%_MD5,$(objects)) :
-       @$(MD5)
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-       @$(PREBUILD)
-       #Save original r8169 module
-ifeq "$(KCFG)" "-xen"
-       -mv $(MODPATH)/r8169.ko \
-           $(MODPATH)/r8169.ko.org
-endif
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/r8169_add_missing_pciids.patch
-       cd $(DIR_APP) && make -C /lib/modules/$(KVER)-$(VERSUFIX)/build/ SUBDIRS=$(DIR_APP)/src modules
-       cd $(DIR_APP)/src && install -m 644 r8169.ko $(MODPATH)/$(MODNAME)
-       @rm -rf $(DIR_APP)
-       @$(POSTBUILD)
index 3772ad3028085043be106f52ee19ea3184343d69..213f8eb62d0fa9460ba152b4a0d72b27e2cc2434 100644 (file)
--- a/lfs/samba
+++ b/lfs/samba
@@ -119,7 +119,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        -mkdir -p /var/log/samba
        install -v -m 644 $(DIR_SRC)/config/backup/includes/samba /var/ipfire/backup/addons/includes/samba
 
-       -mkdir -p 750 /var/lib/samba/winbindd_privileged
+       -mkdir -p /var/lib/samba/winbindd_privileged
+       chmod 750 /var/lib/samba/winbindd_privileged
        chgrp wbpriv /var/lib/samba/winbindd_privileged
 
        @rm -rf $(DIR_APP)
index b94d62e6ebc3515e9fa20f4c1c974496ab04adc2..f3c451dffa5379ddfed56251944bbd72d8155464 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2014  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # 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        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 4.0.3
+VER        = 4.2.1
 
 THISAPP    = screen-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 8506fd205028a96c741e4037de6e3c42
+$(DL_FILE)_MD5 = 419a0594e2b25039239af8b90eda7d92
 
 install : $(TARGET)
 
@@ -70,7 +70,8 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/screen-4.0.3-stropts.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/screen-4.2.1-cpation-hardstatus.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/screen-4.2.1-altscreen.patch
        cd $(DIR_APP) && ./configure --prefix=/usr --with-socket-dir=/var/run/screen --with-sys-screenrc=/etc/screenrc
        cd $(DIR_APP) && sed -i -e "s%/usr/local/etc/screenrc%/etc/screenrc%" {etc,doc}/*
        cd $(DIR_APP) && make $(MAKETUNING)
index 1b33b966c159401eec2d25da224bb80572c88733..764d0edb396a973f9f8b4e1908cc3f22b16dfff2 100644 (file)
--- a/lfs/setup
+++ b/lfs/setup
@@ -48,17 +48,15 @@ md5 :
 
 $(TARGET) :
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/install+setup/* $(DIR_APP)
-
-       cd $(DIR_APP)/libsmooth && make CFLAGS="$(CFLAGS) -Wall \
-           -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \
-            -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'"
-
-       cd $(DIR_APP)/setup && make CFLAGS="$(CFLAGS) -Wall \
-           -DNAME='\"$(NAME)\"' -DSNAME='\"$(SNAME)\"' -DVERSION='\"$(VERSION)\"' \
-            -DSLOGAN='\"$(SLOGAN)\"' -DCONFIG_ROOT='\"$(CONFIG_ROOT)\"'"
-
-       cd $(DIR_APP)/setup && install -m 0755 setup /usr/local/sbin
-       install -m 0755 $(DIR_SRC)/src/install+setup/install/probenic.sh /bin
+       @rm -rf $(DIR_APP) && mkdir $(DIR_APP) && cp -R $(DIR_SRC)/src/setup/* $(DIR_APP)
+       cd $(DIR_APP) && bash autogen.sh
+       cd $(DIR_APP) && ./configure \
+               --prefix=/usr \
+               --with-distro-name="$(NAME)" \
+               --with-distro-sname="$(SNAME)" \
+               --with-distro-slogan="$(SLOGAN)" \
+               --with-config-root="$(CONFIG_ROOT)"
+       cd $(DIR_APP) && make $(MAKETUNING)
+       cd $(DIR_APP) && make install
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index e6c8cc88d3d2f90d746240c120067f8ebdb65f60..55590f7cb2c8bff423d8f5328d7589a0ab9925e8 100644 (file)
--- a/lfs/slang
+++ b/lfs/slang
 
 include Config
 
-VER        = 1.4.9
+VER        = 2.2.4
 
 THISAPP    = slang-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
+DL_FILE    = $(THISAPP).tar.gz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 4fbb1a7f1257e065ca830deefe13d350
+$(DL_FILE)_MD5 = 86cd8689cd71e281b4720fef8453ceeb
 
 install : $(TARGET)
 
@@ -69,17 +69,9 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-debian-utf8.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-utf8-acs.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-1.4.5-utf8-segv.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/slang-utf8-fix.patch
-       perl -p -i -e 's/(ELF_CFLAGS=\"[^\"]*)-O2([^\"]*\".*)/$1'"$(CFLAGS)"' $2/gs' configure
-       cd $(DIR_APP) && ./configure --prefix=/usr
-       cd $(DIR_APP) && make elf all
-       cd $(DIR_APP) && make install-elf
-       ln -sf libslang-utf8.so.1.4.9 /usr/lib/libslang-utf8.so.1
-       ln -sf libslang-utf8.so /usr/lib/libslang.so
-       ln -sf libslang-utf8.a /usr/lib/libslang.a
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/etc
+       cd $(DIR_APP) && make #$(MAKETUNING)
+       cd $(DIR_APP) && make install
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index 0dca63f751f4c43aa036d8fa53954c740fe7e194..184c9227fb170da74777ed2744e8a27a3c2c854d 100644 (file)
@@ -9,7 +9,7 @@
 
 include Config
 
-VER        = 1.0.1
+VER        = 1.0.2
 
 THISAPP    = squid-accounting-$(VER)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
index 697b59ab03a3cc75e3838f38689f1e69c884ff62..4a7918ce097396f6d71b1198805afce3dd5eeaad 100644 (file)
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = squidclamav
-PAK_VER    = 19
+PAK_VER    = 20
 
 DEPS       = "clamav"
 
@@ -79,6 +79,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/squidclamav-5.11-dont_use_ipv6.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/squidclamav-5.11-squid-helper-protocol.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/squidclamav-5.11-source-address-parsing-issue.patch
        cd $(DIR_APP) && ./configure --prefix=/usr
        cd $(DIR_APP) && make install
        install -v -m 664 $(DIR_CONF)/squidclamav/squidclamav.conf /etc/squidclamav.conf
index a084816309c4f69ae518c187e23e4280289cb117..19d9553797f966ff9135ceaa5a1d0e2cd85309b4 100644 (file)
@@ -75,7 +75,7 @@ $(TARGET) :
 
        # Config files
        cp -rvf $(DIR_SRC)/config/etc/* /etc;
-       touch /etc/mtab
+       touch /etc/{fs,m}tab
        echo "$(NAME) v$(VERSION) - $(SLOGAN)" >  /etc/issue
        echo "===============================" >> /etc/issue
        echo "\n running on \s \r \m"          >> /etc/issue
index 5256b0ac6cae303421e835362ae1fcc040e78a99..dd1f0ac848b7a1bb09d279df8750d831849626c5 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 5.2.0
+VER        = 5.2.1
 
 THISAPP    = strongswan-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
@@ -48,7 +48,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 5cee4ee1a6ccb74400758b3ace54d46e
+$(DL_FILE)_MD5 = dd3717c0aa59ab4591ca1812941ebb82
 
 install : $(TARGET)
 
similarity index 81%
rename from lfs/kvm-kmod
rename to lfs/tmux
index 90bd790a9d0e4dac33f448fe7fa836f3a57ac977..ec4cc20b7b4780ec5e4cc990469fadcbabb62535 100644 (file)
+++ b/lfs/tmux
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2011  IPFire Team <info@ipfire.org>                      #
+# Copyright (C) 2014 IPFire Team   <info@ipfire.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        #
 
 include Config
 
-VERSUFIX=ipfire$(KCFG)
+VER        = 1.9a
 
-VER        = 3.6
-
-THISAPP    = kvm-kmod-$(VER)
-DL_FILE    = $(THISAPP).tar.bz2
+THISAPP    = tmux-$(VER)
+DL_FILE    = $(THISAPP).tar.gz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX)
-SUP_ARCH   = i586
+TARGET     = $(DIR_INFO)/$(THISAPP)
+PROG       = tmux
+PAK_VER    = 1
+
+DEPS       = ""
 
 ###############################################################################
 # Top-level Rules
@@ -43,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 3e51d395d6a0ecac6ae600a0515880c2
+$(DL_FILE)_MD5 = b07601711f96f1d260b390513b509a2d
 
 install : $(TARGET)
 
@@ -54,7 +55,7 @@ download :$(patsubst %,$(DIR_DL)/%,$(objects))
 md5 : $(subst %,%_MD5,$(objects))
 
 dist: 
-       $(PAK)
+       @$(PAK)
 
 ###############################################################################
 # Downloading, checking, md5sum
@@ -75,12 +76,12 @@ $(subst %,%_MD5,$(objects)) :
 
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && ./configure --kerneldir=/usr/src/linux
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && ./configure \
+               --prefix=/usr
+
        cd $(DIR_APP) && make $(MAKETUNING)
-       cd $(DIR_APP) && install -m 644 x86/*.ko \
-           /lib/modules/$(KVER)-$(VERSUFIX)/kernel/arch/x86/kvm/
-       cd $(DIR_APP) && cp -f include/asm/* /usr/include/asm
-       cd $(DIR_APP) && cp -f include/linux/* /usr/include/linux
+       cd $(DIR_APP) && make install
+
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index c36b7a34f64b75720d1a5c71701b9e84191a63d9..9d60793534cd54c39112937fa78e5b07845e67f6 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2014a
+VER        = 2014j
 TZDATA_VER = $(VER)
 TZCODE_VER = $(VER)
 
@@ -45,8 +45,8 @@ objects = tzdata$(TZDATA_VER).tar.gz tzcode$(TZCODE_VER).tar.gz
 tzdata$(TZDATA_VER).tar.gz = $(DL_FROM)/tzdata$(TZDATA_VER).tar.gz
 tzcode$(TZCODE_VER).tar.gz = $(DL_FROM)/tzcode$(TZCODE_VER).tar.gz
 
-tzdata$(TZDATA_VER).tar.gz_MD5 = 423a11bcffc10dda578058cf1587d048
-tzcode$(TZCODE_VER).tar.gz_MD5 = 77ccbb720f0f2076f12dff6ded70eb98
+tzdata$(TZDATA_VER).tar.gz_MD5 = 2d7ea9c309f0d4e162e426e568290ca3
+tzcode$(TZCODE_VER).tar.gz_MD5 = 970119e9765bc5a9320368851c91ecb6
 
 install : $(TARGET)
 
@@ -86,7 +86,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cd $(DIR_APP) && zic -y ./yearistype -d zoneinfo/posix \
                -L /dev/null $(FILES)
        cd $(DIR_APP) && zic -y ./yearistype -d zoneinfo/right \
-               -L /dev/null $(FILES)
+               -L leapseconds $(FILES)
 
        rm -rf /usr/share/zoneinfo
        cd $(DIR_APP) && cp -prd zoneinfo /usr/share
@@ -94,6 +94,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
                /usr/share/zoneinfo
 
        rm -vf /usr/share/zoneinfo/localtime
+       rm -vf /etc/localtime
        cp -vf /usr/share/zoneinfo/GMT /etc/localtime
 
        @rm -rf $(DIR_APP)
index fdf8bf296876d4e03df7cc30910cab281de1cc93..15dae817b2b35dd6d02f7ccbfb80be7dbdb487b1 100644 (file)
--- a/lfs/udev
+++ b/lfs/udev
@@ -76,7 +76,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cd $(DIR_APP) && tar axf $(DIR_DL)/udev-lfs-$(VER)-1.tar.bz2
 
        cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/udev-208_remove_systemd_log.patch
-#      cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/udev-141_no_netif_rename.patch
 
        cd $(DIR_APP)/udev-lfs-$(VER)-1 && sed -i "s/HANDLE_AT 1/HANDLE_AT 0/g" cfg.h
 
diff --git a/lfs/v4l-dvb b/lfs/v4l-dvb
deleted file mode 100644 (file)
index 9cf277c..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2012  IPFire Team <info@ipfire.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 3 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, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VERSUFIX=ipfire$(KCFG)
-
-VER        = 20120916
-THISAPP    = v4l-dvb-$(VER)
-DL_FILE    = $(THISAPP).tar.xz
-DL_FROM    = $(URL_IPFIRE)
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)-kmod-$(KVER)-$(VERSUFIX)
-
-ifeq "$(KCFG)" "-xen"
-       XVER = 2.6.32
-       KVER = 2.6.32.61
-else
-       XVER = 3.2.0
-endif
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-objects = $(DL_FILE)
-
-$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-
-$(DL_FILE)_MD5 = 7824fdd540605c54584df0d16f0e923b
-
-install : $(TARGET)
-
-check : $(patsubst %,$(DIR_CHK)/%,$(objects))
-
-download :$(patsubst %,$(DIR_DL)/%,$(objects))
-
-md5 : $(subst %,%_MD5,$(objects))
-
-###############################################################################
-# Downloading, checking, md5sum
-###############################################################################
-
-$(patsubst %,$(DIR_CHK)/%,$(objects)) :
-       @$(CHECK)
-
-$(patsubst %,$(DIR_DL)/%,$(objects)) :
-       @$(LOAD)
-
-$(subst %,%_MD5,$(objects)) :
-       @$(MD5)
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-       @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar Jxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_rtl28xx_add_usb_ids.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_rtl28xx_commented_usb_clear_halt.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_usbv2_dont_report_pidfilter_fail.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_fix_tua6034_pll.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/v4l-dvb_bestunar_us638x.patch
-
-       cd $(DIR_APP) && make allyesconfig KERNELRELEASE=$(KVER)-$(VERSUFIX) VER=$(XVER)
-ifeq "$(KCFG)" "-omap"
-       # Disable failing OMAP2 Video Out and IR RX51 driver
-       cd $(DIR_APP) && sed -i -e \
-               "s|^CONFIG_VIDEO_OMAP2_VOUT=m|# CONFIG_VIDEO_OMAP2_VOUT is not set|g" \
-               v4l/.config
-       cd $(DIR_APP) && sed -i -e \
-               "s|^CONFIG_IR_RX51=m|# CONFIG_IR_RX51 is not set|g" \
-               v4l/.config
-endif
-       # Disable Radio Shark (missing tuner module)
-       cd $(DIR_APP) && sed -i -e \
-               "s|^CONFIG_RADIO_SHARK=m|# CONFIG_RADIO_SHARK is not set|g" \
-               v4l/.config
-       cd $(DIR_APP) && make all KERNELRELEASE=$(KVER)-$(VERSUFIX) VER=$(XVER)
-       cd $(DIR_APP) && make install KERNELRELEASE=$(KVER)-$(VERSUFIX) VER=$(XVER)
-       ln -sf $(DIR_APP)/ /usr/src/v4l-dvb
-       @$(POSTBUILD)
index 2a548be832f76a448098b0cb4db36d4aeba7f179..9c3239ea46d506a678bdf2c76d03ac289d92d78c 100644 (file)
@@ -31,10 +31,6 @@ DL_FILE    = xfsprogs_$(VER)-1.tar.gz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
-PROG       = xfsprogs
-PAK_VER    = 1
-
-DEPS       = ""
 
 ###############################################################################
 # Top-level Rules
diff --git a/make.sh b/make.sh
index 2b24e1159e82b7a1d5344a7de2f125c3b9d7c5b5..766499fce7b90a13e83abade314b555c0c5aa4b6 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -24,9 +24,9 @@
 
 NAME="IPFire"                                                  # Software name
 SNAME="ipfire"                                                 # Short name
-VERSION="2.15"                                                 # Version number
-CORE="85"                                                      # Core Level (Filename)
-PAKFIRE_CORE="85"                                              # Core Level (PAKFIRE)
+VERSION="2.17"                                                 # Version number
+CORE="87"                                                      # Core Level (Filename)
+PAKFIRE_CORE="86"                                              # Core Level (PAKFIRE)
 GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`                   # Git Branch
 SLOGAN="www.ipfire.org"                                                # Software slogan
 CONFIG_ROOT=/var/ipfire                                                # Configuration rootdir
@@ -36,7 +36,7 @@ BUILD_IMAGES=1                                                        # Flash and Xen Downloader
 KVER=`grep --max-count=1 VER lfs/linux | awk '{ print $3 }'`
 GIT_TAG=$(git tag | tail -1)                                   # Git Tag
 GIT_LASTCOMMIT=$(git log | head -n1 | cut -d" " -f2 |head -c8) # Last commit
-TOOLCHAINVER=7
+TOOLCHAINVER=8
 
 # New architecture variables
 BUILD_ARCH="$(uname -m)"
@@ -362,7 +362,6 @@ buildbase() {
     lfsmake2 less
     lfsmake2 make
     lfsmake2 man
-    lfsmake2 mktemp
     lfsmake2 kmod
     lfsmake2 net-tools
     lfsmake2 patch
@@ -377,7 +376,6 @@ buildbase() {
     lfsmake2 vim
     lfsmake2 xz
     lfsmake2 paxctl
-    lfsmake2 grub
 }
 
 buildipfire() {
@@ -398,61 +396,54 @@ buildipfire() {
   ipfiremake rpi-firmware
   ipfiremake bc
   ipfiremake u-boot
+  ipfiremake cpio
+  ipfiremake mdadm
+  ipfiremake dracut
+  ipfiremake lvm2
+  ipfiremake multipath-tools
+  ipfiremake freetype
+  ipfiremake grub
 
   case "${TARGET_ARCH}" in
        i586)
                # x86-pae (Native and new XEN) kernel build
                ipfiremake linux                        KCFG="-pae"
-#              ipfiremake kvm-kmod                     KCFG="-pae"
-#              ipfiremake v4l-dvb                      KCFG="-pae"
-#              ipfiremake mISDN                        KCFG="-pae"
                ipfiremake cryptodev                    KCFG="-pae"
-#              ipfiremake compat-drivers               KCFG="-pae"
-#              ipfiremake r8169                        KCFG="-pae"
-#              ipfiremake r8168                        KCFG="-pae"
-#              ipfiremake r8101                        KCFG="-pae"
                ipfiremake e1000e                       KCFG="-pae"
                ipfiremake igb                          KCFG="-pae"
+               ipfiremake ixgbe                        KCFG="-pae"
+               ipfiremake linux-initrd                 KCFG="-pae"
 
                # x86 kernel build
                ipfiremake linux                        KCFG=""
-#              ipfiremake kvm-kmod                     KCFG=""
-#              ipfiremake v4l-dvb                      KCFG=""
-#              ipfiremake mISDN                        KCFG=""
                ipfiremake cryptodev                    KCFG=""
-#              ipfiremake compat-drivers               KCFG=""
-#              ipfiremake r8169                        KCFG=""
-#              ipfiremake r8168                        KCFG=""
-#              ipfiremake r8101                        KCFG=""
                ipfiremake e1000e                       KCFG=""
                ipfiremake igb                          KCFG=""
+               ipfiremake ixgbe                        KCFG=""
+               ipfiremake linux-initrd                 KCFG=""
                ;;
 
        armv5tel)
                # arm-rpi (Raspberry Pi) kernel build
                ipfiremake linux                        KCFG="-rpi"
-#              ipfiremake v4l-dvb                      KCFG="-rpi"
-#              ipfiremake mISDN                        KCFG="-rpi" NOPCI=1
                ipfiremake cryptodev                    KCFG="-rpi"
-#              ipfiremake compat-drivers               KCFG="-rpi"
+               ipfiremake linux-initrd                 KCFG="-rpi"
 
                # arm multi platform (Panda, Wandboard ...) kernel build
                ipfiremake linux                        KCFG="-multi"
                ipfiremake cryptodev                    KCFG="-multi"
                ipfiremake e1000e                       KCFG="-multi"
                ipfiremake igb                          KCFG="-multi"
+               ipfiremake ixgbe                        KCFG="-multi"
+               ipfiremake linux-initrd                 KCFG="-multi"
 
                # arm-kirkwood (Dreamplug, ICY-Box ...) kernel build
                ipfiremake linux                        KCFG="-kirkwood"
-#              ipfiremake v4l-dvb                      KCFG="-kirkwood"
-#              ipfiremake mISDN                        KCFG="-kirkwood"
                ipfiremake cryptodev                    KCFG="-kirkwood"
-#              ipfiremake compat-drivers               KCFG="-kirkwood"
-#              ipfiremake r8169                        KCFG="-kirkwood"
-#              ipfiremake r8168                        KCFG="-kirkwood"
-#              ipfiremake r8101                        KCFG="-kirkwood"
-#              ipfiremake e1000e                       KCFG="-kirkwood"
+               ipfiremake e1000e                       KCFG="-kirkwood"
                ipfiremake igb                          KCFG="-kirkwood"
+               ipfiremake ixgbe                        KCFG="-kirkwood"
+               ipfiremake linux-initrd                 KCFG="-kirkwood"
                ;;
   esac
   ipfiremake pkg-config
@@ -466,8 +457,6 @@ buildipfire() {
   ipfiremake dhcpcd
   ipfiremake boost
   ipfiremake linux-atm
-  ipfiremake cpio
-  ipfiremake dracut
   ipfiremake expat
   ipfiremake gdbm
   ipfiremake pam
@@ -486,12 +475,12 @@ buildipfire() {
   ipfiremake libpng
   ipfiremake libtiff
   ipfiremake libart
-  ipfiremake freetype
   ipfiremake gd
   ipfiremake popt
   ipfiremake pcre
   ipfiremake slang
   ipfiremake newt
+  ipfiremake libsmooth
   ipfiremake attr
   ipfiremake acl
   ipfiremake libcap
@@ -747,7 +736,6 @@ buildipfire() {
   ipfiremake usb_modeswitch
   ipfiremake usb_modeswitch_data
   ipfiremake zerofree
-  ipfiremake mdadm
   ipfiremake pound
   ipfiremake minicom
   ipfiremake ddrescue
@@ -814,6 +802,8 @@ buildipfire() {
   ipfiremake batctl
   ipfiremake perl-PDF-API2
   ipfiremake squid-accounting
+  ipfiremake pigz
+  ipfiremake tmux
 }
 
 buildinstaller() {
@@ -823,7 +813,6 @@ buildinstaller() {
   ipfiremake memtest
   ipfiremake installer
   installmake strip
-  ipfiremake initrd
 }
 
 buildpackages() {
@@ -860,6 +849,7 @@ buildpackages() {
   modprobe loop 2>/dev/null
   if [ $BUILD_IMAGES == 1 ] && ([ -e /dev/loop/0 ] || [ -e /dev/loop0 ] || [ -e "/dev/loop-control" ]); then
        ipfiremake flash-images
+       ipfiremake flash-images SCON=1
   fi
 
   mv $LFS/install/images/{*.iso,*.tgz,*.img.gz,*.bz2} $BASEDIR >> $LOGFILE 2>&1
diff --git a/src/dracut/dracut.conf b/src/dracut/dracut.conf
deleted file mode 100644 (file)
index b671b7a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# dracut config file
-
-# Specific list of dracut modules to use
-#dracutmodules+=""
-
-# Dracut modules to omit
-#omit_dracutmodules+=""
-
-# Dracut modules to add to the default
-#add_dracutmodules+=""
-
-# additional kernel modules to the default
-#add_drivers+=""
-
-# list of kernel filesystem modules to be included in the generic initramfs
-filesystems+="ext2 ext3 ext4 reiserfs reiser4 iso9660 vfat"
-
-# build initrd only to boot current hardware
-#hostonly="yes"
-#
-
-# install local /etc/mdadm.conf
-mdadmconf="no"
-
-# install local /etc/lvm/lvm.conf
-lvmconf="no"
diff --git a/src/dracut/switch_root.c b/src/dracut/switch_root.c
deleted file mode 100644 (file)
index 1520387..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * switchroot.c - switch to new root directory and start init.
- *
- * Copyright 2002-2008 Red Hat, Inc.  All rights reserved.
- *
- * 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, see <http://www.gnu.org/licenses/>.
- *
- * Authors:
- *     Peter Jones <pjones@redhat.com>
- *     Jeremy Katz <katzj@redhat.com>
- */
-#include <sys/mount.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <dirent.h>
-
-#ifndef MS_MOVE
-#define MS_MOVE 8192
-#endif
-
-enum {
-       ok,
-       err_no_directory,
-       err_usage,
-};
-
-/* remove all files/directories below dirName -- don't cross mountpoints */
-static int
-recursiveRemove(char * dirName)
-{
-       struct stat sb,rb;
-       DIR * dir;
-       struct dirent * d;
-       char * strBuf = alloca(strlen(dirName) + 1024);
-
-       if (!(dir = opendir(dirName))) {
-               printf("error opening %s: %m\n", dirName);
-               return 0;
-       }
-
-       if (fstat(dirfd(dir),&rb)) {
-               printf("unable to stat %s: %m\n", dirName);
-               closedir(dir);
-               return 0;
-       }
-
-       errno = 0;
-
-       while ((d = readdir(dir))) {
-               errno = 0;
-
-               if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, "..")) {
-                       errno = 0;
-                       continue;
-               }
-
-               strcpy(strBuf, dirName);
-               strcat(strBuf, "/");
-               strcat(strBuf, d->d_name);
-
-               if (lstat(strBuf, &sb)) {
-                       printf("failed to stat %s: %m\n", strBuf);
-                       errno = 0;
-                       continue;
-               }
-
-               /* only descend into subdirectories if device is same as dir */
-               if (S_ISDIR(sb.st_mode)) {
-                       if (sb.st_dev == rb.st_dev) {
-                               recursiveRemove(strBuf);
-                               if (rmdir(strBuf))
-                                       printf("failed to rmdir %s: %m\n", strBuf);
-                       }
-                       errno = 0;
-                       continue;
-               }
-               if (unlink(strBuf)) {
-                       printf("failed to remove %s: %m\n", strBuf);
-                       errno = 0;
-                       continue;
-               }
-       }
-
-       if (errno) {
-               closedir(dir);
-               printf("error reading from %s: %m\n", dirName);
-               return 1;
-       }
-
-       closedir(dir);
-       return 0;
-}
-
-static int switchroot(const char *newroot)
-{
-       /*  Don't try to unmount the old "/", there's no way to do it. */
-       const char *umounts[] = { "/dev", "/proc", "/sys", NULL };
-       int errnum;
-       int i;
-
-       for (i = 0; umounts[i] != NULL; i++) {
-               char newmount[PATH_MAX];
-               strcpy(newmount, newroot);
-               strcat(newmount, umounts[i]);
-               if (mount(umounts[i], newmount, NULL, MS_MOVE, NULL) < 0) {
-                       fprintf(stderr, "Error mount moving old %s %s %m\n",
-                               umounts[i], newmount);
-                       fprintf(stderr, "Forcing unmount of %s\n", umounts[i]);
-                       umount2(umounts[i], MNT_FORCE);
-               }
-       }
-
-       if (chdir(newroot) < 0) {
-               errnum=errno;
-               fprintf(stderr, "switchroot: chdir failed: %m\n");
-               errno=errnum;
-               return -1;
-       }
-       recursiveRemove("/");
-       if (mount(newroot, "/", NULL, MS_MOVE, NULL) < 0) {
-               errnum = errno;
-               fprintf(stderr, "switchroot: mount failed: %m\n");
-               errno = errnum;
-               return -1;
-       }
-
-       if (chroot(".")) {
-               errnum = errno;
-               fprintf(stderr, "switchroot: chroot failed: %m\n");
-               errno = errnum;
-               return -2;
-       }
-       return 1;
-}
-
-static void usage(FILE *output)
-{
-       fprintf(output, "usage: switchroot <newrootdir> <init> <args to init>\n");
-       if (output == stderr)
-               exit(err_usage);
-       exit(ok);
-}
-
-int main(int argc, char *argv[])
-{
-       char *newroot = argv[1];
-       char *init = argv[2];
-       char **initargs = &argv[2];
-
-       if (newroot == NULL || newroot[0] == '\0' ||
-           init == NULL || init[0] == '\0' ) {
-               usage(stderr);
-       }
-
-       if (switchroot(newroot) < 0) {
-               fprintf(stderr, "switchroot has failed.  Sorry.\n");
-               return 1;
-       }
-       if (access(initargs[0], X_OK))
-               fprintf(stderr, "WARNING: can't access %s\n", initargs[0]);
-
-       /* get session leader */
-       setsid();
-       /* set controlling terminal */
-       ioctl (0, TIOCSCTTY, 1);
-
-       execv(initargs[0], initargs);
-}
-
index d69ddd3c0ae0b52a4d8e13fbd04a141847c1db02..7381a69b3cccc3a4d058f72b9d3057d51de83484 100644 (file)
 . ${rc_functions}
 eval $(/usr/local/bin/readhash /var/ipfire/main/settings)
 
-# English is default
-FONT="lat0-16"
+FONT="LatArCyrHeb-16"
 KEYMAP_CORRECTIONS="euro2"
-
-case "${LANGUAGE}" in
-       # German
-       de)
-               LEGACY_CHARSET="iso-8859-15"
-               FONT="lat0-16 -m 8859-15"
-               ;;
-       # Polish
-       pl)
-               FONT="lat2-16"
-               ;;
-       # Russish/Turkish
-       ru|tr)
-               FONT="LatArCyrHeb-16"
-               ;;
-esac
-
 UNICODE="1"
 BROKEN_COMPOSE="0"
 
old mode 100755 (executable)
new mode 100644 (file)
index 66ca432a26d607b1eb8afdcdf17be4c61370dad9..c383652e0b5e89b086caac5a1d745181fb113b6b 100644 (file)
@@ -104,6 +104,12 @@ iptables_init() {
        iptables -t nat -N CUSTOMPOSTROUTING
        iptables -t nat -A POSTROUTING -j CUSTOMPOSTROUTING
 
+       # P2PBLOCK
+       iptables -N P2PBLOCK
+       iptables -A INPUT -j P2PBLOCK
+       iptables -A FORWARD -j P2PBLOCK
+       iptables -A OUTPUT -j P2PBLOCK
+       
        # Guardian (IPS) chains
        iptables -N GUARDIAN
        iptables -A INPUT -j GUARDIAN
index 32236e6cd761615d885f9a7c14ac73975c432945..dca3e40163caeb050dc546684ff0d00258171851 100644 (file)
@@ -28,7 +28,7 @@ ser_console $cmdline
 #
 /etc/init.d/sysklogd start
 export LANG=en_US.utf8
-/usr/local/sbin/setup /dev/tty2 INSTALL
+/usr/sbin/setup /dev/tty2 INSTALL
 if [ "${?}" == "1" ]; then
        echo Setup not finished. Rebooting ...
        reboot -f
index 3dbd1addd50230fed436e5d919ccc1b7f9ac779b..79aeb36fc7e089a2818afc4061b67210ec78ee9c 100644 (file)
 
 case "${1}" in
        start)
-               boot_mesg "Background Autoresize root partition to use the whole drive"
-               # Detect device
-               ROOT=`mount | grep -m1 " / " | cut -d" " -f1`;
-               DRV=${ROOT::`expr length $ROOT`-1}
+               if [ -e "/.resizefs" ]; then
+                       boot_mesg "Re-sizing root partition..."
 
-               boot_mesg "resize ${DRV}3 ..."
-               nice -n 19 $0 background ${DRV}3 > /dev/null &
-               ;;
-       background)
-               resize2fs -p $2
+                       # Find root device
+                       mount | while read -r dev tmp1 mountpoint tmp2; do
+                               # Skip generic entries
+                               [ "${dev}" = "rootfs" ] && continue
 
-               # Erase symlink, it should run only once
-               rm -f /etc/rc.d/rcsysinit.d/S42fsresize
-               sync
-               exit 0;
+                               if [ "${mountpoint}" = "/" ]; then
+                                       # Resize filesystem
+                                       resize2fs -p "${dev}"
 
+                                       # Remove marker
+                                       rm -f /.resizefs
+                                       break
+                               fi
+                       done
+               fi
                ;;
 
        *)
diff --git a/src/initscripts/init.d/mdadm b/src/initscripts/init.d/mdadm
deleted file mode 100644 (file)
index 03f6fe4..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/sh
-########################################################################
-# Begin $rc_base/init.d/mdadm
-#
-# Description : This script controls software Raid
-#
-# Authors     : Dirk Hoefle  <dhoefle@gmx.net>
-#
-# Version     : 01.00
-#
-# Notes       :
-#
-########################################################################
-
-. /etc/sysconfig/rc
-. ${rc_functions}
-
-case "${1}" in
-   start)
-               boot_mesg "Scan/assemble mdadm raid devices..."
-               mdadm --assemble --scan
-               echo_ok
-               ;;
-
-   stop)
-               boot_mesg "Stopping Raid devices..."
-               mdadm --stop --scan
-               echo_ok
-               ;;
-
-   restart)
-               ${0} stop
-               sleep 1
-               ${0} start
-               ;;
-
-   status)
-               cat /proc/mdstat
-               ;;
-
-   *)
-               echo "Usage: ${0} {start|stop|restart|status}"
-               exit 1
-               ;;
-esac
-
-# End $rc_base/init.d/mdadm
diff --git a/src/initscripts/init.d/mounttmpfs b/src/initscripts/init.d/mounttmpfs
new file mode 100644 (file)
index 0000000..9ec8c3a
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/mounttmpfs
+#
+# Description : Mount tmpfses
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+       start)
+               boot_mesg -n "Mounting ramdisk file systems:" ${INFO}
+
+               if ! mountpoint /var/lock &>/dev/null; then
+                       boot_mesg -n " /var/lock" ${NORMAL}
+                       mount -n -t tmpfs -o nosuid,nodev,size=8M /var/lock /var/lock || failed=1
+               fi
+
+               boot_mesg "" ${NORMAL}
+
+               (exit ${failed})
+               evaluate_retval
+               ;;
+
+       *)
+               echo "Usage: ${0} {start}"
+               exit 1
+               ;;
+esac
+
+# End $rc_base/init.d/mounttmpfs
index f9b1aa92f09f6a2aa38aecefd9f6c01cfe2c7823..8c05f4d15e6e11921039e0ac75d4045ec7af691d 100644 (file)
 
 case "${1}" in
        start)
+               if [ -e "/.partresize" ]; then
+                       boot_mesg "Mounting root file system in read/write mode ..."
+                       mount -o remount,rw / > /dev/null
+                       evaluate_retval
 
-               boot_mesg "Mounting root file system in read/write mode ..."
-               mount -o remount,rw / > /dev/null
-               evaluate_retval
-
-               boot_mesg "Create /etc/mtab..."
-               > /etc/mtab
-               mount -f / || failed=1
-               (exit ${failed})
-               evaluate_retval
-
-               # Detect device
-               ROOT=`mount | grep -m1 " / " | cut -d" " -f1`;
-               if [ "${ROOT:`expr length $ROOT`-2:1}" == "p" ]; then
-                       DRV=${ROOT::`expr length $ROOT`-2}
-               else
-                       DRV=${ROOT::`expr length $ROOT`-1}
-               fi
+                       boot_mesg "Create /etc/mtab..."
+                       > /etc/mtab
+                       mount -f / || failed=1
+                       (exit ${failed})
+                       evaluate_retval
+
+                       # Detect device
+                       mount | while read -r dev tmp1 mountpoint tmp2; do
+                               [ "${dev}" = "rootfs" ] && continue
+
+                               if [ "${mountpoint}" = "/" ]; then
+                                       # Find root partition number
+                                       part_num="${dev: -1}"
 
-               boot_mesg "Change Partition ${DRV}3 to all free space ..."
-               echo -e ',+' | sfdisk --no-reread -f -N3 ${DRV} 2>/dev/null
+                                       # Find path to the root device
+                                       root_dev="${dev::-1}"
+                                       if [ ! -b "${dev::-1}" -a "${root_dev: -1}" = "p" ]; then
+                                               root_dev="${dev::-2}"
+                                       fi
 
-               boot_mesg "Update c,h,s values of ${DRV}1 ..."
-               echo -e ',' | sfdisk --no-reread -f -N1 ${DRV} &> /dev/null
+                                       boot_mesg "Growing root partition to maximum size..."
+                                       echo -e ',+' | sfdisk --no-reread -f -N${part_num} "${root_dev}" 2>/dev/null
 
-               # Erase symlink, it should run only once
-               rm -f /etc/rc.d/rcsysinit.d/S25partresize
+                                       # Update c,h,s values of the boot partition...
+                                       if [ ${part_num} -ne 1 -a -b "${root_dev}1" ]; then
+                                               echo -e ',' | sfdisk --no-reread -f -N1 ${DRV} &> /dev/null
+                                       fi
 
-               boot_mesg "Rebooting ..."
-               sync
-               mount -o remount,ro / &> /dev/null
-               sleep 15
-               reboot -f
+                                       # The filesystem should be resized after
+                                       # this operation
+                                       touch /.resizefs
 
+                                       # Remove marker
+                                       rm -f /.partresize
+
+                                       # Reboot
+                                       boot_mesg "Rebooting system..."
+                                       mount -o remount,ro / &>/dev/null
+                                       sleep 15
+                                       reboot -f
+                               fi
+                       done
+               fi
                ;;
        *)
                echo "Usage: ${0} {start}"
index 848dec6ad4ff0fc55a97b644517576ad41128af1..2ee2ffb72f783bbe223127b80a7dc548b24534ba 100644 (file)
@@ -68,6 +68,10 @@ case "$1" in
                evaluate_retval
                ;;
        restore)
+               if ! mountpoint $RRDLOG &>/dev/null; then
+                       mount -t tmpfs -o size=64M none "$RRDLOG"
+               fi
+
                if [ -e $RRDLOG.bak/cron/new.root ]; then
                        if [ -e $RRDLOG.bak/cron/root ]; then
                                rm -f $RRDLOG.bak/cron/new.root
diff --git a/src/install+setup/install/config.c b/src/install+setup/install/config.c
deleted file mode 100644 (file)
index b1d533e..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* SmoothWall install program.
- *
- * This program is distributed under the terms of the GNU General Public
- * Licence.  See the file COPYING for details.
- *
- * (c) Lawrence Manning, 2001
- * Write the config and get password stuff.
- * 
- */
-
-#include "install.h"
-
-extern FILE *flog;
-extern char *mylog;
-
-extern char **ctr;
-
-int write_lang_configs( char *lang)
-{
-       struct keyvalue *kv = initkeyvalues();
-       
-       /* default stuff for main/settings. */
-       replacekeyvalue(kv, "LANGUAGE", lang);
-       replacekeyvalue(kv, "HOSTNAME", SNAME);
-       replacekeyvalue(kv, "THEME", "ipfire");
-       writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings");
-       freekeyvalues(kv);
-       
-       return 1;
-}
-
-int write_ethernet_configs(struct keyvalue *ethernetkv)
-{
-       /* Write out the network settings we got from a few mins ago. */
-       writekeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings");
-       return 1;
-}
-
-/* Taken from the cdrom one. */
-int getpassword(char *password, char *text)
-{
-       char *values[] = {      NULL, NULL, NULL };     /* pointers for the values. */
-       struct newtWinEntry entries[] =
-       { 
-               { ctr[TR_PASSWORD_PROMPT], &values[0], 2 },
-               { ctr[TR_AGAIN_PROMPT], &values[1], 2 },
-               { NULL, NULL, 0 }
-       };
-       char title[STRING_SIZE];
-       int rc;
-       int done;
-       
-       do
-       {
-               done = 1;
-               sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
-               rc = newtWinEntries(title, text,
-                       50, 5, 5, 20, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);
-               
-               if (rc != 2)
-               {
-                       if (strlen(values[0]) == 0 || strlen(values[1]) == 0)
-                       {
-                               errorbox(ctr[TR_PASSWORD_CANNOT_BE_BLANK]);
-                               done = 0;
-                               strcpy(values[0], "");
-                               strcpy(values[1], "");                          
-                       }
-                       else if (strcmp(values[0], values[1]) != 0)
-                       {
-                               errorbox(ctr[TR_PASSWORDS_DO_NOT_MATCH]);
-                               done = 0;
-                               strcpy(values[0], "");
-                               strcpy(values[1], "");                                  
-                       }
-               }
-       }
-       while (!done);
-
-       strncpy(password, values[0], STRING_SIZE);
-
-       if (values[0]) free(values[0]);
-       if (values[1]) free(values[1]);
-
-       return rc;
-}
-       
diff --git a/src/install+setup/install/install.h b/src/install+setup/install/install.h
deleted file mode 100644 (file)
index a6e110f..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* SmoothWall install program.
- *
- * This program is distributed under the terms of the GNU General Public
- * Licence.  See the file COPYING for details.
- *
- * (c) Lawrence Manning, 2001
- * Main include file.
- * 
- */
-
-#include "../libsmooth/libsmooth.h"
-
-#define IDE_EMPTY 0
-#define IDE_CDROM 1
-#define IDE_HD 2
-#define IDE_UNKNOWN 3
-
-/* CDROMS and harddisks. */
-struct devparams
-{
-       char devnode_disk[30];          // when single partition is addressed
-       char devnode_part[30];          // when the RAID partition is addressed
-       char devnode_disk_run[30];      // the same dev but after installation 
-       char devnode_part_run[30];
-       char modulename[STRING_SIZE];
-       char options[STRING_SIZE];
-};
-
-/* config.c */
-int write_disk_configs(struct devparams *dp);
-int write_lang_configs( char *lang);
-int write_ethernet_configs(struct keyvalue *ethernetkv);
-
-/* unattended.c */
-int unattended_setup(struct keyvalue *unattendedkv);
diff --git a/src/install+setup/install/main.c b/src/install+setup/install/main.c
deleted file mode 100644 (file)
index 309e006..0000000
+++ /dev/null
@@ -1,633 +0,0 @@
-
-/* SmoothWall install program.
- *
- * This program is distributed under the terms of the GNU General Public
- * Licence.  See the file COPYING for details.
- *
- * (c) Lawrence Manning, 2001
- * Contains main entry point, and misc functions.6
- * 
- */
-
-#include "install.h"
-#define _GNU_SOURCE
-#define INST_FILECOUNT 21000
-#define UNATTENDED_CONF "/cdrom/boot/unattended.conf"
-#define LICENSE_FILE   "/cdrom/COPYING"
-
-#define EXT2 0
-#define EXT3 1
-#define EXT4 2
-#define REISERFS 3
-
-FILE *flog = NULL;
-char *mylog;
-
-char **ctr;
-
-extern char url[STRING_SIZE];
-
-struct  nic  nics[20] = { { "" , "" , "" } }; // only defined for compile
-struct knic knics[20] = { { "" , "" , "" , "" } }; // only defined for compile
-
-extern char *en_tr[];
-extern char *es_tr[];
-extern char *de_tr[];
-extern char *fr_tr[];
-extern char *nl_tr[];
-extern char *pl_tr[];
-extern char *ru_tr[];
-extern char *tr_tr[];
-
-int main(int argc, char *argv[])
-{
-
-       char discl_msg[40000] = "Disclaimer\n";
-
-       char *langnames[] = { "Deutsch", "English", "Français", "Español", "Nederlands", "Polski", "Русский", "Türkçe", NULL };
-       char *shortlangnames[] = { "de", "en", "fr", "es", "nl", "pl", "ru", "tr", NULL };
-       char **langtrs[] = { de_tr, en_tr, fr_tr, es_tr, nl_tr, pl_tr, ru_tr, tr_tr, NULL };
-       char hdletter;
-       char harddrive[30], sourcedrive[5];     /* Device holder. */
-       char harddrive_info[STRING_SIZE];       /* Additional infos about target */
-       struct devparams hdparams, cdromparams; /* Params for CDROM and HD */
-       int rc = 0;
-       char commandstring[STRING_SIZE];
-       char mkfscommand[STRING_SIZE];
-       char *fstypes[] = { "ext2", "ext3", "ext4", "ReiserFS", NULL };
-       int fstype = EXT4;
-       int choice;
-       int i;
-       int found = 0;
-       char shortlangname[10];
-       char message[1000];
-       char title[STRING_SIZE];
-       int allok = 0;
-       int allok_fastexit=0;
-       int raid_disk = 0;
-       struct keyvalue *ethernetkv = initkeyvalues();
-       FILE *handle, *cmdfile, *copying;
-       char line[STRING_SIZE];
-       char string[STRING_SIZE];
-       long memory = 0, disk = 0, free;
-       long system_partition, boot_partition, root_partition, swap_file;
-       int scsi_disk = 0;
-       char *yesnoharddisk[3]; //      char *yesnoharddisk = { "NO", "YES", NULL };
-               
-       int unattended = 0;
-       int serialconsole = 0;
-       struct keyvalue *unattendedkv = initkeyvalues();
-       int hardyn = 0;
-       char restore_file[STRING_SIZE] = "";
-
-       setlocale (LC_ALL, "");
-       sethostname( SNAME , 10);
-
-       memset(&hdparams, 0, sizeof(struct devparams));
-       memset(&cdromparams, 0, sizeof(struct devparams));
-
-       /* Log file/terminal stuff. */
-       if (argc >= 2)
-       {               
-               if (!(flog = fopen(argv[1], "w+")))
-                       return 0;
-       }
-       else
-               return 0;
-       
-       mylog = argv[1];
-       
-       fprintf(flog, "Install program started.\n");
-               
-       newtInit();
-       newtCls();
-
-       newtDrawRootText(14, 0, NAME " " VERSION " - " SLOGAN );
-       sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN);
-
-       if (! (cmdfile = fopen("/proc/cmdline", "r")))
-       {
-               fprintf(flog, "Couldn't open commandline: /proc/cmdline\n");
-       } else {
-               fgets(line, STRING_SIZE, cmdfile);
-               
-               // check if we have to make an unattended install
-               if (strstr (line, "unattended") != NULL) {
-                   unattended = 1;
-                   runcommandwithstatus("/bin/sleep 10", "WARNING: Unattended installation will start in 10 seconds...");
-               }               
-               // check if we have to patch for serial console
-               if (strstr (line, "console=ttyS0") != NULL) {
-                   serialconsole = 1;
-               }
-       }
-
-       // Load common modules
-       mysystem("/sbin/modprobe vfat"); // USB key
-       
-       /* German is the default */
-       for (choice = 0; langnames[choice]; choice++)
-       {
-               if (strcmp(langnames[choice], "English") == 0)
-                       break;
-       }
-       if (!langnames[choice])
-               goto EXIT;
-
-       if (!unattended) {
-           rc = newtWinMenu("Language selection", "Select the language you wish to use for the " NAME ".", 50, 5, 5, 8,
-                   langnames, &choice, "Ok", NULL);
-       }
-
-       ctr = langtrs[choice];
-       strcpy(shortlangname, shortlangnames[choice]);
-
-       newtPushHelpLine(ctr[TR_HELPLINE]);
-
-       if (!unattended) {
-               sprintf(message, ctr[TR_WELCOME], NAME);
-               newtWinMessage(title, ctr[TR_OK], message);
-       }
-
-       mysystem("/bin/mountsource.sh");
-
-       if ((handle = fopen("/tmp/source_device", "r")) == NULL) {
-               newtWinMessage(title, ctr[TR_OK], ctr[TR_NO_LOCAL_SOURCE]);
-               runcommandwithstatus("/bin/downloadsource.sh",ctr[TR_DOWNLOADING_ISO]);
-               if ((handle = fopen("/tmp/source_device", "r")) == NULL) {
-                       errorbox(ctr[TR_DOWNLOAD_ERROR]);
-                       goto EXIT;
-               }
-       }
-
-       fgets(sourcedrive, 5, handle);
-       fprintf(flog, "Source drive: %s\n", sourcedrive);
-       fclose(handle);
-
-       if (!unattended) {
-               // Read the license file.
-               if (!(copying = fopen(LICENSE_FILE, "r"))) {
-                       sprintf(discl_msg, "Could not open license file: %s\n", LICENSE_FILE);
-                       fprintf(flog, discl_msg);
-               } else {
-                       fread(discl_msg, 1, 40000, copying);
-                       fclose(copying);
-
-                       if (disclaimerbox(discl_msg)==0) {
-                               errorbox(ctr[TR_LICENSE_NOT_ACCEPTED]);
-                               goto EXIT;
-                       }
-               }
-       }
-
-       i = 0;
-       while (found == 0) {
-               i++;
-               fprintf(flog, "Harddisk scan pass %i\n", i);
-
-               switch (mysystem("/bin/mountdest.sh") % 255) {
-                       case 0: // Found IDE disk
-                               scsi_disk = 0;
-                               raid_disk = 0;
-                               found = 1;
-                               break;
-                       case 1: // Found SCSI disk
-                               scsi_disk = 1;
-                               raid_disk = 0;
-                               found = 1;
-                               break;
-                       case 2: // Found RAID disk
-                               scsi_disk = 0;
-                               raid_disk= 1;
-                               found = 1;
-                               break;
-                       case 10: // No harddisk found
-                               errorbox(ctr[TR_NO_HARDDISK]);
-                               goto EXIT;
-               }
-       }
-
-       if ((handle = fopen("/tmp/dest_device", "r")) == NULL) {
-               errorbox(ctr[TR_NO_HARDDISK]);
-               goto EXIT;
-       }
-       fgets(harddrive, 30, handle);
-       fclose(handle);
-       if ((handle = fopen("/tmp/dest_device_info", "r")) == NULL) {
-               sprintf(harddrive_info, "%s", harddrive);
-       }
-       fgets(harddrive_info, 70, handle);
-       fclose(handle);
-
-                       
-       /* load unattended configuration */
-       if (unattended) {
-           fprintf(flog, "unattended: Reading unattended.conf\n");
-
-           (void) readkeyvalues(unattendedkv, UNATTENDED_CONF);
-           findkey(unattendedkv, "RESTORE_FILE", restore_file);            
-       }
-       
-       /* Make the hdparms struct and print the contents.
-          With USB-KEY install and SCSI disk, while installing, the disk
-          is named 'sdb,sdc,...' (following keys)
-          On reboot, it will become 'sda'
-          To avoid many test, all names are built in the struct.
-       */
-       sprintf(hdparams.devnode_disk, "/dev/%s", harddrive);
-       /* Address the partition or raid partition (eg dev/sda or /dev/sdap1 */
-       sprintf(hdparams.devnode_part, "/dev/%s%s", harddrive,raid_disk ? "p" : "");
-       /* Now the names after the machine is booted. Only scsi is affected
-          and we only install on the first scsi disk. */
-
-       fprintf(flog, "Destination drive: %s\n", hdparams.devnode_disk);
-       
-       sprintf(message, ctr[TR_PREPARE_HARDDISK], harddrive_info);
-       if (unattended) {
-           hardyn = 1;
-       } else {
-               yesnoharddisk[0] = ctr[TR_NO];
-               yesnoharddisk[1] = ctr[TR_YES];
-               yesnoharddisk[2] = NULL;
-       }
-
-       while (! hardyn) {
-               rc = newtWinMenu(title, message,
-                                50, 5, 5, 6, yesnoharddisk,
-                                &hardyn, ctr[TR_OK],
-                                ctr[TR_CANCEL], NULL);
-               if (rc == 2)
-                       goto EXIT;
-       }
-       if (rc == 2)
-               goto EXIT;
-
-       fstypes[0]=ctr[TR_EXT2FS_DESCR];
-       fstypes[1]=ctr[TR_EXT3FS_DESCR];
-       fstypes[2]=ctr[TR_EXT4FS_DESCR];
-       fstypes[3]=ctr[TR_REISERFS_DESCR];
-       fstypes[4]=NULL;
-
-       if (!unattended) {              
-               sprintf(message, ctr[TR_CHOOSE_FILESYSTEM]);
-               rc = newtWinMenu( ctr[TR_CHOOSE_FILESYSTEM], message,
-                       50, 5, 5, 6, fstypes, &fstype, ctr[TR_OK],
-                       ctr[TR_CANCEL], NULL);
-       } else {
-           rc = 1;
-           fstype = EXT4;
-       }
-       if (rc == 2)
-               goto EXIT;
-
-       /* Calculate amount of memory in machine */
-        if ((handle = fopen("/proc/meminfo", "r")))
-        {
-            while (fgets(line, STRING_SIZE-1, handle)) {
-                if (sscanf (line, "MemTotal: %s kB", string)) {
-                    memory = atoi(string) / 1024 ;
-                }
-            }
-            fclose(handle);
-        }
-
-       /* Partition, mkswp, mkfs.
-        * before partitioning, first determine the sizes of each
-        * partition.  In order to do that we need to know the size of
-        * the disk. 
-        */
-       /* Don't use mysystem here so we can redirect output */
-       sprintf(commandstring, "/sbin/sfdisk -s /dev/%s > /tmp/disksize 2> /dev/null", harddrive);
-       system(commandstring);
-
-       /* Calculate amount of disk space */
-       if ((handle = fopen("/tmp/disksize", "r"))) {
-               fgets(line, STRING_SIZE-1, handle);
-               if (sscanf (line, "%s", string)) {
-                       disk = atoi(string) / 1024;
-               }
-               fclose(handle);
-       }
-       
-       fprintf(flog, "Disksize = %ld, memory = %ld", disk, memory);
-       
-        /* Calculating Swap-Size dependend of Ram Size */
-       if (memory <= 256)
-               swap_file = 128;
-       else if (memory <= 1024 && memory > 256)
-               swap_file = 256;
-       else 
-               swap_file = memory / 4;
-       
-  /* Calculating Root-Size dependend of Max Disk Space */
-  if ( disk < 2048 )
-               root_partition = 1024;
-       else if ( disk >= 2048 && disk <= 3072 )
-               root_partition = 1536;
-       else 
-               root_partition = 2048;
-               
-       
-  /* Calculating the amount of free space */
-       boot_partition = 64; /* in MB */
-       system_partition = disk - ( root_partition + swap_file + boot_partition );
-       
-       fprintf(flog, ", boot = %ld, swap = %ld, mylog = %ld, root = %ld\n",
-       boot_partition, swap_file, system_partition, root_partition);
-       rc = 0;
-
-       if ( (!unattended) && (((disk - (root_partition + swap_file + boot_partition)) < 256 ) && ((disk - (root_partition + boot_partition )) > 256)) ) {
-   rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], ctr[TR_CONTINUE_NO_SWAP]);
-    if (rc == 1){
-      swap_file = 0;
-      system_partition = disk - ( root_partition + swap_file + boot_partition );
-      fprintf(flog, "Changing Swap Size to 0 MB.\n");
-    }
-    else if (rc == 2){
-    fprintf(flog, "Disk is too small.\n");
-    errorbox(ctr[TR_DISK_TOO_SMALL]);goto EXIT;
-    }
-  } 
-  else if (disk - (root_partition + swap_file + boot_partition) >= 256) {
-  
-  }
-  else {
-   fprintf(flog, "Disk is too small.\n");
-   errorbox(ctr[TR_DISK_TOO_SMALL]);goto EXIT;
-  }
-        
-       handle = fopen("/tmp/partitiontable", "w");
-
-       /* Make swapfile */
-  if (swap_file) {
-     fprintf(handle, ",%ld,L,*\n,%ld,S,\n,%ld,L,\n,,L,\n",
-     boot_partition, swap_file, root_partition);
-  } else {
-     fprintf(handle, ",%ld,L,*\n,0,0,\n,%ld,L,\n,,L,\n",
-     boot_partition, root_partition);
-  }
-
-       fclose(handle);
-
-       if (disk < 2097150) {
-               // <2TB use sfdisk and normal mbr
-               snprintf(commandstring, STRING_SIZE, "/sbin/sfdisk -L -uM %s < /tmp/partitiontable", hdparams.devnode_disk);
-       } else {
-               // >2TB use parted with gpt
-               snprintf(commandstring, STRING_SIZE, "/usr/sbin/parted -s %s mklabel gpt mkpart boot ext2 1M 64M mkpart swap linux-swap 64M 1000M mkpart root ext4 1000M 5000M mkpart var ext4 5000M 100%% disk_set pmbr_boot on", hdparams.devnode_disk);
-       }
-
-       if (runcommandwithstatus(commandstring, ctr[TR_PARTITIONING_DISK]))
-       {
-               errorbox(ctr[TR_UNABLE_TO_PARTITION]);
-               goto EXIT;
-       }
-
-       if (fstype == EXT2) {
-//             mysystem("/sbin/modprobe ext2");
-               sprintf(mkfscommand, "/sbin/mke2fs -T ext2");
-       } else if (fstype == REISERFS) {
-               mysystem("/sbin/modprobe reiserfs");
-               sprintf(mkfscommand, "/sbin/mkreiserfs -f");
-       } else if (fstype == EXT3) {
-//             mysystem("/sbin/modprobe ext3");
-               sprintf(mkfscommand, "/sbin/mke2fs -T ext3");
-       } else if (fstype == EXT4) {
-//             mysystem("/sbin/modprobe ext4");
-               sprintf(mkfscommand, "/sbin/mke2fs -T ext4");
-       }
-
-       snprintf(commandstring, STRING_SIZE, "/sbin/mke2fs -T ext2 -I 128 %s1", hdparams.devnode_part);
-       if (runcommandwithstatus(commandstring, ctr[TR_MAKING_BOOT_FILESYSTEM]))
-       {
-               errorbox(ctr[TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM]);
-               goto EXIT;
-       }
-
-       if (swap_file) {
-               snprintf(commandstring, STRING_SIZE, "/sbin/mkswap %s2", hdparams.devnode_part);
-               if (runcommandwithstatus(commandstring, ctr[TR_MAKING_SWAPSPACE]))
-               {
-                       errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]);
-                       goto EXIT;
-               }
-       }
-
-       snprintf(commandstring, STRING_SIZE, "%s %s3", mkfscommand, hdparams.devnode_part);
-       if (runcommandwithstatus(commandstring, ctr[TR_MAKING_ROOT_FILESYSTEM]))
-       {
-               errorbox(ctr[TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM]);
-               goto EXIT;
-       }
-
-       snprintf(commandstring, STRING_SIZE, "%s %s4", mkfscommand, hdparams.devnode_part);     
-       if (runcommandwithstatus(commandstring, ctr[TR_MAKING_LOG_FILESYSTEM]))
-       {
-               errorbox(ctr[TR_UNABLE_TO_MAKE_LOG_FILESYSTEM]);
-               goto EXIT;
-       }
-
-       snprintf(commandstring, STRING_SIZE, "/bin/mount %s3 /harddisk", hdparams.devnode_part);
-       if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_ROOT_FILESYSTEM]))
-       {
-               errorbox(ctr[TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM]);
-               goto EXIT;
-       }
-
-       mkdir("/harddisk/boot", S_IRWXU|S_IRWXG|S_IRWXO);
-       mkdir("/harddisk/var", S_IRWXU|S_IRWXG|S_IRWXO);
-       mkdir("/harddisk/var/log", S_IRWXU|S_IRWXG|S_IRWXO);
-
-       snprintf(commandstring, STRING_SIZE, "/bin/mount %s1 /harddisk/boot", hdparams.devnode_part);
-       if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_BOOT_FILESYSTEM]))
-       {
-               errorbox(ctr[TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM]);
-               goto EXIT;
-       }
-       if (swap_file) {
-               snprintf(commandstring, STRING_SIZE, "/sbin/swapon %s2", hdparams.devnode_part);
-               if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_SWAP_PARTITION]))
-               {
-                       errorbox(ctr[TR_UNABLE_TO_MOUNT_SWAP_PARTITION]);
-                       goto EXIT;
-               }
-       }
-       snprintf(commandstring, STRING_SIZE, "/bin/mount %s4 /harddisk/var", hdparams.devnode_part);
-       if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_LOG_FILESYSTEM]))
-       {
-               errorbox(ctr[TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM]);
-               goto EXIT;
-       }
-
-       snprintf(commandstring, STRING_SIZE,
-               "/bin/tar -C /harddisk  -xvf /cdrom/" SNAME "-" VERSION ".tlz --lzma 2>/dev/null");
-       
-       if (runcommandwithprogress(60, 4, title, commandstring, INST_FILECOUNT,
-               ctr[TR_INSTALLING_FILES]))
-       {
-               errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);
-               goto EXIT;
-       }
-       
-       /* Save language und local settings */
-       write_lang_configs(shortlangname);
-
-       /* mount proc filesystem */
-       mysystem("mkdir /harddisk/proc");
-       mysystem("/bin/mount --bind /proc /harddisk/proc");
-       mysystem("/bin/mount --bind /dev  /harddisk/dev");
-       mysystem("/bin/mount --bind /sys  /harddisk/sys");
-
-       /* Build cache lang file */
-       snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\"");
-       if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_LANG_CACHE]))
-       {
-               errorbox(ctr[TR_UNABLE_TO_INSTALL_LANG_CACHE]);
-               goto EXIT;
-       }
-
-       /* Update /etc/fstab */
-       snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE1#UUID=$(/sbin/blkid %s1 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", hdparams.devnode_part);
-       system(commandstring);
-       snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE2#UUID=$(/sbin/blkid %s2 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", hdparams.devnode_part);
-       system(commandstring);
-       snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE3#UUID=$(/sbin/blkid %s3 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", hdparams.devnode_part);
-       system(commandstring);
-       snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#DEVICE4#UUID=$(/sbin/blkid %s4 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/etc/fstab", hdparams.devnode_part);
-       system(commandstring);
-
-       if (fstype == EXT2) {
-               replace("/harddisk/etc/fstab", "FSTYPE", "ext2");
-               replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro");
-       } else if (fstype == REISERFS) {
-               replace("/harddisk/etc/fstab", "FSTYPE", "reiserfs");
-               replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro");
-       } else if (fstype == EXT3) {
-               replace("/harddisk/etc/fstab", "FSTYPE", "ext3");
-               replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro");
-       } else if (fstype == EXT4) {
-               replace("/harddisk/etc/fstab", "FSTYPE", "ext4");
-               replace("/harddisk/boot/grub/grub.conf", "MOUNT", "ro");
-       }
-
-       replace("/harddisk/boot/grub/grub.conf", "KVER", KERNEL_VERSION);
-
-       snprintf(commandstring, STRING_SIZE, "/bin/sed -i -e \"s#root=ROOT#root=UUID=$(/sbin/blkid %s3 -sUUID | /usr/bin/cut -d'\"' -f2)#g\" /harddisk/boot/grub/grub.conf", hdparams.devnode_part);
-       system(commandstring);
-
-       mysystem("ln -s grub.conf /harddisk/boot/grub/menu.lst");
-
-       system("/bin/sed -e 's#/harddisk#/#g' -e 's#//#/#g'  < /proc/mounts > /harddisk/etc/mtab");
-
-       /*
-        * Generate device.map to help grub finding the device to install itself on.
-        */
-       FILE *f = NULL;
-       if (f = fopen("/harddisk/boot/grub/device.map", "w")) {
-               fprintf(f, "(hd0) %s\n", hdparams.devnode_disk);
-               fclose(f);
-       }
-
-       snprintf(commandstring, STRING_SIZE, 
-                "/usr/sbin/chroot /harddisk /usr/sbin/grub-install --no-floppy %s", hdparams.devnode_disk);
-       if (runcommandwithstatus(commandstring, ctr[TR_INSTALLING_GRUB])) {
-               errorbox(ctr[TR_UNABLE_TO_INSTALL_GRUB]);
-               goto EXIT;
-       }
-
-       /* Serial console ? */
-       if (serialconsole) {
-               /* grub */
-               replace("/harddisk/boot/grub/grub.conf", "splashimage", "#splashimage");
-               replace("/harddisk/boot/grub/grub.conf", "#serial", "serial");
-               replace("/harddisk/boot/grub/grub.conf", "#terminal", "terminal");
-               replace("/harddisk/boot/grub/grub.conf", " panic=10 ", " console=ttyS0,115200n8 panic=10 ");
-
-               /*inittab*/
-               replace("/harddisk/etc/inittab", "1:2345:respawn:", "#1:2345:respawn:");
-               replace("/harddisk/etc/inittab", "2:2345:respawn:", "#2:2345:respawn:");
-               replace("/harddisk/etc/inittab", "3:2345:respawn:", "#3:2345:respawn:");
-               replace("/harddisk/etc/inittab", "4:2345:respawn:", "#4:2345:respawn:");
-               replace("/harddisk/etc/inittab", "5:2345:respawn:", "#5:2345:respawn:");
-               replace("/harddisk/etc/inittab", "6:2345:respawn:", "#6:2345:respawn:");
-               replace("/harddisk/etc/inittab", "#7:2345:respawn:", "7:2345:respawn:");
-       }
-
-       /* Set marker that the user has already accepted the gpl */
-       mysystem("/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted");
-
-       /* Copy restore file from cdrom */
-       if (unattended && (strlen(restore_file) > 0)) {
-               fprintf(flog, "unattended: Copy restore file\n");
-               snprintf(commandstring, STRING_SIZE, 
-                       "cp /cdrom/%s /harddisk/var/ipfire/backup", restore_file);
-               mysystem(commandstring);
-       }
-       
-       mysystem("umount /cdrom");
-       snprintf(commandstring, STRING_SIZE, "/usr/bin/eject /dev/%s", sourcedrive);
-       mysystem(commandstring);
-
-       if (!unattended) {
-               sprintf(message, ctr[TR_CONGRATULATIONS_LONG],
-                               NAME, SNAME, NAME);
-               newtWinMessage(ctr[TR_CONGRATULATIONS], ctr[TR_PRESS_OK_TO_REBOOT], message);
-       }
-
-       allok = 1;
-
-EXIT:
-       fprintf(flog, "Install program ended.\n");      
-
-       if (!(allok))
-               newtWinMessage(title, ctr[TR_OK], ctr[TR_PRESS_OK_TO_REBOOT]);  
-       
-       freekeyvalues(ethernetkv);
-
-       if (allok && !allok_fastexit)
-       {
-               if (unattended) {
-                       fprintf(flog, "Entering unattended setup\n");
-                       if (unattended_setup(unattendedkv)) {
-                               snprintf(commandstring, STRING_SIZE, "/bin/sleep 10");
-                               runcommandwithstatus(commandstring, "Unattended installation finished, system will reboot");
-                       } else {
-                               errorbox("Unattended setup failed.");
-                               goto EXIT;
-                       }
-               }
-
-               fflush(flog);
-               fclose(flog);
-               newtFinished();
-
-               if (system("/bin/umount /harddisk/proc"))
-                       printf("Unable to umount /harddisk/proc.\n"); 
-       } else {
-               fflush(flog);
-               fclose(flog);
-               newtFinished();
-       }
-
-       fcloseall();
-
-       if (swap_file) {
-               snprintf(commandstring, STRING_SIZE, "/bin/swapoff %s2", hdparams.devnode_part);
-       }
-
-       newtFinished();
-
-       system("/bin/umount /harddisk/proc >/dev/null 2>&1");
-       system("/bin/umount /harddisk/dev >/dev/null 2>&1");
-       system("/bin/umount /harddisk/sys >/dev/null 2>&1");
-
-       system("/bin/umount /harddisk/var >/dev/null 2>&1");
-       system("/bin/umount /harddisk/boot >/dev/null 2>&1");
-       system("/bin/umount /harddisk >/dev/null 2>&1");
-
-       if (!(allok))
-               system("/etc/halt");
-
-       return 0;
-}
diff --git a/src/install+setup/install/mountsource.sh b/src/install+setup/install/mountsource.sh
deleted file mode 100644 (file)
index c335020..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/sh
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2014  IPFire Team  <info@ipfire.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 3 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, see <http://www.gnu.org/licenses/>.       #
-#                                                                             #
-###############################################################################
-
-#lfs patch source here...
-version=FullIPFireVersion
-#
-
-echo "Scanning source media"
-
-# scan all Block devices
-for DEVICE in `find /sys/block/* -maxdepth 0 ! -name fd* ! -name loop* ! -name ram* -exec basename {} \;`
-do
-               mount /dev/${DEVICE} /cdrom 2> /dev/null
-               if [ -n "$(ls /cdrom/${version}.media 2>/dev/null)" ]; then
-                       echo -n ${DEVICE} > /tmp/source_device
-                       echo "Found ${version} on ${DEVICE}"
-                       exit 0
-               else
-                       echo "not found on ${DEVICE} - SKIP"
-               fi
-               umount /cdrom 2> /dev/null
-done
-
-# scan all Partitions on block devices
-for DEVICE in `find /sys/block/* -maxdepth 0 ! -name fd* ! -name loop* ! -name ram* -exec basename {} \;`
-do
-       for DEVICEP in $(ls /dev/${DEVICE}? 2>/dev/null | sed "s/\/dev\///");do
-               mount /dev/${DEVICEP} /cdrom 2> /dev/null
-               if [ -n "$(ls /cdrom/${version}.media 2>/dev/null)" ]; then
-                       echo -n ${DEVICEP} > /tmp/source_device
-                       echo "Found ${version} on ${DEVICEP}"
-                       exit 0
-               else
-                       echo "not found on ${DEVICEP} - SKIP"
-               fi
-               umount /cdrom 2> /dev/null
-       done
-done
-
-# scan all Partitions on raid/mmc devices
-for DEVICE in `find /sys/block/* -maxdepth 0 ! -name fd* ! -name loop* ! -name ram* -exec basename {} \;`
-do
-       for DEVICEP in $(ls /dev/${DEVICE}p? 2>/dev/null | sed "s/\/dev\///");do
-               mount /dev/${DEVICEP} /cdrom 2> /dev/null
-               if [ -n "$(ls /cdrom/${version}.media 2>/dev/null)" ]; then
-                       echo -n ${DEVICEP} > /tmp/source_device
-                       echo "Found ${version} on ${DEVICEP}"
-                       exit 0
-               else
-                       echo "not found on ${DEVICEP} - SKIP"
-               fi
-               umount /cdrom 2> /dev/null
-       done
-done
-
-exit 10
diff --git a/src/install+setup/install/unattended.c b/src/install+setup/install/unattended.c
deleted file mode 100644 (file)
index 77e1eab..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * This file is part of the IPFire Firewall.
- *
- * IPFire 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.
- *
- * IPFire 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 IPFire; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- * Copyright 2007: Michael Tremer for www.ipfire.org
- * 
- */
-
-#include "install.h"
-extern FILE *flog;
-
-int unattended_setup(struct keyvalue *unattendedkv) {
-
-    struct keyvalue *mainsettings = initkeyvalues();
-    struct keyvalue *ethernetkv = initkeyvalues();
-    FILE *file, *hosts;
-    char commandstring[STRING_SIZE];
-
-    char domainname[STRING_SIZE];
-    char hostname[STRING_SIZE];
-    char keymap[STRING_SIZE];
-    char language[STRING_SIZE];
-    char timezone[STRING_SIZE];
-    char theme[STRING_SIZE];
-    char green_address[STRING_SIZE];
-    char green_netmask[STRING_SIZE];
-    char green_netaddress[STRING_SIZE];
-    char green_broadcast[STRING_SIZE];
-    char root_password[STRING_SIZE];
-    char admin_password[STRING_SIZE];
-    char restore_file[STRING_SIZE] = "";
-
-    findkey(unattendedkv, "DOMAINNAME", domainname);
-    findkey(unattendedkv, "HOSTNAME", hostname);
-    findkey(unattendedkv, "KEYMAP", keymap);
-    findkey(unattendedkv, "LANGUAGE", language);
-    findkey(unattendedkv, "TIMEZONE", timezone);
-    findkey(unattendedkv, "THEME", theme);
-    findkey(unattendedkv, "GREEN_ADDRESS", green_address);
-    findkey(unattendedkv, "GREEN_NETMASK", green_netmask);
-    findkey(unattendedkv, "GREEN_NETADDRESS", green_netaddress);
-    findkey(unattendedkv, "GREEN_BROADCAST", green_broadcast);
-    findkey(unattendedkv, "ROOT_PASSWORD", root_password);
-    findkey(unattendedkv, "ADMIN_PASSWORD", admin_password);
-    findkey(unattendedkv, "RESTORE_FILE", restore_file);
-
-    /* write main/settings. */
-    replacekeyvalue(mainsettings, "DOMAINNAME", domainname);
-    replacekeyvalue(mainsettings, "HOSTNAME", hostname);
-    replacekeyvalue(mainsettings, "KEYMAP", keymap);
-    replacekeyvalue(mainsettings, "LANGUAGE", language);
-    replacekeyvalue(mainsettings, "TIMEZONE", timezone);
-    replacekeyvalue(mainsettings, "THEME", theme);
-    writekeyvalues(mainsettings, "/harddisk" CONFIG_ROOT "/main/settings");
-    freekeyvalues(mainsettings);
-
-    /* do setup stuff */
-    fprintf(flog, "unattended: Starting setup\n");
-
-    /* network */
-    fprintf(flog, "unattended: setting up network configuration\n");
-
-    (void) readkeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings");
-    replacekeyvalue(ethernetkv, "GREEN_ADDRESS", green_address);
-    replacekeyvalue(ethernetkv, "GREEN_NETMASK", green_netmask);
-    replacekeyvalue(ethernetkv, "GREEN_NETADDRESS", green_netaddress);
-    replacekeyvalue(ethernetkv, "GREEN_BROADCAST", green_broadcast);
-    replacekeyvalue(ethernetkv, "CONFIG_TYPE", "0");
-    replacekeyvalue(ethernetkv, "GREEN_DEV", "eth0");
-    write_ethernet_configs(ethernetkv);
-    freekeyvalues(ethernetkv);
-
-    /* timezone */
-    unlink("/harddisk/etc/localtime");
-    snprintf(commandstring, STRING_SIZE, "/harddisk/%s", timezone);
-    link(commandstring, "/harddisk/etc/localtime");
-
-    /* hostname */
-    fprintf(flog, "unattended: writing hostname.conf\n");
-    if (!(file = fopen("/harddisk" CONFIG_ROOT "/main/hostname.conf", "w")))
-    {
-       errorbox("unattended: ERROR writing hostname.conf");
-       return 0;
-    }
-    fprintf(file, "ServerName %s.%s\n", hostname,domainname);
-    fclose(file);
-
-    fprintf(flog, "unattended: writing hosts\n");
-    if (!(hosts = fopen("/harddisk/etc/hosts", "w")))
-    {
-       errorbox("unattended: ERROR writing hosts");
-       return 0;
-    }
-    fprintf(hosts, "127.0.0.1\tlocalhost\n");
-    fprintf(hosts, "%s\t%s.%s\t%s\n", green_address, hostname, domainname, hostname);
-    fclose(hosts);
-
-    fprintf(flog, "unattended: writing hosts.allow\n");
-    if (!(file = fopen("/harddisk/etc/hosts.allow", "w")))
-    {
-       errorbox("unattended: ERROR writing hosts.allow");
-       return 0;
-    }
-    fprintf(file, "sshd : ALL\n");
-    fprintf(file, "ALL  : localhost\n");
-    fprintf(file, "ALL  : %s/%s\n", green_netaddress, green_netmask);
-    fclose(file);
-
-    fprintf(flog, "unattended: writing hosts.deny\n");
-    if (!(file = fopen("/harddisk/etc/hosts.deny", "w")))
-    {
-       errorbox("unattended: ERROR writing hosts.deny");
-        return 0;
-    }
-    fprintf(file, "ALL : ALL\n");
-    fclose(file);
-
-    /* set root password */
-    fprintf(flog, "unattended: setting root password\n");
-    snprintf(commandstring, STRING_SIZE,
-           "/usr/sbin/chroot /harddisk /bin/sh -c \"echo 'root:%s' | /usr/sbin/chpasswd\"", root_password);
-    if (mysystem(commandstring)) {
-       errorbox("unattended: ERROR setting root password");
-       return 0;
-    }
-
-    /* set admin password */
-    fprintf(flog, "unattended: setting admin password\n");
-    snprintf(commandstring, STRING_SIZE,
-           "/usr/sbin/chroot /harddisk /usr/sbin/htpasswd -c -m -b " CONFIG_ROOT "/auth/users admin '%s'", admin_password);
-    if (mysystem(commandstring)) {
-       errorbox("unattended: ERROR setting admin password");
-       return 0;
-    }
-
-       /* restore backup */
-       if (strlen(restore_file) > 0) {
-               fprintf(flog, "unattended: Restoring Backup\n");
-           snprintf(commandstring, STRING_SIZE,
-                   "/usr/sbin/chroot /harddisk /bin/tar -xvzp -f /var/ipfire/backup/%s -C /", restore_file);
-           if (mysystem(commandstring)) {
-               errorbox("unattended: ERROR restoring backup");
-           }
-       }
-
-    fprintf(flog, "unattended: Setup ended\n");
-    return 1;
-}
diff --git a/src/install+setup/libsmooth/langs.h.temp b/src/install+setup/libsmooth/langs.h.temp
deleted file mode 100644 (file)
index 16d45d0..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SmoothWall libsmooth.
- *
- * This program is distributed under the terms of the GNU General Public
- * Licence.  See the file COPYING for details.
- *
- * (c) Lawrence Manning, 2001
- * This is a template (basically just a header). langs.h is generated via
- * the Makefile, from lang_en.c.
- * 
- * $Id: langs.h.temp,v 1.4 2003/12/11 11:25:53 riddles Exp $
- * 
- */
-
-enum trstrings
-{
diff --git a/src/install+setup/libsmooth/libsmooth.h b/src/install+setup/libsmooth/libsmooth.h
deleted file mode 100644 (file)
index fc166b2..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/* SmoothWall libsmooth.
- *
- * This program is distributed under the terms of the GNU General Public
- * Licence.  See the file COPYING for details.
- *
- * (c) Lawrence Manning, 2001
- * Contains prototypes for library functions.
- * 
- */
-
-#ifndef ___LIBSMOOTH_H
-#define ___LIBSMOOTH_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <wchar.h>
-#include <locale.h>
-#include <unistd.h>
-#include <sys/file.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <newt.h>
-#include <dirent.h>
-#include <sys/mount.h>
-
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <linux/cdrom.h>
-#include <sys/ioctl.h>
-
-#include "langs.h"
-
-#define STRING_SIZE 1024
-
-#define ADDRESS 0
-#define NETADDRESS 1
-#define NETMASK 2
-#define DHCP 3
-#define NETCHANGE_TOTAL 4
-
-#define SCANNED_NICS "/var/ipfire/ethernet/scanned_nics"
-#define SYSDIR "/sys/class/net"
-
-#define _GREEN_CARD_ 0
-#define _RED_CARD_ 1
-#define _ORANGE_CARD_ 2
-#define _BLUE_CARD_ 3
-
-struct keyvalue
-{
-       char key[STRING_SIZE];
-       char value[STRING_SIZE];
-       struct keyvalue *next;  
-};
-struct nic
-{
-       char driver[80];
-       char description[256];
-       char macaddr[20];
-       char nic[20];
-};
-
-struct knic
-{
-       char driver[80];
-       char description[256];
-       char macaddr[20];
-       char colour[20];
-};
-
-
-/* libsmooth.c */
-void reboot(void);
-void stripnl(char *s);
-int mysystem(char *command);
-void errorbox(char *message);
-int statuswindowscroll(int width, int height, char *title, char *text, ...);
-int disclaimerbox(char *message);
-void statuswindow(int width, int height, char *title, char *text, ...);
-int runcommandwithprogress(int width, int height, char *title, char *command,
-       int lines, char *text, ...);
-int runcommandwithstatus(char *command, char *message);
-int runhiddencommandwithstatus(char *command, char *message);
-int checkformodule(char *module); 
-int replace(char filename1[], char *from, char *to);
-char* get_version(void);
-                                
-/* netstuff.c */
-int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
-       char *defaultdhcphostname);
-int gettype(char *type);
-int setnetaddress(struct keyvalue *kv, char *colour);
-void networkdialogcallbacktype(newtComponent cm, void *data);
-int interfacecheck(struct keyvalue *kv, char *colour);
-int rename_nics(void);
-int init_knics(void);
-int create_udev(void);
-int scan_network_cards(void);
-int nicmenu(int colour);
-int clear_card_entry(int cards);
-int ask_clear_card_entry(int cards);
-int manualdriver(char *driver, char *driveroptions);
-         
-/* varval.c */
-struct keyvalue *initkeyvalues(void);
-void freekeyvalues(struct keyvalue *head);
-int readkeyvalues(struct keyvalue *head, char *filename);
-int writekeyvalues(struct keyvalue *head, char *filename);
-int findkey(struct keyvalue *head, char *key, char *value);
-void appendkeyvalue(struct keyvalue *head, char *key, char *value);
-void replacekeyvalue(struct keyvalue *head, char *key, char *value);
-
-#endif
-
diff --git a/src/install+setup/setup/setup.h b/src/install+setup/setup/setup.h
deleted file mode 100644 (file)
index e6a32a6..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* SmoothWall setup program.
- *
- * This program is distributed under the terms of the GNU General Public
- * Licence.  See the file COPYING for details.
- *
- * (c) Lawrence Manning, 2001
- * Main include file.
- * 
- * $Id: setup.h,v 1.4 2003/12/11 11:25:54 riddles Exp $
- * 
- */
-
-#include "../libsmooth/libsmooth.h"
-
-/* hostname.c */
-int handlehostname(void);
-
-/* domainname.c */
-int handledomainname(void);
-
-/* networking.c */
-int handlenetworking(void);
-
-/* dhcp.c */
-int handledhcp(void);
-
-/* passwords.c */
-int handlerootpassword(void);
-int handlesetuppassword(void);
-int handleadminpassword(void);
-
-/* misc.c */
-int writehostsfiles(void);
-int handleisdn(void);
-
-/* keymap.c */
-int handlekeymap(void);
-
-/* timezone.c */
-int handletimezone(void);
diff --git a/src/installer/.tx/config b/src/installer/.tx/config
new file mode 100644 (file)
index 0000000..3bb34b4
--- /dev/null
@@ -0,0 +1,7 @@
+[main]
+host = https://www.transifex.com
+
+[ipfire.installer-legacy]
+file_filter = po/<lang>.po
+source_file = po/installer.pot
+source_lang = en
diff --git a/src/installer/Makefile.am b/src/installer/Makefile.am
new file mode 100644 (file)
index 0000000..d0e52dc
--- /dev/null
@@ -0,0 +1,82 @@
+#  This file is part of the installer.
+#
+#  installer is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+AM_MAKEFLAGS = --no-print-directory
+AUTOMAKE_OPTIONS = color-tests parallel-tests
+
+SUBDIRS = . po
+
+# remove targets if the command fails
+.DELETE_ON_ERROR:
+
+# keep intermediate files
+.SECONDARY:
+
+CLEANFILES =
+EXTRA_DIST =
+dracutmoduledir = $(prefix)/lib/dracut/modules.d/99installer
+
+AM_CPPFLAGS = \
+       -include $(top_builddir)/config.h \
+       -I $(top_srcdir)/include \
+       $(OUR_CPPFLAGS)
+
+AM_CFLAGS = $(OUR_CFLAGS)
+AM_LDFLAGS = $(OUR_LDFLAGS)
+
+bin_PROGRAMS = \
+       installer
+
+bin_SCRIPTS = \
+       downloadsource.sh \
+       execute-postinstall.sh \
+       start-networking.sh
+
+#- installer -------------------------------------------------------------------
+
+installer_SOURCES = \
+       hw.c \
+       hw.h \
+       main.c
+
+installer_CFLAGS = \
+       $(AM_CFLAGS) \
+       $(BLKID_CFLAGS) \
+       $(LIBSMOOTH_CFLAGS) \
+       $(PCI_CFLAGS) \
+       $(UDEV_CFLAGS)
+
+installer_LDADD = \
+       $(BLKID_LIBS) \
+       $(LIBSMOOTH_LIBS) \
+       $(NEWT_LIBS) \
+       $(PCI_LIBS) \
+       $(UDEV_LIBS)
+
+dracutmodule_DATA = \
+       dracut-module/70-dhcpcd.exe \
+       dracut-module/fake-root.sh \
+       dracut-module/module-setup.sh \
+       dracut-module/run-installer.sh
+
+#-------------------------------------------------------------------------------
+
+substitutions = \
+       '|PACKAGE_NAME=$(PACKAGE_NAME)|' \
+       '|PACKAGE_VERSION=$(PACKAGE_VERSION)|' \
+       '|prefix=$(prefix)|' \
+       '|exec_prefix=$(exec_prefix)|' \
+       '|libdir=$(libdir)|' \
+       '|includedir=$(includedir)|'
+
+SED_PROCESS = \
+       $(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
+       $(SED) $(subst '|,-e 's|@,$(subst =,\@|,$(subst |',|g',$(substitutions)))) < $< > $@
+
+%.pc: %.pc.in Makefile
+       $(SED_PROCESS)
diff --git a/src/installer/autogen.sh b/src/installer/autogen.sh
new file mode 100755 (executable)
index 0000000..3065488
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+autoreconf --force --install -I m4
diff --git a/src/installer/configure.ac b/src/installer/configure.ac
new file mode 100644 (file)
index 0000000..85c5c5c
--- /dev/null
@@ -0,0 +1,114 @@
+#  This file is part of the installer.
+#
+#  installer is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+AC_PREREQ([2.64])
+
+AC_INIT([installer],
+       [001],
+       [],
+       [installer],
+       [http://git.ipfire.org/?p=ipfire-2.x.git;a=summary])
+
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_AUX_DIR([build-aux])
+
+AM_INIT_AUTOMAKE([
+       foreign
+       1.11
+       -Wall
+       -Wno-portability
+       silent-rules
+       tar-pax
+       no-dist-gzip
+       dist-xz
+       subdir-objects
+])
+AM_SILENT_RULES([yes])
+
+LT_PREREQ(2.2)
+LT_INIT([disable-static])
+
+AC_PROG_SED
+
+AC_PROG_CC
+AC_PROG_CC_C99
+AC_PROG_CC_C_O
+
+CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
+       "-Wformat=2 -Wformat-security -Wformat-nonliteral" \
+       -Werror=overflow \
+       -fno-strict-aliasing \
+       -fstack-protector \
+       -fstack-protector-strong \
+       -fPIE \
+       --param=ssp-buffer-size=4])
+AC_SUBST([OUR_CFLAGS], "$with_cflags")
+
+AC_PATH_PROG([M4], [m4])
+
+# Gettext
+AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION([0.18])
+AC_CHECK_HEADERS([libintl.h])
+
+# This makes sure pkg.m4 is available.
+m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
+
+save_LIBS="$LIBS"
+
+# newt
+LIBS=
+AC_SEARCH_LIBS([newtWinMenu], [newt], [], [AC_MSG_ERROR([*** newt library not found])])
+NEWT_LIBS="$LIBS"
+AC_SUBST(NEWT_LIBS)
+
+LIBS="$save_LIBS"
+
+PKG_CHECK_MODULES(BLKID, [blkid])
+PKG_CHECK_MODULES(PCI, [libpci])
+PKG_CHECK_MODULES(LIBSMOOTH, [libsmooth])
+PKG_CHECK_MODULES(UDEV, [libudev])
+
+AC_ARG_WITH([distro-name],
+       AS_HELP_STRING([--with-distro-name] [The name of the distribution]),
+       AC_DEFINE_UNQUOTED([NAME], "$withval", [The name of the distribution]),
+       AC_MSG_ERROR([*** you need to set the name with --with-distro-name=]))
+
+AC_ARG_WITH([distro-sname],
+       AS_HELP_STRING([--with-distro-sname] [The short name of the distribution]),
+       AC_DEFINE_UNQUOTED([SNAME], "$withval", [The sname of the distribution]),
+       AC_MSG_ERROR([*** you need to set the sname with --with-distro-sname=]))
+
+AC_ARG_WITH([distro-slogan],
+       AS_HELP_STRING([--with-distro-slogan] [The slogan of the distribution]),
+       AC_DEFINE_UNQUOTED([SLOGAN], "$withval", [The slogan of the distribution]),
+       AC_MSG_ERROR([*** you need to set the slogan with --with-distro-slogan=]))
+
+AC_ARG_WITH([config-root],
+       AS_HELP_STRING([--with-distro-config-root] [The configuration directory]),
+       AC_DEFINE_UNQUOTED([CONFIG_ROOT], "$withval", [The config-root]),
+       AC_MSG_ERROR([*** you need to set CONFIG_ROOT with --with-config-root=]))
+
+AC_ARG_WITH([download-url],
+       AS_HELP_STRING([--with-download-url] [The default download URL]),
+       AC_DEFINE_UNQUOTED([DOWNLOAD_URL], "$withval", [The default download URL]),
+       AC_MSG_ERROR([*** you need to set DOWNLOAD_URL with --with-download-url=]))
+
+AC_CONFIG_FILES([
+       Makefile
+       po/Makefile.in
+])
+
+AC_OUTPUT
+AC_MSG_RESULT([
+       $PACKAGE_NAME $VERSION
+
+       CFLAGS:                 ${OUR_CFLAGS} ${CFLAGS}
+       CPPFLAGS:               ${OUR_CPPFLAGS} ${CPPFLAGS}
+       LDFLAGS:                ${OUR_LDFLAGS} ${LDFLAGS}
+])
similarity index 60%
rename from src/install+setup/install/downloadsource.sh
rename to src/installer/downloadsource.sh
index 5c6360dca16bfc540354bc70dd1818bc96593968..c74f9e232d2e1dc1874152ca71508736bb903c3c 100644 (file)
 #                                                                             #
 ###############################################################################
 
-#lfs change the url while build!
-IPFireISO=ipfire.iso
-#
-
-#Get user defined download from boot cmdline
-grep "netinstall=" /proc/cmdline > /dev/null && CMDLINE=1
-if ( [ "$CMDLINE" == "1" ]); then
-       read CMDLINE < /proc/cmdline
-       POS=${CMDLINE%%netinstall*}
-       POS=${#POS}
-       IPFireISO=`echo ${CMDLINE:POS} | cut -d"=" -f2 | cut -d" " -f1`
+function download() {
+       wget -U "IPFire-NetInstall/2.x" "$@"
+}
+
+if [ $# -lt 2 ]; then
+       echo "$0: Insufficient number of arguments" >&2
+       exit 2
+fi
+
+OUTPUT="${1}"
+URL="${2}"
+
+# Mount a tmpfs which is big enough to hold the ISO image
+OUTPUT_DIR="${OUTPUT%/*}"
+
+mkdir -p "${OUTPUT_DIR}"
+if ! mount -t tmpfs none "${OUTPUT_DIR}" -o size=512M; then
+       echo "Could not mount tmpfs to ${OUTPUT_DIR}" >&2
+       exit 1
 fi
 
-echo
-echo "Configure Network with DHCP..."
-dhcpcd
-echo
-echo "Sleep 15s..."
-sleep 15
-echo
-echo "Download with wget..."
-wget $IPFireISO -O /tmp/download.iso -t3 -U IPFire_NetInstall/2.x
-wget $IPFireISO.md5 -O /tmp/download.iso.md5 -t3 -U IPFire_NetInstall/2.x
-echo
-echo "Checking download..."
-md5_file=`md5sum /tmp/download.iso | cut -d" " -f1`
-md5_down=`cat /tmp/download.iso.md5 | cut -d" " -f1`
-if [ "$md5_file" == "$md5_down" ]; then
-       mount /tmp/download.iso -o loop /cdrom 2> /dev/null
-       if [ -n "$(ls /cdrom/ipfire-*.tlz 2>/dev/null)" ]; then
-               echo -n "null" > /tmp/source_device
-               echo "Found tarball in /tmp/download.iso"
-               exit 0
+echo "Downloading ${URL}..."
+if ! download -O "${OUTPUT}" "${URL}"; then
+       echo "Download failed" >&2
+
+       rm -f "${OUTPUT}"
+       exit 1
+fi
+
+# Download went well. Checking for MD5 sum
+if download -O "${OUTPUT}.md5" "${URL}.md5" &>/dev/null; then
+       # Read downloaded checksum
+       read -r md5sum rest < "${OUTPUT}.md5"
+       rm -f "${OUTPUT}.md5"
+
+       # Compute checkum of downloaded image file
+       read -r md5sum_image rest <<< "$(md5sum "${OUTPUT}")"
+
+       if [ "${md5sum}" != "${md5sum_image}" ]; then
+               echo "MD5 sum mismatch: ${md5sum} != ${md5sum_image}" >&2
+               exit 2
        fi
-       umount /cdrom 2> /dev/null
 fi
-echo "Error - SKIP"
-exit 10
+
+exit 0
diff --git a/src/installer/dracut-module/70-dhcpcd.exe b/src/installer/dracut-module/70-dhcpcd.exe
new file mode 100755 (executable)
index 0000000..660f269
--- /dev/null
@@ -0,0 +1,56 @@
+#/bin/bash
+########################################################################
+# Begin
+#
+# Description : DHCP Client Script (initrd version)
+#
+# Authors     : Arne Fitzenreiter - arne_f@ipfire.org
+#
+# Version     : 02.00
+#
+# Notes       : 
+#
+########################################################################
+
+LEASE_FILE="/var/ipfire/dhcpc/dhcpcd-${interface}.info"
+
+export_lease() {
+       set | grep "^new_" | sed "s|^new_||g" | \
+       sed "s|'||g" | sort > ${LEASE_FILE}
+}
+
+make_resolvconf() {
+       local DNS="$(grep 'domain_name_servers' ${LEASE_FILE} | cut -d'=' -f2)"
+       local DNS1="$(echo ${DNS} | cut -d' ' -f1)"
+       local DNS2="$(echo ${DNS} | cut -d' ' -f2)"
+
+       (
+               echo "nameserver ${DNS1}"
+               echo "nameserver ${DNS2}"
+       ) > /etc/resolv.conf
+}
+
+case "${reason}" in
+       PREINIT)
+               # Configure MTU
+               if [ -n "${new_interface_mtu}" ] && [ ${new_interface_mtu} -gt 576 ]; then
+                       echo "Setting MTU to ${new_interface_mtu}"
+                       ip link set "${interface}" mtu "${new_interface_mtu}"
+               fi
+               ;;
+
+       BOUND|INFORM|REBIND|REBOOT|RENEW|TIMEOUT|STATIC)
+               # Export all information about the newly received lease
+               # to file
+               export_lease
+
+               # Create system configuration files
+               make_resolvconf
+               ;;
+
+       EXPIRE|FAIL|IPV4LL|NAK|NOCARRIER|RELEASE|STOP)
+               rm -f "${LEASE_FILE}"
+               ;;
+esac
+
+exit 0
diff --git a/src/installer/dracut-module/fake-root.sh b/src/installer/dracut-module/fake-root.sh
new file mode 100644 (file)
index 0000000..7c41f35
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Fake root so dracut will start our installer
+root="installer"
+rootok=1
diff --git a/src/installer/dracut-module/module-setup.sh b/src/installer/dracut-module/module-setup.sh
new file mode 100755 (executable)
index 0000000..08dcdd5
--- /dev/null
@@ -0,0 +1,75 @@
+#!/bin/bash
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+
+# called by dracut
+check() {
+    return 255
+}
+
+# called by dracut
+depends() {
+    echo base bash mdraid shutdown
+    return 0
+}
+
+# called by dracut
+install() {
+    inst /etc/system-release
+    inst /usr/bin/installer
+    inst /usr/bin/downloadsource.sh
+    inst /usr/bin/execute-postinstall.sh
+    inst /usr/local/bin/iowrap
+
+    # Kernel drivers
+    instmods =drivers/hid
+
+    # Network drivers
+    instmods =drivers/net/ethernet =drivers/net/usb
+    instmods virtio_net hv_netvsc vmxnet3
+
+    # Filesystem support
+    inst_multiple parted mkswap mke2fs mkreiserfs mkfs.xfs
+    instmods ext4 iso9660 reiserfs vfat xfs
+
+    # Extraction
+    inst_multiple tar gzip lzma xz
+
+    # Networking
+    inst_multiple dhcpcd ethtool hostname ip ping sort wget
+    inst /usr/bin/start-networking.sh
+    inst /var/ipfire/dhcpc/dhcpcd.conf
+    inst /var/ipfire/dhcpc/dhcpcd-run-hooks
+    inst "$moddir/70-dhcpcd.exe" "/var/ipfire/dhcpc/dhcpcd-hooks/70-dhcpcd.exe"
+
+    inst /etc/host.conf /etc/protocols
+    inst /etc/nsswitch.conf /etc/resolv.conf
+    inst_libdir_file "libnss_dns.so.*"
+
+    # Misc. tools
+    inst_multiple chmod cut grep eject id killall md5sum touch
+    inst_multiple -o fdisk cfdisk df ps top
+
+    # Hardware IDs
+    inst /usr/share/hwdata/pci.ids /usr/share/hwdata/usb.ids
+
+    # Locales
+    mkdir -p "${initdir}/usr/lib/locale"
+    localedef --quiet --prefix="${initdir}" --add-to-archive /usr/lib/locale/en_US
+    localedef --quiet --prefix="${initdir}" --add-to-archive /usr/lib/locale/en_US.utf8
+
+    for file in /usr/share/locale/*/LC_MESSAGES/installer.mo; do
+        inst "${file}"
+    done
+
+    # Bash start files
+    inst_multiple /etc/profile /root/.bash_profile /etc/bashrc /root/.bashrc
+    for file in /etc/profile.d/*.sh; do
+        inst "${file}"
+    done
+
+    inst_hook cmdline 99 "$moddir/fake-root.sh"
+    inst_hook pre-mount 99 "$moddir/run-installer.sh"
+
+    return 0
+}
diff --git a/src/installer/dracut-module/run-installer.sh b/src/installer/dracut-module/run-installer.sh
new file mode 100644 (file)
index 0000000..ea9669a
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# IPFire Installer RC
+#
+
+unattended=0
+if grep -q "installer.unattended" /proc/cmdline; then
+       unattended=1
+fi
+
+# Enable Unicode
+echo -en '\033%G' && kbd_mode -u
+
+# Load default console font
+setfont LatArCyrHeb-16
+
+# Silence the kernel
+echo >/proc/sys/kernel/printk "1 4 1 7"
+echo -n -e "\033[9;0]"
+
+echo "Starting shells on tty2 and tty3 ..."
+/usr/local/bin/iowrap /dev/tty2 /bin/bash &
+/usr/local/bin/iowrap /dev/tty3 /bin/bash &
+
+echo "Loading Installer..."
+/bin/bash --login -c "/usr/bin/installer /dev/tty2"
+ret=$?
+
+case "${ret}" in
+       139)
+               echo "The installer has crashed. You will be dropped to a debugging shell"
+               /bin/bash --login
+               ;;
+esac
+
+# Poweroff after an unattended installation
+if [ "${unattended}" = "1" ]; then
+       /shutdown poweroff
+fi
+
+# Reboot the system
+/shutdown reboot
similarity index 57%
rename from src/install+setup/libsmooth/makelangs.pl
rename to src/installer/execute-postinstall.sh
index 6fc2098d4e357f4f32e4fe64a086561c185222a9..695f1b521cd8bcc0cfedc4aa4ae22ce073678059 100644 (file)
@@ -1,8 +1,8 @@
-#!/usr/bin/perl
+#!/bin/sh
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2014  IPFire Team  <info@ipfire.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        #
 #                                                                             #
 ###############################################################################
 
-while (<>)
-{
-       if (/\/\* (TR_[A-Z0-9_]*)/) {
-               print "\t$1,\n"; }
-} 
-print "};\n";
+function download() {
+       wget -U "IPFire-NetInstall/2.x" "$@"
+}
+
+if [ $# -lt 2 ]; then
+       echo "$0: Insufficient number of arguments" >&2
+       exit 2
+fi
+
+DESTINATION="${1}"
+DOWNLOAD_URL="${2}"
+
+DOWNLOAD_TARGET="/tmp/post-install.exe"
+
+if download -O "${DESTINATION}${DOWNLOAD_TARGET}" "${DOWNLOAD_URL}"; then
+       echo "Downloading post-install script from ${DOWNLOAD_URL}..."
+
+       # Make it executable
+       chmod a+x "${DESTINATION}${DOWNLOAD_TARGET}"
+
+       # Replace /etc/resolv.conf so that we will have
+       cp -fb /etc/resolv.conf ${DESTINATION}/etc/resolv.conf
+       for i in /dev /proc /sys; do
+               mount --bind "${i}" "${DESTINATION}${i}"
+       done
+
+       # Execute the downloaded script
+       chroot "${DESTINATION}" sh --login -c "${DOWNLOAD_TARGET}"
+       retval=$?
+
+       # Cleanup the environment
+       mv -f ${DESTINATION}/etc/resolv.conf{~,}
+       for i in /dev /proc /sys; do
+               umount "${DESTINATION}${i}"
+       done
+       rm -f "${DESTINATION}${DOWNLOAD_TARGET}"
+
+       exit ${retval}
+
+# In case the download failed
+else
+       echo "Could not download the post-install script" >&2
+       exit 1
+fi
diff --git a/src/installer/hw.c b/src/installer/hw.c
new file mode 100644 (file)
index 0000000..ce97775
--- /dev/null
@@ -0,0 +1,1143 @@
+/*#############################################################################
+#                                                                             #
+# IPFire - An Open Source Firewall Distribution                               #
+# Copyright (C) 2014 IPFire development team                                  #
+#                                                                             #
+# 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 3 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, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+#############################################################################*/
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <assert.h>
+#include <blkid/blkid.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libudev.h>
+#include <linux/loop.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/swap.h>
+#include <sys/sysinfo.h>
+#include <unistd.h>
+
+#include <linux/fs.h>
+
+#include <libsmooth.h>
+
+#include "hw.h"
+
+const char* other_filesystems[] = {
+       "/dev",
+       "/proc",
+       "/sys",
+       NULL
+};
+
+static int system_chroot(const char* output, const char* path, const char* cmd) {
+       char chroot_cmd[STRING_SIZE];
+
+       snprintf(chroot_cmd, sizeof(chroot_cmd), "/usr/sbin/chroot %s %s", path, cmd);
+
+       return mysystem(output, chroot_cmd);
+}
+
+struct hw* hw_init() {
+       struct hw* hw = malloc(sizeof(*hw));
+       assert(hw);
+
+       // Initialize libudev
+       hw->udev = udev_new();
+       if (!hw->udev) {
+               fprintf(stderr, "Could not create udev instance\n");
+               exit(1);
+       }
+
+       return hw;
+}
+
+void hw_free(struct hw* hw) {
+       if (hw->udev)
+               udev_unref(hw->udev);
+
+       free(hw);
+}
+
+static int strstartswith(const char* a, const char* b) {
+       return (strncmp(a, b, strlen(b)) == 0);
+}
+
+static char loop_device[STRING_SIZE];
+
+static int setup_loop_device(const char* source, const char* device) {
+       int file_fd = open(source, O_RDWR);
+       if (file_fd < 0)
+               goto ERROR;
+
+       int device_fd = -1;
+       if ((device_fd = open(device, O_RDWR)) < 0)
+               goto ERROR;
+
+       if (ioctl(device_fd, LOOP_SET_FD, file_fd) < 0)
+               goto ERROR;
+
+       close(file_fd);
+       close(device_fd);
+
+       return 0;
+
+ERROR:
+       if (file_fd >= 0)
+               close(file_fd);
+
+       if (device_fd >= 0) {
+               ioctl(device_fd, LOOP_CLR_FD, 0);
+               close(device_fd);
+       }
+
+       return -1;
+}
+
+int hw_mount(const char* source, const char* target, const char* fs, int flags) {
+       const char* loop_device = "/dev/loop0";
+
+       // Create target if it does not exist
+       if (access(target, X_OK) != 0)
+               mkdir(target, S_IRWXU|S_IRWXG|S_IRWXO);
+
+       struct stat st;
+       stat(source, &st);
+
+       if (S_ISREG(st.st_mode)) {
+               int r = setup_loop_device(source, loop_device);
+               if (r == 0) {
+                       source = loop_device;
+               } else {
+                       return -1;
+               }
+       }
+
+       return mount(source, target, fs, flags, NULL);
+}
+
+int hw_umount(const char* target) {
+       int r = umount2(target, 0);
+
+       if (r && errno == EBUSY) {
+               // Give it a moment to settle
+               sleep(1);
+
+               r = umount2(target, MNT_FORCE);
+       }
+
+       return r;
+}
+
+static int hw_test_source_medium(const char* path) {
+       int ret = hw_mount(path, SOURCE_MOUNT_PATH, "iso9660", MS_RDONLY);
+
+       // If the source could not be mounted we
+       // cannot proceed.
+       if (ret != 0)
+               return ret;
+
+       // Check if the test file exists.
+       ret = access(SOURCE_TEST_FILE, R_OK);
+
+       // Umount the test device.
+       hw_umount(SOURCE_MOUNT_PATH);
+
+       return (ret == 0);
+}
+
+char* hw_find_source_medium(struct hw* hw) {
+       char* ret = NULL;
+
+       struct udev_enumerate* enumerate = udev_enumerate_new(hw->udev);
+
+       udev_enumerate_add_match_subsystem(enumerate, "block");
+       udev_enumerate_scan_devices(enumerate);
+
+       struct udev_list_entry* devices = udev_enumerate_get_list_entry(enumerate);
+
+       struct udev_list_entry* dev_list_entry;
+       udev_list_entry_foreach(dev_list_entry, devices) {
+               const char* path = udev_list_entry_get_name(dev_list_entry);
+               struct udev_device* dev = udev_device_new_from_syspath(hw->udev, path);
+
+               const char* dev_path = udev_device_get_devnode(dev);
+
+               // Skip everything what we cannot work with
+               if (strstartswith(dev_path, "/dev/loop") || strstartswith(dev_path, "/dev/fd") ||
+                               strstartswith(dev_path, "/dev/ram") || strstartswith(dev_path, "/dev/md"))
+                       continue;
+
+               if (hw_test_source_medium(dev_path) == 0) {
+                       ret = strdup(dev_path);
+               }
+
+               udev_device_unref(dev);
+
+               // If a suitable device was found the search will end.
+               if (ret)
+                       break;
+       }
+
+       udev_enumerate_unref(enumerate);
+
+       return ret;
+}
+
+static struct hw_disk** hw_create_disks() {
+       struct hw_disk** ret = malloc(sizeof(*ret) * (HW_MAX_DISKS + 1));
+
+       return ret;
+}
+
+static unsigned long long hw_block_device_get_size(const char* dev) {
+       int fd = open(dev, O_RDONLY);
+       if (fd < 0)
+               return 0;
+
+       unsigned long long size = blkid_get_dev_size(fd);
+       close(fd);
+
+       return size;
+}
+
+struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive) {
+       struct hw_disk** ret = hw_create_disks();
+       struct hw_disk** disks = ret;
+
+       struct udev_enumerate* enumerate = udev_enumerate_new(hw->udev);
+
+       udev_enumerate_add_match_subsystem(enumerate, "block");
+       udev_enumerate_scan_devices(enumerate);
+
+       struct udev_list_entry* devices = udev_enumerate_get_list_entry(enumerate);
+
+       struct udev_list_entry* dev_list_entry;
+       unsigned int i = HW_MAX_DISKS;
+       udev_list_entry_foreach(dev_list_entry, devices) {
+               const char* path = udev_list_entry_get_name(dev_list_entry);
+               struct udev_device* dev = udev_device_new_from_syspath(hw->udev, path);
+
+               const char* dev_path = udev_device_get_devnode(dev);
+
+               // Skip everything what we cannot work with
+               if (strstartswith(dev_path, "/dev/loop") || strstartswith(dev_path, "/dev/fd") ||
+                               strstartswith(dev_path, "/dev/ram") || strstartswith(dev_path, "/dev/sr") ||
+                               strstartswith(dev_path, "/dev/md")) {
+                       udev_device_unref(dev);
+                       continue;
+               }
+
+               // Skip sourcedrive if we need to
+               if (sourcedrive && (strcmp(dev_path, sourcedrive) == 0)) {
+                       udev_device_unref(dev);
+                       continue;
+               }
+
+               // DEVTYPE must be disk (otherwise we will see all sorts of partitions here)
+               const char* devtype = udev_device_get_property_value(dev, "DEVTYPE");
+               if (devtype && (strcmp(devtype, "disk") != 0)) {
+                       udev_device_unref(dev);
+                       continue;
+               }
+
+               // Skip devices with a size of zero
+               unsigned long long size = hw_block_device_get_size(dev_path);
+               if (size == 0) {
+                       udev_device_unref(dev);
+                       continue;
+               }
+
+               struct hw_disk* disk = malloc(sizeof(*disk));
+               if (disk == NULL)
+                       return NULL;
+
+               disk->ref = 1;
+
+               strncpy(disk->path, dev_path, sizeof(disk->path));
+               const char* p = disk->path + 5;
+
+               disk->size = size;
+
+               // Vendor
+               const char* vendor = udev_device_get_property_value(dev, "ID_VENDOR");
+               if (!vendor)
+                       vendor = udev_device_get_sysattr_value(dev, "vendor");
+               if (!vendor)
+                       vendor = udev_device_get_sysattr_value(dev, "manufacturer");
+
+               if (vendor)
+                       strncpy(disk->vendor, vendor, sizeof(disk->vendor));
+               else
+                       *disk->vendor = '\0';
+
+               // Model
+               const char* model = udev_device_get_property_value(dev, "ID_MODEL");
+               if (!model)
+                       model = udev_device_get_sysattr_value(dev, "model");
+               if (!model)
+                       model = udev_device_get_sysattr_value(dev, "product");
+
+               if (model)
+                       strncpy(disk->model, model, sizeof(disk->model));
+               else
+                       *disk->model = '\0';
+
+               // Format description
+               char size_str[STRING_SIZE];
+               snprintf(size_str, sizeof(size_str), "%4.1fGB", (double)disk->size / pow(1024, 3));
+
+               if (*disk->vendor && *disk->model) {
+                       snprintf(disk->description, sizeof(disk->description),
+                               "%s - %s - %s - %s", size_str, p, disk->vendor, disk->model);
+
+               } else if (*disk->vendor || *disk->model) {
+                       snprintf(disk->description, sizeof(disk->description),
+                               "%s - %s - %s", size_str, p, (*disk->vendor) ? disk->vendor : disk->model);
+
+               } else {
+                       snprintf(disk->description, sizeof(disk->description),
+                               "%s - %s", size_str, p);
+               }
+
+               *disks++ = disk;
+
+               if (--i == 0)
+                       break;
+
+               udev_device_unref(dev);
+       }
+
+       udev_enumerate_unref(enumerate);
+
+       *disks = NULL;
+
+       return ret;
+}
+
+void hw_free_disks(struct hw_disk** disks) {
+       struct hw_disk** disk = disks;
+
+       while (*disk != NULL) {
+               if (--(*disk)->ref == 0)
+                       free(*disk);
+
+               disk++;
+       }
+
+       free(disks);
+}
+
+unsigned int hw_count_disks(const struct hw_disk** disks) {
+       unsigned int ret = 0;
+
+       while (*disks++)
+               ret++;
+
+       return ret;
+}
+
+struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection) {
+       struct hw_disk** ret = hw_create_disks();
+       struct hw_disk** selected_disks = ret;
+
+       unsigned int num_disks = hw_count_disks((const struct hw_disk**)disks);
+
+       for (unsigned int i = 0; i < num_disks; i++) {
+               if (!selection || selection[i]) {
+                       struct hw_disk *selected_disk = disks[i];
+                       selected_disk->ref++;
+
+                       *selected_disks++ = selected_disk;
+               }
+       }
+
+       // Set sentinel
+       *selected_disks = NULL;
+
+       return ret;
+}
+
+struct hw_disk** hw_select_first_disk(const struct hw_disk** disks) {
+       struct hw_disk** ret = hw_create_disks();
+       struct hw_disk** selected_disks = ret;
+
+       unsigned int num_disks = hw_count_disks(disks);
+       assert(num_disks > 0);
+
+       for (unsigned int i = 0; i < num_disks; i++) {
+               struct hw_disk *disk = disks[i];
+               disk->ref++;
+
+               *selected_disks++ = disk;
+               break;
+       }
+
+       // Set sentinel
+       *selected_disks = NULL;
+
+       return ret;
+}
+
+static unsigned long long hw_swap_size(struct hw_destination* dest) {
+       unsigned long long memory = hw_memory();
+
+       unsigned long long swap_size = memory / 4;
+
+       // Min. swap size is 128MB
+       if (swap_size < MB2BYTES(128))
+               swap_size = MB2BYTES(128);
+
+       // Cap swap size to 1GB
+       else if (swap_size > MB2BYTES(1024))
+               swap_size = MB2BYTES(1024);
+
+       return swap_size;
+}
+
+static unsigned long long hw_root_size(struct hw_destination* dest) {
+       unsigned long long root_size;
+
+       if (dest->size < MB2BYTES(2048))
+               root_size = MB2BYTES(1024);
+
+       else if (dest->size >= MB2BYTES(2048) && dest->size <= MB2BYTES(3072))
+               root_size = MB2BYTES(1536);
+
+       else
+               root_size = MB2BYTES(2048);
+
+       return root_size;
+}
+
+static unsigned long long hw_boot_size(struct hw_destination* dest) {
+       return MB2BYTES(64);
+}
+
+static int hw_device_has_p_suffix(const struct hw_destination* dest) {
+       // All RAID devices have the p suffix.
+       if (dest->is_raid)
+               return 1;
+
+       // Devices with a number at the end have the p suffix, too.
+       // e.g. mmcblk0, cciss0
+       unsigned int last_char = strlen(dest->path) - 1;
+       if ((dest->path[last_char] >= '0') && (dest->path[last_char] <= '9'))
+               return 1;
+
+       return 0;
+}
+
+static int hw_calculate_partition_table(struct hw_destination* dest, int disable_swap) {
+       char path[DEV_SIZE];
+       int part_idx = 1;
+
+       snprintf(path, sizeof(path), "%s%s", dest->path,
+               hw_device_has_p_suffix(dest) ? "p" : "");
+       dest->part_boot_idx = 0;
+
+       // Determine the size of the target block device
+       if (dest->is_raid) {
+               dest->size = (dest->disk1->size >= dest->disk2->size) ?
+                       dest->disk2->size : dest->disk1->size;
+
+               // The RAID will install some metadata at the end of the disk
+               // and we will save up some space for that.
+               dest->size -= MB2BYTES(2);
+       } else {
+               dest->size = dest->disk1->size;
+       }
+
+       // As we add some extra space before the beginning of the first
+       // partition, we need to substract that here.
+       dest->size -= MB2BYTES(1);
+
+       // Add some more space for partition tables, etc.
+       dest->size -= MB2BYTES(1);
+
+       // Determine partition table
+       dest->part_table = HW_PART_TABLE_MSDOS;
+
+       // Disks over 2TB need to use GPT
+       if (dest->size >= MB2BYTES(2047 * 1024))
+               dest->part_table = HW_PART_TABLE_GPT;
+
+       // We also use GPT on raid disks by default
+       else if (dest->is_raid)
+               dest->part_table = HW_PART_TABLE_GPT;
+
+       // When using GPT, GRUB2 needs a little bit of space to put
+       // itself in.
+       if (dest->part_table == HW_PART_TABLE_GPT) {
+               snprintf(dest->part_bootldr, sizeof(dest->part_bootldr),
+                       "%s%d", path, part_idx);
+
+               dest->size_bootldr = MB2BYTES(4);
+
+               dest->part_boot_idx = part_idx++;
+       } else {
+               *dest->part_bootldr = '\0';
+               dest->size_bootldr = 0;
+       }
+
+       dest->size_boot = hw_boot_size(dest);
+       dest->size_root = hw_root_size(dest);
+
+       // Should we use swap?
+       if (disable_swap)
+               dest->size_swap = 0;
+       else
+               dest->size_swap = hw_swap_size(dest);
+
+       // Determine the size of the data partition.
+       unsigned long long used_space = dest->size_bootldr + dest->size_boot
+               + dest->size_swap + dest->size_root;
+
+       // Disk is way too small
+       if (used_space >= dest->size)
+               return -1;
+
+       dest->size_data = dest->size - used_space;
+
+       // If it gets too small, we remove the swap space.
+       if (dest->size_data <= MB2BYTES(256)) {
+               dest->size_data += dest->size_swap;
+               dest->size_swap = 0;
+       }
+
+       // Set partition names
+       if (dest->size_boot > 0) {
+               if (dest->part_boot_idx == 0)
+                       dest->part_boot_idx = part_idx;
+
+               snprintf(dest->part_boot, sizeof(dest->part_boot), "%s%d", path, part_idx++);
+       } else
+               *dest->part_boot = '\0';
+
+       if (dest->size_swap > 0)
+               snprintf(dest->part_swap, sizeof(dest->part_swap), "%s%d", path, part_idx++);
+       else
+               *dest->part_swap = '\0';
+
+       // There is always a root partition
+       if (dest->part_boot_idx == 0)
+               dest->part_boot_idx = part_idx;
+
+       snprintf(dest->part_root, sizeof(dest->part_root), "%s%d", path, part_idx++);
+
+       if (dest->size_data > 0)
+               snprintf(dest->part_data, sizeof(dest->part_data), "%s%d", path, part_idx++);
+       else
+               *dest->part_data = '\0';
+
+       return 0;
+}
+
+struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks, int disable_swap) {
+       struct hw_destination* dest = malloc(sizeof(*dest));
+
+       if (part_type == HW_PART_TYPE_NORMAL) {
+               dest->disk1 = *disks;
+               dest->disk2 = NULL;
+
+               strncpy(dest->path, dest->disk1->path, sizeof(dest->path));
+
+       } else if (part_type == HW_PART_TYPE_RAID1) {
+               dest->disk1 = *disks++;
+               dest->disk2 = *disks;
+               dest->raid_level = 1;
+
+               snprintf(dest->path, sizeof(dest->path), "/dev/md0");
+       }
+
+       // Is this a RAID device?
+       dest->is_raid = (part_type > HW_PART_TYPE_NORMAL);
+
+       int r = hw_calculate_partition_table(dest, disable_swap);
+       if (r)
+               return NULL;
+
+       // Set default filesystem
+       dest->filesystem = HW_FS_DEFAULT;
+
+       return dest;
+}
+
+unsigned long long hw_memory() {
+       struct sysinfo si;
+
+       int r = sysinfo(&si);
+       if (r < 0)
+               return 0;
+
+       return si.totalram;
+}
+
+static int hw_zero_out_device(const char* path, int bytes) {
+       char block[512];
+       memset(block, 0, sizeof(block));
+
+       int blocks = bytes / sizeof(block);
+
+       int fd = open(path, O_WRONLY);
+       if (fd < 0)
+               return -1;
+
+       unsigned int bytes_written = 0;
+       while (blocks-- > 0) {
+               bytes_written += write(fd, block, sizeof(block));
+       }
+
+       fsync(fd);
+       close(fd);
+
+       return bytes_written;
+}
+
+static int try_open(const char* path) {
+       FILE* f = fopen(path, "r");
+       if (f) {
+               fclose(f);
+               return 0;
+       }
+
+       return -1;
+}
+
+int hw_create_partitions(struct hw_destination* dest, const char* output) {
+       // Before we write a new partition table to the disk, we will erase
+       // the first couple of megabytes at the beginning of the device to
+       // get rid of all left other things like bootloaders and partition tables.
+       // This solves some problems when changing from MBR to GPT partitions or
+       // the other way around.
+       int r = hw_zero_out_device(dest->path, MB2BYTES(10));
+       if (r <= 0)
+               return r;
+
+       char* cmd = NULL;
+       asprintf(&cmd, "/usr/sbin/parted -s %s -a optimal", dest->path);
+
+       // Set partition type
+       if (dest->part_table == HW_PART_TABLE_MSDOS)
+               asprintf(&cmd, "%s mklabel msdos", cmd);
+       else if (dest->part_table == HW_PART_TABLE_GPT)
+               asprintf(&cmd, "%s mklabel gpt", cmd);
+
+       unsigned long long part_start = MB2BYTES(1);
+
+       if (*dest->part_bootldr) {
+               asprintf(&cmd, "%s mkpart %s ext2 %lluB %lluB", cmd,
+                       (dest->part_table == HW_PART_TABLE_GPT) ? "BOOTLDR" : "primary",
+               part_start, part_start + dest->size_bootldr - 1);
+
+               part_start += dest->size_bootldr;
+       }
+
+       if (*dest->part_boot) {
+               asprintf(&cmd, "%s mkpart %s ext2 %lluB %lluB", cmd,
+                       (dest->part_table == HW_PART_TABLE_GPT) ? "BOOT" : "primary",
+                       part_start, part_start + dest->size_boot - 1);
+
+               part_start += dest->size_boot;
+       }
+
+       if (*dest->part_swap) {
+               asprintf(&cmd, "%s mkpart %s linux-swap %lluB %lluB", cmd,
+                       (dest->part_table == HW_PART_TABLE_GPT) ? "SWAP" : "primary",
+                       part_start, part_start + dest->size_swap - 1);
+
+               part_start += dest->size_swap;
+       }
+
+       if (*dest->part_root) {
+               asprintf(&cmd, "%s mkpart %s ext2 %lluB %lluB", cmd,
+                       (dest->part_table == HW_PART_TABLE_GPT) ? "ROOT" : "primary",
+                       part_start, part_start + dest->size_root - 1);
+
+               part_start += dest->size_root;
+       }
+
+       if (*dest->part_data) {
+               asprintf(&cmd, "%s mkpart %s ext2 %lluB %lluB", cmd,
+                       (dest->part_table == HW_PART_TABLE_GPT) ? "DATA" : "primary",
+                       part_start, part_start + dest->size_data - 1);
+
+               part_start += dest->size_data;
+       }
+
+       if (dest->part_boot_idx > 0)
+               asprintf(&cmd, "%s set %d boot on", cmd, dest->part_boot_idx);
+
+       if (dest->part_table == HW_PART_TABLE_GPT) {
+               if (*dest->part_bootldr) {
+                       asprintf(&cmd, "%s set %d bios_grub on", cmd, dest->part_boot_idx);
+               }
+               asprintf(&cmd, "%s disk_set pmbr_boot on", cmd);
+       }
+
+       r = mysystem(output, cmd);
+
+       // Wait until the system re-read the partition table
+       if (r == 0) {
+               unsigned int counter = 10;
+
+               while (counter-- > 0) {
+                       sleep(1);
+
+                       if (*dest->part_bootldr && (try_open(dest->part_bootldr) != 0))
+                               continue;
+
+                       if (*dest->part_boot && (try_open(dest->part_boot) != 0))
+                               continue;
+
+                       if (*dest->part_swap && (try_open(dest->part_swap) != 0))
+                               continue;
+
+                       if (*dest->part_root && (try_open(dest->part_root) != 0))
+                               continue;
+
+                       if (*dest->part_data && (try_open(dest->part_data) != 0))
+                               continue;
+
+                       // All partitions do exist, exiting the loop.
+                       break;
+               }
+       }
+
+       if (cmd)
+               free(cmd);
+
+       return r;
+}
+
+static int hw_format_filesystem(const char* path, int fs, const char* output) {
+       char cmd[STRING_SIZE] = "\0";
+
+       // Swap
+       if (fs == HW_FS_SWAP) {
+               snprintf(cmd, sizeof(cmd), "/sbin/mkswap -v1 %s &>/dev/null", path);
+       // ReiserFS
+       } else if (fs == HW_FS_REISERFS) {
+               snprintf(cmd, sizeof(cmd), "/sbin/mkreiserfs -f %s ", path);
+
+       // EXT4
+       } else if (fs == HW_FS_EXT4) {
+               snprintf(cmd, sizeof(cmd), "/sbin/mke2fs -T ext4 %s", path);
+
+       // EXT4 w/o journal
+       } else if (fs == HW_FS_EXT4_WO_JOURNAL) {
+               snprintf(cmd, sizeof(cmd), "/sbin/mke2fs -T ext4 -O ^has_journal %s", path);
+
+       // XFS
+       } else if (fs == HW_FS_XFS) {
+               snprintf(cmd, sizeof(cmd), "/sbin/mkfs.xfs -f %s", path);
+       }
+
+       assert(*cmd);
+
+       int r = mysystem(output, cmd);
+
+       return r;
+}
+
+int hw_create_filesystems(struct hw_destination* dest, const char* output) {
+       int r;
+
+       // boot
+       if (*dest->part_boot) {
+               r = hw_format_filesystem(dest->part_boot, dest->filesystem, output);
+               if (r)
+                       return r;
+       }
+
+       // swap
+       if (*dest->part_swap) {
+               r = hw_format_filesystem(dest->part_swap, HW_FS_SWAP, output);
+               if (r)
+                       return r;
+       }
+
+       // root
+       r = hw_format_filesystem(dest->part_root, dest->filesystem, output);
+       if (r)
+               return r;
+
+       // data
+       if (*dest->part_data) {
+               r = hw_format_filesystem(dest->part_data, dest->filesystem, output);
+               if (r)
+                       return r;
+       }
+
+       return 0;
+}
+
+int hw_mount_filesystems(struct hw_destination* dest, const char* prefix) {
+       char target[STRING_SIZE];
+
+       assert(*prefix == '/');
+
+       const char* filesystem;
+       switch (dest->filesystem) {
+               case HW_FS_REISERFS:
+                       filesystem = "reiserfs";
+                       break;
+
+               case HW_FS_EXT4:
+               case HW_FS_EXT4_WO_JOURNAL:
+                       filesystem = "ext4";
+                       break;
+
+               case HW_FS_XFS:
+                       filesystem = "xfs";
+                       break;
+
+               default:
+                       assert(0);
+       }
+
+       // root
+       int r = hw_mount(dest->part_root, prefix, filesystem, 0);
+       if (r)
+               return r;
+
+       // boot
+       if (*dest->part_boot) {
+               snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_BOOT);
+               mkdir(target, S_IRWXU|S_IRWXG|S_IRWXO);
+
+               r = hw_mount(dest->part_boot, target, filesystem, 0);
+               if (r) {
+                       hw_umount_filesystems(dest, prefix);
+
+                       return r;
+               }
+       }
+
+       // data
+       if (*dest->part_data) {
+               snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_DATA);
+               mkdir(target, S_IRWXU|S_IRWXG|S_IRWXO);
+
+               r = hw_mount(dest->part_data, target, filesystem, 0);
+               if (r) {
+                       hw_umount_filesystems(dest, prefix);
+
+                       return r;
+               }
+       }
+
+       // swap
+       if (*dest->part_swap) {
+               r = swapon(dest->part_swap, 0);
+               if (r) {
+                       hw_umount_filesystems(dest, prefix);
+
+                       return r;
+               }
+       }
+
+       // bind-mount misc filesystems
+       char** otherfs = other_filesystems;
+       while (*otherfs) {
+               snprintf(target, sizeof(target), "%s%s", prefix, *otherfs);
+
+               mkdir(target, S_IRWXU|S_IRWXG|S_IRWXO);
+               r = hw_mount(*otherfs, target, NULL, MS_BIND);
+               if (r) {
+                       hw_umount_filesystems(dest, prefix);
+
+                       return r;
+               }
+
+               otherfs++;
+       }
+
+       return 0;
+}
+
+int hw_umount_filesystems(struct hw_destination* dest, const char* prefix) {
+       int r;
+       char target[STRING_SIZE];
+
+       // Write all buffers to disk before umounting
+       hw_sync();
+
+       // boot
+       if (*dest->part_boot) {
+               snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_BOOT);
+               r = hw_umount(target);
+               if (r)
+                       return -1;
+       }
+
+       // data
+       if (*dest->part_data) {
+               snprintf(target, sizeof(target), "%s%s", prefix, HW_PATH_DATA);
+               r = hw_umount(target);
+               if (r)
+                       return -1;
+       }
+
+       // swap
+       if (*dest->part_swap) {
+               swapoff(dest->part_swap);
+       }
+
+       // misc filesystems
+       char** otherfs = other_filesystems;
+       while (*otherfs) {
+               snprintf(target, sizeof(target), "%s%s", prefix, *otherfs++);
+               r = hw_umount(target);
+               if (r)
+                       return -1;
+       }
+
+       // root
+       r = hw_umount(prefix);
+       if (r)
+               return -1;
+
+       return 0;
+}
+
+int hw_destroy_raid_superblocks(const struct hw_destination* dest, const char* output) {
+       char cmd[STRING_SIZE];
+
+       hw_stop_all_raid_arrays(output);
+       hw_stop_all_raid_arrays(output);
+
+       if (dest->disk1) {
+               snprintf(cmd, sizeof(cmd), "/sbin/mdadm --zero-superblock %s", dest->disk1->path);
+               mysystem(output, cmd);
+       }
+
+       if (dest->disk2) {
+               snprintf(cmd, sizeof(cmd), "/sbin/mdadm --zero-superblock %s", dest->disk2->path);
+               mysystem(output, cmd);
+       }
+
+       return 0;
+}
+
+int hw_setup_raid(struct hw_destination* dest, const char* output) {
+       char* cmd = NULL;
+       int r;
+
+       assert(dest->is_raid);
+
+       // Stop all RAID arrays that might be around (again).
+       // It seems that there is some sort of race-condition with udev re-enabling
+       // the raid arrays and therefore locking the disks.
+       r = hw_destroy_raid_superblocks(dest, output);
+
+       asprintf(&cmd, "echo \"y\" | /sbin/mdadm --create --verbose --metadata=%s --auto=mdp %s",
+               RAID_METADATA, dest->path);
+
+       switch (dest->raid_level) {
+               case 1:
+                       asprintf(&cmd, "%s --level=1 --raid-devices=2", cmd);
+                       break;
+
+               default:
+                       assert(0);
+       }
+
+       if (dest->disk1) {
+               asprintf(&cmd, "%s %s", cmd, dest->disk1->path);
+
+               // Clear all data at the beginning
+               r = hw_zero_out_device(dest->disk1->path, MB2BYTES(10));
+               if (r <= 0)
+                       return r;
+       }
+
+       if (dest->disk2) {
+               asprintf(&cmd, "%s %s", cmd, dest->disk2->path);
+
+               // Clear all data at the beginning
+               r = hw_zero_out_device(dest->disk2->path, MB2BYTES(10));
+               if (r <= 0)
+                       return r;
+       }
+
+       r = mysystem(output, cmd);
+       free(cmd);
+
+       // Wait a moment until the device has been properly brought up
+       if (r == 0) {
+               unsigned int counter = 10;
+               while (counter-- > 0) {
+                       sleep(1);
+
+                       // If the raid device has not yet been properly brought up,
+                       // opening it will fail with the message: Device or resource busy
+                       // Hence we will wait a bit until it becomes usable.
+                       if (try_open(dest->path) == 0)
+                               break;
+               }
+       }
+
+       return r;
+}
+
+int hw_stop_all_raid_arrays(const char* output) {
+       return mysystem(output, "/sbin/mdadm --stop --scan --verbose");
+}
+
+int hw_install_bootloader(struct hw_destination* dest, const char* output) {
+       char cmd[STRING_SIZE];
+       int r;
+
+       // Generate configuration file
+       snprintf(cmd, sizeof(cmd), "/usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg");
+       r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd);
+       if (r)
+               return r;
+
+       char cmd_grub[STRING_SIZE];
+       snprintf(cmd_grub, sizeof(cmd_grub), "/usr/sbin/grub-install --no-floppy --recheck");
+
+       if (dest->is_raid) {
+               snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->disk1->path);
+               r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd);
+               if (r)
+                       return r;
+
+               snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->disk2->path);
+               r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd);
+       } else {
+               snprintf(cmd, sizeof(cmd), "%s %s", cmd_grub, dest->path);
+               r = system_chroot(output, DESTINATION_MOUNT_PATH, cmd);
+       }
+
+       hw_sync();
+
+       return r;
+}
+
+static char* hw_get_uuid(const char* dev) {
+       blkid_probe p = blkid_new_probe_from_filename(dev);
+       const char* buffer = NULL;
+       char* uuid = NULL;
+
+       if (!p)
+               return NULL;
+
+       blkid_do_probe(p);
+       blkid_probe_lookup_value(p, "UUID", &buffer, NULL);
+
+       if (buffer)
+               uuid = strdup(buffer);
+
+       blkid_free_probe(p);
+
+       return uuid;
+}
+
+#define FSTAB_FMT "UUID=%s %-8s %-4s %-10s %d %d\n"
+
+int hw_write_fstab(struct hw_destination* dest) {
+       FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/fstab", "w");
+       if (!f)
+               return -1;
+
+       char* uuid = NULL;
+
+       // boot
+       if (*dest->part_boot) {
+               uuid = hw_get_uuid(dest->part_boot);
+
+               if (uuid) {
+                       fprintf(f, FSTAB_FMT, uuid, "/boot", "auto", "defaults", 1, 2);
+                       free(uuid);
+               }
+       }
+
+       // swap
+       if (*dest->part_swap) {
+               uuid = hw_get_uuid(dest->part_swap);
+
+               if (uuid) {
+                       fprintf(f, FSTAB_FMT, uuid, "swap", "swap", "defaults,pri=1", 0, 0);
+                       free(uuid);
+               }
+       }
+
+       // root
+       uuid = hw_get_uuid(dest->part_root);
+       if (uuid) {
+               fprintf(f, FSTAB_FMT, uuid, "/", "auto", "defaults", 1, 1);
+               free(uuid);
+       }
+
+       // data
+       if (*dest->part_data) {
+               uuid = hw_get_uuid(dest->part_data);
+
+               if (uuid) {
+                       fprintf(f, FSTAB_FMT, uuid, "/var", "auto", "defaults", 1, 1);
+                       free(uuid);
+               }
+       }
+
+       fclose(f);
+
+       return 0;
+}
+
+void hw_sync() {
+       sync();
+       sync();
+       sync();
+}
+
+int hw_start_networking(const char* output) {
+       return mysystem(output, "/usr/bin/start-networking.sh");
+}
+
+char* hw_find_backup_file(const char* output, const char* search_path) {
+       char path[STRING_SIZE];
+
+       snprintf(path, sizeof(path), "%s/backup.ipf", search_path);
+       int r = access(path, R_OK);
+
+       if (r == 0)
+               return strdup(path);
+
+       return NULL;
+}
+
+int hw_restore_backup(const char* output, const char* backup_path, const char* destination) {
+       char command[STRING_SIZE];
+
+       snprintf(command, sizeof(command), "/bin/tar xzpf %s -C %s", backup_path, destination);
+       int rc = mysystem(output, command);
+
+       if (rc)
+               return -1;
+
+       return 0;
+}
diff --git a/src/installer/hw.h b/src/installer/hw.h
new file mode 100644 (file)
index 0000000..f16b39c
--- /dev/null
@@ -0,0 +1,139 @@
+/*#############################################################################
+#                                                                             #
+# IPFire - An Open Source Firewall Distribution                               #
+# Copyright (C) 2014 IPFire development team                                  #
+#                                                                             #
+# 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 3 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, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+#############################################################################*/
+
+#ifndef HEADER_HW_H
+#define HEADER_HW_H
+
+#include <libudev.h>
+
+#define DESTINATION_MOUNT_PATH        "/harddisk"
+#define SOURCE_MOUNT_PATH "/cdrom"
+#define SOURCE_TEST_FILE  SOURCE_MOUNT_PATH "/" VERSION ".media"
+
+#define HW_MAX_DISKS                 32
+#define STRING_SIZE                1024
+#define DEV_SIZE                    128
+
+#define HW_PATH_BOOT                  "/boot"
+#define HW_PATH_DATA                  "/var"
+
+#define HW_PART_TYPE_NORMAL           0
+#define HW_PART_TYPE_RAID1            1
+
+#define HW_PART_TABLE_MSDOS           0
+#define HW_PART_TABLE_GPT             1
+
+#define HW_FS_SWAP                    0
+#define HW_FS_REISERFS                1
+#define HW_FS_EXT4                    2
+#define HW_FS_EXT4_WO_JOURNAL         3
+#define HW_FS_XFS                     4
+
+#define HW_FS_DEFAULT                 HW_FS_EXT4
+
+#define RAID_METADATA                 "1.0"
+
+#define SERIAL_BAUDRATE               115200
+
+#define BYTES2MB(x) ((x) / 1024 / 1024)
+#define MB2BYTES(x) ((unsigned long long)(x) * 1024 * 1024)
+
+struct hw {
+       struct udev *udev;
+};
+
+struct hw_disk {
+       char path[DEV_SIZE];
+       unsigned long long size;
+
+       char description[STRING_SIZE];
+       char vendor[STRING_SIZE];
+       char model[STRING_SIZE];
+
+       // Reference counter
+       int ref;
+};
+
+struct hw_destination {
+       char path[DEV_SIZE];
+
+       int is_raid;
+       int raid_level;
+       const struct hw_disk* disk1;
+       const struct hw_disk* disk2;
+
+       int part_table;
+       char part_bootldr[DEV_SIZE];
+       char part_boot[DEV_SIZE];
+       char part_swap[DEV_SIZE];
+       char part_root[DEV_SIZE];
+       char part_data[DEV_SIZE];
+       int part_boot_idx;
+
+       int filesystem;
+
+       unsigned long long size;
+       unsigned long long size_bootldr;
+       unsigned long long size_boot;
+       unsigned long long size_swap;
+       unsigned long long size_root;
+       unsigned long long size_data;
+};
+
+struct hw* hw_init();
+void hw_free(struct hw* hw);
+
+int hw_mount(const char* source, const char* target, const char* fs, int flags);
+int hw_umount(const char* target);
+
+char* hw_find_source_medium(struct hw* hw);
+
+struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive);
+void hw_free_disks(struct hw_disk** disks);
+unsigned int hw_count_disks(const struct hw_disk** disks);
+struct hw_disk** hw_select_disks(struct hw_disk** disks, int* selection);
+struct hw_disk** hw_select_first_disk(const struct hw_disk** disks);
+
+struct hw_destination* hw_make_destination(int part_type, struct hw_disk** disks,
+       int disable_swap);
+
+unsigned long long hw_memory();
+
+int hw_create_partitions(struct hw_destination* dest, const char* output);
+int hw_create_filesystems(struct hw_destination* dest, const char* output);
+
+int hw_mount_filesystems(struct hw_destination* dest, const char* prefix);
+int hw_umount_filesystems(struct hw_destination* dest, const char* prefix);
+
+int hw_destroy_raid_superblocks(const struct hw_destination* dest, const char* output);
+int hw_setup_raid(struct hw_destination* dest, const char* output);
+int hw_stop_all_raid_arrays(const char* output);
+
+int hw_install_bootloader(struct hw_destination* dest, const char* output);
+int hw_write_fstab(struct hw_destination* dest);
+
+char* hw_find_backup_file(const char* output, const char* search_path);
+int hw_restore_backup(const char* output, const char* backup_path, const char* destination);
+
+int hw_start_networking(const char* output);
+
+void hw_sync();
+
+#endif /* HEADER_HW_H */
diff --git a/src/installer/m4/attributes.m4 b/src/installer/m4/attributes.m4
new file mode 100644 (file)
index 0000000..7e080da
--- /dev/null
@@ -0,0 +1,288 @@
+dnl Macros to check the presence of generic (non-typed) symbols.
+dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
+dnl Copyright (c) 2006-2008 xine project
+dnl Copyright (c) 2012 Lucas De Marchi <lucas.de.marchi@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2, or (at your option)
+dnl any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+dnl 02110-1301, USA.
+dnl
+dnl As a special exception, the copyright owners of the
+dnl macro gives unlimited permission to copy, distribute and modify the
+dnl configure scripts that are the output of Autoconf when processing the
+dnl Macro. You need not follow the terms of the GNU General Public
+dnl License when using or distributing such scripts, even though portions
+dnl of the text of the Macro appear in them. The GNU General Public
+dnl License (GPL) does govern all other use of the material that
+dnl constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the
+dnl Autoconf Macro released by this project. When you make and
+dnl distribute a modified version of the Autoconf Macro, you may extend
+dnl this special exception to the GPL to apply to your modified version as
+dnl well.
+
+dnl Check if FLAG in ENV-VAR is supported by compiler and append it
+dnl to WHERE-TO-APPEND variable
+dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG])
+
+AC_DEFUN([CC_CHECK_FLAG_APPEND], [
+  AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2],
+                 AS_TR_SH([cc_cv_$2_$3]),
+          [eval "AS_TR_SH([cc_save_$2])='${$2}'"
+           eval "AS_TR_SH([$2])='-Werror $3'"
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])],
+                                    [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"],
+                                    [eval "AS_TR_SH([cc_cv_$2_$3])='no'"])
+           eval "AS_TR_SH([$2])='$cc_save_$2'"])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes],
+        [eval "$1='${$1} $3'"])
+])
+
+dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2])
+AC_DEFUN([CC_CHECK_FLAGS_APPEND], [
+  for flag in $3; do
+    CC_CHECK_FLAG_APPEND($1, $2, $flag)
+  done
+])
+
+dnl Check if the flag is supported by linker (cacheable)
+dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+
+AC_DEFUN([CC_CHECK_LDFLAGS], [
+  AC_CACHE_CHECK([if $CC supports $1 flag],
+    AS_TR_SH([cc_cv_ldflags_$1]),
+    [ac_save_LDFLAGS="$LDFLAGS"
+     LDFLAGS="$LDFLAGS $1"
+     AC_LINK_IFELSE([int main() { return 1; }],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
+     LDFLAGS="$ac_save_LDFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
+    [$2], [$3])
+])
+
+dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for
+dnl the current linker to avoid undefined references in a shared object.
+AC_DEFUN([CC_NOUNDEFINED], [
+  dnl We check $host for which systems to enable this for.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  case $host in
+     dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
+     dnl are requested, as different implementations are present; to avoid problems
+     dnl use -Wl,-z,defs only for those platform not behaving this way.
+     *-freebsd* | *-openbsd*) ;;
+     *)
+        dnl First of all check for the --no-undefined variant of GNU ld. This allows
+        dnl for a much more readable commandline, so that people can understand what
+        dnl it does without going to look for what the heck -z defs does.
+        for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
+           CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
+           break
+        done
+     ;;
+  esac
+
+  AC_SUBST([LDFLAGS_NOUNDEFINED])
+])
+
+dnl Check for a -Werror flag or equivalent. -Werror is the GCC
+dnl and ICC flag that tells the compiler to treat all the warnings
+dnl as fatal. We usually need this option to make sure that some
+dnl constructs (like attributes) are not simply ignored.
+dnl
+dnl Other compilers don't support -Werror per se, but they support
+dnl an equivalent flag:
+dnl  - Sun Studio compiler supports -errwarn=%all
+AC_DEFUN([CC_CHECK_WERROR], [
+  AC_CACHE_CHECK(
+    [for $CC way to treat warnings as errors],
+    [cc_cv_werror],
+    [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
+      [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
+    ])
+])
+
+AC_DEFUN([CC_CHECK_ATTRIBUTE], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
+    AS_TR_SH([cc_cv_attribute_$1]),
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
+    [AC_DEFINE(
+       AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
+         [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
+         )
+     $4],
+    [$5])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
+  CC_CHECK_ATTRIBUTE(
+    [constructor],,
+    [void __attribute__((constructor)) ctor() { int a; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
+  CC_CHECK_ATTRIBUTE(
+    [format], [format(printf, n, n)],
+    [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
+  CC_CHECK_ATTRIBUTE(
+    [format_arg], [format_arg(printf)],
+    [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
+  CC_CHECK_ATTRIBUTE(
+    [visibility_$1], [visibility("$1")],
+    [void __attribute__((visibility("$1"))) $1_function() { }],
+    [$2], [$3])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
+  CC_CHECK_ATTRIBUTE(
+    [nonnull], [nonnull()],
+    [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
+  CC_CHECK_ATTRIBUTE(
+    [unused], ,
+    [void some_function(void *foo, __attribute__((unused)) void *bar);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
+  CC_CHECK_ATTRIBUTE(
+    [sentinel], ,
+    [void some_function(void *foo, ...) __attribute__((sentinel));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
+  CC_CHECK_ATTRIBUTE(
+    [deprecated], ,
+    [void some_function(void *foo, ...) __attribute__((deprecated));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
+  CC_CHECK_ATTRIBUTE(
+    [alias], [weak, alias],
+    [void other_function(void *foo) { }
+     void some_function(void *foo) __attribute__((weak, alias("other_function")));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
+  CC_CHECK_ATTRIBUTE(
+    [malloc], ,
+    [void * __attribute__((malloc)) my_alloc(int n);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_PACKED], [
+  CC_CHECK_ATTRIBUTE(
+    [packed], ,
+    [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONST], [
+  CC_CHECK_ATTRIBUTE(
+    [const], ,
+    [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_FLAG_VISIBILITY], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
+    [cc_cv_flag_visibility],
+    [cc_flag_visibility_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
+     cc_cv_flag_visibility='yes',
+     cc_cv_flag_visibility='no')
+     CFLAGS="$cc_flag_visibility_save_CFLAGS"])
+
+  AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
+    [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
+       [Define this if the compiler supports the -fvisibility flag])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_FUNC_EXPECT], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if compiler has __builtin_expect function],
+    [cc_cv_func_expect],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+       [int some_function() {
+        int a = 3;
+        return (int)__builtin_expect(a, 3);
+     }])],
+       [cc_cv_func_expect=yes],
+       [cc_cv_func_expect=no])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([test "x$cc_cv_func_expect" = "xyes"],
+    [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
+     [Define this if the compiler supports __builtin_expect() function])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
+    [cc_cv_attribute_aligned],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     for cc_attribute_align_try in 64 32 16 8 4 2; do
+        AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+          int main() {
+            static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
+            return c;
+          }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
+     done
+     CFLAGS="$ac_save_CFLAGS"
+  ])
+
+  if test "x$cc_cv_attribute_aligned" != "x"; then
+     AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
+       [Define the highest alignment supported])
+  fi
+])
diff --git a/src/installer/main.c b/src/installer/main.c
new file mode 100644 (file)
index 0000000..d02db28
--- /dev/null
@@ -0,0 +1,942 @@
+/* SmoothWall install program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence.  See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * Contains main entry point, and misc functions.6
+ * 
+ */
+#define _GNU_SOURCE
+
+#include <assert.h>
+#include <errno.h>
+#include <libsmooth.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mount.h>
+
+#include "hw.h"
+
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("installer", x)
+
+#define INST_FILECOUNT 21000
+#define LICENSE_FILE   "/cdrom/COPYING"
+#define SOURCE_TEMPFILE "/tmp/downloads/image.iso"
+
+extern char url[STRING_SIZE];
+
+static int newtChecklist(const char* title, const char* message,
+               unsigned int width, unsigned int height, unsigned int num_entries,
+               const char** entries, int* states) {
+       int ret;
+       const int list_height = 4;
+
+       char cbstates[num_entries];
+
+       for (unsigned int i = 0; i < num_entries; i++) {
+               cbstates[i] = states[i] ? '*' : ' ';
+       }
+
+       newtCenteredWindow(width, height, title);
+
+       newtComponent textbox = newtTextbox(1, 1, width - 2, height - 6 - list_height,
+               NEWT_FLAG_WRAP);
+       newtTextboxSetText(textbox, message);
+
+       int top = newtTextboxGetNumLines(textbox) + 2;
+
+       newtComponent form = newtForm(NULL, NULL, 0);
+
+       newtComponent sb = NULL;
+       if (list_height < num_entries) {
+               sb = newtVerticalScrollbar(
+                       width - 4, top + 1, list_height,
+                       NEWT_COLORSET_CHECKBOX, NEWT_COLORSET_ACTCHECKBOX);
+
+               newtFormAddComponent(form, sb);
+       }
+
+       newtComponent subform = newtForm(sb, NULL, 0);
+       newtFormSetBackground(subform, NEWT_COLORSET_CHECKBOX);
+
+       newtFormSetHeight(subform, list_height);
+       newtFormSetWidth(subform, width - 10);
+
+       for (unsigned int i = 0; i < num_entries; i++) {
+               newtComponent cb = newtCheckbox(4, top + i, entries[i], cbstates[i],
+                       NULL, &cbstates[i]);
+
+               newtFormAddComponent(subform, cb);
+       }
+
+       newtFormAddComponents(form, textbox, subform, NULL);
+
+       newtComponent btn_okay   = newtButton((width - 18) / 3, height - 4, _("OK"));
+       newtComponent btn_cancel = newtButton((width - 18) / 3 * 2 + 9, height - 4, _("Cancel"));
+       newtFormAddComponents(form, btn_okay, btn_cancel, NULL);
+
+       newtComponent answer = newtRunForm(form);
+
+       if ((answer == NULL) || (answer == btn_cancel)) {
+               ret = -1;
+       } else {
+               ret = 0;
+
+               for (unsigned int i = 0; i < num_entries; i++) {
+                       states[i] = (cbstates[i] != ' ');
+
+                       if (states[i])
+                               ret++;
+               }
+       }
+
+       newtFormDestroy(form);
+       newtPopWindow();
+
+       return ret;
+}
+
+static int newtWinOkCancel(const char* title, const char* message, int width, int height,
+               const char* btn_txt_ok, const char* btn_txt_cancel) {
+       int ret = 1;
+
+       unsigned int btn_width_ok = strlen(btn_txt_ok);
+       unsigned int btn_width_cancel = strlen(btn_txt_cancel);
+
+       // Maybe make the box wider to fix both buttons inside
+       unsigned int min_width = btn_width_ok + btn_width_cancel + 5;
+       if (width < min_width)
+               width = min_width;
+
+       unsigned int btn_pos_ok = (width / 3) - (btn_width_ok / 2) - 1;
+       unsigned int btn_pos_cancel = (width * 2 / 3) - (btn_width_cancel / 2) - 1;
+
+       // Move buttons a bit if they overlap
+       while ((btn_pos_ok + btn_width_ok + 5) > btn_pos_cancel) {
+               // Move the cancel button to the right if there is enough space left
+               if ((btn_pos_cancel + btn_width_cancel + 2) < width) {
+                       ++btn_pos_cancel;
+                       continue;
+               }
+
+               // Move the OK button to the left if possible
+               if (btn_pos_ok > 1) {
+                       --btn_pos_ok;
+                       continue;
+               }
+
+               // If they still overlap, we cannot fix the situtation
+               // and break. Should actually never get here, because we
+               // adjust the width of the window earlier.
+               break;
+       }
+
+       newtCenteredWindow(width, height, title);
+
+       newtComponent form = newtForm(NULL, NULL, 0);
+
+       newtComponent textbox = newtTextbox(1, 1, width - 2, height - 6, NEWT_FLAG_WRAP);
+       newtTextboxSetText(textbox, message);
+       newtFormAddComponent(form, textbox);
+
+       newtComponent btn_ok = newtButton(btn_pos_ok, height - 4, btn_txt_ok);
+       newtComponent btn_cancel = newtButton(btn_pos_cancel, height - 4, btn_txt_cancel);
+
+       newtFormAddComponents(form, btn_ok, btn_cancel, NULL);
+
+       newtComponent answer = newtRunForm(form);
+
+       if (answer == btn_ok) {
+               ret = 0;
+       }
+
+       newtFormDestroy(form);
+       newtPopWindow();
+
+       return ret;
+}
+
+static int newtLicenseBox(const char* title, const char* text, int width, int height) {
+       int ret = 1;
+
+       newtCenteredWindow(width, height, title);
+
+       newtComponent form = newtForm(NULL, NULL, 0);
+
+       newtComponent textbox = newtTextbox(1, 1, width - 2, height - 7,
+               NEWT_FLAG_WRAP|NEWT_FLAG_SCROLL);
+       newtTextboxSetText(textbox, text);
+       newtFormAddComponent(form, textbox);
+
+       char choice;
+       newtComponent checkbox = newtCheckbox(3, height - 3, _("I accept this license"),
+               ' ', " *", &choice);
+
+       newtComponent btn = newtButton(width - 15, height - 4, _("OK"));
+
+       newtFormAddComponents(form, checkbox, btn, NULL);
+
+       newtComponent answer = newtRunForm(form);
+       if (answer == btn && choice == '*')
+               ret = 0;
+
+       newtFormDestroy(form);
+       newtPopWindow();
+
+       return ret;
+}
+
+int write_lang_configs(char* lang) {
+       struct keyvalue *kv = initkeyvalues();
+
+       /* default stuff for main/settings. */
+       replacekeyvalue(kv, "LANGUAGE", lang);
+       replacekeyvalue(kv, "HOSTNAME", SNAME);
+       replacekeyvalue(kv, "THEME", "ipfire");
+       writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings");
+       freekeyvalues(kv);
+
+       return 1;
+}
+
+static char* get_system_release() {
+       char system_release[STRING_SIZE] = "\0";
+
+       FILE* f = fopen("/etc/system-release", "r");
+       if (f) {
+               fgets(system_release, sizeof(system_release), f);
+               fclose(f);
+       }
+
+       return strdup(system_release);
+}
+
+static char* center_string(const char* str, int width) {
+       unsigned int str_len = strlen(str);
+
+       unsigned int indent_length = (width - str_len) / 2;
+       char indent[indent_length + 1];
+
+       for (unsigned int i = 0; i < indent_length; i++) {
+               indent[i] = ' ';
+       }
+       indent[indent_length] = '\0';
+
+       char* string = NULL;
+       if (asprintf(&string, "%s%s", indent, str) < 0)
+               return NULL;
+
+       return string;
+}
+
+#define DEFAULT_LANG "English"
+#define NUM_LANGS 10
+
+static struct lang {
+       const char* code;
+       char* name;
+} languages[NUM_LANGS + 1] = {
+       { "da.utf8",    "Danish (Dansk)" },
+       { "nl_NL.utf8", "Dutch (Nederlands)" },
+       { "en_US.utf8", "English" },
+       { "fr_FR.utf8", "French (Français)" },
+       { "de_DE.utf8", "German (Deutsch)" },
+       { "pl_PL.utf8", "Polish (Polski)" },
+       { "pt_BR.utf8", "Portuguese (Brasil)" },
+       { "ru_RU.utf8", "Russian (Русский)" },
+       { "es_ES.utf8", "Spanish (Español)" },
+       { "tr_TR.utf8", "Turkish (Türkçe)" },
+       { NULL, NULL },
+};
+
+static struct config {
+       int unattended;
+       int serial_console;
+       int require_networking;
+       int perform_download;
+       int disable_swap;
+       char download_url[STRING_SIZE];
+       char postinstall[STRING_SIZE];
+} config = {
+       .unattended = 0,
+       .serial_console = 0,
+       .require_networking = 0,
+       .perform_download = 0,
+       .disable_swap = 0,
+       .download_url = DOWNLOAD_URL,
+       .postinstall = "\0",
+};
+
+static void parse_command_line(struct config* c) {
+       char buffer[STRING_SIZE];
+       char cmdline[STRING_SIZE];
+
+       FILE* f = fopen("/proc/cmdline", "r");
+       if (!f)
+               return;
+
+       int r = fread(&cmdline, 1, sizeof(cmdline) - 1, f);
+       if (r > 0) {
+               char* token = strtok(cmdline, " ");
+
+               while (token) {
+                       strncpy(buffer, token, sizeof(buffer));
+                       char* val = buffer;
+                       char* key = strsep(&val, "=");
+
+                       // serial console
+                       if ((strcmp(key, "console") == 0) && (strncmp(val, "ttyS", 4) == 0))
+                               c->serial_console = 1;
+
+                       // enable networking?
+                       else if (strcmp(token, "installer.net") == 0)
+                               c->require_networking = 1;
+
+                       // unattended mode
+                       else if (strcmp(token, "installer.unattended") == 0)
+                               c->unattended = 1;
+
+                       // disable swap
+                       else if (strcmp(token, "installer.disable-swap") == 0)
+                               c->disable_swap = 1;
+
+                       // download url
+                       else if (strcmp(key, "installer.download-url") == 0) {
+                               strncpy(c->download_url, val, sizeof(c->download_url));
+                               c->perform_download = 1;
+
+                               // Require networking for the download
+                               c->require_networking = 1;
+
+                       // postinstall script
+                       } else if (strcmp(key, "installer.postinstall") == 0) {
+                               strncpy(c->postinstall, val, sizeof(c->postinstall));
+
+                               // Require networking for the download
+                               c->require_networking = 1;
+                       }
+
+                       token = strtok(NULL, " ");
+               }
+       }
+
+       fclose(f);
+}
+
+int main(int argc, char *argv[]) {
+       struct hw* hw = hw_init();
+       const char* logfile = NULL;
+
+       // Read /etc/system-release
+       char* system_release = get_system_release();
+
+       char discl_msg[40000] = "Disclaimer\n";
+
+       char* sourcedrive = NULL;
+       int rc = 0;
+       char commandstring[STRING_SIZE];
+       int choice;
+       char language[STRING_SIZE];
+       char message[STRING_SIZE];
+       char title[STRING_SIZE];
+       int allok = 0;
+       FILE *copying;
+
+       setlocale(LC_ALL, "");
+       sethostname(SNAME, 10);
+
+       /* Log file/terminal stuff. */
+       FILE* flog = NULL;
+       if (argc >= 2) {
+               logfile = argv[1];
+
+               if (!(flog = fopen(logfile, "w+")))
+                       return 0;
+       } else {
+               return 0;
+       }
+
+       fprintf(flog, "Install program started.\n");
+               
+       newtInit();
+       newtCls();
+
+       // Determine the size of the screen
+       int screen_cols = 0;
+       int screen_rows = 0;
+
+       newtGetScreenSize(&screen_cols, &screen_rows);
+
+       // Draw title
+       char* roottext = center_string(system_release, screen_cols);
+       newtDrawRootText(0, 0, roottext);
+
+       snprintf(title, sizeof(title), "%s - %s", NAME, SLOGAN);
+
+       // Parse parameters from the kernel command line
+       parse_command_line(&config);
+
+       if (config.unattended) {
+               splashWindow(title, _("Warning: Unattended installation will start in 10 seconds..."), 10);
+       }
+
+       // Load common modules
+       mysystem(logfile, "/sbin/modprobe vfat"); // USB key
+       hw_stop_all_raid_arrays(logfile);
+
+       if (!config.unattended) {
+               // Language selection
+               char* langnames[NUM_LANGS + 1];
+
+               for (unsigned int i = 0; i < NUM_LANGS; i++) {
+                       if (strcmp(languages[i].name, DEFAULT_LANG) == 0)
+                               choice = i;
+
+                       langnames[i] = languages[i].name;
+               }
+               langnames[NUM_LANGS] = NULL;
+
+               rc = newtWinMenu(_("Language selection"), _("Select the language you wish to use for the installation."),
+                       50, 5, 5, 8, langnames, &choice, _("OK"), NULL);
+
+               assert(choice <= NUM_LANGS);
+
+               fprintf(flog, "Selected language: %s (%s)\n", languages[choice].name, languages[choice].code);
+               snprintf(language, sizeof(language), "%s", languages[choice].code);
+
+               setenv("LANGUAGE", language, 1);
+               setlocale(LC_ALL, language);
+       }
+
+       // Set helpline
+       char* helpline = NULL;
+       if (config.unattended)
+               helpline = center_string(_("Unattended mode"), screen_cols);
+       else
+               helpline = center_string(_("<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"), screen_cols);
+
+       newtPushHelpLine(helpline);
+
+       if (!config.unattended) {
+               snprintf(message, sizeof(message),
+                       _("Welcome to the %s installation program.\n\n"
+                       "Selecting Cancel on any of the following screens will reboot the computer."), NAME);
+               newtWinMessage(title, _("Start installation"), message);
+       }
+
+       /* Search for a source drive that holds the right
+        * version of the image we are going to install. */
+       if (!config.perform_download) {
+               sourcedrive = hw_find_source_medium(hw);
+               fprintf(flog, "Source drive: %s\n", sourcedrive);
+       }
+
+       /* If we could not find a source drive, we will try
+        * downloading the install image */
+       if (!sourcedrive)
+               config.perform_download = 1;
+
+       if (config.perform_download) {
+               if (!config.unattended) {
+                       // Show the right message to the user
+                       char reason[STRING_SIZE];
+                       if (config.perform_download) {
+                               snprintf(reason, sizeof(reason),
+                                       _("The installer will now try downloading the installation image."));
+                       } else {
+                               snprintf(reason, sizeof(reason),
+                                       _("No source drive could be found.\n\n"
+                                       "You can try downloading the required installation image."));
+                       }
+                       snprintf(message, sizeof(message), "%s %s", reason,
+                               _("Please make sure to connect your machine to a network and "
+                                "the installer will try connect to acquire an IP address."));
+
+                       rc = newtWinOkCancel(title, message, 55, 12,
+                               _("Download installation image"), _("Cancel"));
+
+                       if (rc != 0)
+                               goto EXIT;
+               }
+
+               // Make sure that we enable networking before download
+               config.require_networking = 1;
+       }
+
+       // Try starting the networking if we require it
+       if (config.require_networking) {
+               while (1) {
+                       statuswindow(60, 4, title, _("Trying to start networking (DHCP)..."));
+
+                       rc = hw_start_networking(logfile);
+                       newtPopWindow();
+
+                       // Networking was successfully started
+                       if (rc == 0) {
+                               break;
+
+                       // An error happened, ask the user what to do
+                       } else {
+                               rc = newtWinOkCancel(title, _("Networking could not be started "
+                                       "but is required to go on with the installation.\n\n"
+                                       "Please connect your machine to a network with a "
+                                       "DHCP server and retry."), 50, 10, _("Retry"), _("Cancel"));
+
+                               if (rc)
+                                       goto EXIT;
+                       }
+               }
+
+               // Download the image if required
+               if (config.perform_download) {
+                       fprintf(flog, "Download URL: %s\n", config.download_url);
+                       snprintf(commandstring, sizeof(commandstring), "/usr/bin/downloadsource.sh %s %s",
+                               SOURCE_TEMPFILE, config.download_url);
+
+                       while (!sourcedrive) {
+                               rc = runcommandwithstatus(commandstring, title, _("Downloading installation image..."), logfile);
+
+                               FILE* f = fopen(SOURCE_TEMPFILE, "r");
+                               if (f) {
+                                       sourcedrive = strdup(SOURCE_TEMPFILE);
+                                       fclose(f);
+                               } else {
+                                       char reason[STRING_SIZE] = "-";
+                                       if (rc == 2)
+                                               snprintf(reason, sizeof(STRING_SIZE), _("MD5 checksum mismatch"));
+
+                                       snprintf(message, sizeof(message),
+                                               _("The installation image could not be downloaded.\n  Reason: %s\n\n%s"),
+                                               reason, config.download_url);
+
+                                       rc = newtWinOkCancel(title, message, 75, 12, _("Retry"), _("Cancel"));
+                                       if (rc)
+                                               goto EXIT;
+                               }
+                       }
+               }
+       }
+
+       assert(sourcedrive);
+
+       int r = hw_mount(sourcedrive, SOURCE_MOUNT_PATH, "iso9660", MS_RDONLY);
+       if (r) {
+               snprintf(message, sizeof(message), _("Could not mount %s to %s:\n  %s\n"),
+                       sourcedrive, SOURCE_MOUNT_PATH, strerror(errno));
+               errorbox(message);
+               goto EXIT;
+       }
+
+       if (!config.unattended) {
+               // Read the license file.
+               if (!(copying = fopen(LICENSE_FILE, "r"))) {
+                       sprintf(discl_msg, "Could not open license file: %s\n", LICENSE_FILE);
+                       fprintf(flog, "%s", discl_msg);
+               } else {
+                       fread(discl_msg, 1, 40000, copying);
+                       fclose(copying);
+
+                       if (newtLicenseBox(_("License Agreement"), discl_msg, 75, 20)) {
+                               errorbox(_("License not accepted!"));
+
+                               goto EXIT;
+                       }
+               }
+       }
+
+       int part_type = HW_PART_TYPE_NORMAL;
+
+       // Scan for disks to install on.
+       struct hw_disk** disks = hw_find_disks(hw, sourcedrive);
+
+       struct hw_disk** selected_disks = NULL;
+       unsigned int num_selected_disks = 0;
+
+       // Check how many disks have been found and what
+       // we can do with them.
+       unsigned int num_disks = hw_count_disks((const struct hw_disk**)disks);
+
+       while (1) {
+               // no harddisks found
+               if (num_disks == 0) {
+                       errorbox(_("No hard disk found."));
+                       goto EXIT;
+
+               // exactly one disk has been found
+               // or if we are running in unattended mode, we will select
+               // the first disk and go with that one
+               } else if ((num_disks == 1) || (config.unattended && num_disks >= 1)) {
+                       selected_disks = hw_select_first_disk((const struct hw_disk**)disks);
+
+               // more than one usable disk has been found and
+               // the user needs to choose what to do with them
+               } else {
+                       const char* disk_names[num_disks];
+                       int disk_selection[num_disks];
+
+                       for (unsigned int i = 0; i < num_disks; i++) {
+                               disk_names[i] = disks[i]->description;
+                               disk_selection[i] = 0;
+                       }
+
+                       while (!selected_disks) {
+                               rc = newtChecklist(_("Disk Selection"),
+                                       _("Select the disk(s) you want to install IPFire on. "
+                                       "First those will be partitioned, and then the partitions will have a filesystem put on them.\n\n"
+                                       "ALL DATA ON THE DISK WILL BE DESTROYED."),
+                                       50, 20, num_disks, disk_names, disk_selection);
+
+                               // Error
+                               if (rc < 0) {
+                                       goto EXIT;
+
+                               // Nothing has been selected
+                               } else if (rc == 0) {
+                                       errorbox(_("No disk has been selected.\n\n"
+                                               "Please select one or more disks you want to install IPFire on."));
+
+                               } else {
+                                       selected_disks = hw_select_disks(disks, disk_selection);
+                               }
+                       }
+               }
+
+               // Don't print the auto-selected harddisk setup in
+               // unattended mode.
+               if (config.unattended)
+                       break;
+
+               num_selected_disks = hw_count_disks((const struct hw_disk**)selected_disks);
+
+               if (num_selected_disks == 1) {
+                       snprintf(message, sizeof(message),
+                               _("The installation program will now prepare the chosen harddisk:\n\n  %s\n\n"
+                               "Do you agree to continue?"), (*selected_disks)->description);
+                       rc = newtWinOkCancel(_("Disk Setup"), message, 50, 10,
+                               _("Delete all data"), _("Cancel"));
+
+                       if (rc == 0)
+                               break;
+
+               } else if (num_selected_disks == 2) {
+                       snprintf(message, sizeof(message),
+                               _("The installation program will now set up a RAID configuration on the selected harddisks:\n\n  %s\n  %s\n\n"
+                               "Do you agree to continue?"), selected_disks[0]->description, selected_disks[1]->description);
+                       rc = newtWinOkCancel(_("RAID Setup"), message, 50, 14,
+                               _("Delete all data"), _("Cancel"));
+
+                       if (rc == 0) {
+                               part_type = HW_PART_TYPE_RAID1;
+
+                               break;
+                       }
+
+               // Currently not supported
+               } else {
+                       errorbox(_("Your disk configuration is currently not supported."));
+                       fprintf(flog, "Num disks selected: %d\n", num_selected_disks);
+               }
+
+               if (selected_disks) {
+                       hw_free_disks(selected_disks);
+                       selected_disks = NULL;
+               }
+       }
+
+       hw_free_disks(disks);
+
+       struct hw_destination* destination = hw_make_destination(part_type, selected_disks, config.disable_swap);
+
+       if (!destination) {
+               errorbox(_("Your harddisk is too small."));
+               goto EXIT;
+       }
+
+       fprintf(flog, "Destination drive: %s\n", destination->path);
+       fprintf(flog, "  bootldr: %s (%lluMB)\n", destination->part_bootldr, BYTES2MB(destination->size_bootldr));
+       fprintf(flog, "  boot   : %s (%lluMB)\n", destination->part_boot, BYTES2MB(destination->size_boot));
+       fprintf(flog, "  swap   : %s (%lluMB)\n", destination->part_swap, BYTES2MB(destination->size_swap));
+       fprintf(flog, "  root   : %s (%lluMB)\n", destination->part_root, BYTES2MB(destination->size_root));
+       fprintf(flog, "  data   : %s (%lluMB)\n", destination->part_data, BYTES2MB(destination->size_data));
+       fprintf(flog, "Memory   : %lluMB\n", BYTES2MB(hw_memory()));
+
+       // Warn the user if there is not enough space to create a swap partition
+       if (!config.unattended) {
+               if (!config.disable_swap && !*destination->part_swap) {
+                       rc = newtWinChoice(title, _("OK"), _("Cancel"),
+                               _("Your harddisk is very small, but you can continue without a swap partition."));
+
+                       if (rc != 1)
+                               goto EXIT;
+               }
+       }
+
+       // Filesystem selection
+       if (!config.unattended) {
+               struct filesystems {
+                       int fstype;
+                       char* description;
+               } filesystems[] = {
+                       { HW_FS_EXT4,            _("ext4 Filesystem") },
+                       { HW_FS_EXT4_WO_JOURNAL, _("ext4 Filesystem without journal") },
+                       { HW_FS_XFS,             _("XFS Filesystem") },
+                       { HW_FS_REISERFS,        _("ReiserFS Filesystem") },
+                       { 0, NULL },
+               };
+               unsigned int num_filesystems = sizeof(filesystems) / sizeof(*filesystems);
+
+               char* fs_names[num_filesystems];
+               int fs_choice = 0;
+               for (unsigned int i = 0; i < num_filesystems; i++) {
+                       if (HW_FS_DEFAULT == filesystems[i].fstype)
+                               fs_choice = i;
+
+                       fs_names[i] = filesystems[i].description;
+               }
+
+               rc = newtWinMenu(_("Filesystem Selection"), _("Please choose your filesystem:"),
+                       50, 5, 5, 6, fs_names, &fs_choice, _("OK"), _("Cancel"), NULL);
+
+               if (rc == 2)
+                       goto EXIT;
+
+               destination->filesystem = filesystems[fs_choice].fstype;
+       }
+
+       // Setting up RAID if needed.
+       if (destination->is_raid) {
+               statuswindow(60, 4, title, _("Building RAID..."));
+
+               rc = hw_setup_raid(destination, logfile);
+               if (rc) {
+                       errorbox(_("Unable to build the RAID."));
+                       goto EXIT;
+               }
+
+               newtPopWindow();
+       } else {
+               // We will have to destroy all RAID setups that may have
+               // been on the devices that we want to use now.
+               hw_destroy_raid_superblocks(destination, logfile);
+       }
+
+       // Execute the partitioning...
+       statuswindow(60, 4, title, _("Partitioning disk..."));
+
+       rc = hw_create_partitions(destination, logfile);
+       if (rc) {
+               errorbox(_("Unable to partition the disk."));
+               goto EXIT;
+       }
+
+       newtPopWindow();
+
+       // Execute the formatting...
+       statuswindow(60, 4, title, _("Creating filesystems..."));
+
+       rc = hw_create_filesystems(destination, logfile);
+       if (rc) {
+               errorbox(_("Unable to create filesystems."));
+               goto EXIT;
+       }
+
+       rc = hw_mount_filesystems(destination, DESTINATION_MOUNT_PATH);
+       if (rc) {
+               errorbox(_("Unable to mount filesystems."));
+               goto EXIT;
+       }
+
+       newtPopWindow();
+
+       // Extract files...
+       snprintf(commandstring, STRING_SIZE,
+               "/bin/tar -C /harddisk  -xvf /cdrom/distro.img --lzma 2>/dev/null");
+
+       if (runcommandwithprogress(60, 4, title, commandstring, INST_FILECOUNT,
+                       _("Installing the system..."), logfile)) {
+               errorbox(_("Unable to install the system."));
+               goto EXIT;
+       }
+
+       // Write fstab
+       rc = hw_write_fstab(destination);
+       if (rc) {
+               fprintf(flog, "Could not write /etc/fstab\n");
+               goto EXIT;
+       }
+
+       /* Save language und local settings */
+       write_lang_configs(language);
+
+       /* Build cache lang file */
+       snprintf(commandstring, STRING_SIZE, "/usr/sbin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\"");
+       if (runcommandwithstatus(commandstring, title, _("Installing the language cache..."), logfile)) {
+               errorbox(_("Unable to install the language cache."));
+               goto EXIT;
+       }
+
+       // Installing bootloader...
+       statuswindow(60, 4, title, _("Installing the bootloader..."));
+
+       /* Serial console ? */
+       if (config.serial_console) {
+               /* grub */
+               FILE* f = fopen(DESTINATION_MOUNT_PATH "/etc/default/grub", "a");
+               if (!f) {
+                       errorbox(_("Unable to open /etc/default/grub for writing."));
+                       goto EXIT;
+               }
+
+               fprintf(f, "GRUB_TERMINAL=\"serial\"\n");
+               fprintf(f, "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=%d\"\n", SERIAL_BAUDRATE);
+               fclose(f);
+
+               replace(DESTINATION_MOUNT_PATH "/etc/default/grub", "panic=10", "panic=10 console=ttyS0,115200n8");
+
+               /* inittab */
+               replace("/harddisk/etc/inittab", "1:2345:respawn:", "#1:2345:respawn:");
+               replace("/harddisk/etc/inittab", "2:2345:respawn:", "#2:2345:respawn:");
+               replace("/harddisk/etc/inittab", "3:2345:respawn:", "#3:2345:respawn:");
+               replace("/harddisk/etc/inittab", "4:2345:respawn:", "#4:2345:respawn:");
+               replace("/harddisk/etc/inittab", "5:2345:respawn:", "#5:2345:respawn:");
+               replace("/harddisk/etc/inittab", "6:2345:respawn:", "#6:2345:respawn:");
+               replace("/harddisk/etc/inittab", "#7:2345:respawn:", "7:2345:respawn:");
+       }
+
+       rc = hw_install_bootloader(destination, logfile);
+       if (rc) {
+               errorbox(_("Unable to install the bootloader."));
+               goto EXIT;
+       }
+
+       newtPopWindow();
+
+       /* Set marker that the user has already accepted the gpl */
+       mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted");
+
+       /* Copy restore file from cdrom */
+       char* backup_file = hw_find_backup_file(logfile, SOURCE_MOUNT_PATH);
+       if (backup_file) {
+               rc = 0;
+               if (!config.unattended) {
+                       rc = newtWinOkCancel(title, _("A backup file has been found on the installation image.\n\n"
+                               "Do you want to restore the backup?"), 50, 10, _("Yes"), _("No"));
+               }
+
+               if (rc == 0) {
+                       rc = hw_restore_backup(logfile, backup_file, DESTINATION_MOUNT_PATH);
+
+                       if (rc) {
+                               errorbox(_("An error occured when the backup file was restored."));
+                               goto EXIT;
+                       }
+               }
+
+               free(backup_file);
+       }
+
+       // Download and execute the postinstall script
+       if (*config.postinstall) {
+               snprintf(commandstring, sizeof(commandstring),
+                       "/usr/bin/execute-postinstall.sh %s %s", DESTINATION_MOUNT_PATH, config.postinstall);
+
+               if (runcommandwithstatus(commandstring, title, _("Running post-install script..."), logfile)) {
+                       errorbox(_("Post-install script failed."));
+                       goto EXIT;
+               }
+       }
+
+       // Umount the destination drive
+       statuswindow(60, 4, title, _("Umounting filesystems..."));
+
+       rc = hw_umount_filesystems(destination, DESTINATION_MOUNT_PATH);
+       if (rc) {
+               // Show an error message if filesystems could not be umounted properly
+               snprintf(message, sizeof(message),
+                       _("Could not umount all filesystems successfully:\n\n  %s"), strerror(errno));
+               errorbox(message);
+               goto EXIT;
+       }
+
+       // Umount source drive and eject
+       hw_umount(SOURCE_MOUNT_PATH);
+
+       // Free downloaded ISO image
+       if (strcmp(sourcedrive, SOURCE_TEMPFILE) == 0) {
+               rc = unlink(sourcedrive);
+               if (rc)
+                       fprintf(flog, "Could not free downloaded ISO image: %s\n", sourcedrive);
+
+       // or eject real images
+       } else {
+               snprintf(commandstring, STRING_SIZE, "/usr/bin/eject %s", sourcedrive);
+               mysystem(logfile, commandstring);
+       }
+       newtPopWindow();
+
+       // Stop the RAID array if we are using RAID
+       if (destination->is_raid)
+               hw_stop_all_raid_arrays(logfile);
+
+       // Show a short message that the installation went well and
+       // wait a moment so that all disk caches get flushed.
+       if (config.unattended) {
+               splashWindow(title, _("Unattended installation has finished. The system will be shutting down in a moment..."), 5);
+
+       } else {
+               snprintf(message, sizeof(message), _(
+                       "%s was successfully installed!\n\n"
+                       "Please remove any installation mediums from this system and hit the reboot button. "
+                       "Once the system has restarted you will be asked to setup networking and system passwords. "
+                       "After that, you should point your web browser at https://%s:444 (or what ever you name "
+                       "your %s) for the web configuration console."), NAME, SNAME, NAME);
+               newtWinMessage(_("Congratulations!"), _("Reboot"), message);
+       }
+
+       allok = 1;
+
+EXIT:
+       fprintf(flog, "Install program ended.\n");
+       fflush(flog);
+       fclose(flog);
+
+       if (!allok)
+               newtWinMessage(title, _("OK"), _("Setup has failed. Press Ok to reboot."));
+
+       newtFinished();
+
+       // Free resources
+       if (system_release)
+               free(system_release);
+
+       if (roottext)
+               free(roottext);
+
+       if (helpline)
+               free(helpline);
+
+       if (sourcedrive)
+               free(sourcedrive);
+
+       if (destination)
+               free(destination);
+
+       hw_stop_all_raid_arrays(logfile);
+
+       if (selected_disks)
+               hw_free_disks(selected_disks);
+
+       if (hw)
+               hw_free(hw);
+
+       fcloseall();
+
+       if (allok == 1)
+               return 0;
+
+       return 1;
+}
diff --git a/src/installer/po/LINGUAS b/src/installer/po/LINGUAS
new file mode 100644 (file)
index 0000000..1aa1306
--- /dev/null
@@ -0,0 +1,30 @@
+ar
+ca
+cs_CZ
+da
+de
+el_GR
+es
+fa
+fr
+hu
+id
+it
+ja
+km_KH
+nl
+pl
+pt_BR
+pt_PT
+ro_RO
+ru
+sk
+sq
+sv
+th
+tk
+tr
+uk
+uz@Latn
+vi
+zh
diff --git a/src/installer/po/Makevars b/src/installer/po/Makevars
new file mode 100644 (file)
index 0000000..cf8c600
--- /dev/null
@@ -0,0 +1,41 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = The IPFire Project (www.ipfire.org)
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/src/installer/po/POTFILES.in b/src/installer/po/POTFILES.in
new file mode 100644 (file)
index 0000000..e241137
--- /dev/null
@@ -0,0 +1 @@
+main.c
diff --git a/src/installer/po/ar.po b/src/installer/po/ar.po
new file mode 100644 (file)
index 0000000..a10146e
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Arabic (http://www.transifex.com/projects/p/ipfire/language/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/ca.po b/src/installer/po/ca.po
new file mode 100644 (file)
index 0000000..54e3699
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Catalan (http://www.transifex.com/projects/p/ipfire/language/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/cs_CZ.po b/src/installer/po/cs_CZ.po
new file mode 100644 (file)
index 0000000..101c98d
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/ipfire/language/cs_CZ/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs_CZ\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/da.po b/src/installer/po/da.po
new file mode 100644 (file)
index 0000000..d15c917
--- /dev/null
@@ -0,0 +1,243 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# Henrik Simonsen <cybermaze@gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Danish (http://www.transifex.com/projects/p/ipfire/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr "OK"
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr "Annuller"
+
+#: main.c:145
+msgid "I accept this license"
+msgstr "Jeg accepterer brugerlicensen"
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr "<Tab>/<Alt-Tab> mellem elementer | <Space> vælger | <F12> næste skærm"
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr "Start installationen"
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr "Fandt ikke en lokal kilde. Henter fra internettet."
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr "Henter installationsbillede ..."
+
+#: main.c:342
+msgid "Download error"
+msgstr "Fejl under hentning"
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr "Brugerlicensen ikke accepteret!"
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr "Fandt ikke en harddisk."
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr "Vælg harddisk"
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr "Vælg den eller de harddisk(e) du vil installere IPFire på. Diskene bliver først partitioneret og dernæst bliver der oprettet filsystemer.\n\nAL DATA PÅ DISKENE BLIVER SLETTET."
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr "Ingen harddisk valgt.\n\nVælg venligst en eller flere harddiske du vil installere IPFire på."
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr "Installationsprogrammet forbereder nu den eller de valgte harddiske:\n\n%s\n\nVil du fortsætte?"
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr "Harddisk opsætning"
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr "Slet alle data"
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr "Installationsprogrammet vil nu opsætte RAID konfigurationen på de valgte harddiske:\n\n%s\n%s\n\nVil du fortsætte?"
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr "RAID opsætning"
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr "Din harddisk konfiguration understøttes ikke pt."
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr "Din harddisk er for lille."
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr "ext4 filsystem"
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr "ext4 filsystem uden journal"
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr "XFS filsystem"
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr "ReiserFS filsystem"
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr "Vælg filsystem"
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr "Vælg venligst et filsystem:"
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr "Bygger RAID..."
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr "Kunne ikke bygge RAID."
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr "Partitionerer harddisk..."
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr "Kunne ikke partitionere harddisk."
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr "Opretter filsystemer..."
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr "Kunne ikke oprette filsystemer."
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr "Kunne ikke forbinde til filsystemer."
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr "Installerer systemet..."
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr "Kunne ikke installere systemet."
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr "Installerer sprog arkivet..."
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr "Kunne ikke installere sprog arkivet."
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr "Installerer bootloader..."
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr "Kunne ikke installere bootloader."
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr "Tillykke!"
+
+#: main.c:671
+msgid "Reboot"
+msgstr "Genstart"
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/de.po b/src/installer/po/de.po
new file mode 100644 (file)
index 0000000..f4487a0
--- /dev/null
@@ -0,0 +1,244 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# Michael Tremer <michael.tremer@ipfire.org>, 2014
+# Stefan Schantl <stefan.schantl@ipfire.org>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 16:04+0000\n"
+"Last-Translator: Stefan Schantl <stefan.schantl@ipfire.org>\n"
+"Language-Team: German (http://www.transifex.com/projects/p/ipfire/language/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr "OK"
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: main.c:145
+msgid "I accept this license"
+msgstr "Ich akzeptiere die Lizenz"
+
+#: main.c:312
+msgid "Language selection"
+msgstr "Sprachauswahl"
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr "Wählen Sie die gewünschte Sprache für den Installationsprozess aus."
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr "<Tab>/<Alt-Tab> um zu wechseln | <Leertaste> wählt aus | <F12> nächster Bildschirm"
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr "Willkommen zum %s Installationsprogramm.\n\nWenn Sie auf irgendeiner der folgenden Seiten 'Abbrechen' auswählen, wird der Computer neu gestartet."
+
+#: main.c:330
+msgid "Start installation"
+msgstr "Installation beginnen"
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr "Kein lokales Quellmedium gefunden. Starte Download."
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr "Lade Installationsimage herunter..."
+
+#: main.c:342
+msgid "Download error"
+msgstr "Fehler beim Download"
+
+#: main.c:376
+msgid "License Agreement"
+msgstr "Lizenzvereinbarung"
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr "Lizenz nicht akzeptiert!"
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr "Es wurde keine Festplatte gefunden."
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr "Festplattenauswahl"
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr "Wählen Sie die Festplatte(n) auf denen IPFire installiert werden soll. Diese wird/werden zuerst partitioniert und danach mit einem Dateisystem ausgestattet.\n\nSÄMTLICHE DATEN AUF DER FESTPLATTE GEHEN VERLOREN."
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr "Keine Festplatte ausgewählt.\n\nBitte wählen Sie eine oder mehrere Festplatten auf denen IPFire installiert werden soll aus."
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr "Das Installationsprogramm wird die folgende  Festplatte nun vorbereiten:\n\n%s\n\nMöchten Sie damit fortfahren?"
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr "Disk-Setup"
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr "Alle Daten löschen"
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr "Das Installationsprogramm wird nun einen RAID Verbund auf den folgenden Festplatten erstellen:\n\n%s\n%s\n\nMöchten Sie damit fortfahren?"
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr "RAID-Setup"
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr "Die gewählte Festplattenkonstellation wird momentan nicht unterstützt."
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr "Ihre Festplatte ist zu klein."
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr "Die gewählte Festplatte ist sehr klein, die Installation kann aber ohne Swap Partition fortgesetzt werden."
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr "ext4-Dateisystem"
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr "ext4-Dateisystem ohne Journal"
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr "XFS-Dateisystem"
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr "ReiserFS-Dateisystem"
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr "Dateisystemauswahl"
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr "Bitte wählen Sie ein Dateisystem:"
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr "Erstelle RAID..."
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr "Das RAID konnte nicht erstellt werden."
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr "Partitioniere die Festplatte..."
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr "Die Festplatte konnte nicht partitioniert werden."
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr "Erstelle Dateisysteme..."
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr "Die Dateisysteme konnten nicht erstellt werden."
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr "Die Dateisysteme konnten nicht eingehangen werden."
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr "Installiere das System..."
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr "Das System konnte nicht installiert werden."
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr "Installiere den Sprachdateicache..."
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr "Der Sprachdateicache konnte nicht erstellt werden."
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr "Installiere den Bootloader..."
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr "/etc/default/grub konnte nicht geschrieben werden."
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr "Der Bootloader konnte nicht installiert werden."
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr "%s wurde erfolgreich installiert.\n\nEntfernen Sie bitte alle Installionsmedian aus dem Computer und drücken Sie den \"Neustarten\" Knopf . \n\nNach dem erfolgten Neustart wird das Setup-Programm gestartet, in dem Sie Netzwerkkarten und die Systempasswörter konfigurieren können. Sobald dies fertiggestellt ist, können Sie in Ihrem Webbrowser die Weboberfläche mit https://%s:444 (oder welchen Namen Sie Ihrem %s auch immer gegeben haben) erreichen."
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr "Herzlichen Glückwunsch!"
+
+#: main.c:671
+msgid "Reboot"
+msgstr "Neustarten"
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr "Installation fehlgeschlagen. Drücken Sie \"OK\" für einen Neustart des Systems."
diff --git a/src/installer/po/el_GR.po b/src/installer/po/el_GR.po
new file mode 100644 (file)
index 0000000..d27fe7b
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Greek (Greece) (http://www.transifex.com/projects/p/ipfire/language/el_GR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el_GR\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/es.po b/src/installer/po/es.po
new file mode 100644 (file)
index 0000000..d4812af
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Spanish (http://www.transifex.com/projects/p/ipfire/language/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/fa.po b/src/installer/po/fa.po
new file mode 100644 (file)
index 0000000..81d3631
--- /dev/null
@@ -0,0 +1,243 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# Khalil Delavaran <khalil.delavaran@gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Persian (http://www.transifex.com/projects/p/ipfire/language/fa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fa\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr "بله"
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr "نمی خواهم"
+
+#: main.c:145
+msgid "I accept this license"
+msgstr "من این پروانه را می پذیرم."
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr "<Tab>/<Alt-Tab> میان عنصری  | <Space> گزینش | <F12>  برای برگه پسین"
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr "آغاز برپا سازی"
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr "هیچ رسانه محلی یافت نشد. دانلود آغاز شد."
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr "در حال دانلود ایمیج برای برپا سازی..."
+
+#: main.c:342
+msgid "Download error"
+msgstr "ایراد در دانلود"
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr "پروانه پذیرفته نشد!"
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr "هارد دیسک یافت نشد."
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr "گزینش دیسک"
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr "دیسک (های) را برای برپاسازی IPFire گزینش کنید. نخست آنها را پارنیشین بندی کرده، و سپس، سیستم فایلی برای پارتیشن ها برگزینید.\n\nهمه داده های دیسک پاک می شوند."
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr "هیچ دیسکی گزینش نشده است.\n\nخواهشمند است یک دیسک یا بیشتر را برای برپا سازی IPFire گزینش کنید."
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr "آماده سازی دیسک سخت برای برپا سازی برنامه :\n\n%s\n\nآیا شما گرایش به ادامه دارید؟"
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr "پیکربندی دیسک"
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr "پاک کردن همه داده ها"
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr "پیکربندی RAID بر روی هارد دیسکهای گزینش شده برای برپا سازی برنامه\n\n%s\n%s\n\nآیا شما گرایش به ادامه دارید؟"
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr "پیکربندی RAID"
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr "پیکربندی دیسک شما پشتیبانی نمی شود."
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr "هارد دیسک شما بسیار کوچک است."
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr "فایل سیستم ext4"
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr "سیستم فایل ext4 بدون روزنامه"
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr "فایل سیستم XFS"
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr "فایل سیستم RaiserFS"
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr "گزینش فایل سیستم"
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr "خواهشمند است فایل سیستم خود را گزینش کنید:"
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr "ساخت RAID..."
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr "ناتوانی در ساخت RAID."
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr "پارتیشن بندی دیسک..."
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr "ناتوانی در پارتیشین بندی دیسک."
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr "ساخت سیستم فایل..."
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr "ناتوانی در ساخت سیستم فایل."
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr "ناتوانی در مونت کردن سیستم فایل."
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr "برپا سازی سیستم..."
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr "ناتوانی در برپاسازی سیستم."
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr "در حال برپا سازی کش زبان..."
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr "ناتوانی در برپا سازی کش زبان."
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr "برپا سازی بوت لودر..."
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr "ناتوانی در برپا سازی بوت لودر."
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr "شادباش می گوییم!"
+
+#: main.c:671
+msgid "Reboot"
+msgstr "ریبوت"
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/fr.po b/src/installer/po/fr.po
new file mode 100644 (file)
index 0000000..a4af363
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: French (http://www.transifex.com/projects/p/ipfire/language/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/hu.po b/src/installer/po/hu.po
new file mode 100644 (file)
index 0000000..ac25009
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Hungarian (http://www.transifex.com/projects/p/ipfire/language/hu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/id.po b/src/installer/po/id.po
new file mode 100644 (file)
index 0000000..28d9ae3
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Indonesian (http://www.transifex.com/projects/p/ipfire/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/it.po b/src/installer/po/it.po
new file mode 100644 (file)
index 0000000..70d0098
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Italian (http://www.transifex.com/projects/p/ipfire/language/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/ja.po b/src/installer/po/ja.po
new file mode 100644 (file)
index 0000000..6cdadf5
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Japanese (http://www.transifex.com/projects/p/ipfire/language/ja/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/km_KH.po b/src/installer/po/km_KH.po
new file mode 100644 (file)
index 0000000..0f7f946
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Khmer (Cambodia) (http://www.transifex.com/projects/p/ipfire/language/km_KH/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: km_KH\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/nl.po b/src/installer/po/nl.po
new file mode 100644 (file)
index 0000000..6e2f7ea
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Dutch (http://www.transifex.com/projects/p/ipfire/language/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/pl.po b/src/installer/po/pl.po
new file mode 100644 (file)
index 0000000..cfad680
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Polish (http://www.transifex.com/projects/p/ipfire/language/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/pt_BR.po b/src/installer/po/pt_BR.po
new file mode 100644 (file)
index 0000000..0152ede
--- /dev/null
@@ -0,0 +1,244 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# André Felipe Morro <andre@andremorro.com>, 2014
+# Leandro Luquetti Basilio da Silva <leandroluquetti@gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/ipfire/language/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr "Ok"
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: main.c:145
+msgid "I accept this license"
+msgstr "Eu aceito esta licença"
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr "<Tab>/<Alt-Tab> entre os elementos | <Space> Selecione | <F12> próxima tela"
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr "Iniciar a instalação"
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr "Nenhuma fonte de mídia local encontrada. Iniciando download."
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr "Baixando imagem de instalação ..."
+
+#: main.c:342
+msgid "Download error"
+msgstr "Erro de download"
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr "Licença não aceita!"
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr "Nenhum disco rígido foi encontrado."
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr "Seleção de disco"
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr "Selecione o disco(s) que deseja instalar o IPFire. Primeiramente o mesmo será particionado, e então, as partições terão um sistema de arquivos que você escolher. \n\nTODOS OS DADOS NO DISCO SERÃO DESTRUÍDOS."
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr "Nenhum disco foi selecionado.\n\nPor favor seleccione um ou mais discos que você deseja instalar o IPFire."
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr "O programa de instalação irá agora preparar o disco rígido escolhido:\n\n%s \n\nVocê concorda em continuar?"
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr "Configuração de Discos"
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr "Apagar todos os dados"
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr "O programa de instalação ira agora definir uma configuração de RAID nos discos rígidos selecionados:\n\n%s\n%s\n \nVocê concorda continuar?"
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr "Configuração de RAID"
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr "Sua configuração de disco não é suportada atualmente."
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr "Seu disco rígido é muito pequeno."
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr "Sistema de arquivos ext4"
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr "Sistema de arquivos ext4 sem journal"
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr "Sistema de arquivos XFS"
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr "Sistema de arquivos ReiserFS"
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr "Seleção do sistema de arquivos"
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr "Por favor, escolha o seu sistema de arquivos:"
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr "Construindo o RAID..."
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr "Não foi possível construir o RAID."
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr "Particionando o disco..."
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr "Não foi possível particionar o disco."
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr "Criando o sistema de arquivos..."
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr "Não foi possível criar sistemas de arquivos."
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr "Não foi possível montar sistemas de arquivos."
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr "Instalando o sistema..."
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr "Não é possível instalar o sistema."
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr "Instalando o cache de linguagem..."
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr "Não foi possível instalar o cache de linguagem."
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr "Instalando o gerenciador de inicialização..."
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr "Não foi possível instalar o gerenciador de inicialização."
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr "Parabéns!"
+
+#: main.c:671
+msgid "Reboot"
+msgstr "Reiniciar"
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/pt_PT.po b/src/installer/po/pt_PT.po
new file mode 100644 (file)
index 0000000..ee41d97
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/ipfire/language/pt_PT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_PT\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/ro_RO.po b/src/installer/po/ro_RO.po
new file mode 100644 (file)
index 0000000..7fc70c8
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/ipfire/language/ro_RO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro_RO\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/ru.po b/src/installer/po/ru.po
new file mode 100644 (file)
index 0000000..e3e0a8b
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Russian (http://www.transifex.com/projects/p/ipfire/language/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/sk.po b/src/installer/po/sk.po
new file mode 100644 (file)
index 0000000..86d37cd
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/ipfire/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/sq.po b/src/installer/po/sq.po
new file mode 100644 (file)
index 0000000..8ac31c1
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Albanian (http://www.transifex.com/projects/p/ipfire/language/sq/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sq\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/sv.po b/src/installer/po/sv.po
new file mode 100644 (file)
index 0000000..25e0ad4
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Swedish (http://www.transifex.com/projects/p/ipfire/language/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/th.po b/src/installer/po/th.po
new file mode 100644 (file)
index 0000000..2a88dca
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Thai (http://www.transifex.com/projects/p/ipfire/language/th/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/tk.po b/src/installer/po/tk.po
new file mode 100644 (file)
index 0000000..e07df58
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Turkmen (http://www.transifex.com/projects/p/ipfire/language/tk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tk\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/tr.po b/src/installer/po/tr.po
new file mode 100644 (file)
index 0000000..99a100a
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Turkish (http://www.transifex.com/projects/p/ipfire/language/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/uk.po b/src/installer/po/uk.po
new file mode 100644 (file)
index 0000000..e6c955a
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Ukrainian (http://www.transifex.com/projects/p/ipfire/language/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/uz@Latn.po b/src/installer/po/uz@Latn.po
new file mode 100644 (file)
index 0000000..2bdb551
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Uzbek (Latin) (http://www.transifex.com/projects/p/ipfire/language/uz@Latn/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uz@Latn\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/vi.po b/src/installer/po/vi.po
new file mode 100644 (file)
index 0000000..197382b
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Vietnamese (http://www.transifex.com/projects/p/ipfire/language/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
diff --git a/src/installer/po/zh.po b/src/installer/po/zh.po
new file mode 100644 (file)
index 0000000..3148f14
--- /dev/null
@@ -0,0 +1,242 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:09+0000\n"
+"PO-Revision-Date: 2014-08-21 15:11+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Chinese (http://www.transifex.com/projects/p/ipfire/language/zh/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: main.c:77 main.c:148 main.c:313 main.c:339 main.c:493 main.c:524 main.c:682
+msgid "OK"
+msgstr ""
+
+#: main.c:78 main.c:446 main.c:456 main.c:493 main.c:524
+msgid "Cancel"
+msgstr ""
+
+#: main.c:145
+msgid "I accept this license"
+msgstr ""
+
+#: main.c:312
+msgid "Language selection"
+msgstr ""
+
+#: main.c:312
+msgid "Select the language you wish to use for the installation."
+msgstr ""
+
+#: main.c:323
+msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
+msgstr ""
+
+#: main.c:328
+#, c-format
+msgid ""
+"Welcome to the %s installation program.\n"
+"\n"
+"Selecting Cancel on any of the following screens will reboot the computer."
+msgstr ""
+
+#: main.c:330
+msgid "Start installation"
+msgstr ""
+
+#: main.c:339
+msgid "No local source media found. Starting download."
+msgstr ""
+
+#: main.c:340
+msgid "Downloading installation image ..."
+msgstr ""
+
+#: main.c:342
+msgid "Download error"
+msgstr ""
+
+#: main.c:376
+msgid "License Agreement"
+msgstr ""
+
+#: main.c:377
+msgid "License not accepted!"
+msgstr ""
+
+#: main.c:399
+msgid "No hard disk found."
+msgstr ""
+
+#: main.c:418
+msgid "Disk Selection"
+msgstr ""
+
+#: main.c:419
+msgid ""
+"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
+"\n"
+"ALL DATA ON THE DISK WILL BE DESTROYED."
+msgstr ""
+
+#: main.c:430
+msgid ""
+"No disk has been selected.\n"
+"\n"
+"Please select one or more disks you want to install IPFire on."
+msgstr ""
+
+#: main.c:443
+#, c-format
+msgid ""
+"The installation program will now prepare the chosen harddisk:\n"
+"\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:445
+msgid "Disk Setup"
+msgstr ""
+
+#: main.c:446 main.c:456
+msgid "Delete all data"
+msgstr ""
+
+#: main.c:453
+#, c-format
+msgid ""
+"The installation program will now set up a RAID configuration on the selected harddisks:\n"
+"\n"
+"  %s\n"
+"  %s\n"
+"\n"
+"Do you agree to continue?"
+msgstr ""
+
+#: main.c:455
+msgid "RAID Setup"
+msgstr ""
+
+#: main.c:466
+msgid "You disk configuration is currently not supported."
+msgstr ""
+
+#: main.c:480
+msgid "Your harddisk is too small."
+msgstr ""
+
+#: main.c:494
+msgid ""
+"Your harddisk is very small, but you can continue without a swap partition."
+msgstr ""
+
+#: main.c:506
+msgid "ext4 Filesystem"
+msgstr ""
+
+#: main.c:507
+msgid "ext4 Filesystem without journal"
+msgstr ""
+
+#: main.c:508
+msgid "XFS Filesystem"
+msgstr ""
+
+#: main.c:509
+msgid "ReiserFS Filesystem"
+msgstr ""
+
+#: main.c:523
+msgid "Filesystem Selection"
+msgstr ""
+
+#: main.c:523
+msgid "Please choose your filesystem:"
+msgstr ""
+
+#: main.c:534
+msgid "Building RAID..."
+msgstr ""
+
+#: main.c:538
+msgid "Unable to build the RAID."
+msgstr ""
+
+#: main.c:550
+msgid "Partitioning disk..."
+msgstr ""
+
+#: main.c:554
+msgid "Unable to partition the disk."
+msgstr ""
+
+#: main.c:561
+msgid "Creating filesystems..."
+msgstr ""
+
+#: main.c:565
+msgid "Unable to create filesystems."
+msgstr ""
+
+#: main.c:571
+msgid "Unable to mount filesystems."
+msgstr ""
+
+#: main.c:582
+msgid "Installing the system..."
+msgstr ""
+
+#: main.c:583
+msgid "Unable to install the system."
+msgstr ""
+
+#: main.c:599
+msgid "Installing the language cache..."
+msgstr ""
+
+#: main.c:600
+msgid "Unable to install the language cache."
+msgstr ""
+
+#: main.c:605
+msgid "Installing the bootloader..."
+msgstr ""
+
+#: main.c:612
+msgid "Unable to open /etc/default/grub for writing."
+msgstr ""
+
+#: main.c:634
+msgid "Unable to install the bootloader."
+msgstr ""
+
+#: main.c:666
+#, c-format
+msgid ""
+"%s was successfully installed!\n"
+"\n"
+"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
+msgstr ""
+
+#: main.c:671
+msgid "Congratulations!"
+msgstr ""
+
+#: main.c:671
+msgid "Reboot"
+msgstr ""
+
+#: main.c:682
+msgid "Setup has failed. Press Ok to reboot."
+msgstr ""
similarity index 62%
rename from src/install+setup/install/Makefile
rename to src/installer/start-networking.sh
index 89106de2280311a9e462bd2e592007963d6e8684..3cb7a2172e6e6ae3190ddbc481c7880beae12e13 100644 (file)
@@ -1,7 +1,8 @@
+#!/bin/bash
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2014  IPFire Team  <info@ipfire.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        #
 #                                                                             #
 ###############################################################################
 
+function list_interfaces() {
+       local interface
 
-CC      = gcc 
-CFLAGS  = -Os -Wall
-INCLUDE =
+       for interface in /sys/class/net/*; do
+               [ -d "${interface}" ] || continue
 
-LD      = gcc
-LDFLAGS =
-LIBS    = -lnewt -lslang -lpci
+               interface="$(basename ${interface})"
+               case "${interface}" in
+                       eth*)
+                               echo "${interface}"
+                               ;;
+               esac
+       done
+}
 
-COMPILE = $(CC) -c $(INCLUDE) $(CFLAGS)
+function try_dhcp() {
+       local interface="${1}"
 
-LINK = $(LD) $(LDFLAGS)
+       # Bring up the interface
+       ip link set "${interface}" up
 
-all : programs
+       # Try to make the lights of the adapter light up
+       ethtool -i "${interface}" &>/dev/null
 
-programs : install
+       # Start the DHCP client
+       dhcpcd "${interface}"
+}
 
-clean :
-       -rm -f *.o install core
+function main() {
+       local interface
+       for interface in $(list_interfaces); do
+               if ! try_dhcp "${interface}"; then
+                       echo "Could not acquire an IP address on ${interface}"
+                       continue
+               fi
 
-######
+               echo "Successfully started on ${interface}"
 
-OBJS=main.o config.o ../libsmooth/libsmooth.o unattended.o
+               # Wait until everything is settled
+               sleep 15
 
-install: $(OBJS)
-       $(LINK) $(OBJS) -o $@ $(LIBS)
+               return 0
+       done
 
-%.o : %.c
-       $(COMPILE) $< -o $@
+       return 1
+}
+
+main
diff --git a/src/libsmooth/Makefile.am b/src/libsmooth/Makefile.am
new file mode 100644 (file)
index 0000000..0a7f881
--- /dev/null
@@ -0,0 +1,81 @@
+#  This file is part of the libsmooth library.
+#
+#  libsmooth is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+AM_MAKEFLAGS = --no-print-directory
+AUTOMAKE_OPTIONS = color-tests parallel-tests
+
+SUBDIRS = .
+
+# remove targets if the command fails
+.DELETE_ON_ERROR:
+
+# keep intermediate files
+.SECONDARY:
+
+LIBSMOOTH_CURRENT=1
+LIBSMOOTH_REVISION=0
+LIBSMOOTH_AGE=0
+
+pkgconfiglibdir=$(libdir)/pkgconfig
+CLEANFILES =
+EXTRA_DIST =
+
+AM_CPPFLAGS = \
+       -include $(top_builddir)/config.h \
+       -I $(top_srcdir)/include \
+       $(OUR_CPPFLAGS)
+
+AM_CFLAGS = $(OUR_CFLAGS)
+AM_CXXFLAGS = $(OUR_CXXFLAGS)
+AM_LDFLAGS = $(OUR_LDFLAGS)
+
+lib_LTLIBRARIES =
+
+include_HEADERS =
+
+#- libsmooth -------------------------------------------------------------------
+
+lib_LTLIBRARIES += \
+       libsmooth.la
+
+libsmooth_la_SOURCES = \
+       main.c \
+       varval.c
+
+libsmooth_la_LDFLAGS = \
+       $(AM_LDFLAGS) \
+       -version-info $(LIBSMOOTH_CURRENT):$(LIBSMOOTH_REVISION):$(LIBSMOOTH_AGE)
+
+include_HEADERS += \
+       libsmooth.h
+
+pkgconfiglib_DATA = \
+       libsmooth.pc
+
+CLEANFILES += \
+       libsmooth.pc
+
+EXTRA_DIST += \
+       libsmooth.pc.in
+
+#-------------------------------------------------------------------------------
+
+substitutions = \
+       '|PACKAGE_NAME=$(PACKAGE_NAME)|' \
+       '|PACKAGE_VERSION=$(PACKAGE_VERSION)|' \
+       '|prefix=$(prefix)|' \
+       '|exec_prefix=$(exec_prefix)|' \
+       '|libdir=$(libdir)|' \
+       '|includedir=$(includedir)|'
+
+SED_PROCESS = \
+       $(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
+       $(SED) $(subst '|,-e 's|@,$(subst =,\@|,$(subst |',|g',$(substitutions)))) < $< > $@
+
+%.pc: %.pc.in Makefile
+       $(SED_PROCESS)
diff --git a/src/libsmooth/autogen.sh b/src/libsmooth/autogen.sh
new file mode 100755 (executable)
index 0000000..3065488
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+autoreconf --force --install -I m4
diff --git a/src/libsmooth/configure.ac b/src/libsmooth/configure.ac
new file mode 100644 (file)
index 0000000..2247588
--- /dev/null
@@ -0,0 +1,58 @@
+#  This file is part of libsmooth.
+#
+#  libsmooth is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+AC_PREREQ([2.64])
+
+AC_INIT([libsmooth],
+       [001],
+       [],
+       [libsmooth],
+       [http://git.ipfire.org/?p=ipfire-2.x.git;a=summary])
+
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_AUX_DIR([build-aux])
+
+AM_INIT_AUTOMAKE([
+       foreign
+       1.11
+       -Wall
+       -Wno-portability
+       silent-rules
+       tar-pax
+       no-dist-gzip
+       dist-xz
+       subdir-objects
+])
+AM_SILENT_RULES([yes])
+
+LT_PREREQ(2.2)
+LT_INIT([disable-static])
+
+AC_PROG_SED
+
+AC_PROG_CC
+AC_PROG_CC_C99
+AC_PROG_CC_C_O
+
+AC_PATH_PROG([M4], [m4])
+
+# This makes sure pkg.m4 is available.
+m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
+
+AC_CONFIG_FILES([
+       Makefile
+])
+
+AC_OUTPUT
+AC_MSG_RESULT([
+       $PACKAGE_NAME $VERSION
+
+       CFLAGS:                 ${OUR_CFLAGS} ${CFLAGS}
+       CPPFLAGS:               ${OUR_CPPFLAGS} ${CPPFLAGS}
+       LDFLAGS:                ${OUR_LDFLAGS} ${LDFLAGS}
+])
diff --git a/src/libsmooth/libsmooth.h b/src/libsmooth/libsmooth.h
new file mode 100644 (file)
index 0000000..6003bc0
--- /dev/null
@@ -0,0 +1,69 @@
+/* SmoothWall libsmooth.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence.  See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * Contains prototypes for library functions.
+ * 
+ */
+
+#ifndef ___LIBSMOOTH_H
+#define ___LIBSMOOTH_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <wchar.h>
+#include <locale.h>
+#include <unistd.h>
+#include <sys/file.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <newt.h>
+#include <dirent.h>
+#include <sys/mount.h>
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <linux/cdrom.h>
+#include <sys/ioctl.h>
+
+#define STRING_SIZE 1024
+
+struct keyvalue {
+       char key[STRING_SIZE];
+       char value[STRING_SIZE];
+       struct keyvalue *next;
+};
+
+/* libsmooth.c */
+void stripnl(char *s);
+int mysystem(const char* output, const char *command);
+void errorbox(char *message);
+int statuswindowscroll(int width, int height, const char *title, const char *text, ...);
+int disclaimerbox(char *message);
+void statuswindow(int width, int height, const char *title, const char *text, ...);
+int runcommandwithprogress(int width, int height, const char *title, const char *command,
+       int lines, char *text, ...);
+int runcommandwithstatus(const char *command, const char* title, const char *message, const char* output);
+int runhiddencommandwithstatus(const char *command, const char* title, const char *message, const char* output);
+int splashWindow(const char* title, const char* message, unsigned int timeout);
+int checkformodule(const char *module); 
+int replace(char filename1[], char *from, char *to);
+char* get_version(void);
+
+/* varval.c */
+struct keyvalue *initkeyvalues(void);
+void freekeyvalues(struct keyvalue *head);
+int readkeyvalues(struct keyvalue *head, char *filename);
+int writekeyvalues(struct keyvalue *head, char *filename);
+int findkey(struct keyvalue *head, char *key, char *value);
+void appendkeyvalue(struct keyvalue *head, char *key, char *value);
+void replacekeyvalue(struct keyvalue *head, char *key, char *value);
+
+#endif
diff --git a/src/libsmooth/libsmooth.pc.in b/src/libsmooth/libsmooth.pc.in
new file mode 100644 (file)
index 0000000..add59a1
--- /dev/null
@@ -0,0 +1,18 @@
+#  This file is part of the libsmooth library.
+#
+#  libsmooth is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libsmooth
+Description: libsmooth library
+URL: @PACKAGE_URL@
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -lsmooth
+Cflags: -I${includedir}
diff --git a/src/libsmooth/m4/attributes.m4 b/src/libsmooth/m4/attributes.m4
new file mode 100644 (file)
index 0000000..7e080da
--- /dev/null
@@ -0,0 +1,288 @@
+dnl Macros to check the presence of generic (non-typed) symbols.
+dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
+dnl Copyright (c) 2006-2008 xine project
+dnl Copyright (c) 2012 Lucas De Marchi <lucas.de.marchi@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2, or (at your option)
+dnl any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+dnl 02110-1301, USA.
+dnl
+dnl As a special exception, the copyright owners of the
+dnl macro gives unlimited permission to copy, distribute and modify the
+dnl configure scripts that are the output of Autoconf when processing the
+dnl Macro. You need not follow the terms of the GNU General Public
+dnl License when using or distributing such scripts, even though portions
+dnl of the text of the Macro appear in them. The GNU General Public
+dnl License (GPL) does govern all other use of the material that
+dnl constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the
+dnl Autoconf Macro released by this project. When you make and
+dnl distribute a modified version of the Autoconf Macro, you may extend
+dnl this special exception to the GPL to apply to your modified version as
+dnl well.
+
+dnl Check if FLAG in ENV-VAR is supported by compiler and append it
+dnl to WHERE-TO-APPEND variable
+dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG])
+
+AC_DEFUN([CC_CHECK_FLAG_APPEND], [
+  AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2],
+                 AS_TR_SH([cc_cv_$2_$3]),
+          [eval "AS_TR_SH([cc_save_$2])='${$2}'"
+           eval "AS_TR_SH([$2])='-Werror $3'"
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])],
+                                    [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"],
+                                    [eval "AS_TR_SH([cc_cv_$2_$3])='no'"])
+           eval "AS_TR_SH([$2])='$cc_save_$2'"])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes],
+        [eval "$1='${$1} $3'"])
+])
+
+dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2])
+AC_DEFUN([CC_CHECK_FLAGS_APPEND], [
+  for flag in $3; do
+    CC_CHECK_FLAG_APPEND($1, $2, $flag)
+  done
+])
+
+dnl Check if the flag is supported by linker (cacheable)
+dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+
+AC_DEFUN([CC_CHECK_LDFLAGS], [
+  AC_CACHE_CHECK([if $CC supports $1 flag],
+    AS_TR_SH([cc_cv_ldflags_$1]),
+    [ac_save_LDFLAGS="$LDFLAGS"
+     LDFLAGS="$LDFLAGS $1"
+     AC_LINK_IFELSE([int main() { return 1; }],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
+     LDFLAGS="$ac_save_LDFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
+    [$2], [$3])
+])
+
+dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for
+dnl the current linker to avoid undefined references in a shared object.
+AC_DEFUN([CC_NOUNDEFINED], [
+  dnl We check $host for which systems to enable this for.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  case $host in
+     dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
+     dnl are requested, as different implementations are present; to avoid problems
+     dnl use -Wl,-z,defs only for those platform not behaving this way.
+     *-freebsd* | *-openbsd*) ;;
+     *)
+        dnl First of all check for the --no-undefined variant of GNU ld. This allows
+        dnl for a much more readable commandline, so that people can understand what
+        dnl it does without going to look for what the heck -z defs does.
+        for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
+           CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
+           break
+        done
+     ;;
+  esac
+
+  AC_SUBST([LDFLAGS_NOUNDEFINED])
+])
+
+dnl Check for a -Werror flag or equivalent. -Werror is the GCC
+dnl and ICC flag that tells the compiler to treat all the warnings
+dnl as fatal. We usually need this option to make sure that some
+dnl constructs (like attributes) are not simply ignored.
+dnl
+dnl Other compilers don't support -Werror per se, but they support
+dnl an equivalent flag:
+dnl  - Sun Studio compiler supports -errwarn=%all
+AC_DEFUN([CC_CHECK_WERROR], [
+  AC_CACHE_CHECK(
+    [for $CC way to treat warnings as errors],
+    [cc_cv_werror],
+    [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
+      [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
+    ])
+])
+
+AC_DEFUN([CC_CHECK_ATTRIBUTE], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
+    AS_TR_SH([cc_cv_attribute_$1]),
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
+    [AC_DEFINE(
+       AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
+         [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
+         )
+     $4],
+    [$5])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
+  CC_CHECK_ATTRIBUTE(
+    [constructor],,
+    [void __attribute__((constructor)) ctor() { int a; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
+  CC_CHECK_ATTRIBUTE(
+    [format], [format(printf, n, n)],
+    [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
+  CC_CHECK_ATTRIBUTE(
+    [format_arg], [format_arg(printf)],
+    [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
+  CC_CHECK_ATTRIBUTE(
+    [visibility_$1], [visibility("$1")],
+    [void __attribute__((visibility("$1"))) $1_function() { }],
+    [$2], [$3])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
+  CC_CHECK_ATTRIBUTE(
+    [nonnull], [nonnull()],
+    [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
+  CC_CHECK_ATTRIBUTE(
+    [unused], ,
+    [void some_function(void *foo, __attribute__((unused)) void *bar);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
+  CC_CHECK_ATTRIBUTE(
+    [sentinel], ,
+    [void some_function(void *foo, ...) __attribute__((sentinel));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
+  CC_CHECK_ATTRIBUTE(
+    [deprecated], ,
+    [void some_function(void *foo, ...) __attribute__((deprecated));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
+  CC_CHECK_ATTRIBUTE(
+    [alias], [weak, alias],
+    [void other_function(void *foo) { }
+     void some_function(void *foo) __attribute__((weak, alias("other_function")));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
+  CC_CHECK_ATTRIBUTE(
+    [malloc], ,
+    [void * __attribute__((malloc)) my_alloc(int n);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_PACKED], [
+  CC_CHECK_ATTRIBUTE(
+    [packed], ,
+    [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONST], [
+  CC_CHECK_ATTRIBUTE(
+    [const], ,
+    [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_FLAG_VISIBILITY], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
+    [cc_cv_flag_visibility],
+    [cc_flag_visibility_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
+     cc_cv_flag_visibility='yes',
+     cc_cv_flag_visibility='no')
+     CFLAGS="$cc_flag_visibility_save_CFLAGS"])
+
+  AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
+    [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
+       [Define this if the compiler supports the -fvisibility flag])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_FUNC_EXPECT], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if compiler has __builtin_expect function],
+    [cc_cv_func_expect],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+       [int some_function() {
+        int a = 3;
+        return (int)__builtin_expect(a, 3);
+     }])],
+       [cc_cv_func_expect=yes],
+       [cc_cv_func_expect=no])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([test "x$cc_cv_func_expect" = "xyes"],
+    [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
+     [Define this if the compiler supports __builtin_expect() function])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
+    [cc_cv_attribute_aligned],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     for cc_attribute_align_try in 64 32 16 8 4 2; do
+        AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+          int main() {
+            static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
+            return c;
+          }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
+     done
+     CFLAGS="$ac_save_CFLAGS"
+  ])
+
+  if test "x$cc_cv_attribute_aligned" != "x"; then
+     AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
+       [Define the highest alignment supported])
+  fi
+])
similarity index 58%
rename from src/install+setup/libsmooth/main.c
rename to src/libsmooth/main.c
index aef3e93225159b6d99e37b90e6a2515f8a871134..fedff109d5d85801a59836a7ad2d4c83b911ae38 100644 (file)
  *
  * (c) Lawrence Manning, 2001
  * Contains library functions.
- * 
- * $Id: main.c,v 1.6.2.9 2005/12/09 22:31:41 franck78 Exp $
- * 
  */
  
 #include "libsmooth.h"
 
-extern FILE *flog;
-extern char *mylog;
-
-extern char **ctr;
-  
-/* reboot().  reboots. */
-void reboot(void)
-{
-       mysystem("/etc/halt");
-}
+#include <libintl.h>
+#define _(x) dgettext("libsmooth", x)
 
 /* stripnl().  Replaces \n with \0 */
-void stripnl(char *s)
-{
+void stripnl(char *s) {
        char *t = strchr(s, '\n');
-       if (t) *t = '\0';
+       if (t)
+               *t = '\0';
 }
 
 /* Little wrapper. */
-int mysystem(char *command)
-{
+int mysystem(const char* output, const char *command) {
        char mycommand[STRING_SIZE];
-       
-       snprintf(mycommand, STRING_SIZE, "%s >>%s 2>>%s", command, mylog, mylog);
-       fprintf(flog, "Running command: %s\n", command);
-       return system(mycommand);
-}
-
-void errorbox(char *message)
-{
-       newtWinMessage(ctr[TR_ERROR], ctr[TR_OK], message);
-}
-
-int scrollmsgbox(int width, int height, char *title, char *text, ...)
-{
-       int rc = 0;
-       newtComponent t, f, b, c;
-       char *buf = NULL;
-       char checkbox;
-       int size = 0;
-       int i = 0;
-       va_list args;
-
-       va_start(args, text);
-
-       do {
-               size += 40000;
-               if (buf) free(buf);
-               buf = malloc(size);
-               i = vsnprintf(buf, size, text, args);
-       } while (i == size);
 
-       va_end(args);
+       if (output == NULL)
+               output = "/dev/null";
 
-       newtCenteredWindow(width, height, title);
+       snprintf(mycommand, sizeof(mycommand), "%s >>%s 2>&1", command, output);
 
-       b = newtCompactButton(width - 15 ,height - 2, ctr[TR_OK]);
-       c = newtCheckbox(3, height - 2, ctr[TR_LICENSE_ACCEPT], ' ', " *", &checkbox);
+       FILE* f = fopen(output, "w+");
+       fprintf(f, "Running command: %s\n", command);
+       fclose(f);
 
-       t = newtTextbox(1, 1, width - 2, height - 4, NEWT_TEXTBOX_WRAP+NEWT_TEXTBOX_SCROLL);
-       newtTextboxSetText(t, buf);
-
-       f = newtForm(NULL, NULL, 0);
-       free(buf);
-
-       newtFormAddComponent(f, c);
-       newtFormAddComponent(f, b);
-       newtFormAddComponent(f, t);
-
-       newtRunForm(f);
-       if (checkbox=='*') rc=1;
-       newtFormDestroy(f);
-       return rc;
+       return system(mycommand);
 }
 
-int disclaimerbox(char *message)
-{
-       int rc;
-       char title[STRING_SIZE];
-       
-       sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
-       rc = scrollmsgbox(75, 20, title, message);
-       newtPopWindow();
-       
-       return rc;
+void errorbox(char *message) {
+       newtWinMessage(_("Error"), _("OK"), message);
 }
 
-
-void statuswindow(int width, int height, char *title, char *text, ...)
-{
+void statuswindow(int width, int height, const char *title, const char *text, ...) {
        newtComponent t, f;
        char *buf = NULL;
        int size = 0;
@@ -134,39 +72,37 @@ void statuswindow(int width, int height, char *title, char *text, ...)
        newtFormDestroy(f);
 }
 
-int runcommandwithstatus(char *command, char *message)
-{
-       int rc;
-       char title[STRING_SIZE];
-       
-       sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
+int runcommandwithstatus(const char *command, const char* title, const char *message, const char* output) {
        statuswindow(60, 4, title, message);
-       rc = mysystem(command);
+
+       int rc = mysystem(output, command);
        newtPopWindow();
-       
+
        return rc;
 }
 
-int runhiddencommandwithstatus(char *command, char *message)
-{
-       int rc;
-       char title[STRING_SIZE];
-       char mycommand[STRING_SIZE];
-       
-       sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
+int runhiddencommandwithstatus(const char *command, const char* title, const char *message, const char* output) {
        statuswindow(60, 4, title, message);
-       snprintf(mycommand, STRING_SIZE, "%s >>%s 2>>%s", command, mylog, mylog);
-       fprintf(flog, "Running command: ***** HIDDEN *****\n");
-       rc = system(mycommand);
+
+       int rc = mysystem(output, command);
        newtPopWindow();
-       
+
        return rc;
 }
 
+int splashWindow(const char* title, const char* message, unsigned int timeout) {
+       statuswindow(60, 4, title, message);
+
+       // Wait so the user can read this message
+       sleep(timeout);
+       newtPopWindow();
+
+       return 0;
+}
+
 /* This one borrowed from redhat installer. */
-int runcommandwithprogress(int width, int height, char *title, char *command,
-       int lines, char *text, ...)
-{
+int runcommandwithprogress(int width, int height, const char *title, const char *command,
+       int lines, char *text, ...) {
        newtComponent t, f, s;
        char *buf = NULL;
        int size = 0;
@@ -206,10 +142,7 @@ int runcommandwithprogress(int width, int height, char *title, char *command,
 
        newtDrawForm(f);
        newtRefresh();
-       
-       snprintf(mycommand, STRING_SIZE, "%s 2>>%s", command, mylog);
-       fprintf(flog, "Running command: %s\n", command);
-       
+
        if (!(p = popen(command, "r")))
        {
                rc = 1;
@@ -217,13 +150,11 @@ int runcommandwithprogress(int width, int height, char *title, char *command,
        }
        setvbuf(p, NULL, _IOLBF, 255);
        
-       while (fgets(buffer, STRING_SIZE, p))
-       {
+       while (fgets(buffer, STRING_SIZE, p)) {
                newtScaleSet(s, ++progress);
                newtRefresh();  
-               fprintf(flog, "%s", buffer);
        }
-               
+
        rc = pclose(p);
        
 EXIT:
@@ -233,15 +164,14 @@ EXIT:
        return rc;
 }
 
-int checkformodule(char *module)
-{
+int checkformodule(const char *module) {
        FILE *file;
        char buffer[STRING_SIZE];
        int result = 0;
-       
+
        if (!(file = fopen("/proc/modules", "r")))
        {
-               fprintf(flog, "Unable to open /proc/modules in checkformodule()\n");
+               fprintf(stderr, "Unable to open /proc/modules in checkformodule()\n");
                return 0;
        }
        
@@ -294,8 +224,7 @@ int _replace_string(char string[], char *from, char *to)
        return 0;
 }
 
-int replace(char filename1[], char *from, char *to)
-{
+int replace(char filename1[], char *from, char *to) {
        FILE *file1, *file2;
        char filename2[1000];
        char temp[1000];
@@ -312,7 +241,6 @@ int replace(char filename1[], char *from, char *to)
 
        /* Start reading in lines */
        while (fgets (temp, 1000, file1) != NULL) {
-
                if (strlen(to) > 0) {
                        /* Replace string */
                        ret = _replace_string (temp, from, to);
@@ -336,20 +264,6 @@ int replace(char filename1[], char *from, char *to)
        return (ret);
 }
 
-/* Include enabled languages */
-#ifdef  LANG_EN_ONLY
-        #include "lang_en.c"
-#else
-       #include "lang_de.c"
-       #include "lang_en.c"
-       #include "lang_es.c"
-       #include "lang_fr.c"
-       #include "lang_pl.c"
-       #include "lang_ru.c"
-       #include "lang_nl.c"
-       #include "lang_tr.c"
-#endif
-
 // returns a pointer to the actual running version number of IPFire.
 // Successive updates increase effective version but not VERSION !
 char g_title[STRING_SIZE] = "";
@@ -359,8 +273,6 @@ char* get_version(void) {
                fgets (g_title, STRING_SIZE, f_title);
                fclose (f_title);
                if (g_title[strlen(g_title) - 1] == '\n') g_title[strlen(g_title) - 1] = '\0';
-       } else {
-               sprintf (g_title, "%s %s - %s", NAME, VERSION, SLOGAN);
        }
        return g_title;
 }
index b4474355ad53797c46608dda2cfd09a2d6aae549..f5802d26ac2c7918d43e4f998e100fb5f8f1a0a9 100644 (file)
 #                                                                             #
 ###############################################################################
 
-CC=gcc 
-CFLAGS=-O2 -Wall
-
-COMPILE=$(CC) $(CFLAGS)
+CC      = gcc
+CFLAGS ?= -O2 -Wall
+LIBS    = -lsmooth -lnewt
 
 PROGS = iowrap
 SUID_PROGS = squidctrl sshctrl ipfirereboot \
@@ -35,128 +34,24 @@ SUID_PROGS = squidctrl sshctrl ipfirereboot \
        getconntracktable wirelessclient dnsmasqctrl torctrl
 SUID_UPDX = updxsetperms
 
-install : all
+OBJS = $(patsubst %,%.o,$(PROGS) $(SUID_PROGS))
+
+install: all
        install -m 755  $(PROGS) /usr/local/bin
        install -m 4750 -g nobody $(SUID_PROGS) /usr/local/bin
 
-all : $(PROGS) $(SUID_PROGS)
+all: $(PROGS) $(SUID_PROGS)
 
-clean : 
+clean:
        -rm -f $(PROGS) $(SUID_PROGS) *.o core
 
 ######
 
-% : %.c
-       $(COMPILE) $< setuid.o -o $@
+%.o: %.c
+       $(CC) $(CFLAGS) -c $< -o $@
 
 setuid.o: setuid.c setuid.h
-       $(COMPILE) $< -c -o $@
-
-$(SUID_PROGS): setuid.o
-
-$(PROGS): setuid.o
-
-logwatch: logwatch.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ logwatch.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-openvpnctrl: openvpnctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ openvpnctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-qosctrl: qosctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ qosctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-redctrl: redctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ redctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-extrahdctrl: extrahdctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ extrahdctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-       
-upnpctrl: upnpctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ upnpctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-sambactrl: sambactrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ sambactrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-tripwirectrl: tripwirectrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ tripwirectrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-       
-smartctrl: smartctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ smartctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-clamavctrl: clamavctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ clamavctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-firewallctrl: firewallctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ firewallctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-timectrl: timectrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ timectrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-launch-ether-wake: launch-ether-wake.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ launch-ether-wake.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-rebuildhosts: rebuildhosts.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ rebuildhosts.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-applejuicectrl: applejuicectrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ applejuicectrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-dhcpctrl: dhcpctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ dhcpctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-sshctrl: sshctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ sshctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-squidctrl: squidctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ squidctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-snortctrl: snortctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ snortctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-wirelessctrl: wirelessctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ wirelessctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-ipsecctrl: ipsecctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ ipsecctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-getipstat: getipstat.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ getipstat.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-pakfire: pakfire.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ pakfire.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-mpfirectrl: mpfirectrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ mpfirectrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-backupctrl: backupctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ backupctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-addonctrl: addonctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ addonctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-syslogdctrl: syslogdctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ syslogdctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-wlanapctrl: wlanapctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ wlanapctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-setaliases: setaliases.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ setaliases.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-fireinfoctrl: fireinfoctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ fireinfoctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-rebuildroutes: rebuildroutes.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ rebuildroutes.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-getconntracktable: getconntracktable.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ getconntracktable.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-wirelessclient: wirelessclient.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ wirelessclient.c setuid.o ../install+setup/libsmooth/varval.o -o $@
-
-dnsmasqctrl: dnsmasqctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ dnsmasqctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
+       $(CC) $(CFLAGS) -c $< -o $@
 
-torctrl: torctrl.c setuid.o ../install+setup/libsmooth/varval.o
-       $(COMPILE) -I../install+setup/libsmooth/ torctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@
+$(PROGS) $(SUID_PROGS): setuid.o | $(OBJS)
+       $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $@.o $< $(LIBS)
index 043bd4528b2d41d904ae54d169d174becf9ef648..3d59d70c00c3aacdd4042f7736e8007ef966704a 100644 (file)
@@ -17,7 +17,7 @@
 # along with IPFire; if not, write to the Free Software                    #
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
 #                                                                          #
-# Copyright (C) 2007-2013 IPFire-Team <info@ipfire.org>.                   #
+# Copyright (C) 2007-2014 IPFire-Team <info@ipfire.org>.                   #
 #                                                                          #
 ############################################################################
 #
@@ -31,6 +31,7 @@ if [ ! -z $ROOTUUID ]; then
        ROOT="UUID=$ROOTUUID"
 fi
 
+if [ -f /boot/grub/grub.conf ]; then
 MOUNT=`grep "kernel" /boot/grub/grub.conf | tail -n 1`
 # Nur den letzten Parameter verwenden
 echo $MOUNT > /dev/null
@@ -63,6 +64,8 @@ echo "title IPFire (PAE-Kernel)" >> /boot/grub/grub.conf
 echo "  kernel /vmlinuz-$KVER-ipfire-pae root=$ROOT panic=10$console $MOUNT" >> /boot/grub/grub.conf
 echo "  initrd /ipfirerd-$KVER-pae.img" >> /boot/grub/grub.conf
 echo "  savedefault $ENTRY" >> /boot/grub/grub.conf
+fi
+
 #
 # Create new module depency
 #
@@ -70,11 +73,15 @@ depmod -a $KVER-ipfire-pae
 #
 # Made initramdisk
 #
-/sbin/dracut --force --verbose /boot/ipfirerd-$KVER-pae.img $KVER-ipfire-pae
+/usr/bin/dracut --force --xz /boot/initramfs-$KVER-ipfire-pae.img $KVER-ipfire-pae  
+
+#
+# Update grub2 config
+#
+grub-mkconfig > /boot/grub/grub.cfg
 
-# Default pae and request a reboot if pae is supported
+# request a reboot if pae is supported
 if [ ! "$(grep "^flags.* pae " /proc/cpuinfo)" == "" ]; then
-       grub-set-default $ENTRY
        touch /var/run/need_reboot
 fi
 sync && sync
\ No newline at end of file
index 69c7e565fa83c29fca2aec5b588d8206550ae876..443328b24d98a438fb2c834402e53ae19dd71be5 100644 (file)
 # along with IPFire; if not, write to the Free Software                    #
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
 #                                                                          #
-# Copyright (C) 2007-2013 IPFire-Team <info@ipfire.org>.                   #
+# Copyright (C) 2007-2014 IPFire-Team <info@ipfire.org>.                   #
 #                                                                          #
 ############################################################################
 #
 . /opt/pakfire/lib/functions.sh
 remove_files
-rm -rf /boot/ipfirerd-*-pae.img
+rm -rf /boot/initramfs-*-pae.img
+rm -rf /boot/vmlinuz-*-pae
 rm -rf /lib/modules/*-ipfire-pae
-cp /boot/grub/grub.conf /boot/grub/grub-backup-pae_uninstall.conf
-sed -i "/title IPFire (PAE-Kernel)/,+3d" /boot/grub/grub.conf
-grub-set-default 1
+if [ -f /boot/grub/grub.conf ]; then
+       cp /boot/grub/grub.conf /boot/grub/grub-backup-pae_uninstall.conf
+       sed -i "/title IPFire (PAE-Kernel)/,+3d" /boot/grub/grub.conf
+fi
+grub-mkconfig > /boot/grub/grub.cfg
 sync && sync
index 1ad1831a73fbcbb97dbd836aa648a4be87f25510..00a3c78720ba2d5257e4ca6b4435dd797a23baba 100644 (file)
@@ -17,7 +17,7 @@
 # along with IPFire; if not, write to the Free Software                    #
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
 #                                                                          #
-# Copyright (C) 2007-2013 IPFire-Team <info@ipfire.org>.                   #
+# Copyright (C) 2007-2014 IPFire-Team <info@ipfire.org>.                   #
 #                                                                          #
 ############################################################################
 #
diff --git a/src/patches/Pound-2.6-reneg-ciphers-altnames-nosslv2.patch b/src/patches/Pound-2.6-reneg-ciphers-altnames-nosslv2.patch
deleted file mode 100644 (file)
index 9c874c8..0000000
+++ /dev/null
@@ -1,452 +0,0 @@
-diff -Naur Pound-2.6.orig/config.c Pound-2.6.reneg-ciphers-altnames-nosslv2/config.c
---- Pound-2.6.orig/config.c    2011-12-28 14:57:45.000000000 +0100
-+++ Pound-2.6.reneg-ciphers-altnames-nosslv2/config.c  2012-02-15 21:49:39.000000000 +0100
-@@ -31,6 +31,8 @@
- #include    "pound.h"
-+#include    <openssl/x509v3.h>
-+
- #ifdef MISS_FACILITYNAMES
- /* This is lifted verbatim from the Linux sys/syslog.h */
-@@ -76,7 +78,7 @@
- static regex_t  Err414, Err500, Err501, Err503, MaxRequest, HeadRemove, RewriteLocation, RewriteDestination;
- static regex_t  Service, ServiceName, URL, HeadRequire, HeadDeny, BackEnd, Emergency, Priority, HAport, HAportAddr;
- static regex_t  Redirect, RedirectN, TimeOut, Session, Type, TTL, ID, DynScale;
--static regex_t  ClientCert, AddHeader, Ciphers, CAlist, VerifyList, CRLlist, NoHTTPS11;
-+static regex_t  ClientCert, AddHeader, DisableSSLv2, SSLAllowClientRenegotiation, SSLHonorCipherOrder, Ciphers, CAlist, VerifyList, CRLlist, NoHTTPS11;
- static regex_t  Grace, Include, ConnTO, IgnoreCase, HTTPS, HTTPSCert, Disabled, Threads, CNName;
- static regmatch_t   matches[5];
-@@ -167,6 +169,53 @@
-     }
- }
-+unsigned char **
-+get_subjectaltnames(X509 *x509, unsigned int *count)
-+{
-+    *count = 0;
-+    unsigned int local_count = 0;
-+    unsigned char **result = NULL;
-+
-+    STACK_OF(GENERAL_NAME) *san_stack = (STACK_OF(GENERAL_NAME)*)X509_get_ext_d2i(x509, NID_subject_alt_name, NULL, NULL);     
-+
-+    unsigned char *temp[sk_GENERAL_NAME_num(san_stack)];
-+
-+    GENERAL_NAME *name = NULL;
-+    while(sk_GENERAL_NAME_num(san_stack) > 0)
-+    {
-+        name = sk_GENERAL_NAME_pop(san_stack);
-+
-+        switch(name->type)
-+        {
-+            case GEN_DNS:
-+                temp[local_count] = strndup(ASN1_STRING_data(name->d.dNSName), ASN1_STRING_length(name->d.dNSName)+1);
-+                if(temp[local_count] == NULL) { conf_err("out of memory"); }
-+                local_count++;
-+                break;
-+            default:
-+              logmsg(LOG_INFO, "unsupported subjectAltName type encountered: %i", name->type);
-+        }
-+
-+        GENERAL_NAME_free(name);
-+    }
-+
-+    result = (unsigned char**)malloc(sizeof(unsigned char*)*local_count);
-+    if(result == NULL) { conf_err("out of memory"); }
-+    int i;
-+    for(i = 0;i < local_count; i++)
-+    {
-+        result[i] = strndup(temp[i], strlen(temp[i])+1);
-+        if(result[i] == NULL) { conf_err("out of memory"); }
-+
-+        free(temp[i]);
-+    }
-+    *count = local_count;
-+
-+    sk_GENERAL_NAME_pop_free(san_stack, GENERAL_NAME_free);
-+
-+    return result;
-+}
-+
- /*
-  * parse a back-end
-  */
-@@ -289,9 +338,12 @@
-         } else if(!regexec(&HTTPS, lin, 4, matches, 0)) {
-             if((res->ctx = SSL_CTX_new(SSLv23_client_method())) == NULL)
-                 conf_err("SSL_CTX_new failed - aborted");
-+            SSL_CTX_set_app_data(res->ctx, res);
-             SSL_CTX_set_verify(res->ctx, SSL_VERIFY_NONE, NULL);
-             SSL_CTX_set_mode(res->ctx, SSL_MODE_AUTO_RETRY);
-             SSL_CTX_set_options(res->ctx, SSL_OP_ALL);
-+            SSL_CTX_clear_options(res->ctx, SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION);
-+            SSL_CTX_clear_options(res->ctx, SSL_OP_LEGACY_SERVER_CONNECT);
-             sprintf(lin, "%d-Pound-%ld", getpid(), random());
-             SSL_CTX_set_session_id_context(res->ctx, (unsigned char *)lin, strlen(lin));
-             SSL_CTX_set_tmp_rsa_callback(res->ctx, RSA_tmp_callback);
-@@ -299,6 +351,7 @@
-         } else if(!regexec(&HTTPSCert, lin, 4, matches, 0)) {
-             if((res->ctx = SSL_CTX_new(SSLv23_client_method())) == NULL)
-                 conf_err("SSL_CTX_new failed - aborted");
-+            SSL_CTX_set_app_data(res->ctx, res);
-             lin[matches[1].rm_eo] = '\0';
-             if(SSL_CTX_use_certificate_chain_file(res->ctx, lin + matches[1].rm_so) != 1)
-                 conf_err("SSL_CTX_use_certificate_chain_file failed - aborted");
-@@ -309,6 +362,8 @@
-             SSL_CTX_set_verify(res->ctx, SSL_VERIFY_NONE, NULL);
-             SSL_CTX_set_mode(res->ctx, SSL_MODE_AUTO_RETRY);
-             SSL_CTX_set_options(res->ctx, SSL_OP_ALL);
-+            SSL_CTX_clear_options(res->ctx, SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION);
-+            SSL_CTX_clear_options(res->ctx, SSL_OP_LEGACY_SERVER_CONNECT);
-             sprintf(lin, "%d-Pound-%ld", getpid(), random());
-             SSL_CTX_set_session_id_context(res->ctx, (unsigned char *)lin, strlen(lin));
-             SSL_CTX_set_tmp_rsa_callback(res->ctx, RSA_tmp_callback);
-@@ -805,13 +860,23 @@
-     /* logmsg(LOG_DEBUG, "Received SSL SNI Header for servername %s", servername); */
-     SSL_set_SSL_CTX(ssl, NULL);
--    for(pc = ctx; pc; pc = pc->next)
-+    for(pc = ctx; pc; pc = pc->next) {
-         if(fnmatch(pc->server_name, server_name, 0) == 0) {
-             /* logmsg(LOG_DEBUG, "Found cert for %s", servername); */
-             SSL_set_SSL_CTX(ssl, pc->ctx);
-             return SSL_TLSEXT_ERR_OK;
-         }
--
-+        else if(pc->subjectAltNameCount > 0 && pc->subjectAltNames != NULL) {
-+            int i;
-+            for(i = 0; i < pc->subjectAltNameCount; i++) {
-+                if(fnmatch(pc->subjectAltNames[i], server_name, 0) == 0) {
-+                    SSL_set_SSL_CTX(ssl, pc->ctx);
-+                    return SSL_TLSEXT_ERR_OK;
-+                }
-+            }
-+        }
-+    }
-+    
-     /* logmsg(LOG_DEBUG, "No match for %s, default used", server_name); */
-     SSL_set_SSL_CTX(ssl, ctx->ctx);
-     return SSL_TLSEXT_ERR_OK;
-@@ -829,11 +894,15 @@
-     SERVICE     *svc;
-     MATCHER     *m;
-     int         has_addr, has_port, has_other;
-+    long      ssl_op_enable, ssl_op_disable;
-     struct hostent      *host;
-     struct sockaddr_in  in;
-     struct sockaddr_in6 in6;
-     POUND_CTX   *pc;
-+    ssl_op_enable = SSL_OP_ALL;
-+    ssl_op_disable = SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION | SSL_OP_LEGACY_SERVER_CONNECT;
-+
-     if((res = (LISTENER *)malloc(sizeof(LISTENER))) == NULL)
-         conf_err("ListenHTTPS config: out of memory - aborted");
-     memset(res, 0, sizeof(LISTENER));
-@@ -844,6 +913,8 @@
-     res->err500 = "An internal server error occurred. Please try again later.";
-     res->err501 = "This method may not be used.";
-     res->err503 = "The service is not available. Please try again later.";
-+    res->allow_client_reneg = 0;
-+    res->disable_ssl_v2 = 0;
-     res->log_level = log_level;
-     if(regcomp(&res->verb, xhttp[0], REG_ICASE | REG_NEWLINE | REG_EXTENDED))
-         conf_err("xHTTP bad default pattern - aborted");
-@@ -959,6 +1030,9 @@
-             fclose(fcert);
-             memset(server_name, '\0', MAXBUF);
-             X509_NAME_oneline(X509_get_subject_name(x509), server_name, MAXBUF - 1);
-+            pc->subjectAltNameCount = 0;
-+            pc->subjectAltNames = NULL;
-+            pc->subjectAltNames = get_subjectaltnames(x509, &(pc->subjectAltNameCount));
-             X509_free(x509);
-             if(!regexec(&CNName, server_name, 4, matches, 0)) {
-                 server_name[matches[1].rm_eo] = '\0';
-@@ -1029,6 +1103,25 @@
-                 strcat(res->add_head, "\r\n");
-                 strcat(res->add_head, lin + matches[1].rm_so);
-             }
-+      } else if(!regexec(&DisableSSLv2, lin, 4, matches, 0)) {
-+          res->disable_ssl_v2 = 1;
-+        } else if(!regexec(&SSLAllowClientRenegotiation, lin, 4, matches, 0)) {
-+            res->allow_client_reneg = atoi(lin + matches[1].rm_so);
-+            if (res->allow_client_reneg == 2) {
-+                ssl_op_enable |= SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
-+                ssl_op_disable &= ~SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
-+            } else {
-+                ssl_op_disable |= SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
-+                ssl_op_enable &= ~SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
-+            }
-+        } else if(!regexec(&SSLHonorCipherOrder, lin, 4, matches, 0)) {
-+            if (atoi(lin + matches[1].rm_so)) {
-+                ssl_op_enable |= SSL_OP_CIPHER_SERVER_PREFERENCE;
-+                ssl_op_disable &= ~SSL_OP_CIPHER_SERVER_PREFERENCE;
-+            } else {
-+                ssl_op_disable |= SSL_OP_CIPHER_SERVER_PREFERENCE;
-+                ssl_op_enable &= ~SSL_OP_CIPHER_SERVER_PREFERENCE;
-+            }
-         } else if(!regexec(&Ciphers, lin, 4, matches, 0)) {
-             has_other = 1;
-             if(res->ctx == NULL)
-@@ -1105,12 +1198,19 @@
-                 conf_err("ListenHTTPS: can't set SNI callback");
- #endif
-             for(pc = res->ctx; pc; pc = pc->next) {
-+                SSL_CTX_set_app_data(pc->ctx, res);
-                 SSL_CTX_set_mode(pc->ctx, SSL_MODE_AUTO_RETRY);
--                SSL_CTX_set_options(pc->ctx, SSL_OP_ALL);
-+                SSL_CTX_set_options(pc->ctx, ssl_op_enable);
-+                SSL_CTX_clear_options(pc->ctx, ssl_op_disable);
-+              if (res->disable_ssl_v2 == 1)
-+              {
-+                  SSL_CTX_set_options(pc->ctx, SSL_OP_NO_SSLv2);
-+              }
-                 sprintf(lin, "%d-Pound-%ld", getpid(), random());
-                 SSL_CTX_set_session_id_context(pc->ctx, (unsigned char *)lin, strlen(lin));
-                 SSL_CTX_set_tmp_rsa_callback(pc->ctx, RSA_tmp_callback);
-                 SSL_CTX_set_tmp_dh_callback(pc->ctx, DH_tmp_callback);
-+                SSL_CTX_set_info_callback(pc->ctx, SSLINFO_callback);
-             }
-             return res;
-         } else {
-@@ -1305,6 +1405,9 @@
-     || regcomp(&DynScale, "^[ \t]*DynScale[ \t]+([01])[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
-     || regcomp(&ClientCert, "^[ \t]*ClientCert[ \t]+([0-3])[ \t]+([1-9])[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
-     || regcomp(&AddHeader, "^[ \t]*AddHeader[ \t]+\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
-+    || regcomp(&SSLAllowClientRenegotiation, "^[ \t]*SSLAllowClientRenegotiation[ \t]+([012])[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
-+    || regcomp(&DisableSSLv2, "^[ \t]*DisableSSLv2[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
-+    || regcomp(&SSLHonorCipherOrder, "^[ \t]*SSLHonorCipherOrder[ \t]+([01])[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
-     || regcomp(&Ciphers, "^[ \t]*Ciphers[ \t]+\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
-     || regcomp(&CAlist, "^[ \t]*CAlist[ \t]+\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
-     || regcomp(&VerifyList, "^[ \t]*VerifyList[ \t]+\"(.+)\"[ \t]*$", REG_ICASE | REG_NEWLINE | REG_EXTENDED)
-@@ -1463,6 +1566,9 @@
-     regfree(&DynScale);
-     regfree(&ClientCert);
-     regfree(&AddHeader);
-+    regfree(&SSLAllowClientRenegotiation);
-+    regfree(&DisableSSLv2);
-+    regfree(&SSLHonorCipherOrder);
-     regfree(&Ciphers);
-     regfree(&CAlist);
-     regfree(&VerifyList);
-diff -Naur Pound-2.6.orig/http.c Pound-2.6.reneg-ciphers-altnames-nosslv2/http.c
---- Pound-2.6.orig/http.c      2011-12-28 14:57:45.000000000 +0100
-+++ Pound-2.6.reneg-ciphers-altnames-nosslv2/http.c    2012-02-15 21:44:46.000000000 +0100
-@@ -246,6 +246,11 @@
- static int  err_to = -1;
-+typedef struct {
-+    int timeout;
-+    RENEG_STATE *reneg_state;
-+} BIO_ARG;
-+
- /*
-  * Time-out for client read/gets
-  * the SSL manual says not to do it, but it works well enough anyway...
-@@ -253,18 +258,32 @@
- static long
- bio_callback(BIO *const bio, const int cmd, const char *argp, int argi, long argl, long ret)
- {
-+    BIO_ARG *bio_arg;
-     struct pollfd   p;
-     int             to, p_res, p_err;
-     if(cmd != BIO_CB_READ && cmd != BIO_CB_WRITE)
-         return ret;
-+    //logmsg(LOG_NOTICE, "bio callback");
-     /* a time-out already occured */
--    if((to = *((int *)BIO_get_callback_arg(bio)) * 1000) < 0) {
-+    if((bio_arg = (BIO_ARG*)BIO_get_callback_arg(bio))==NULL) return ret;
-+    if((to = bio_arg->timeout * 1000) < 0) {
-         errno = ETIMEDOUT;
-         return -1;
-     }
-+    /* Renegotiations */
-+    //logmsg(LOG_NOTICE, "RENEG STATE %d", bio_arg->reneg_state==NULL?-1:*bio_arg->reneg_state);
-+    if (bio_arg->reneg_state != NULL && *bio_arg->reneg_state == RENEG_ABORT) {
-+        logmsg(LOG_NOTICE, "REJECTING renegotiated session");
-+        errno = ECONNABORTED;
-+        return -1;
-+    }
-+
-+    //logmsg(LOG_NOTICE, "TO %d", to);
-+    if (to == 0) return ret;
-+
-     for(;;) {
-         memset(&p, 0, sizeof(p));
-         BIO_get_fd(bio, &p.fd);
-@@ -299,7 +318,7 @@
-             return -1;
-         case 0:
-             /* timeout - mark the BIO as unusable for the future */
--            BIO_set_callback_arg(bio, (char *)&err_to);
-+            bio_arg->timeout = err_to;
- #ifdef  EBUG
-             logmsg(LOG_WARNING, "(%lx) CALLBACK timeout poll after %d secs: %s",
-                 pthread_self(), to / 1000, strerror(p_err));
-@@ -503,7 +522,14 @@
-     regmatch_t          matches[4];
-     struct linger       l;
-     double              start_req, end_req;
-+    RENEG_STATE               reneg_state;
-+    BIO_ARG           ba1, ba2;
-+    reneg_state = RENEG_INIT;
-+    ba1.reneg_state =  &reneg_state;
-+    ba2.reneg_state = &reneg_state;
-+    ba1.timeout = 0;
-+    ba2.timeout = 0;
-     from_host = ((thr_arg *)arg)->from_host;
-     memcpy(&from_host_addr, from_host.ai_addr, from_host.ai_addrlen);
-     from_host.ai_addr = (struct sockaddr *)&from_host_addr;
-@@ -512,6 +538,8 @@
-     free(((thr_arg *)arg)->from_host.ai_addr);
-     free(arg);
-+    if(lstn->allow_client_reneg) reneg_state = RENEG_ALLOW;
-+
-     n = 1;
-     setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (void *)&n, sizeof(n));
-     l.l_onoff = 1;
-@@ -535,10 +563,11 @@
-         close(sock);
-         return;
-     }
--    if(lstn->to > 0) {
--        BIO_set_callback_arg(cl, (char *)&lstn->to);
-+    //if(lstn->to > 0) {
-+        ba1.timeout = lstn->to;
-+        BIO_set_callback_arg(cl, (char *)&ba1);
-         BIO_set_callback(cl, bio_callback);
--    }
-+    //}
-     if(lstn->ctx != NULL) {
-         if((ssl = SSL_new(lstn->ctx->ctx)) == NULL) {
-@@ -547,6 +576,7 @@
-             BIO_free_all(cl);
-             return;
-         }
-+        SSL_set_app_data(ssl, &reneg_state);
-         SSL_set_bio(ssl, cl, cl);
-         if((bb = BIO_new(BIO_f_ssl())) == NULL) {
-             logmsg(LOG_WARNING, "(%lx) BIO_new(Bio_f_ssl()) failed", pthread_self());
-@@ -848,7 +878,8 @@
-             }
-             BIO_set_close(be, BIO_CLOSE);
-             if(backend->to > 0) {
--                BIO_set_callback_arg(be, (char *)&backend->to);
-+                ba2.timeout = backend->to;
-+                BIO_set_callback_arg(be, (char *)&ba2);
-                 BIO_set_callback(be, bio_callback);
-             }
-             if(backend->ctx != NULL) {
-diff -Naur Pound-2.6.orig/pound.8 Pound-2.6.reneg-ciphers-altnames-nosslv2/pound.8
---- Pound-2.6.orig/pound.8     2011-12-28 14:57:45.000000000 +0100
-+++ Pound-2.6.reneg-ciphers-altnames-nosslv2/pound.8   2012-02-15 21:44:46.000000000 +0100
-@@ -501,6 +501,19 @@
- and
- .I SSL_CTX_set_cipher_list(3).
- .TP
-+\fBSSLHonorCipherOrder\fR 0|1
-+If this value is 1, the server will broadcast a preference to use \fBCiphers\fR in the
-+order supplied in the \fBCiphers\fR directive.  If the value is 0, the server will treat
-+the Ciphers list as the list of Ciphers it will accept, but no preference will be
-+indicated.  Default value is 0.
-+.TP
-+\fBSSLAllowClientRenegotiation\fR 0|1|2
-+If this value is 0, client initiated renegotiation will be disabled.  This will mitigate
-+DoS exploits based on client renegotiation, regardless of the patch status of clients and
-+servers related to "Secure renegotiation".  If the value is 1, secure renegotiation is
-+supported.  If the value is 2, insecure renegotiation is supported, with unpatched
-+clients.  /fBThis can lead to a DoS and a Man in the Middle attack!/fR  Default value is 0.
-+.TP
- \fBCAlist\fR "CAcert_file"
- Set the list of "trusted" CA's for this server. The CAcert_file is a file containing
- a sequence of CA certificates (PEM format). The names of the defined CA certificates
-diff -Naur Pound-2.6.orig/pound.h Pound-2.6.reneg-ciphers-altnames-nosslv2/pound.h
---- Pound-2.6.orig/pound.h     2011-12-28 14:57:45.000000000 +0100
-+++ Pound-2.6.reneg-ciphers-altnames-nosslv2/pound.h   2012-02-15 21:49:39.000000000 +0100
-@@ -380,6 +380,8 @@
-     SSL_CTX             *ctx;
-     char                *server_name;
-     struct _pound_ctx   *next;
-+    unsigned int        subjectAltNameCount;
-+    unsigned char       **subjectAltNames;
- } POUND_CTX;
- /* Listener definition */
-@@ -404,6 +406,8 @@
-     int                 rewr_dest;      /* rewrite destination header */
-     int                 disabled;       /* true if the listener is disabled */
-     int                 log_level;      /* log level for this listener */
-+    int                 allow_client_reneg; /* Allow Client SSL Renegotiation */
-+    int                disable_ssl_v2; /* Disable SSL version 2 */
-     SERVICE             *services;
-     struct _listener    *next;
- }   LISTENER;
-@@ -419,6 +423,9 @@
-     struct _thr_arg *next;
- }   thr_arg;                        /* argument to processing threads: socket, origin */
-+/* Track SSL handshare/renegotiation so we can reject client-renegotiations. */
-+typedef enum { RENEG_INIT=0, RENEG_REJECT, RENEG_ALLOW, RENEG_ABORT } RENEG_STATE;
-+
- /* Header types */
- #define HEADER_ILLEGAL              -1
- #define HEADER_OTHER                0
-@@ -591,6 +598,11 @@
- extern DH   *DH_tmp_callback(SSL *, int, int);
- /*
-+ * Renegotiation callback
-+ */
-+extern void SSLINFO_callback(const SSL *s, int where, int rc);
-+
-+/*
-  * expiration stuff
-  */
- #ifndef EXPIRE_TO
-diff -Naur Pound-2.6.orig/svc.c Pound-2.6.reneg-ciphers-altnames-nosslv2/svc.c
---- Pound-2.6.orig/svc.c       2011-12-28 14:57:45.000000000 +0100
-+++ Pound-2.6.reneg-ciphers-altnames-nosslv2/svc.c     2012-02-15 21:44:46.000000000 +0100
-@@ -1797,3 +1797,34 @@
-         close(ctl);
-     }
- }
-+
-+void
-+SSLINFO_callback(const SSL *ssl, int where, int rc)
-+{
-+    RENEG_STATE *reneg_state;
-+
-+    /* Get our thr_arg where we're tracking this connection info */
-+    if ((reneg_state = (RENEG_STATE *)SSL_get_app_data(ssl)) == NULL) return;
-+
-+    /* If we're rejecting renegotiations, move to ABORT if Client Hello is being read. */
-+    if ((where & SSL_CB_ACCEPT_LOOP) && *reneg_state == RENEG_REJECT) {
-+        int state = SSL_get_state(ssl);
-+
-+        if (state == SSL3_ST_SR_CLNT_HELLO_A || state == SSL23_ST_SR_CLNT_HELLO_A) {
-+           *reneg_state = RENEG_ABORT;
-+           logmsg(LOG_WARNING,"rejecting client initiated renegotiation");
-+        }
-+    }
-+    else if (where & SSL_CB_HANDSHAKE_DONE && *reneg_state == RENEG_INIT) {
-+       // Reject any followup renegotiations
-+       *reneg_state = RENEG_REJECT;
-+    }
-+
-+    //if (where & SSL_CB_HANDSHAKE_START) logmsg(LOG_DEBUG, "handshake start");
-+    //else if (where & SSL_CB_HANDSHAKE_DONE) logmsg(LOG_DEBUG, "handshake done");
-+    //else if (where & SSL_CB_LOOP) logmsg(LOG_DEBUG, "loop");
-+    //else if (where & SSL_CB_READ) logmsg(LOG_DEBUG, "read");
-+    //else if (where & SSL_CB_WRITE) logmsg(LOG_DEBUG, "write");
-+    //else if (where & SSL_CB_ALERT) logmsg(LOG_DEBUG, "alert");
-+}
-+
diff --git a/src/patches/compat-drivers-3.8-1-u-kref_get_unless_zero.patch b/src/patches/compat-drivers-3.8-1-u-kref_get_unless_zero.patch
deleted file mode 100644 (file)
index 1930d80..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
---- compat-drivers-3.8-1-u/include/linux/compat-3.8.h.orig     2013-05-16 20:35:27.046386772 +0200
-+++ compat-drivers-3.8-1-u/include/linux/compat-3.8.h  2013-05-16 20:35:39.219767618 +0200
-@@ -24,35 +24,6 @@
- /* This backports:
-  *
-- * commit 4b20db3de8dab005b07c74161cb041db8c5ff3a7
-- * Author: Thomas Hellstrom <thellstrom@vmware.com>
-- * Date:   Tue Nov 6 11:31:49 2012 +0000
-- *
-- *    kref: Implement kref_get_unless_zero v3
-- */
--/**
-- * kref_get_unless_zero - Increment refcount for object unless it is zero.
-- * @kref: object.
-- *
-- * Return non-zero if the increment succeeded. Otherwise return 0.
-- *
-- * This function is intended to simplify locking around refcounting for
-- * objects that can be looked up from a lookup structure, and which are
-- * removed from that lookup structure in the object destructor.
-- * Operations on such objects require at least a read lock around
-- * lookup + kref_get, and a write lock around kref_put + remove from lookup
-- * structure. Furthermore, RCU implementations become extremely tricky.
-- * With a lookup followed by a kref_get_unless_zero *with return value check*
-- * locking in the kref_put path can be deferred to the actual removal from
-- * the lookup structure and RCU lookups become trivial.
-- */
--static inline int __must_check kref_get_unless_zero(struct kref *kref)
--{
--      return atomic_add_unless(&kref->refcount, 1, 0);
--}
--
--/* This backports:
-- *
-  * commit 83e68189745ad931c2afd45d8ee3303929233e7f
-  * Author: Matt Fleming <matt.fleming@intel.com>
-  * Date:   Wed Nov 14 09:42:35 2012 +0000
diff --git a/src/patches/compat-wireless-2.6.34-usbnet_compile.patch b/src/patches/compat-wireless-2.6.34-usbnet_compile.patch
deleted file mode 100644 (file)
index 36146fb..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-diff -Naur compat-wireless-2.6.34.org/include/linux/usb/usbnet.h compat-wireless-2.6.34/include/linux/usb/usbnet.h
---- compat-wireless-2.6.34.org/include/linux/usb/usbnet.h      2010-05-18 03:12:10.000000000 +0200
-+++ compat-wireless-2.6.34/include/linux/usb/usbnet.h  2010-05-22 22:18:34.000000000 +0200
-@@ -214,4 +214,24 @@
- extern void usbnet_get_drvinfo (struct net_device *, struct ethtool_drvinfo *);
- extern int usbnet_nway_reset(struct net_device *net);
-+/* messaging support includes the interface name, so it must not be
-+ * used before it has one ... notably, in minidriver bind() calls.
-+ */
-+#ifdef DEBUG
-+#define devdbg(usbnet, fmt, arg...) \
-+      printk(KERN_DEBUG "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
-+#else
-+#define devdbg(usbnet, fmt, arg...) \
-+      ({ if (0) printk(KERN_DEBUG "%s: " fmt "\n" , (usbnet)->net->name , \
-+              ## arg); 0; })
-+#endif
-+
-+#define deverr(usbnet, fmt, arg...) \
-+      printk(KERN_ERR "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
-+#define devwarn(usbnet, fmt, arg...) \
-+      printk(KERN_WARNING "%s: " fmt "\n" , (usbnet)->net->name , ## arg)
-+
-+#define devinfo(usbnet, fmt, arg...) \
-+      printk(KERN_INFO "%s: " fmt "\n" , (usbnet)->net->name , ## arg); \
-+
- #endif /* __LINUX_USB_USBNET_H */
diff --git a/src/patches/compat-wireless-2.6.39_kfifo_module_info.patch b/src/patches/compat-wireless-2.6.39_kfifo_module_info.patch
deleted file mode 100644 (file)
index eb5d280..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -Naur compat-wireless-2.6.39-1-sn.org/compat/kfifo.c compat-wireless-2.6.39-1-sn/compat/kfifo.c
---- compat-wireless-2.6.39-1-sn.org/compat/kfifo.c     2011-05-24 01:43:48.000000000 +0200
-+++ compat-wireless-2.6.39-1-sn/compat/kfifo.c 2011-05-24 17:20:06.956818313 +0200
-@@ -27,6 +27,10 @@
- #include <linux/uaccess.h>
- #include <linux/kfifo.h>
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Stefani Seibold <stefani@seibold.net>");
-+MODULE_DESCRIPTION("A generic kernel FIFO implementation");
-+
- /*
-  * internal helper to calculate the unused elements in a fifo
-  */
diff --git a/src/patches/compat-wireless-3.5-build_ath5k_only_with_pci.patch b/src/patches/compat-wireless-3.5-build_ath5k_only_with_pci.patch
deleted file mode 100644 (file)
index 2e82157..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -Naur compat-wireless-3.5-1-snpc.org/config.mk compat-wireless-3.5/config.mk
---- compat-wireless-3.5-1-snpc.org/config.mk   2012-07-31 17:22:29.000000000 -0400
-+++ compat-wireless-3.5/config.mk      2012-08-13 13:09:55.913234600 -0400
-@@ -246,10 +246,12 @@
- # mac80211 test driver
- export CONFIG_MAC80211_HWSIM=m
-+ifdef CONFIG_PCI
- export CONFIG_ATH5K=m
- # export CONFIG_ATH5K_DEBUG=y
- # export CONFIG_ATH5K_TRACER=y
- # export CONFIG_ATH5K_AHB=y
-+endif #CONFIG_PCI
- export CONFIG_ATH9K=m
- export CONFIG_ATH9K_HW=m
diff --git a/src/patches/compat-wireless-3.5-libertas_uap.patch b/src/patches/compat-wireless-3.5-libertas_uap.patch
deleted file mode 100644 (file)
index 633bb67..0000000
+++ /dev/null
@@ -1,5080 +0,0 @@
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/Makefile compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/Makefile
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/Makefile      1970-01-01 01:00:00.000000000 +0100
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/Makefile  2012-07-31 14:23:04.000000000 +0200
-@@ -0,0 +1,6 @@
-+obj-$(CONFIG_LIBERTAS_UAP) += uap8xxx.o
-+
-+uap8xxx-y += uap_main.o uap_sdio_mmc.o
-+uap8xxx-$(CONFIG_PROC_FS) += uap_proc.o uap_debug.o
-+
-+EXTRA_CFLAGS += -DFPNUM='"52"' -DPXA3XX_DMA_ALIGN -DDEBUG_LEVEL1
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_debug.c compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_debug.c
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_debug.c   1970-01-01 01:00:00.000000000 +0100
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_debug.c       2012-07-31 14:23:04.000000000 +0200
-@@ -0,0 +1,261 @@
-+/** @file uap_debug.c
-+  * @brief This file contains functions for debug proc file.
-+  *
-+  * Copyright (C) 2008-2009, Marvell International Ltd.
-+  *
-+  * This software file (the "File") is distributed by Marvell International
-+  * Ltd. under the terms of the GNU General Public License Version 2, June 1991
-+  * (the "License").  You may use, redistribute and/or modify this File in
-+  * accordance with the terms and conditions of the License, a copy of which
-+  * is available along with the File in the gpl.txt file or by writing to
-+  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+  * 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
-+  *
-+  * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
-+  * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
-+  * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
-+  * this warranty disclaimer.
-+  *
-+  */
-+#ifdef CONFIG_PROC_FS
-+#include  "uap_headers.h"
-+
-+/********************************************************
-+              Local Variables
-+********************************************************/
-+
-+#define item_size(n) (sizeof ((uap_adapter *)0)->n)
-+#define item_addr(n) ((u32) &((uap_adapter *)0)->n)
-+
-+#define item_dbg_size(n) (sizeof (((uap_adapter *)0)->dbg.n))
-+#define item_dbg_addr(n) ((u32) &(((uap_adapter *)0)->dbg.n))
-+
-+#define item_dev_size(n) (sizeof ((uap_dev_t *)0)->n)
-+#define item_dev_addr(n) ((u32) &((uap_dev_t *)0)->n)
-+
-+/** MicroAp device offset */
-+#define OFFSET_UAP_DEV                0x01
-+/** Bluetooth adapter offset */
-+#define OFFSET_UAP_ADAPTER    0x02
-+
-+struct debug_data
-+{
-+    /** Name */
-+    char name[32];
-+    /** Size */
-+    u32 size;
-+    /** Address */
-+    u32 addr;
-+    /** Offset */
-+    u32 offset;
-+    /** Flag */
-+    u32 flag;
-+};
-+
-+/* To debug any member of uap_adapter, simply add one line here.
-+ */
-+static struct debug_data items[] = {
-+    {"cmd_sent", item_dev_size(cmd_sent), 0, item_dev_addr(cmd_sent),
-+     OFFSET_UAP_DEV},
-+    {"data_sent", item_dev_size(data_sent), 0, item_dev_addr(data_sent),
-+     OFFSET_UAP_DEV},
-+    {"IntCounter", item_size(IntCounter), 0, item_addr(IntCounter),
-+     OFFSET_UAP_ADAPTER},
-+    {"cmd_pending", item_size(cmd_pending), 0, item_addr(cmd_pending),
-+     OFFSET_UAP_ADAPTER},
-+    {"num_cmd_h2c_fail", item_dbg_size(num_cmd_host_to_card_failure), 0,
-+     item_dbg_addr(num_cmd_host_to_card_failure), OFFSET_UAP_ADAPTER},
-+    {"num_tx_h2c_fail", item_dbg_size(num_tx_host_to_card_failure), 0,
-+     item_dbg_addr(num_tx_host_to_card_failure), OFFSET_UAP_ADAPTER},
-+    {"psmode", item_size(psmode), 0, item_addr(psmode), OFFSET_UAP_ADAPTER},
-+    {"ps_state", item_size(ps_state), 0, item_addr(ps_state),
-+     OFFSET_UAP_ADAPTER},
-+#ifdef DEBUG_LEVEL1
-+    {"drvdbg", sizeof(drvdbg), (u32) & drvdbg, 0, 0}
-+#endif
-+};
-+
-+static int num_of_items = sizeof(items) / sizeof(items[0]);
-+
-+/********************************************************
-+              Global Variables
-+********************************************************/
-+
-+/********************************************************
-+              Local Functions
-+********************************************************/
-+/**
-+ *  @brief proc read function
-+ *
-+ *  @param page          pointer to buffer
-+ *  @param s       read data starting position
-+ *  @param off     offset
-+ *  @param cnt     counter
-+ *  @param eof     end of file flag
-+ *  @param data    data to output
-+ *  @return      number of output data
-+ */
-+static int
-+uap_debug_read(char *page, char **s, off_t off, int cnt, int *eof, void *data)
-+{
-+    int val = 0;
-+    char *p = page;
-+    int i;
-+
-+    struct debug_data *d = (struct debug_data *) data;
-+
-+    if (MODULE_GET == 0)
-+        return UAP_STATUS_FAILURE;
-+
-+    for (i = 0; i < num_of_items; i++) {
-+        if (d[i].size == 1)
-+            val = *((u8 *) d[i].addr);
-+        else if (d[i].size == 2)
-+            val = *((u16 *) d[i].addr);
-+        else if (d[i].size == 4)
-+            val = *((u32 *) d[i].addr);
-+
-+        p += sprintf(p, "%s=%d\n", d[i].name, val);
-+    }
-+    MODULE_PUT;
-+    return p - page;
-+}
-+
-+/**
-+ *  @brief proc write function
-+ *
-+ *  @param f     file pointer
-+ *  @param buf     pointer to data buffer
-+ *  @param cnt     data number to write
-+ *  @param data    data to write
-+ *  @return      number of data
-+ */
-+static int
-+uap_debug_write(struct file *f, const char *buf, unsigned long cnt, void *data)
-+{
-+    int r, i;
-+    char *pdata;
-+    char *p;
-+    char *p0;
-+    char *p1;
-+    char *p2;
-+    struct debug_data *d = (struct debug_data *) data;
-+
-+    if (MODULE_GET == 0)
-+        return UAP_STATUS_FAILURE;
-+
-+    pdata = (char *) kmalloc(cnt, GFP_KERNEL);
-+    if (pdata == NULL) {
-+        MODULE_PUT;
-+        return 0;
-+    }
-+
-+    if (copy_from_user(pdata, buf, cnt)) {
-+        PRINTM(INFO, "Copy from user failed\n");
-+        kfree(pdata);
-+        MODULE_PUT;
-+        return 0;
-+    }
-+
-+    p0 = pdata;
-+    for (i = 0; i < num_of_items; i++) {
-+        do {
-+            p = strstr(p0, d[i].name);
-+            if (p == NULL)
-+                break;
-+            p1 = strchr(p, '\n');
-+            if (p1 == NULL)
-+                break;
-+            p0 = p1++;
-+            p2 = strchr(p, '=');
-+            if (!p2)
-+                break;
-+            p2++;
-+            r = string_to_number(p2);
-+            if (d[i].size == 1)
-+                *((u8 *) d[i].addr) = (u8) r;
-+            else if (d[i].size == 2)
-+                *((u16 *) d[i].addr) = (u16) r;
-+            else if (d[i].size == 4)
-+                *((u32 *) d[i].addr) = (u32) r;
-+            break;
-+        } while (TRUE);
-+    }
-+    kfree(pdata);
-+#ifdef DEBUG_LEVEL1
-+    printk(KERN_ALERT "drvdbg = 0x%x\n", drvdbg);
-+    printk(KERN_ALERT "INFO  (%08lx) %s\n", DBG_INFO,
-+           (drvdbg & DBG_INFO) ? "X" : "");
-+    printk(KERN_ALERT "WARN  (%08lx) %s\n", DBG_WARN,
-+           (drvdbg & DBG_WARN) ? "X" : "");
-+    printk(KERN_ALERT "ENTRY (%08lx) %s\n", DBG_ENTRY,
-+           (drvdbg & DBG_ENTRY) ? "X" : "");
-+    printk(KERN_ALERT "CMD_D (%08lx) %s\n", DBG_CMD_D,
-+           (drvdbg & DBG_CMD_D) ? "X" : "");
-+    printk(KERN_ALERT "DAT_D (%08lx) %s\n", DBG_DAT_D,
-+           (drvdbg & DBG_DAT_D) ? "X" : "");
-+    printk(KERN_ALERT "CMND  (%08lx) %s\n", DBG_CMND,
-+           (drvdbg & DBG_CMND) ? "X" : "");
-+    printk(KERN_ALERT "DATA  (%08lx) %s\n", DBG_DATA,
-+           (drvdbg & DBG_DATA) ? "X" : "");
-+    printk(KERN_ALERT "ERROR (%08lx) %s\n", DBG_ERROR,
-+           (drvdbg & DBG_ERROR) ? "X" : "");
-+    printk(KERN_ALERT "FATAL (%08lx) %s\n", DBG_FATAL,
-+           (drvdbg & DBG_FATAL) ? "X" : "");
-+    printk(KERN_ALERT "MSG   (%08lx) %s\n", DBG_MSG,
-+           (drvdbg & DBG_MSG) ? "X" : "");
-+#endif
-+    MODULE_PUT;
-+    return cnt;
-+}
-+
-+/********************************************************
-+              Global Functions
-+********************************************************/
-+/**
-+ *  @brief create debug proc file
-+ *
-+ *  @param priv          pointer uap_private
-+ *  @param dev     pointer net_device
-+ *  @return      N/A
-+ */
-+void
-+uap_debug_entry(uap_private * priv, struct net_device *dev)
-+{
-+    int i;
-+    struct proc_dir_entry *r;
-+
-+    if (priv->proc_entry == NULL)
-+        return;
-+
-+    for (i = 0; i < num_of_items; i++) {
-+        if (items[i].flag & OFFSET_UAP_ADAPTER)
-+            items[i].addr = items[i].offset + (u32) priv->adapter;
-+        if (items[i].flag & OFFSET_UAP_DEV)
-+            items[i].addr = items[i].offset + (u32) & priv->uap_dev;
-+    }
-+    r = create_proc_entry("debug", 0644, priv->proc_entry);
-+    if (r == NULL)
-+        return;
-+
-+    r->data = &items[0];
-+    r->read_proc = uap_debug_read;
-+    r->write_proc = uap_debug_write;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
-+    r->owner = THIS_MODULE;
-+#endif
-+}
-+
-+/**
-+ *  @brief remove proc file
-+ *
-+ *  @param priv          pointer uap_private
-+ *  @return      N/A
-+ */
-+void
-+uap_debug_remove(uap_private * priv)
-+{
-+    remove_proc_entry("debug", priv->proc_entry);
-+}
-+
-+#endif
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_drv.h compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_drv.h
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_drv.h     1970-01-01 01:00:00.000000000 +0100
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_drv.h 2012-07-31 14:23:04.000000000 +0200
-@@ -0,0 +1,667 @@
-+/** @file uap_drv.h
-+  * @brief This file contains Linux OS related definitions and
-+  * declarations, uAP driver
-+  *
-+  * Copyright (C) 2008-2009, Marvell International Ltd.
-+  *
-+  * This software file (the "File") is distributed by Marvell International
-+  * Ltd. under the terms of the GNU General Public License Version 2, June 1991
-+  * (the "License").  You may use, redistribute and/or modify this File in
-+  * accordance with the terms and conditions of the License, a copy of which
-+  * is available along with the File in the gpl.txt file or by writing to
-+  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+  * 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
-+  *
-+  * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
-+  * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
-+  * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
-+  * this warranty disclaimer.
-+  *
-+  */
-+
-+#ifndef _UAP_DRV_H
-+#define _UAP_DRV_H
-+
-+/** Driver release version */
-+#define DRIVER_VERSION                "26146"
-+
-+/** True */
-+#ifndef       TRUE
-+#define TRUE                  1
-+#endif
-+/** False */
-+#ifndef       FALSE
-+#define       FALSE                   0
-+#endif
-+
-+/** Bit definitions */
-+#ifndef BIT
-+#define BIT(x)        (1UL << (x))
-+#endif
-+
-+/** Dma addresses are 32-bits wide.  */
-+#ifndef __ATTRIB_ALIGN__
-+#define __ATTRIB_ALIGN__ __attribute__((aligned(4)))
-+#endif
-+
-+/**  attribute pack */
-+#ifndef __ATTRIB_PACK__
-+#define __ATTRIB_PACK__ __attribute__ ((packed))
-+#endif
-+
-+/** Debug Macro definition*/
-+#ifdef        DEBUG_LEVEL1
-+
-+extern u32 drvdbg;
-+
-+/** Debug message control bit definition for drvdbg */
-+/** Debug message */
-+#define       DBG_MSG         BIT(0)
-+/** Debug fatal message */
-+#define DBG_FATAL     BIT(1)
-+/** Debug error message */
-+#define DBG_ERROR     BIT(2)
-+/** Debug data message */
-+#define DBG_DATA      BIT(3)
-+/** Debug command message */
-+#define DBG_CMND      BIT(4)
-+
-+/** Debug data */
-+#define DBG_DAT_D     BIT(16)
-+/** Debug command */
-+#define DBG_CMD_D     BIT(17)
-+
-+/** Debug entry */
-+#define DBG_ENTRY     BIT(28)
-+/** Debug warning */
-+#define DBG_WARN      BIT(29)
-+/** Debug info */
-+#define DBG_INFO      BIT(30)
-+
-+/** Print info */
-+#define       PRINTM_INFO(msg...)  {if (drvdbg & DBG_INFO) printk(KERN_DEBUG msg);}
-+/** Print warn message */
-+#define       PRINTM_WARN(msg...)  {if (drvdbg & DBG_WARN) printk(KERN_DEBUG msg);}
-+/** Print entry */
-+#define       PRINTM_ENTRY(msg...) {if (drvdbg & DBG_ENTRY) printk(KERN_DEBUG msg);}
-+/** Print cmd_d */
-+#define       PRINTM_CMD_D(msg...) {if (drvdbg & DBG_CMD_D) printk(KERN_DEBUG msg);}
-+/** Print data_d */
-+#define       PRINTM_DAT_D(msg...) {if (drvdbg & DBG_DAT_D) printk(KERN_DEBUG msg);}
-+/** Print command */
-+#define       PRINTM_CMND(msg...)  {if (drvdbg & DBG_CMND) printk(KERN_DEBUG msg);}
-+/** Print data */
-+#define       PRINTM_DATA(msg...)  {if (drvdbg & DBG_DATA) printk(KERN_DEBUG msg);}
-+/** Print error message */
-+#define       PRINTM_ERROR(msg...) {if (drvdbg & DBG_ERROR) printk(KERN_DEBUG msg);}
-+/** Print fatal message */
-+#define       PRINTM_FATAL(msg...) {if (drvdbg & DBG_FATAL) printk(KERN_DEBUG msg);}
-+/** Print message */
-+#define       PRINTM_MSG(msg...)   {if (drvdbg & DBG_MSG) printk(KERN_ALERT msg);}
-+/** Print level */
-+#define       PRINTM(level,msg...) PRINTM_##level(msg)
-+
-+#else
-+
-+#define       PRINTM(level,msg...) do {} while (0)
-+
-+#endif /* DEBUG_LEVEL1 */
-+
-+/** Wait until a condition becomes true */
-+#define ASSERT(cond)                                          \
-+do {                                                          \
-+      if (!(cond))                                            \
-+              PRINTM(INFO, "ASSERT: %s, %s:%i\n",             \
-+                     __FUNCTION__, __FILE__, __LINE__);       \
-+} while(0)
-+
-+/** Log enrty point for debugging */
-+#define       ENTER()                 PRINTM(ENTRY, "Enter: %s, %s:%i\n", __FUNCTION__, \
-+                                                      __FILE__, __LINE__)
-+/** Log exit point for debugging */
-+#define       LEAVE()                 PRINTM(ENTRY, "Leave: %s, %s:%i\n", __FUNCTION__, \
-+                                                      __FILE__, __LINE__)
-+
-+#ifdef        DEBUG_LEVEL1
-+/** Dump buffer length */
-+#define DBG_DUMP_BUF_LEN    64
-+/** Maximum dump per line */
-+#define MAX_DUMP_PER_LINE   16
-+/** Data dump length */
-+#define DATA_DUMP_LEN       32
-+
-+static inline void
-+hexdump(char *prompt, u8 * buf, int len)
-+{
-+    int i;
-+    char dbgdumpbuf[DBG_DUMP_BUF_LEN];
-+    char *ptr = dbgdumpbuf;
-+
-+    printk(KERN_DEBUG "%s:\n", prompt);
-+    for (i = 1; i <= len; i++) {
-+        ptr += sprintf(ptr, "%02x ", *buf);
-+        buf++;
-+        if (i % MAX_DUMP_PER_LINE == 0) {
-+            *ptr = 0;
-+            printk(KERN_DEBUG "%s\n", dbgdumpbuf);
-+            ptr = dbgdumpbuf;
-+        }
-+    }
-+    if (len % MAX_DUMP_PER_LINE) {
-+        *ptr = 0;
-+        printk(KERN_DEBUG "%s\n", dbgdumpbuf);
-+    }
-+}
-+
-+/** Debug command */
-+#define DBG_HEXDUMP_CMD_D(x,y,z)    {if (drvdbg & DBG_CMD_D) hexdump(x,y,z);}
-+/** Debug data */
-+#define DBG_HEXDUMP_DAT_D(x,y,z)    {if (drvdbg & DBG_DAT_D) hexdump(x,y,z);}
-+/** Debug hexdump */
-+#define       DBG_HEXDUMP(level,x,y,z)    DBG_HEXDUMP_##level(x,y,z)
-+/** hexdump */
-+#define HEXDUMP(x,y,z)              {if (drvdbg & DBG_INFO) hexdump(x,y,z);}
-+#else
-+/** Do nothing since debugging is not turned on */
-+#define DBG_HEXDUMP(level,x,y,z)    do {} while (0)
-+/** Do nothing since debugging is not turned on */
-+#define HEXDUMP(x,y,z)              do {} while (0)
-+#endif
-+
-+/**
-+ * Typedefs
-+ */
-+/** Unsigned char */
-+typedef u8 BOOLEAN;
-+
-+/*
-+ * OS macro definitions
-+ */
-+/** OS macro to get time */
-+#define os_time_get() jiffies
-+
-+/** OS macro to update transfer start time */
-+#define UpdateTransStart(dev) { \
-+      dev->trans_start = jiffies; \
-+}
-+
-+/** Try to get a reference to the module */
-+#define MODULE_GET    try_module_get(THIS_MODULE)
-+/** Decrease module reference count */
-+#define MODULE_PUT    module_put(THIS_MODULE)
-+
-+/** OS macro to initialize semaphore */
-+#define OS_INIT_SEMAPHORE(x)  sema_init(x,1)
-+/** OS macro to acquire blocking semaphore */
-+#define OS_ACQ_SEMAPHORE_BLOCK(x)     down_interruptible(x)
-+/** OS macro to acquire non-blocking semaphore */
-+#define OS_ACQ_SEMAPHORE_NOBLOCK(x)   down_trylock(x)
-+/** OS macro to release semaphore */
-+#define OS_REL_SEMAPHORE(x)           up(x)
-+
-+static inline void
-+os_sched_timeout(u32 millisec)
-+{
-+    set_current_state(TASK_INTERRUPTIBLE);
-+    schedule_timeout((millisec * HZ) / 1000);
-+}
-+
-+/** Maximum size of ethernet packet */
-+#define MRVDRV_MAXIMUM_ETH_PACKET_SIZE        1514
-+
-+/** Maximum size of multicast list */
-+#define MRVDRV_MAX_MULTICAST_LIST_SIZE        32
-+
-+/** Find minimum */
-+#ifndef MIN
-+#define MIN(a,b)              ((a) < (b) ? (a) : (b))
-+#endif
-+
-+/** Find maximum */
-+#ifndef MAX
-+#define MAX(a,b)              ((a) > (b) ? (a) : (b))
-+#endif
-+
-+/** Find number of elements */
-+#ifndef NELEMENTS
-+#define NELEMENTS(x) (sizeof(x)/sizeof(x[0]))
-+#endif
-+
-+/** Buffer Constants */
-+
-+/** Size of command buffer */
-+#define MRVDRV_SIZE_OF_CMD_BUFFER       (2 * 1024)
-+
-+/** Length of device length */
-+#define DEV_NAME_LEN                  32
-+
-+/** Length of ethernet address */
-+#ifndef       ETH_ALEN
-+#define ETH_ALEN                      6
-+#endif
-+
-+/** Default watchdog timeout */
-+#define MRVDRV_DEFAULT_WATCHDOG_TIMEOUT (2 * HZ)
-+
-+/** Success */
-+#define UAP_STATUS_SUCCESS         (0)
-+/** Failure */
-+#define UAP_STATUS_FAILURE         (-1)
-+/** Not accepted */
-+#define UAP_STATUS_NOT_ACCEPTED    (-2)
-+
-+/** Max loop count (* 100ms) for waiting device ready at init time */
-+#define MAX_WAIT_DEVICE_READY_COUNT   50
-+
-+/** Tx high watermark. Stop Tx queue after this is crossed */
-+#define TX_HIGH_WATERMARK   4
-+/** Tx low watermark. Restart Tx queue after this is crossed */
-+#define TX_LOW_WATERMARK    2
-+
-+/** Netlink protocol number */
-+#define NETLINK_MARVELL     (MAX_LINKS - 1)
-+/** Netlink maximum payload size */
-+#define NL_MAX_PAYLOAD      1024
-+/** Netlink multicast group number */
-+#define NL_MULTICAST_GROUP  1
-+
-+/** 20 seconds */
-+#define MRVDRV_TIMER_20S              20000
-+
-+/** Host Command option for wait till Send */
-+#define HostCmd_OPTION_WAITFORSEND            0x0001
-+/** Host Command option for wait for RSP */
-+#define HostCmd_OPTION_WAITFORRSP             0x0002
-+/** Host Command option for wait for RSP or Timeout */
-+#define HostCmd_OPTION_WAITFORRSP_TIMEOUT     0x0003
-+/** Host Command option for wait for RSP of sleep confirm */
-+#define HostCmd_OPTION_WAITFORRSP_SLEEPCONFIRM   0x0004
-+
-+/** Sleep until a condition gets true or a timeout elapses */
-+#define os_wait_interruptible_timeout(waitq, cond, timeout) \
-+      wait_event_interruptible_timeout(waitq, cond, ((timeout) * HZ / 1000))
-+
-+/** Private command ID to Host command */
-+#define       UAPHOSTCMD                      (SIOCDEVPRIVATE + 1)
-+
-+/** Private command ID to Power Mode */
-+#define       UAP_POWER_MODE                  (SIOCDEVPRIVATE + 3)
-+/** sleep_param */
-+typedef struct _ps_sleep_param
-+{
-+    /** control bitmap */
-+    u32 ctrl_bitmap;
-+    /** minimum sleep period (micro second) */
-+    u32 min_sleep;
-+    /** maximum sleep period (micro second) */
-+    u32 max_sleep;
-+} ps_sleep_param;
-+
-+/** inactivity sleep_param */
-+typedef struct _inact_sleep_param
-+{
-+    /** inactivity timeout (micro second) */
-+    u32 inactivity_to;
-+    /** miniumu awake period (micro second) */
-+    u32 min_awake;
-+    /** maximum awake period (micro second) */
-+    u32 max_awake;
-+} inact_sleep_param;
-+
-+/** flag for ps mode */
-+#define PS_FLAG_PS_MODE                 1
-+/** flag for sleep param */
-+#define PS_FLAG_SLEEP_PARAM             2
-+/** flag for inactivity sleep param */
-+#define PS_FLAG_INACT_SLEEP_PARAM       4
-+
-+/** Disable power mode */
-+#define PS_MODE_DISABLE                      0
-+/** Enable periodic dtim ps */
-+#define PS_MODE_PERIODIC_DTIM                1
-+/** Enable inactivity ps */
-+#define PS_MODE_INACTIVITY                   2
-+
-+/** sleep parameter */
-+#define SLEEP_PARAMETER                     1
-+/** inactivity sleep parameter */
-+#define INACTIVITY_SLEEP_PARAMETER          2
-+/** ps_mgmt */
-+typedef struct _ps_mgmt
-+{
-+    /** flags for valid field */
-+    u16 flags;
-+    /** power mode */
-+    u16 ps_mode;
-+    /** sleep param */
-+    ps_sleep_param sleep_param;
-+    /** inactivity sleep param */
-+    inact_sleep_param inact_param;
-+} ps_mgmt;
-+
-+/** Semaphore structure */
-+typedef struct semaphore SEMAPHORE;
-+
-+/** Global Varibale Declaration */
-+/** Private data structure of the device */
-+typedef struct _uap_private uap_private;
-+/** Adapter data structure of the device */
-+typedef struct _uap_adapter uap_adapter;
-+/** private structure */
-+extern uap_private *uappriv;
-+
-+/** ENUM definition*/
-+
-+/** Hardware status codes */
-+typedef enum _HARDWARE_STATUS
-+{
-+    HWReady,
-+    HWInitializing,
-+    HWReset,
-+    HWClosing,
-+    HWNotReady
-+} HARDWARE_STATUS;
-+
-+/** info for debug purpose */
-+typedef struct _uap_dbg
-+{
-+        /** Number of host to card command failures */
-+    u32 num_cmd_host_to_card_failure;
-+        /** Number of host to card Tx failures */
-+    u32 num_tx_host_to_card_failure;
-+} uap_dbg;
-+
-+/** Set thread state */
-+#define OS_SET_THREAD_STATE(x)                set_current_state(x)
-+
-+typedef struct
-+{
-+    /** Task */
-+    struct task_struct *task;
-+    /** Queue */
-+    wait_queue_head_t waitQ;
-+    /** PID */
-+    pid_t pid;
-+    /** Private structure */
-+    void *priv;
-+} uap_thread;
-+
-+static inline void
-+uap_activate_thread(uap_thread * thr)
-+{
-+        /** Record the thread pid */
-+    thr->pid = current->pid;
-+
-+        /** Initialize the wait queue */
-+    init_waitqueue_head(&thr->waitQ);
-+}
-+
-+static inline void
-+uap_deactivate_thread(uap_thread * thr)
-+{
-+    thr->pid = 0;
-+    return;
-+}
-+
-+static inline void
-+uap_create_thread(int (*uapfunc) (void *), uap_thread * thr, char *name)
-+{
-+    thr->task = kthread_run(uapfunc, thr, "%s", name);
-+}
-+
-+static inline int
-+uap_terminate_thread(uap_thread * thr)
-+{
-+    /* Check if the thread is active or not */
-+    if (!thr->pid)
-+        return -1;
-+    kthread_stop(thr->task);
-+    return 0;
-+}
-+
-+/** Data structure for the Marvell uAP device */
-+typedef struct _uap_dev
-+{
-+        /** device name */
-+    char name[DEV_NAME_LEN];
-+        /** card pointer */
-+    void *card;
-+        /** IO port */
-+    u32 ioport;
-+        /** Rx unit */
-+    u8 rx_unit;
-+        /** Data sent:
-+          TRUE - Data is sent to fw, no Tx Done received
-+          FALSE - Tx done received for previous Tx */
-+    BOOLEAN data_sent;
-+        /** CMD sent:
-+          TRUE - CMD is sent to fw, no CMD Done received
-+          FALSE - CMD done received for previous CMD */
-+    BOOLEAN cmd_sent;
-+        /** netdev pointer */
-+    struct net_device *netdev;
-+} uap_dev_t, *puap_dev_t;
-+
-+/** Private structure for the MV device */
-+struct _uap_private
-+{
-+        /** Device open */
-+    int open;
-+
-+        /** Device adapter structure */
-+    uap_adapter *adapter;
-+        /** Device structure */
-+    uap_dev_t uap_dev;
-+
-+        /** Net device statistics structure */
-+    struct net_device_stats stats;
-+
-+        /** Number of Tx timeouts */
-+    u32 num_tx_timeout;
-+
-+        /** Media connection status */
-+    BOOLEAN MediaConnected;
-+
-+#ifdef CONFIG_PROC_FS
-+    struct proc_dir_entry *proc_uap;
-+    struct proc_dir_entry *proc_entry;
-+#endif                          /* CONFIG_PROC_FS */
-+
-+        /** Firmware helper */
-+    const struct firmware *fw_helper;
-+        /** Firmware */
-+    const struct firmware *firmware;
-+        /** Hotplug device */
-+    struct device *hotplug_device;
-+        /** thread to service interrupts */
-+    uap_thread MainThread;
-+        /** Driver lock */
-+    spinlock_t driver_lock;
-+        /** Driver lock flags */
-+    ulong driver_flags;
-+
-+};
-+
-+/** PS_CMD_ConfirmSleep */
-+typedef struct _PS_CMD_ConfirmSleep
-+{
-+        /** SDIO Length */
-+    u16 SDLen;
-+    /** SDIO Type */
-+    u16 SDType;
-+        /** Command */
-+    u16 Command;
-+        /** Size */
-+    u16 Size;
-+        /** Sequence number */
-+    u16 SeqNum;
-+        /** Result */
-+    u16 Result;
-+} __ATTRIB_PACK__ PS_CMD_ConfirmSleep, *PPS_CMD_ConfirmSleep;
-+
-+/** Wlan Adapter data structure*/
-+struct _uap_adapter
-+{
-+        /** Power save confirm sleep command */
-+    PS_CMD_ConfirmSleep PSConfirmSleep;
-+        /** Device status */
-+    HARDWARE_STATUS HardwareStatus;
-+        /** Interrupt counter */
-+    u32 IntCounter;
-+        /** Tx packet queue */
-+    struct sk_buff_head tx_queue;
-+        /** Cmd packet queue */
-+    struct sk_buff_head cmd_queue;
-+        /** Command sequence number */
-+    u16 SeqNum;
-+        /** Command buffer */
-+    u8 *CmdBuf;
-+        /** cmd pending flag */
-+    u8 cmd_pending;
-+        /** cmd wait option */
-+    u8 cmd_wait_option;
-+        /** Command buffer length */
-+    u32 CmdSize;
-+        /** Command wait queue */
-+    wait_queue_head_t cmdwait_q __ATTRIB_ALIGN__;
-+        /** Command wait queue state flag */
-+    u8 CmdWaitQWoken;
-+        /** PnP support */
-+    BOOLEAN SurpriseRemoved;
-+        /** Debug */
-+    uap_dbg dbg;
-+        /** Netlink kernel socket */
-+    struct sock *nl_sk;
-+        /** Semaphore for CMD */
-+    SEMAPHORE CmdSem;
-+         /** Power Save mode */
-+    u8 psmode;
-+        /** Power Save state */
-+    u8 ps_state;
-+        /** Number of wakeup tries */
-+    u32 WakeupTries;
-+};
-+
-+static inline int
-+os_upload_rx_packet(uap_private * priv, struct sk_buff *skb)
-+{
-+    skb->dev = priv->uap_dev.netdev;
-+    skb->protocol = eth_type_trans(skb, priv->uap_dev.netdev);
-+    skb->ip_summed = CHECKSUM_UNNECESSARY;
-+    if (in_interrupt())
-+        netif_rx(skb);
-+    else
-+        netif_rx_ni(skb);
-+    return 0;
-+}
-+
-+/*
-+ *  netif carrier_on/off and start(wake)/stop_queue handling
-+ */
-+static inline void
-+os_carrier_on(uap_private * priv)
-+{
-+    if (!netif_carrier_ok(priv->uap_dev.netdev) &&
-+        (priv->MediaConnected == TRUE)) {
-+        netif_carrier_on(priv->uap_dev.netdev);
-+    }
-+}
-+
-+static inline void
-+os_carrier_off(uap_private * priv)
-+{
-+    if (netif_carrier_ok(priv->uap_dev.netdev)) {
-+        netif_carrier_off(priv->uap_dev.netdev);
-+    }
-+}
-+
-+static inline void
-+os_start_queue(uap_private * priv)
-+{
-+    if (netif_queue_stopped(priv->uap_dev.netdev) &&
-+        (priv->MediaConnected == TRUE)) {
-+        netif_wake_queue(priv->uap_dev.netdev);
-+    }
-+}
-+
-+static inline void
-+os_stop_queue(uap_private * priv)
-+{
-+    if (!netif_queue_stopped(priv->uap_dev.netdev)) {
-+        netif_stop_queue(priv->uap_dev.netdev);
-+    }
-+}
-+
-+/** Interface specific header */
-+#define INTF_HEADER_LEN         4
-+
-+/** headroom alignment for tx packet */
-+#define HEADER_ALIGNMENT      8
-+
-+/** The number of times to try when polling for status bits */
-+#define MAX_POLL_TRIES                        100
-+
-+/** Length of SNAP header */
-+#define MRVDRV_SNAP_HEADER_LEN          8
-+
-+/** Extra length of Tx packet buffer */
-+#define EXTRA_LEN     36
-+
-+/** Buffer size for ethernet Tx packets */
-+#define MRVDRV_ETH_TX_PACKET_BUFFER_SIZE \
-+      (ETH_FRAME_LEN + sizeof(TxPD) + EXTRA_LEN)
-+
-+/** Buffer size for ethernet Rx packets */
-+#define MRVDRV_ETH_RX_PACKET_BUFFER_SIZE \
-+      (ETH_FRAME_LEN + sizeof(RxPD) \
-+       + MRVDRV_SNAP_HEADER_LEN + EXTRA_LEN)
-+
-+/** Packet type: data, command & event */
-+typedef enum _mv_type
-+{
-+    MV_TYPE_DAT = 0,
-+    MV_TYPE_CMD = 1,
-+    MV_TYPE_EVENT = 3
-+} mv_type;
-+
-+/** Disable interrupt */
-+#define OS_INT_DISABLE        spin_lock_irqsave(&priv->driver_lock, priv->driver_flags)
-+/** Enable interrupt */
-+#define       OS_INT_RESTORE  spin_unlock_irqrestore(&priv->driver_lock, priv->driver_flags)
-+
-+int uap_process_rx_packet(uap_private * priv, struct sk_buff *skb);
-+void uap_interrupt(uap_private * priv);
-+uap_private *uap_add_card(void *card);
-+int uap_remove_card(void *card);
-+int uap_process_event(uap_private * priv, u8 * payload, uint len);
-+int uap_soft_reset(uap_private * priv);
-+int uap_process_sleep_confirm_resp(uap_private * priv, u8 * resp, int resp_len);
-+
-+#ifdef CONFIG_PROC_FS
-+/** The proc fs interface */
-+void uap_proc_entry(uap_private * priv, struct net_device *dev);
-+void uap_proc_remove(uap_private * priv);
-+int string_to_number(char *s);
-+void uap_debug_entry(uap_private * priv, struct net_device *dev);
-+void uap_debug_remove(uap_private * priv);
-+#endif /* CONFIG_PROC_FS */
-+
-+int sbi_register(void);
-+
-+void sbi_unregister(void);
-+int sbi_register_dev(uap_private * priv);
-+int sbi_unregister_dev(uap_private * priv);
-+int sbi_prog_fw_w_helper(uap_private *);
-+
-+int sbi_host_to_card(uap_private * priv, u8 * payload, u16 nb);
-+int sbi_enable_host_int(uap_private * priv);
-+int sbi_disable_host_int(uap_private * priv);
-+
-+int sbi_get_int_status(uap_private * priv, u8 * ireg);
-+/** Check firmware status */
-+int sbi_check_fw_status(uap_private *, int);
-+int sbi_prog_helper(uap_private *);
-+
-+int sbi_wakeup_firmware(uap_private * priv);
-+
-+#endif /* _UAP_DRV_H */
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_fw.h compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_fw.h
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_fw.h      1970-01-01 01:00:00.000000000 +0100
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_fw.h  2012-07-31 14:23:04.000000000 +0200
-@@ -0,0 +1,359 @@
-+/** @file uap_fw.h
-+ *
-+ * @brief This file contains firmware specific defines.
-+ *
-+ * Copyright (C) 2008-2009, Marvell International Ltd.
-+ *
-+ * This software file (the "File") is distributed by Marvell International
-+ * Ltd. under the terms of the GNU General Public License Version 2, June 1991
-+ * (the "License").  You may use, redistribute and/or modify this File in
-+ * accordance with the terms and conditions of the License, a copy of which
-+ * is available along with the File in the gpl.txt file or by writing to
-+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ * 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
-+ *
-+ * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
-+ * this warranty disclaimer.
-+ *
-+ */
-+/********************************************************
-+Change log:
-+      02/26/08: Initial creation
-+********************************************************/
-+
-+#ifndef _UAP_FW_H
-+#define _UAP_FW_H
-+
-+/** uap upload size */
-+#define       UAP_UPLD_SIZE                   2312
-+/** Packet type Micro AP */
-+#define PKT_TYPE_MICROAP              1
-+/** Packet type client */
-+#define PKT_TYPE_CLIENT                       0
-+
-+/** TxPD descriptor */
-+typedef struct _TxPD
-+{
-+        /** Bss Type */
-+    u8 BssType;
-+        /** Bss num */
-+    u8 BssNum;
-+        /** Tx packet length */
-+    u16 TxPktLength;
-+        /** Tx packet offset */
-+    u16 TxPktOffset;
-+        /** Tx packet type */
-+    u16 TxPktType;
-+        /** Tx Control */
-+    u32 TxControl;
-+        /** reserved */
-+    u32 reserved[2];
-+} __ATTRIB_PACK__ TxPD, *PTxPD;
-+
-+/** RxPD Descriptor */
-+typedef struct _RxPD
-+{
-+        /** Bss Type */
-+    u8 BssType;
-+        /** Bss Num */
-+    u8 BssNum;
-+        /** Tx packet length */
-+    u16 RxPktLength;
-+        /** Tx packet offset */
-+    u16 RxPktOffset;
-+} __ATTRIB_PACK__ RxPD, *PRxPD;
-+
-+#ifdef BIG_ENDIAN
-+/** Convert from 16 bit little endian format to CPU format */
-+#define uap_le16_to_cpu(x) le16_to_cpu(x)
-+/** Convert from 32 bit little endian format to CPU format */
-+#define uap_le32_to_cpu(x) le32_to_cpu(x)
-+/** Convert from 64 bit little endian format to CPU format */
-+#define uap_le64_to_cpu(x) le64_to_cpu(x)
-+/** Convert to 16 bit little endian format from CPU format */
-+#define uap_cpu_to_le16(x) cpu_to_le16(x)
-+/** Convert to 32 bit little endian format from CPU format */
-+#define uap_cpu_to_le32(x) cpu_to_le32(x)
-+/** Convert to 64 bit little endian format from CPU format */
-+#define uap_cpu_to_le64(x) cpu_to_le64(x)
-+
-+/** Convert TxPD to little endian format from CPU format */
-+#define endian_convert_TxPD(x);                                         \
-+    {                                                                   \
-+        (x)->TxPktLength = uap_cpu_to_le16((x)->TxPktLength);         \
-+        (x)->TxPktOffset = uap_cpu_to_le32((x)->TxPktOffset);         \
-+        (x)->TxControl = uap_cpu_to_le32((x)->TxControl);              \
-+        (x)->TxPktType = uap_cpu_to_le32((x)->TxPktType);             \
-+    }
-+
-+/** Convert RxPD from little endian format to CPU format */
-+#define endian_convert_RxPD(x);                                       \
-+    {                                                                 \
-+        (x)->RxPktLength = uap_le16_to_cpu((x)->RxPktLength);         \
-+        (x)->RxPktOffset = uap_le32_to_cpu((x)->RxPktOffset);         \
-+    }
-+#else /* BIG_ENDIAN */
-+/** Do nothing */
-+#define uap_le16_to_cpu(x) x
-+/** Do nothing */
-+#define uap_le32_to_cpu(x) x
-+/** Do nothing */
-+#define uap_le64_to_cpu(x) x
-+/** Do nothing */
-+#define uap_cpu_to_le16(x) x
-+/** Do nothing */
-+#define uap_cpu_to_le32(x) x
-+/** Do nothing */
-+#define uap_cpu_to_le64(x) x
-+
-+/** Do nothing */
-+#define endian_convert_TxPD(x)
-+/** Do nothing */
-+#define endian_convert_RxPD(x)
-+#endif /* BIG_ENDIAN */
-+
-+/** Host Command ID : Function initialization */
-+#define HostCmd_CMD_FUNC_INIT                 0x00a9
-+/** Host Command ID : Function shutdown */
-+#define HostCmd_CMD_FUNC_SHUTDOWN             0x00aa
-+
-+/** Host Command id: SYS_INFO  */
-+#define HOST_CMD_APCMD_SYS_INFO               0x00ae
-+/** Host Command id: SYS_RESET  */
-+#define HOST_CMD_APCMD_SYS_RESET              0x00af
-+/** Host Command id: SYS_CONFIGURE  */
-+#define HOST_CMD_APCMD_SYS_CONFIGURE          0x00b0
-+/** Host Command id: BSS_START  */
-+#define HOST_CMD_APCMD_BSS_START              0x00b1
-+/** Host Command id: SYS_STOP  */
-+#define HOST_CMD_APCMD_BSS_STOP               0x00b2
-+/** Host Command id: STA_LIST  */
-+#define HOST_CMD_APCMD_STA_LIST               0x00b3
-+/** Host Command id: STA_FILTER_TABLE  */
-+#define HOST_CMD_APCMD_STA_FILTER_TABLE       0x00b4
-+/** Host Command id: STA_DEAUTH  */
-+#define HOST_CMD_APCMD_STA_DEAUTH             0x00b5
-+/** Host Command id: SOFT_RESET  */
-+#define HOST_CMD_APCMD_SOFT_RESET             0x00d5
-+/** Host Command id: POWER_MGMT_EXT  */
-+#define HOST_CMD_POWER_MGMT_EXT               0x00ef
-+/** Host Command id: SLEEP_CONFIRM*/
-+#define HOST_CMD_SLEEP_CONFIRM              0x00d8
-+
-+/** TLV type : SSID */
-+#define TLV_TYPE_SSID                         0x0000
-+/** TLV type : Rates */
-+#define TLV_TYPE_RATES                                0x0001
-+/** TLV type : PHY DS */
-+#define TLV_TYPE_PHY_DS                               0x0003
-+
-+/** TLV Id : Base id */
-+#define PROPRIETARY_TLV_BASE_ID               0x0100
-+/** TLV Id : AP_MAC_ADDRESS */
-+#define MRVL_AP_MAC_ADDRESS_TLV_ID      (PROPRIETARY_TLV_BASE_ID + 43)
-+/** TLV Id : Beacon period */
-+#define MRVL_BEACON_PERIOD_TLV_ID       (PROPRIETARY_TLV_BASE_ID + 44)
-+/** TLV Id : Dtim period */
-+#define MRVL_DTIM_PERIOD_TLV_ID         (PROPRIETARY_TLV_BASE_ID + 45)
-+/** TLV Id : Basic rates */
-+#define MRVL_BASIC_RATES_TLV_ID         (PROPRIETARY_TLV_BASE_ID + 46)
-+/** TLV Id : Tx Power */
-+#define MRVL_TX_POWER_TLV_ID            (PROPRIETARY_TLV_BASE_ID + 47)
-+/** TLV Id : Broadcast SSID control */
-+#define MRVL_BCAST_SSID_CTL_TLV_ID      (PROPRIETARY_TLV_BASE_ID + 48)
-+/** TLV Id : Preamble control */
-+#define MRVL_PREAMBLE_CTL_TLV_ID        (PROPRIETARY_TLV_BASE_ID + 49)
-+/** TLV Id : Antenna control */
-+#define MRVL_ANTENNA_CTL_TLV_ID         (PROPRIETARY_TLV_BASE_ID + 50)
-+/** TLV Id : RTS threshold */
-+#define MRVL_RTS_THRESHOLD_TLV_ID       (PROPRIETARY_TLV_BASE_ID + 51)
-+/** TLV Id : Radio control */
-+#define MRVL_RADIO_CTL_TLV_ID           (PROPRIETARY_TLV_BASE_ID + 52)
-+/** TLV Id : TX data rate */
-+#define MRVL_TX_DATA_RATE_TLV_ID        (PROPRIETARY_TLV_BASE_ID + 53)
-+/** TLV Id : Packet forward control */
-+#define MRVL_PKT_FWD_CTL_TLV_ID         (PROPRIETARY_TLV_BASE_ID + 54)
-+/** TLV Id : STA info */
-+#define MRVL_STA_INFO_TLV_ID            (PROPRIETARY_TLV_BASE_ID + 55)
-+/** TLV Id : STA MAC address filter */
-+#define MRVL_STA_MAC_ADDR_FILTER_TLV_ID (PROPRIETARY_TLV_BASE_ID + 56)
-+/** TLV Id : STA ageout timer */
-+#define MRVL_STA_AGEOUT_TIMER_TLV_ID    (PROPRIETARY_TLV_BASE_ID + 57)
-+/** TLV Id : Security config */
-+#define MRVL_SECURITY_CFG_TLV_ID        (PROPRIETARY_TLV_BASE_ID + 58)
-+/** TLV Id : WEP KEY */
-+#define MRVL_WEP_KEY_TLV_ID             (PROPRIETARY_TLV_BASE_ID + 59)
-+/** TLV Id : WPA Passphrase */
-+#define MRVL_WPA_PASSPHRASE_TLV_ID      (PROPRIETARY_TLV_BASE_ID + 60)
-+
-+/** Action get */
-+#define ACTION_GET    0
-+/** Action set */
-+#define ACTION_SET    1
-+/** Length of ethernet address */
-+#ifndef       ETH_ALEN
-+#define ETH_ALEN                      6
-+#endif
-+
-+/** HostCmd_DS_GEN */
-+typedef struct
-+{
-+    /** Command */
-+    u16 Command;
-+    /** Size */
-+    u16 Size;
-+    /** Sequence number */
-+    u16 SeqNum;
-+    /** Result */
-+    u16 Result;
-+} __ATTRIB_PACK__ HostCmd_DS_GEN;
-+
-+/** Size of HostCmd_DS_GEN */
-+#define S_DS_GEN    sizeof(HostCmd_DS_GEN)
-+
-+/** _HostCmd_HEADER*/
-+typedef struct
-+{
-+    /** Command Header : Command */
-+    u16 Command;
-+    /** Command Header : Size */
-+    u16 Size;
-+} __ATTRIB_PACK__ HostCmd_HEADER;
-+
-+/** HostCmd_SYS_CONFIG */
-+typedef struct _HostCmd_SYS_CONFIG
-+{
-+        /** CMD Action GET/SET*/
-+    u16 Action;
-+        /** Tlv buffer */
-+    u8 TlvBuffer[0];
-+} __ATTRIB_PACK__ HostCmd_SYS_CONFIG;
-+
-+/** HostCmd_DS_POWER_MGMT_EXT */
-+typedef struct _HostCmd_DS_POWER_MGMT_EXT
-+{
-+    /** CMD Action Get/Set*/
-+    u16 action;
-+    /** power mode */
-+    u16 power_mode;
-+} __ATTRIB_PACK__ HostCmd_DS_POWER_MGMT_EXT;
-+
-+/** _HostCmd_DS_COMMAND*/
-+typedef struct _HostCmd_DS_COMMAND
-+{
-+
-+        /** Command Header : Command */
-+    u16 Command;
-+        /** Command Header : Size */
-+    u16 Size;
-+        /** Command Header : Sequence number */
-+    u16 SeqNum;
-+        /** Command Header : Result */
-+    u16 Result;
-+        /** Command Body */
-+    union
-+    {
-+        HostCmd_SYS_CONFIG sys_config;
-+        HostCmd_DS_POWER_MGMT_EXT pm_cfg;
-+
-+    } params;
-+} __ATTRIB_PACK__ HostCmd_DS_COMMAND;
-+
-+/** MrvlIEtypesHeader_*/
-+typedef struct _MrvlIEtypesHeader
-+{
-+    /** Header type */
-+    u16 Type;
-+    /** Header length */
-+    u16 Len;
-+} __ATTRIB_PACK__ MrvlIEtypesHeader_t;
-+
-+/** MrvlIEtypes_Data_t */
-+typedef struct _MrvlIEtypes_Data_t
-+{
-+    /** Header */
-+    MrvlIEtypesHeader_t Header;
-+    /** Data */
-+    u8 Data[1];
-+} __ATTRIB_PACK__ MrvlIEtypes_Data_t;
-+
-+/** MrvlIEtypes_ChanListParamSet_t */
-+typedef struct _MrvlIEtypes_MacAddr_t
-+{
-+    /** Header */
-+    MrvlIEtypesHeader_t Header;
-+    /** AP MAC address */
-+    u8 ApMacAddr[ETH_ALEN];
-+} __ATTRIB_PACK__ MrvlIEtypes_MacAddr_t;
-+
-+/** Event ID: BSS started */
-+#define MICRO_AP_EV_ID_BSS_START    46
-+
-+/** Event ID: BSS idle event */
-+#define MICRO_AP_EV_BSS_IDLE       67
-+
-+/** Event ID: BSS active event */
-+#define MICRO_AP_EV_BSS_ACTIVE             68
-+
-+/** Event ID: PS_AWAKE */
-+#define EVENT_PS_AWAKE     0x0a
-+
-+/** Event ID: PS_SLEEP */
-+#define EVENT_PS_SLEEP     0x0b
-+
-+/** PS_STATE */
-+typedef enum _PS_STATE
-+{
-+    PS_STATE_AWAKE,
-+    PS_STATE_PRE_SLEEP,
-+    PS_STATE_SLEEP
-+} PS_STATE;
-+
-+/** TLV type: AP Sleep param */
-+#define TLV_TYPE_AP_SLEEP_PARAM         (PROPRIETARY_TLV_BASE_ID + 106)
-+/** TLV type: AP Inactivity Sleep param */
-+#define TLV_TYPE_AP_INACT_SLEEP_PARAM   (PROPRIETARY_TLV_BASE_ID + 107)
-+
-+/** MrvlIEtypes_sleep_param_t */
-+typedef struct _MrvlIEtypes_sleep_param_t
-+{
-+    /** Header */
-+    MrvlIEtypesHeader_t header;
-+    /** control bitmap */
-+    u32 ctrl_bitmap;
-+    /** min_sleep */
-+    u32 min_sleep;
-+    /** max_sleep */
-+    u32 max_sleep;
-+} __ATTRIB_PACK__ MrvlIEtypes_sleep_param_t;
-+
-+/** MrvlIEtypes_inact_sleep_param_t */
-+typedef struct _MrvlIEtypes_inact_sleep_param_t
-+{
-+    /** Header */
-+    MrvlIEtypesHeader_t header;
-+    /** inactivity timeout */
-+    u32 inactivity_to;
-+    /** min_awake */
-+    u32 min_awake;
-+    /** max_awake */
-+    u32 max_awake;
-+} __ATTRIB_PACK__ MrvlIEtypes_inact_sleep_param_t;
-+
-+/** AP_Event */
-+typedef struct _AP_Event
-+{
-+    /** Event ID */
-+    u32 EventId;
-+    /*
-+     * Reserved for STA_ASSOCIATED event and contains
-+     * status information for the MIC_COUNTERMEASURES event.
-+     */
-+    /** Reserved/status */
-+    u16 status;
-+    /** AP MAC address */
-+    u8 MacAddr[ETH_ALEN];
-+} __ATTRIB_PACK__ AP_Event;
-+#endif /* _UAP_FW_H */
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_headers.h compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_headers.h
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_headers.h 1970-01-01 01:00:00.000000000 +0100
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_headers.h     2012-07-31 14:23:04.000000000 +0200
-@@ -0,0 +1,64 @@
-+/** @file uap_headers.h
-+ *
-+ * @brief This file contains all the necessary include file.
-+ *
-+  * Copyright (C) 2008-2009, Marvell International Ltd.
-+ *
-+ * This software file (the "File") is distributed by Marvell International
-+ * Ltd. under the terms of the GNU General Public License Version 2, June 1991
-+ * (the "License").  You may use, redistribute and/or modify this File in
-+ * accordance with the terms and conditions of the License, a copy of which
-+ * is available along with the File in the gpl.txt file or by writing to
-+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ * 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
-+ *
-+ * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
-+ * this warranty disclaimer.
-+ *
-+ */
-+#ifndef _UAP_HEADERS_H
-+#define _UAP_HEADERS_H
-+
-+/* Linux header files */
-+#include    <linux/kernel.h>
-+#include    <linux/module.h>
-+#include    <linux/init.h>
-+#include    <linux/version.h>
-+#include    <linux/param.h>
-+#include    <linux/types.h>
-+#include    <linux/interrupt.h>
-+#include    <linux/proc_fs.h>
-+#include    <linux/kthread.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
-+#include    <linux/semaphore.h>
-+#else
-+#include    <asm/semaphore.h>
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
-+#include    <linux/config.h>
-+#endif
-+
-+/* Net header files */
-+#include    <linux/netdevice.h>
-+#include    <linux/net.h>
-+#include    <linux/skbuff.h>
-+#include    <linux/if_ether.h>
-+#include    <linux/etherdevice.h>
-+#include    <net/sock.h>
-+#include    <linux/netlink.h>
-+#include    <linux/firmware.h>
-+#include    <linux/delay.h>
-+
-+#include    "uap_drv.h"
-+#include    "uap_fw.h"
-+
-+#include <linux/mmc/sdio.h>
-+#include <linux/mmc/sdio_ids.h>
-+#include <linux/mmc/sdio_func.h>
-+#include <linux/mmc/card.h>
-+#include "uap_sdio_mmc.h"
-+
-+#endif /* _UAP_HEADERS_H */
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_main.c compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_main.c
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_main.c    1970-01-01 01:00:00.000000000 +0100
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_main.c        2012-07-31 14:25:28.473230753 +0200
-@@ -0,0 +1,1815 @@
-+/** @file uap_main.c
-+  * @brief This file contains the major functions in uAP
-+  * driver. It includes init, exit etc..
-+  * This file also contains the initialization for SW,
-+  * FW and HW
-+  *
-+  * Copyright (C) 2008-2009, Marvell International Ltd.
-+  *
-+  * This software file (the "File") is distributed by Marvell International
-+  * Ltd. under the terms of the GNU General Public License Version 2, June 1991
-+  * (the "License").  You may use, redistribute and/or modify this File in
-+  * accordance with the terms and conditions of the License, a copy of which
-+  * is available along with the File in the gpl.txt file or by writing to
-+  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+  * 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
-+  *
-+  * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
-+  * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
-+  * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
-+  * this warranty disclaimer.
-+  *
-+  */
-+/**
-+  * @mainpage uAP Linux Driver
-+  *
-+  * @section overview_sec Overview
-+  *
-+  * This is Linux reference driver for Marvell uAP.
-+  *
-+  * @section copyright_sec Copyright
-+  *
-+  * Copyright (C) 2008, Marvell International Ltd.
-+  *
-+  */
-+
-+#include      "uap_headers.h"
-+
-+/**
-+ * the global variable of a pointer to uap_private
-+ * structure variable
-+ */
-+uap_private *uappriv = NULL;
-+#ifdef DEBUG_LEVEL1
-+#define DEFAULT_DEBUG_MASK    (DBG_MSG | DBG_FATAL | DBG_ERROR)
-+u32 drvdbg = DEFAULT_DEBUG_MASK;
-+#endif
-+/** Helper name */
-+char *helper_name = NULL;
-+/** Firmware name */
-+char *fw_name = NULL;
-+
-+/** Semaphore for add/remove card */
-+SEMAPHORE AddRemoveCardSem;
-+
-+/********************************************************
-+              Local Functions
-+********************************************************/
-+/**
-+ *  @brief This function send sleep confirm command to firmware
-+ *
-+ *  @param priv       A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS for success otherwise UAP_STATUS_FAILURE
-+ */
-+static int
-+uap_dnld_sleep_confirm_cmd(uap_private * priv)
-+{
-+    uap_adapter *Adapter = priv->adapter;
-+    int ret = UAP_STATUS_SUCCESS;
-+    ENTER();
-+    PRINTM(CMND, "Sleep confirm\n");
-+    Adapter->cmd_pending = TRUE;
-+    Adapter->cmd_wait_option = HostCmd_OPTION_WAITFORRSP_SLEEPCONFIRM;
-+    ret =
-+        sbi_host_to_card(priv, (u8 *) & Adapter->PSConfirmSleep,
-+                         sizeof(PS_CMD_ConfirmSleep));
-+    if (ret != UAP_STATUS_SUCCESS) {
-+        Adapter->ps_state = PS_STATE_AWAKE;
-+        Adapter->cmd_pending = FALSE;
-+        Adapter->cmd_wait_option = FALSE;
-+    }
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function process sleep confirm resp from firmware
-+ *
-+ *  @param priv       A pointer to uap_private structure
-+ *  @param resp       A pointer to resp buf
-+ *  @param resp_len   resp buf len
-+ *  @return      UAP_STATUS_SUCCESS for success otherwise UAP_STATUS_FAILURE
-+ */
-+int
-+uap_process_sleep_confirm_resp(uap_private * priv, u8 * resp, int resp_len)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    HostCmd_DS_COMMAND *cmd;
-+    uap_adapter *Adapter = priv->adapter;
-+    ENTER();
-+    PRINTM(CMND, "Sleep confirm resp\n");
-+    if (!resp_len) {
-+        PRINTM(ERROR, "Cmd Size is 0\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    cmd = (HostCmd_DS_COMMAND *) resp;
-+    cmd->Result = uap_le16_to_cpu(cmd->Result);
-+    if (cmd->Result != UAP_STATUS_SUCCESS) {
-+        PRINTM(ERROR, "HOST_CMD_APCMD_PS_SLEEP_CONFIRM fail=%x\n", cmd->Result);
-+        ret = -EFAULT;
-+    }
-+  done:
-+    if (ret == UAP_STATUS_SUCCESS)
-+        Adapter->ps_state = PS_STATE_SLEEP;
-+    else
-+        Adapter->ps_state = PS_STATE_AWAKE;
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function checks condition and prepares to
-+ *  send sleep confirm command to firmware if OK.
-+ *
-+ *  @param priv       A pointer to uap_private structure
-+ *  @return           n/a
-+ */
-+static void
-+uap_ps_cond_check(uap_private * priv)
-+{
-+    uap_adapter *Adapter = priv->adapter;
-+
-+    ENTER();
-+    if (!priv->uap_dev.cmd_sent &&
-+        !Adapter->cmd_pending && !Adapter->IntCounter) {
-+        uap_dnld_sleep_confirm_cmd(priv);
-+    } else {
-+        PRINTM(INFO, "Delay Sleep Confirm (%s%s%s)\n",
-+               (priv->uap_dev.cmd_sent) ? "D" : "",
-+               (Adapter->cmd_pending) ? "C" : "",
-+               (Adapter->IntCounter) ? "I" : "");
-+    }
-+    LEAVE();
-+}
-+
-+/**
-+ *  @brief This function add cmd to cmdQ and waiting for response
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param skb           A pointer to the skb for process
-+ *  @param wait_option Wait option
-+ *  @return      UAP_STATUS_SUCCESS for success otherwise UAP_STATUS_FAILURE
-+ */
-+static int
-+uap_process_cmd(uap_private * priv, struct sk_buff *skb, u8 wait_option)
-+{
-+    uap_adapter *Adapter = priv->adapter;
-+    int ret = UAP_STATUS_SUCCESS;
-+    HostCmd_DS_COMMAND *cmd;
-+    u8 *headptr;
-+    ENTER();
-+    if (Adapter->HardwareStatus != HWReady) {
-+        PRINTM(ERROR, "Hw not ready, uap_process_cmd\n");
-+        kfree(skb);
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    skb->cb[0] = wait_option;
-+    headptr = skb->data;
-+    *(u16 *) & headptr[0] = uap_cpu_to_le16(skb->len);
-+    *(u16 *) & headptr[2] = uap_cpu_to_le16(MV_TYPE_CMD);
-+    cmd = (HostCmd_DS_COMMAND *) (skb->data + INTF_HEADER_LEN);
-+    Adapter->SeqNum++;
-+    cmd->SeqNum = uap_cpu_to_le16(Adapter->SeqNum);
-+    PRINTM(CMND, "process_cmd: %x\n", cmd->Command);
-+    DBG_HEXDUMP(CMD_D, "process_cmd", (u8 *) cmd, cmd->Size);
-+    if (!wait_option) {
-+        skb_queue_tail(&priv->adapter->cmd_queue, skb);
-+        wake_up_interruptible(&priv->MainThread.waitQ);
-+        LEAVE();
-+        return ret;
-+    }
-+    if (OS_ACQ_SEMAPHORE_BLOCK(&Adapter->CmdSem)) {
-+        PRINTM(ERROR, "Acquire semaphore error, uap_prepare_cmd\n");
-+        kfree(skb);
-+        LEAVE();
-+        return -EBUSY;
-+    }
-+    skb_queue_tail(&priv->adapter->cmd_queue, skb);
-+    Adapter->CmdWaitQWoken = FALSE;
-+    wake_up_interruptible(&priv->MainThread.waitQ);
-+    /* Sleep until response is generated by FW */
-+    if (wait_option == HostCmd_OPTION_WAITFORRSP_TIMEOUT) {
-+        if (!os_wait_interruptible_timeout
-+            (Adapter->cmdwait_q, Adapter->CmdWaitQWoken, MRVDRV_TIMER_20S)) {
-+            PRINTM(ERROR, "Cmd timeout\n");
-+            Adapter->cmd_pending = FALSE;
-+            ret = -EFAULT;
-+        }
-+    } else
-+        wait_event_interruptible(Adapter->cmdwait_q, Adapter->CmdWaitQWoken);
-+    OS_REL_SEMAPHORE(&Adapter->CmdSem);
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief Inspect the response buffer for pointers to expected TLVs
-+ *
-+ *
-+ *  @param pTlv        Pointer to the start of the TLV buffer to parse
-+ *  @param tlvBufSize  Size of the TLV buffer
-+ *  @param reqTlvType  request tlv's tlvtype
-+ *  @param ppTlv       Output parameter: Pointer to the request TLV if found
-+ *
-+ *  @return            void
-+ */
-+static void
-+uap_get_tlv_ptrs(MrvlIEtypes_Data_t * pTlv, int tlvBufSize,
-+                 u16 reqTlvType, MrvlIEtypes_Data_t ** ppTlv)
-+{
-+    MrvlIEtypes_Data_t *pCurrentTlv;
-+    int tlvBufLeft;
-+    u16 tlvType;
-+    u16 tlvLen;
-+
-+    ENTER();
-+    pCurrentTlv = pTlv;
-+    tlvBufLeft = tlvBufSize;
-+    *ppTlv = NULL;
-+    PRINTM(INFO, "uap_get_tlv: tlvBufSize = %d, reqTlvType=%x\n", tlvBufSize,
-+           reqTlvType);
-+    while (tlvBufLeft >= sizeof(MrvlIEtypesHeader_t)) {
-+        tlvType = uap_le16_to_cpu(pCurrentTlv->Header.Type);
-+        tlvLen = uap_le16_to_cpu(pCurrentTlv->Header.Len);
-+        if (reqTlvType == tlvType)
-+            *ppTlv = (MrvlIEtypes_Data_t *) pCurrentTlv;
-+        if (*ppTlv) {
-+            HEXDUMP("TLV Buf", (u8 *) * ppTlv, tlvLen);
-+            break;
-+        }
-+        tlvBufLeft -= (sizeof(pTlv->Header) + tlvLen);
-+        pCurrentTlv = (MrvlIEtypes_Data_t *) (pCurrentTlv->Data + tlvLen);
-+    }                           /* while */
-+    LEAVE();
-+}
-+
-+/**
-+ *  @brief This function get mac
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS on success, otherwise failure code
-+ */
-+static int
-+uap_get_mac_address(uap_private * priv)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u32 CmdSize;
-+    HostCmd_DS_COMMAND *cmd;
-+    uap_adapter *Adapter = priv->adapter;
-+    struct sk_buff *skb;
-+    MrvlIEtypes_MacAddr_t *pMacAddrTlv;
-+    MrvlIEtypes_Data_t *pTlv;
-+    u16 tlvBufSize;
-+    ENTER();
-+    skb = dev_alloc_skb(MRVDRV_SIZE_OF_CMD_BUFFER);
-+    if (!skb) {
-+        PRINTM(ERROR, "No free skb\n");
-+        ret = -ENOMEM;
-+        goto done;
-+    }
-+    CmdSize =
-+        S_DS_GEN + sizeof(HostCmd_SYS_CONFIG) + sizeof(MrvlIEtypes_MacAddr_t);
-+    cmd = (HostCmd_DS_COMMAND *) (skb->data + INTF_HEADER_LEN);
-+    cmd->Command = uap_cpu_to_le16(HOST_CMD_APCMD_SYS_CONFIGURE);
-+    cmd->Size = uap_cpu_to_le16(CmdSize);
-+    cmd->params.sys_config.Action = uap_cpu_to_le16(ACTION_GET);
-+    pMacAddrTlv =
-+        (MrvlIEtypes_MacAddr_t *) (skb->data + INTF_HEADER_LEN + S_DS_GEN +
-+                                   sizeof(HostCmd_SYS_CONFIG));
-+    pMacAddrTlv->Header.Type = uap_cpu_to_le16(MRVL_AP_MAC_ADDRESS_TLV_ID);
-+    pMacAddrTlv->Header.Len = uap_cpu_to_le16(ETH_ALEN);
-+    skb_put(skb, CmdSize + INTF_HEADER_LEN);
-+    if (UAP_STATUS_SUCCESS !=
-+        uap_process_cmd(priv, skb, HostCmd_OPTION_WAITFORRSP_TIMEOUT)) {
-+        PRINTM(ERROR, "Fail to process cmd SYS_CONFIGURE Query\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    if (!Adapter->CmdSize) {
-+        PRINTM(ERROR, "Cmd Size is 0\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    cmd = (HostCmd_DS_COMMAND *) Adapter->CmdBuf;
-+    cmd->Result = uap_le16_to_cpu(cmd->Result);
-+    if (cmd->Result != UAP_STATUS_SUCCESS) {
-+        PRINTM(ERROR, "uap_get_mac_address fail=%x\n", cmd->Result);
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    pTlv =
-+        (MrvlIEtypes_Data_t *) (Adapter->CmdBuf + S_DS_GEN +
-+                                sizeof(HostCmd_SYS_CONFIG));
-+    tlvBufSize = Adapter->CmdSize - S_DS_GEN - sizeof(HostCmd_SYS_CONFIG);
-+    uap_get_tlv_ptrs(pTlv, tlvBufSize, MRVL_AP_MAC_ADDRESS_TLV_ID,
-+                     (MrvlIEtypes_Data_t **) & pMacAddrTlv);
-+    if (pMacAddrTlv) {
-+        memcpy(priv->uap_dev.netdev->dev_addr, pMacAddrTlv->ApMacAddr,
-+               ETH_ALEN);
-+        HEXDUMP("Original MAC addr", priv->uap_dev.netdev->dev_addr, ETH_ALEN);
-+    }
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function checks the conditions and sends packet to device
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param skb           A pointer to the skb for process
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+uap_process_tx(uap_private * priv, struct sk_buff *skb)
-+{
-+    uap_adapter *Adapter = priv->adapter;
-+    int ret = UAP_STATUS_SUCCESS;
-+    TxPD *pLocalTxPD;
-+    u8 *headptr;
-+    struct sk_buff *newskb;
-+    int newheadlen;
-+    ENTER();
-+    ASSERT(skb);
-+    if (!skb) {
-+        LEAVE();
-+        return UAP_STATUS_FAILURE;
-+    }
-+    if (skb_headroom(skb) < (sizeof(TxPD) + INTF_HEADER_LEN + HEADER_ALIGNMENT)) {
-+        newheadlen = sizeof(TxPD) + INTF_HEADER_LEN + HEADER_ALIGNMENT;
-+        PRINTM(WARN, "Tx: Insufficient skb headroom %d\n", skb_headroom(skb));
-+        /* Insufficient skb headroom - allocate a new skb */
-+        newskb = skb_realloc_headroom(skb, newheadlen);
-+        if (unlikely(newskb == NULL)) {
-+            PRINTM(ERROR, "Tx: Cannot allocate skb\n");
-+            ret = UAP_STATUS_FAILURE;
-+            goto done;
-+        }
-+        kfree_skb(skb);
-+        skb = newskb;
-+        PRINTM(INFO, "new skb headroom %d\n", skb_headroom(skb));
-+    }
-+    /* headptr should be aligned */
-+    headptr = skb->data - sizeof(TxPD) - INTF_HEADER_LEN;
-+    headptr = (u8 *) ((u32) headptr & ~((u32) (HEADER_ALIGNMENT - 1)));
-+
-+    pLocalTxPD = (TxPD *) (headptr + INTF_HEADER_LEN);
-+    memset(pLocalTxPD, 0, sizeof(TxPD));
-+    pLocalTxPD->BssType = PKT_TYPE_MICROAP;
-+    pLocalTxPD->TxPktLength = skb->len;
-+    /* offset of actual data */
-+    pLocalTxPD->TxPktOffset = (long) skb->data - (long) pLocalTxPD;
-+    endian_convert_TxPD(pLocalTxPD);
-+    *(u16 *) & headptr[0] =
-+        uap_cpu_to_le16(skb->len + ((long) skb->data - (long) headptr));
-+    *(u16 *) & headptr[2] = uap_cpu_to_le16(MV_TYPE_DAT);
-+    ret =
-+        sbi_host_to_card(priv, headptr,
-+                         skb->len + ((long) skb->data - (long) headptr));
-+    if (ret) {
-+        PRINTM(ERROR, "uap_process_tx Error: sbi_host_to_card failed: 0x%X\n",
-+               ret);
-+        Adapter->dbg.num_tx_host_to_card_failure++;
-+        goto done;
-+    }
-+    PRINTM(DATA, "Data => FW\n");
-+    DBG_HEXDUMP(DAT_D, "Tx", headptr,
-+                MIN(skb->len + sizeof(TxPD), DATA_DUMP_LEN));
-+  done:
-+    /* Freed skb */
-+    kfree_skb(skb);
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function initializes the adapter structure
-+ *  and set default value to the member of adapter.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+uap_init_sw(uap_private * priv)
-+{
-+    uap_adapter *Adapter = priv->adapter;
-+
-+    ENTER();
-+
-+    if (!(Adapter->CmdBuf = kmalloc(MRVDRV_SIZE_OF_CMD_BUFFER, GFP_KERNEL))) {
-+        PRINTM(INFO, "Failed to allocate command buffer!\n");
-+        LEAVE();
-+        return UAP_STATUS_FAILURE;
-+    }
-+
-+    Adapter->cmd_pending = FALSE;
-+    Adapter->CmdWaitQWoken = FALSE;
-+    Adapter->ps_state = PS_STATE_AWAKE;
-+    Adapter->WakeupTries = 0;
-+
-+    memset(&Adapter->PSConfirmSleep, 0, sizeof(PS_CMD_ConfirmSleep));
-+        /** SDIO header */
-+    Adapter->PSConfirmSleep.SDLen =
-+        uap_cpu_to_le16(sizeof(PS_CMD_ConfirmSleep));
-+    Adapter->PSConfirmSleep.SDType = uap_cpu_to_le16(MV_TYPE_CMD);
-+    Adapter->PSConfirmSleep.SeqNum = 0;
-+    Adapter->PSConfirmSleep.Command = uap_cpu_to_le16(HOST_CMD_SLEEP_CONFIRM);
-+    Adapter->PSConfirmSleep.Size = uap_cpu_to_le16(sizeof(HostCmd_DS_GEN));
-+    Adapter->PSConfirmSleep.Result = 0;
-+
-+    init_waitqueue_head(&Adapter->cmdwait_q);
-+    OS_INIT_SEMAPHORE(&Adapter->CmdSem);
-+
-+    skb_queue_head_init(&Adapter->tx_queue);
-+    skb_queue_head_init(&Adapter->cmd_queue);
-+
-+    /* Status variable */
-+    Adapter->HardwareStatus = HWInitializing;
-+
-+    /* PnP support */
-+    Adapter->SurpriseRemoved = FALSE;
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
-+    Adapter->nl_sk = netlink_kernel_create(NETLINK_MARVELL,
-+                                           NL_MULTICAST_GROUP, NULL,
-+                                           THIS_MODULE);
-+#else
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
-+    Adapter->nl_sk = netlink_kernel_create(NETLINK_MARVELL,
-+                                           NL_MULTICAST_GROUP, NULL, NULL,
-+                                           THIS_MODULE);
-+#else
-+    Adapter->nl_sk = netlink_kernel_create(&init_net, NETLINK_MARVELL,
-+                                           NL_MULTICAST_GROUP, NULL, NULL,
-+                                           THIS_MODULE);
-+#endif
-+#endif
-+    if (!Adapter->nl_sk) {
-+        PRINTM(ERROR,
-+               "Could not initialize netlink event passing mechanism!\n");
-+    }
-+    LEAVE();
-+    return UAP_STATUS_SUCCESS;
-+}
-+
-+/**
-+ *  @brief This function sends FUNC_INIT command to firmware
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS on success, otherwise failure code
-+ */
-+static int
-+uap_func_init(uap_private * priv)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u32 CmdSize;
-+    HostCmd_DS_GEN *cmd;
-+    uap_adapter *Adapter = priv->adapter;
-+    struct sk_buff *skb;
-+    ENTER();
-+    if (Adapter->HardwareStatus != HWReady) {
-+        PRINTM(ERROR, "uap_func_init:Hardware is not ready!\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    skb = dev_alloc_skb(MRVDRV_SIZE_OF_CMD_BUFFER);
-+    if (!skb) {
-+        PRINTM(ERROR, "No free skb\n");
-+        ret = -ENOMEM;
-+        goto done;
-+    }
-+    CmdSize = sizeof(HostCmd_DS_GEN);
-+    cmd = (HostCmd_DS_GEN *) (skb->data + INTF_HEADER_LEN);
-+    cmd->Command = uap_cpu_to_le16(HostCmd_CMD_FUNC_INIT);
-+    cmd->Size = uap_cpu_to_le16(CmdSize);
-+    skb_put(skb, CmdSize + INTF_HEADER_LEN);
-+    PRINTM(CMND, "HostCmd_CMD_FUNC_INIT\n");
-+    if (UAP_STATUS_SUCCESS !=
-+        uap_process_cmd(priv, skb, HostCmd_OPTION_WAITFORRSP_TIMEOUT)) {
-+        PRINTM(ERROR, "Fail to process cmd HostCmd_CMD_FUNC_INIT\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function sends FUNC_SHUTDOWN command to firmware
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS on success, otherwise failure code
-+ */
-+static int __exit
-+uap_func_shutdown(uap_private * priv)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u32 CmdSize;
-+    HostCmd_DS_GEN *cmd;
-+    uap_adapter *Adapter = priv->adapter;
-+    struct sk_buff *skb;
-+    ENTER();
-+    if (Adapter->HardwareStatus != HWReady) {
-+        PRINTM(ERROR, "uap_func_shutdown:Hardware is not ready!\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    skb = dev_alloc_skb(MRVDRV_SIZE_OF_CMD_BUFFER);
-+    if (!skb) {
-+        PRINTM(ERROR, "No free skb\n");
-+        ret = -ENOMEM;
-+        goto done;
-+    }
-+    CmdSize = sizeof(HostCmd_DS_GEN);
-+    cmd = (HostCmd_DS_GEN *) (skb->data + INTF_HEADER_LEN);
-+    cmd->Command = uap_cpu_to_le16(HostCmd_CMD_FUNC_SHUTDOWN);
-+    cmd->Size = uap_cpu_to_le16(CmdSize);
-+    skb_put(skb, CmdSize + INTF_HEADER_LEN);
-+    PRINTM(CMND, "HostCmd_CMD_FUNC_SHUTDOWN\n");
-+    if (UAP_STATUS_SUCCESS !=
-+        uap_process_cmd(priv, skb, HostCmd_OPTION_WAITFORRSP_TIMEOUT)) {
-+        PRINTM(ERROR, "Fail to process cmd HostCmd_CMD_FUNC_SHUTDOWN\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function initializes firmware
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+uap_init_fw(uap_private * priv)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    ENTER();
-+    sbi_disable_host_int(priv);
-+    /* Check if firmware is already running */
-+    if (sbi_check_fw_status(priv, 1) == UAP_STATUS_SUCCESS) {
-+        PRINTM(MSG, "UAP FW already running! Skip FW download\n");
-+    } else {
-+        if ((ret = request_firmware(&priv->fw_helper, helper_name,
-+                                    priv->hotplug_device)) < 0) {
-+            PRINTM(FATAL,
-+                   "request_firmware() failed (helper), error code = %#x\n",
-+                   ret);
-+            goto done;
-+        }
-+
-+        /* Download the helper */
-+        ret = sbi_prog_helper(priv);
-+
-+        if (ret) {
-+            PRINTM(FATAL,
-+                   "Bootloader in invalid state! Helper download failed!\n");
-+            ret = UAP_STATUS_FAILURE;
-+            goto done;
-+        }
-+        if ((ret = request_firmware(&priv->firmware, fw_name,
-+                                    priv->hotplug_device)) < 0) {
-+            PRINTM(FATAL, "request_firmware() failed, error code = %#x\n", ret);
-+            goto done;
-+        }
-+
-+        /* Download the main firmware via the helper firmware */
-+        if (sbi_prog_fw_w_helper(priv)) {
-+            PRINTM(FATAL, "UAP FW download failed!\n");
-+            ret = UAP_STATUS_FAILURE;
-+            goto done;
-+        }
-+        /* Check if the firmware is downloaded successfully or not */
-+        if (sbi_check_fw_status(priv, MAX_FIRMWARE_POLL_TRIES) ==
-+            UAP_STATUS_FAILURE) {
-+            PRINTM(FATAL, "FW failed to be active in time!\n");
-+            ret = UAP_STATUS_FAILURE;
-+            goto done;
-+        }
-+        PRINTM(MSG, "UAP FW is active\n");
-+    }
-+    sbi_enable_host_int(priv);
-+    priv->adapter->HardwareStatus = HWReady;
-+    if (uap_func_init(priv) != UAP_STATUS_SUCCESS) {
-+        ret = UAP_STATUS_FAILURE;
-+        goto done;
-+    }
-+  done:
-+    if (priv->fw_helper)
-+        release_firmware(priv->fw_helper);
-+    if (priv->firmware)
-+        release_firmware(priv->firmware);
-+    LEAVE();
-+    return ret;
-+
-+}
-+
-+/**
-+ *  @brief This function frees the structure of adapter
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      n/a
-+ */
-+static void
-+uap_free_adapter(uap_private * priv)
-+{
-+    uap_adapter *Adapter = priv->adapter;
-+
-+    ENTER();
-+
-+    if (Adapter) {
-+        if ((Adapter->nl_sk) && ((Adapter->nl_sk)->sk_socket)) {
-+            sock_release((Adapter->nl_sk)->sk_socket);
-+            Adapter->nl_sk = NULL;
-+        }
-+        if (Adapter->CmdBuf)
-+            kfree(Adapter->CmdBuf);
-+        skb_queue_purge(&priv->adapter->tx_queue);
-+        skb_queue_purge(&priv->adapter->cmd_queue);
-+        /* Free the adapter object itself */
-+        kfree(Adapter);
-+        priv->adapter = NULL;
-+    }
-+
-+    LEAVE();
-+}
-+
-+/**
-+ *  @brief This function handles the major job in uap driver.
-+ *  it handles the event generated by firmware, rx data received
-+ *  from firmware and tx data sent from kernel.
-+ *
-+ *  @param data    A pointer to uap_thread structure
-+ *  @return        BT_STATUS_SUCCESS
-+ */
-+static int
-+uap_service_main_thread(void *data)
-+{
-+    uap_thread *thread = data;
-+    uap_private *priv = thread->priv;
-+    uap_adapter *Adapter = priv->adapter;
-+    wait_queue_t wait;
-+    u8 ireg = 0;
-+    struct sk_buff *skb;
-+    ENTER();
-+    uap_activate_thread(thread);
-+    init_waitqueue_entry(&wait, current);
-+    current->flags |= PF_NOFREEZE;
-+
-+    for (;;) {
-+        add_wait_queue(&thread->waitQ, &wait);
-+        OS_SET_THREAD_STATE(TASK_INTERRUPTIBLE);
-+        if ((Adapter->WakeupTries) ||
-+            (!Adapter->IntCounter && Adapter->ps_state == PS_STATE_PRE_SLEEP) ||
-+            (!priv->adapter->IntCounter
-+             && (priv->uap_dev.data_sent ||
-+                 skb_queue_empty(&priv->adapter->tx_queue))
-+             && (priv->uap_dev.cmd_sent || Adapter->cmd_pending ||
-+                 skb_queue_empty(&priv->adapter->cmd_queue))
-+            )) {
-+            PRINTM(INFO, "Main: Thread sleeping...\n");
-+            schedule();
-+        }
-+        OS_SET_THREAD_STATE(TASK_RUNNING);
-+        remove_wait_queue(&thread->waitQ, &wait);
-+        if (kthread_should_stop() || Adapter->SurpriseRemoved) {
-+            PRINTM(INFO, "main-thread: break from main thread: "
-+                   "SurpriseRemoved=0x%x\n", Adapter->SurpriseRemoved);
-+            /* Cancel pending command */
-+            if (Adapter->cmd_pending == TRUE) {
-+                /* Wake up cmd Q */
-+                Adapter->CmdWaitQWoken = TRUE;
-+                wake_up_interruptible(&Adapter->cmdwait_q);
-+            }
-+            break;
-+        }
-+
-+        PRINTM(INFO, "Main: Thread waking up...\n");
-+        if (priv->adapter->IntCounter) {
-+            OS_INT_DISABLE;
-+            Adapter->IntCounter = 0;
-+            OS_INT_RESTORE;
-+            sbi_get_int_status(priv, &ireg);
-+        } else if ((priv->adapter->ps_state == PS_STATE_SLEEP) &&
-+                   (!skb_queue_empty(&priv->adapter->cmd_queue) ||
-+                    !skb_queue_empty(&priv->adapter->tx_queue))) {
-+            priv->adapter->WakeupTries++;
-+            PRINTM(CMND, "%lu : Wakeup device...\n", os_time_get());
-+            sbi_wakeup_firmware(priv);
-+            continue;
-+        }
-+        if (Adapter->ps_state == PS_STATE_PRE_SLEEP)
-+            uap_ps_cond_check(priv);
-+
-+        /* The PS state is changed during processing of Sleep Request event
-+           above */
-+        if ((Adapter->ps_state == PS_STATE_SLEEP) ||
-+            (Adapter->ps_state == PS_STATE_PRE_SLEEP))
-+            continue;
-+        /* Execute the next command */
-+        if (!priv->uap_dev.cmd_sent && !Adapter->cmd_pending &&
-+            (Adapter->HardwareStatus == HWReady)) {
-+            if (!skb_queue_empty(&priv->adapter->cmd_queue)) {
-+                skb = skb_dequeue(&priv->adapter->cmd_queue);
-+                if (skb) {
-+                    Adapter->CmdSize = 0;
-+                    Adapter->cmd_pending = TRUE;
-+                    Adapter->cmd_wait_option = skb->cb[0];
-+                    if (sbi_host_to_card(priv, skb->data, skb->len)) {
-+                        PRINTM(ERROR, "Cmd:sbi_host_to_card failed!\n");
-+                        Adapter->cmd_pending = FALSE;
-+                        Adapter->dbg.num_cmd_host_to_card_failure++;
-+                        /* Wake up cmd Q */
-+                        Adapter->CmdWaitQWoken = TRUE;
-+                        wake_up_interruptible(&Adapter->cmdwait_q);
-+                    } else {
-+                        if (Adapter->cmd_wait_option ==
-+                            HostCmd_OPTION_WAITFORSEND) {
-+                            /* Wake up cmd Q */
-+                            Adapter->CmdWaitQWoken = TRUE;
-+                            wake_up_interruptible(&Adapter->cmdwait_q);
-+                            Adapter->cmd_wait_option = FALSE;
-+                        }
-+                    }
-+                    kfree_skb(skb);
-+                }
-+            }
-+        }
-+        if (!priv->uap_dev.data_sent && (Adapter->HardwareStatus == HWReady)) {
-+            if (!skb_queue_empty(&priv->adapter->tx_queue)) {
-+                skb = skb_dequeue(&priv->adapter->tx_queue);
-+                if (skb) {
-+                    if (uap_process_tx(priv, skb)) {
-+                        priv->stats.tx_dropped++;
-+                        priv->stats.tx_errors++;
-+                        os_start_queue(priv);
-+                    } else {
-+                        priv->stats.tx_packets++;
-+                        priv->stats.tx_bytes += skb->len;
-+                    }
-+
-+                }
-+            }
-+        }
-+    }
-+    uap_deactivate_thread(thread);
-+    LEAVE();
-+    return UAP_STATUS_SUCCESS;
-+}
-+
-+/**
-+ *  @brief uap hostcmd ioctl handler
-+ *
-+ *  @param dev      A pointer to net_device structure
-+ *  @param req      A pointer to ifreq structure
-+ *  @return         UAP_STATUS_SUCCESS --success, otherwise fail
-+ */
-+/*********  format of ifr_data *************/
-+/*    buf_len + Hostcmd_body             */
-+/*    buf_len: 4 bytes                     */
-+/*             the length of the buf which */
-+/*             can be used to return data  */
-+/*             to application            */
-+/*    Hostcmd_body                       */
-+/*******************************************/
-+static int
-+uap_hostcmd_ioctl(struct net_device *dev, struct ifreq *req)
-+{
-+    u32 buf_len;
-+    HostCmd_HEADER head;
-+    uap_private *priv = (uap_private *) netdev_priv(dev);
-+    uap_adapter *Adapter = priv->adapter;
-+    int ret = UAP_STATUS_SUCCESS;
-+    struct sk_buff *skb;
-+
-+    ENTER();
-+
-+    /* Sanity check */
-+    if (req->ifr_data == NULL) {
-+        PRINTM(ERROR, "uap_hostcmd_ioctl() corrupt data\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    if (copy_from_user(&buf_len, req->ifr_data, sizeof(buf_len))) {
-+        PRINTM(ERROR, "Copy from user failed\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    memset(&head, 0, sizeof(HostCmd_HEADER));
-+    /* Get the command size from user space */
-+    if (copy_from_user
-+        (&head, req->ifr_data + sizeof(buf_len), sizeof(HostCmd_HEADER))) {
-+        PRINTM(ERROR, "Copy from user failed\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    head.Size = uap_le16_to_cpu(head.Size);
-+    if (head.Size > MRVDRV_SIZE_OF_CMD_BUFFER) {
-+        PRINTM(ERROR, "CmdSize too big=%d\n", head.Size);
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    PRINTM(CMND, "ioctl: hostcmd=%x, size=%d,buf_len=%d\n", head.Command,
-+           head.Size, buf_len);
-+    skb = dev_alloc_skb(head.Size + INTF_HEADER_LEN);
-+    if (!skb) {
-+        PRINTM(ERROR, "No free skb\n");
-+        LEAVE();
-+        return -ENOMEM;
-+    }
-+
-+    /* Get the command from user space */
-+    if (copy_from_user
-+        (skb->data + INTF_HEADER_LEN, req->ifr_data + sizeof(buf_len),
-+         head.Size)) {
-+        PRINTM(ERROR, "Copy from user failed\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    skb_put(skb, head.Size + INTF_HEADER_LEN);
-+    if (UAP_STATUS_SUCCESS !=
-+        uap_process_cmd(priv, skb, HostCmd_OPTION_WAITFORRSP)) {
-+        PRINTM(ERROR, "Fail to process cmd\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    if (!Adapter->CmdSize) {
-+        PRINTM(ERROR, "Cmd Size is 0\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    if (Adapter->CmdSize > buf_len) {
-+        PRINTM(ERROR, "buf_len is too small\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    /* Copy to user */
-+    if (copy_to_user
-+        (req->ifr_data + sizeof(buf_len), Adapter->CmdBuf, Adapter->CmdSize)) {
-+        PRINTM(ERROR, "Copy to user failed!\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief uap power mode ioctl handler
-+ *
-+ *  @param dev      A pointer to net_device structure
-+ *  @param req      A pointer to ifreq structure
-+ *  @return         UAP_STATUS_SUCCESS --success, otherwise fail
-+ */
-+static int
-+uap_power_mode_ioctl(struct net_device *dev, struct ifreq *req)
-+{
-+    ps_mgmt pm_cfg;
-+    int ret = UAP_STATUS_SUCCESS;
-+    uap_private *priv = (uap_private *) netdev_priv(dev);
-+    uap_adapter *Adapter = priv->adapter;
-+    struct sk_buff *skb = NULL;
-+    HostCmd_DS_COMMAND *cmd;
-+    u32 CmdSize;
-+    u8 *tlv = NULL;
-+    MrvlIEtypes_sleep_param_t *sleep_tlv = NULL;
-+    MrvlIEtypes_inact_sleep_param_t *inact_tlv = NULL;
-+    u16 tlv_buf_left = 0;
-+    MrvlIEtypesHeader_t *tlvbuf = NULL;
-+    u16 tlv_type = 0;
-+    u16 tlv_len = 0;
-+
-+    ENTER();
-+
-+    /* Sanity check */
-+    if (req->ifr_data == NULL) {
-+        PRINTM(ERROR, "uap_power_mode_ioctl() corrupt data\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+
-+    memset(&pm_cfg, 0, sizeof(ps_mgmt));
-+    if (copy_from_user(&pm_cfg, req->ifr_data, sizeof(ps_mgmt))) {
-+        PRINTM(ERROR, "Copy from user failed\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    PRINTM(CMND,
-+           "ioctl power: flag=0x%x ps_mode=%d ctrl_bitmap=%d min_sleep=%d max_sleep=%d "
-+           "inact_to=%d min_awake=%d max_awake=%d\n", pm_cfg.flags,
-+           (int) pm_cfg.ps_mode, (int) pm_cfg.sleep_param.ctrl_bitmap,
-+           (int) pm_cfg.sleep_param.min_sleep,
-+           (int) pm_cfg.sleep_param.max_sleep,
-+           (int) pm_cfg.inact_param.inactivity_to,
-+           (int) pm_cfg.inact_param.min_awake,
-+           (int) pm_cfg.inact_param.max_awake);
-+
-+    if (pm_cfg.
-+        flags & ~(PS_FLAG_PS_MODE | PS_FLAG_SLEEP_PARAM |
-+                  PS_FLAG_INACT_SLEEP_PARAM)) {
-+        PRINTM(ERROR, "Invalid parameter: flags = 0x%x\n", pm_cfg.flags);
-+        ret = -EINVAL;
-+        goto done;
-+    }
-+    if (pm_cfg.ps_mode > PS_MODE_INACTIVITY) {
-+        PRINTM(ERROR, "Invalid parameter: ps_mode = %d\n", (int) pm_cfg.flags);
-+        ret = -EINVAL;
-+        goto done;
-+    }
-+
-+    skb = dev_alloc_skb(MRVDRV_SIZE_OF_CMD_BUFFER);
-+    if (!skb) {
-+        PRINTM(INFO, "No free skb\n");
-+        ret = -ENOMEM;
-+        goto done;
-+    }
-+
-+    CmdSize = S_DS_GEN + sizeof(HostCmd_DS_POWER_MGMT_EXT);
-+
-+    cmd = (HostCmd_DS_COMMAND *) (skb->data + INTF_HEADER_LEN);
-+    cmd->Command = uap_cpu_to_le16(HOST_CMD_POWER_MGMT_EXT);
-+    if (!pm_cfg.flags) {
-+        cmd->params.pm_cfg.action = uap_cpu_to_le16(ACTION_GET);
-+    } else {
-+        cmd->params.pm_cfg.action = uap_cpu_to_le16(ACTION_SET);
-+        cmd->params.pm_cfg.power_mode = uap_cpu_to_le16(pm_cfg.ps_mode);
-+        tlv = (u8 *) & cmd->params.pm_cfg + sizeof(HostCmd_DS_POWER_MGMT_EXT);
-+
-+        if ((pm_cfg.ps_mode) && (pm_cfg.flags & PS_FLAG_SLEEP_PARAM)) {
-+            sleep_tlv = (MrvlIEtypes_sleep_param_t *) tlv;
-+            sleep_tlv->header.Type = uap_cpu_to_le16(TLV_TYPE_AP_SLEEP_PARAM);
-+            sleep_tlv->header.Len =
-+                uap_cpu_to_le16(sizeof(MrvlIEtypes_sleep_param_t) -
-+                                sizeof(MrvlIEtypesHeader_t));
-+            sleep_tlv->ctrl_bitmap =
-+                uap_cpu_to_le32(pm_cfg.sleep_param.ctrl_bitmap);
-+            sleep_tlv->min_sleep =
-+                uap_cpu_to_le32(pm_cfg.sleep_param.min_sleep);
-+            sleep_tlv->max_sleep =
-+                uap_cpu_to_le32(pm_cfg.sleep_param.max_sleep);
-+            CmdSize += sizeof(MrvlIEtypes_sleep_param_t);
-+            tlv += sizeof(MrvlIEtypes_sleep_param_t);
-+        }
-+        if ((pm_cfg.ps_mode == PS_MODE_INACTIVITY) &&
-+            (pm_cfg.flags & PS_FLAG_INACT_SLEEP_PARAM)) {
-+            inact_tlv = (MrvlIEtypes_inact_sleep_param_t *) tlv;
-+            inact_tlv->header.Type =
-+                uap_cpu_to_le16(TLV_TYPE_AP_INACT_SLEEP_PARAM);
-+            inact_tlv->header.Len =
-+                uap_cpu_to_le16(sizeof(MrvlIEtypes_inact_sleep_param_t) -
-+                                sizeof(MrvlIEtypesHeader_t));
-+            inact_tlv->inactivity_to =
-+                uap_cpu_to_le32(pm_cfg.inact_param.inactivity_to);
-+            inact_tlv->min_awake =
-+                uap_cpu_to_le32(pm_cfg.inact_param.min_awake);
-+            inact_tlv->max_awake =
-+                uap_cpu_to_le32(pm_cfg.inact_param.max_awake);
-+            CmdSize += sizeof(MrvlIEtypes_inact_sleep_param_t);
-+            tlv += sizeof(MrvlIEtypes_inact_sleep_param_t);
-+        }
-+    }
-+    cmd->Size = uap_cpu_to_le16(CmdSize);
-+    skb_put(skb, CmdSize + INTF_HEADER_LEN);
-+    if (UAP_STATUS_SUCCESS !=
-+        uap_process_cmd(priv, skb, HostCmd_OPTION_WAITFORRSP)) {
-+        PRINTM(ERROR, "Fail to process cmd POWER_MODE\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    if (!Adapter->CmdSize) {
-+        PRINTM(ERROR, "Cmd Size is 0\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    cmd = (HostCmd_DS_COMMAND *) Adapter->CmdBuf;
-+    cmd->Result = uap_le16_to_cpu(cmd->Result);
-+    if (cmd->Result != UAP_STATUS_SUCCESS) {
-+        PRINTM(ERROR, "HOST_CMD_APCMD_POWER_MODE fail=%x\n", cmd->Result);
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    if (pm_cfg.flags) {
-+        Adapter->psmode = uap_le16_to_cpu(cmd->params.pm_cfg.power_mode);
-+    } else {
-+        pm_cfg.flags = PS_FLAG_PS_MODE;
-+        pm_cfg.ps_mode = uap_le16_to_cpu(cmd->params.pm_cfg.power_mode);
-+        tlv_buf_left =
-+            cmd->Size - (sizeof(HostCmd_DS_POWER_MGMT_EXT) + S_DS_GEN);
-+        tlvbuf =
-+            (MrvlIEtypesHeader_t *) ((u8 *) & cmd->params.pm_cfg +
-+                                     sizeof(HostCmd_DS_POWER_MGMT_EXT));
-+        while (tlv_buf_left >= sizeof(MrvlIEtypesHeader_t)) {
-+            tlv_type = uap_le16_to_cpu(tlvbuf->Type);
-+            tlv_len = uap_le16_to_cpu(tlvbuf->Len);
-+            switch (tlv_type) {
-+            case TLV_TYPE_AP_SLEEP_PARAM:
-+                sleep_tlv = (MrvlIEtypes_sleep_param_t *) tlvbuf;
-+                pm_cfg.flags |= PS_FLAG_SLEEP_PARAM;
-+                pm_cfg.sleep_param.ctrl_bitmap =
-+                    uap_le32_to_cpu(sleep_tlv->ctrl_bitmap);
-+                pm_cfg.sleep_param.min_sleep =
-+                    uap_le32_to_cpu(sleep_tlv->min_sleep);
-+                pm_cfg.sleep_param.max_sleep =
-+                    uap_le32_to_cpu(sleep_tlv->max_sleep);
-+                break;
-+            case TLV_TYPE_AP_INACT_SLEEP_PARAM:
-+                inact_tlv = (MrvlIEtypes_inact_sleep_param_t *) tlvbuf;
-+                pm_cfg.flags |= PS_FLAG_INACT_SLEEP_PARAM;
-+                pm_cfg.inact_param.inactivity_to =
-+                    uap_le32_to_cpu(inact_tlv->inactivity_to);
-+                pm_cfg.inact_param.min_awake =
-+                    uap_le32_to_cpu(inact_tlv->min_awake);
-+                pm_cfg.inact_param.max_awake =
-+                    uap_le32_to_cpu(inact_tlv->max_awake);
-+                break;
-+            }
-+            tlv_buf_left -= tlv_len + sizeof(MrvlIEtypesHeader_t);
-+            tlvbuf =
-+                (MrvlIEtypesHeader_t *) ((u8 *) tlvbuf + tlv_len +
-+                                         sizeof(MrvlIEtypesHeader_t));
-+        }
-+        /* Copy to user */
-+        if (copy_to_user(req->ifr_data, &pm_cfg, sizeof(ps_mgmt))) {
-+            PRINTM(ERROR, "Copy to user failed!\n");
-+            LEAVE();
-+            return -EFAULT;
-+        }
-+    }
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function send bss_stop command to firmware
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS on success, otherwise failure code
-+ */
-+static int
-+uap_bss_stop(uap_private * priv)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u32 CmdSize;
-+    HostCmd_DS_GEN *cmd;
-+    uap_adapter *Adapter = priv->adapter;
-+    struct sk_buff *skb;
-+    ENTER();
-+    if (Adapter->HardwareStatus != HWReady) {
-+        PRINTM(ERROR, "uap_bss_stop:Hardware is not ready!\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    skb = dev_alloc_skb(MRVDRV_SIZE_OF_CMD_BUFFER);
-+    if (!skb) {
-+        PRINTM(ERROR, "No free skb\n");
-+        ret = -ENOMEM;
-+        goto done;
-+    }
-+    CmdSize = sizeof(HostCmd_DS_GEN);
-+    cmd = (HostCmd_DS_GEN *) (skb->data + INTF_HEADER_LEN);
-+    cmd->Command = uap_cpu_to_le16(HOST_CMD_APCMD_BSS_STOP);
-+    cmd->Size = uap_cpu_to_le16(CmdSize);
-+    skb_put(skb, CmdSize + INTF_HEADER_LEN);
-+    PRINTM(CMND, "APCMD_BSS_STOP\n");
-+    if (UAP_STATUS_SUCCESS !=
-+        uap_process_cmd(priv, skb, HostCmd_OPTION_WAITFORRSP_TIMEOUT)) {
-+        PRINTM(ERROR, "Fail to process cmd BSS_STOP\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/********************************************************
-+              Global Functions
-+********************************************************/
-+/**
-+ *  @brief This function send soft_reset command to firmware
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS on success, otherwise failure code
-+ */
-+int
-+uap_soft_reset(uap_private * priv)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u32 CmdSize;
-+    HostCmd_DS_GEN *cmd;
-+    uap_adapter *Adapter = priv->adapter;
-+    struct sk_buff *skb;
-+    ENTER();
-+    ret = uap_bss_stop(priv);
-+    if (ret != UAP_STATUS_SUCCESS)
-+        goto done;
-+    skb = dev_alloc_skb(MRVDRV_SIZE_OF_CMD_BUFFER);
-+    if (!skb) {
-+        PRINTM(ERROR, "No free skb\n");
-+        ret = -ENOMEM;
-+        goto done;
-+    }
-+    CmdSize = sizeof(HostCmd_DS_GEN);
-+    cmd = (HostCmd_DS_GEN *) (skb->data + INTF_HEADER_LEN);
-+    cmd->Command = uap_cpu_to_le16(HOST_CMD_APCMD_SOFT_RESET);
-+    cmd->Size = uap_cpu_to_le16(CmdSize);
-+    skb_put(skb, CmdSize + INTF_HEADER_LEN);
-+    PRINTM(CMND, "APCMD_SOFT_RESET\n");
-+    if (UAP_STATUS_SUCCESS !=
-+        uap_process_cmd(priv, skb, HostCmd_OPTION_WAITFORSEND)) {
-+        PRINTM(ERROR, "Fail to process cmd SOFT_RESET\n");
-+        ret = -EFAULT;
-+        goto done;
-+    }
-+    Adapter->SurpriseRemoved = TRUE;
-+    /* delay to allow hardware complete reset */
-+    os_sched_timeout(5);
-+    if (priv->MediaConnected == TRUE) {
-+        os_stop_queue(priv);
-+        os_carrier_off(priv);
-+        priv->MediaConnected = FALSE;
-+    }
-+    Adapter->CmdSize = 0;
-+    Adapter->CmdWaitQWoken = TRUE;
-+    wake_up_interruptible(&Adapter->cmdwait_q);
-+    skb_queue_purge(&priv->adapter->tx_queue);
-+    skb_queue_purge(&priv->adapter->cmd_queue);
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function processes received packet and forwards it
-+ *  to kernel/upper layer
-+ *
-+ *  @param priv    A pointer to uap_private
-+ *  @param skb     A pointer to skb which includes the received packet
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+uap_process_rx_packet(uap_private * priv, struct sk_buff *skb)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    RxPD *pRxPD;
-+    ENTER();
-+    priv->adapter->ps_state = PS_STATE_AWAKE;
-+    pRxPD = (RxPD *) skb->data;
-+    endian_convert_RxPD(pRxPD);
-+    DBG_HEXDUMP(DAT_D, "Rx", skb->data, MIN(skb->len, DATA_DUMP_LEN));
-+    skb_pull(skb, pRxPD->RxPktOffset);
-+    priv->stats.rx_packets++;
-+    priv->stats.rx_bytes += skb->len;
-+    os_upload_rx_packet(priv, skb);
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function opens the network device
-+ *
-+ *  @param dev     A pointer to net_device structure
-+ *  @return        UAP_STATUS_SUCCESS
-+ */
-+static int
-+uap_open(struct net_device *dev)
-+{
-+    uap_private *priv = (uap_private *) (uap_private *) netdev_priv(dev);
-+    uap_adapter *Adapter = priv->adapter;
-+    int i = 0;
-+
-+    ENTER();
-+
-+    /* On some systems the device open handler will be called before HW ready. */
-+    /* Use the following flag check and wait function to work around the issue. */
-+    while ((Adapter->HardwareStatus != HWReady) &&
-+           (i < MAX_WAIT_DEVICE_READY_COUNT)) {
-+        i++;
-+        os_sched_timeout(100);
-+    }
-+    if (i >= MAX_WAIT_DEVICE_READY_COUNT) {
-+        PRINTM(FATAL, "HW not ready, uap_open() return failure\n");
-+        LEAVE();
-+        return UAP_STATUS_FAILURE;
-+    }
-+
-+    if (MODULE_GET == 0)
-+        return UAP_STATUS_FAILURE;
-+
-+    priv->open = TRUE;
-+    if (priv->MediaConnected == TRUE) {
-+        os_carrier_on(priv);
-+        os_start_queue(priv);
-+    } else {
-+        os_stop_queue(priv);
-+        os_carrier_off(priv);
-+    }
-+    LEAVE();
-+    return UAP_STATUS_SUCCESS;
-+}
-+
-+/**
-+ *  @brief This function closes the network device
-+ *
-+ *  @param dev     A pointer to net_device structure
-+ *  @return        UAP_STATUS_SUCCESS
-+ */
-+static int
-+uap_close(struct net_device *dev)
-+{
-+    uap_private *priv = (uap_private *) netdev_priv(dev);
-+
-+    ENTER();
-+    skb_queue_purge(&priv->adapter->tx_queue);
-+    os_stop_queue(priv);
-+    os_carrier_off(priv);
-+
-+    MODULE_PUT;
-+    priv->open = FALSE;
-+    LEAVE();
-+    return UAP_STATUS_SUCCESS;
-+}
-+
-+/**
-+ *  @brief This function returns the network statistics
-+ *
-+ *  @param dev     A pointer to uap_private structure
-+ *  @return        A pointer to net_device_stats structure
-+ */
-+static struct net_device_stats *
-+uap_get_stats(struct net_device *dev)
-+{
-+    uap_private *priv = (uap_private *) netdev_priv(dev);
-+
-+    return &priv->stats;
-+}
-+
-+/**
-+ *  @brief This function sets the MAC address to firmware.
-+ *
-+ *  @param dev     A pointer to uap_private structure
-+ *  @param addr    MAC address to set
-+ *  @return        UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+uap_set_mac_address(struct net_device *dev, void *addr)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    uap_private *priv = (uap_private *) netdev_priv(dev);
-+    struct sockaddr *pHwAddr = (struct sockaddr *) addr;
-+    u32 CmdSize;
-+    HostCmd_DS_COMMAND *cmd;
-+    MrvlIEtypes_MacAddr_t *pMacAddrTlv;
-+    uap_adapter *Adapter = priv->adapter;
-+    struct sk_buff *skb;
-+
-+    ENTER();
-+
-+    /* Dump MAC address */
-+    DBG_HEXDUMP(CMD_D, "Original MAC addr", dev->dev_addr, ETH_ALEN);
-+    DBG_HEXDUMP(CMD_D, "New MAC addr", pHwAddr->sa_data, ETH_ALEN);
-+    if (priv->open && (priv->MediaConnected == TRUE)) {
-+        os_carrier_on(priv);
-+        os_start_queue(priv);
-+    }
-+    skb = dev_alloc_skb(MRVDRV_SIZE_OF_CMD_BUFFER);
-+    if (!skb) {
-+        PRINTM(ERROR, "No free skb\n");
-+        LEAVE();
-+        return -ENOMEM;
-+    }
-+    CmdSize =
-+        S_DS_GEN + sizeof(HostCmd_SYS_CONFIG) + sizeof(MrvlIEtypes_MacAddr_t);
-+    cmd = (HostCmd_DS_COMMAND *) (skb->data + INTF_HEADER_LEN);
-+    cmd->Command = uap_cpu_to_le16(HOST_CMD_APCMD_SYS_CONFIGURE);
-+    cmd->Size = uap_cpu_to_le16(CmdSize);
-+    cmd->params.sys_config.Action = uap_cpu_to_le16(ACTION_SET);
-+    pMacAddrTlv =
-+        (MrvlIEtypes_MacAddr_t *) ((u8 *) cmd + S_DS_GEN +
-+                                   sizeof(HostCmd_SYS_CONFIG));
-+    pMacAddrTlv->Header.Type = uap_cpu_to_le16(MRVL_AP_MAC_ADDRESS_TLV_ID);
-+    pMacAddrTlv->Header.Len = uap_cpu_to_le16(ETH_ALEN);
-+    memcpy(pMacAddrTlv->ApMacAddr, pHwAddr->sa_data, ETH_ALEN);
-+    skb_put(skb, CmdSize + INTF_HEADER_LEN);
-+    PRINTM(CMND, "set_mac_address\n");
-+    if (UAP_STATUS_SUCCESS !=
-+        uap_process_cmd(priv, skb, HostCmd_OPTION_WAITFORRSP_TIMEOUT)) {
-+        PRINTM(ERROR, "Fail to set mac address\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    if (!Adapter->CmdSize) {
-+        PRINTM(ERROR, "Cmd Size is 0\n");
-+        LEAVE();
-+        return -EFAULT;
-+    }
-+    cmd = (HostCmd_DS_COMMAND *) Adapter->CmdBuf;
-+    cmd->Result = uap_cpu_to_le16(cmd->Result);
-+    if (cmd->Result != UAP_STATUS_SUCCESS) {
-+        PRINTM(ERROR, "set mac addrress fail,cmd result=%x\n", cmd->Result);
-+        ret = -EFAULT;
-+    } else
-+        memcpy(dev->dev_addr, pHwAddr->sa_data, ETH_ALEN);
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function handles the timeout of packet
-+ *  transmission
-+ *
-+ *  @param dev     A pointer to net_device structure
-+ *  @return        n/a
-+ */
-+static void
-+uap_tx_timeout(struct net_device *dev)
-+{
-+    uap_private *priv = (uap_private *) netdev_priv(dev);
-+
-+    ENTER();
-+
-+    PRINTM(DATA, "Tx timeout\n");
-+    UpdateTransStart(dev);
-+    priv->num_tx_timeout++;
-+    priv->adapter->IntCounter++;
-+    wake_up_interruptible(&priv->MainThread.waitQ);
-+
-+    LEAVE();
-+}
-+
-+/**
-+ *  @brief This function handles packet transmission
-+ *
-+ *  @param skb     A pointer to sk_buff structure
-+ *  @param dev     A pointer to net_device structure
-+ *  @return        UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+uap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+    uap_private *priv = (uap_private *) netdev_priv(dev);
-+    int ret = UAP_STATUS_SUCCESS;
-+
-+    ENTER();
-+    PRINTM(DATA, "Data <= kernel\n");
-+    DBG_HEXDUMP(DAT_D, "Tx", skb->data, MIN(skb->len, DATA_DUMP_LEN));
-+    /* skb sanity check */
-+    if (!skb->len || (skb->len > MRVDRV_MAXIMUM_ETH_PACKET_SIZE)) {
-+        PRINTM(ERROR, "Tx Error: Bad skb length %d : %d\n", skb->len,
-+               MRVDRV_MAXIMUM_ETH_PACKET_SIZE);
-+        priv->stats.tx_dropped++;
-+        kfree(skb);
-+        goto done;
-+    }
-+    skb_queue_tail(&priv->adapter->tx_queue, skb);
-+    wake_up_interruptible(&priv->MainThread.waitQ);
-+    if (skb_queue_len(&priv->adapter->tx_queue) > TX_HIGH_WATERMARK) {
-+        UpdateTransStart(dev);
-+        os_stop_queue(priv);
-+    }
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief ioctl function - entry point
-+ *
-+ *  @param dev      A pointer to net_device structure
-+ *  @param req      A pointer to ifreq structure
-+ *  @param cmd      command
-+ *  @return         UAP_STATUS_SUCCESS--success, otherwise fail
-+ */
-+static int
-+uap_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+
-+    ENTER();
-+
-+    PRINTM(CMND, "uap_do_ioctl: ioctl cmd = 0x%x\n", cmd);
-+
-+    switch (cmd) {
-+    case UAPHOSTCMD:
-+        ret = uap_hostcmd_ioctl(dev, req);
-+        break;
-+    case UAP_POWER_MODE:
-+        ret = uap_power_mode_ioctl(dev, req);
-+        break;
-+    default:
-+        ret = -EINVAL;
-+        break;
-+    }
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function handles events generated by firmware
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param payload A pointer to payload buffer
-+ *  @param len           Length of the payload
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+uap_process_event(uap_private * priv, u8 * payload, uint len)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    uap_adapter *Adapter = priv->adapter;
-+    struct sk_buff *skb = NULL;
-+    struct nlmsghdr *nlh = NULL;
-+    struct sock *sk = Adapter->nl_sk;
-+    AP_Event *pEvent;
-+
-+    ENTER();
-+    Adapter->ps_state = PS_STATE_AWAKE;
-+    if (len > NL_MAX_PAYLOAD) {
-+        PRINTM(ERROR, "event size is too big!!! len=%d\n", len);
-+        ret = UAP_STATUS_FAILURE;
-+        goto done;
-+    }
-+    pEvent = (AP_Event *) payload;
-+    PRINTM(CMND, "Event: %d\n", pEvent->EventId);
-+    switch (pEvent->EventId) {
-+    case MICRO_AP_EV_ID_BSS_START:
-+        memcpy(priv->uap_dev.netdev->dev_addr, pEvent->MacAddr, ETH_ALEN);
-+        DBG_HEXDUMP(CMD_D, "BSS MAC addr", priv->uap_dev.netdev->dev_addr,
-+                    ETH_ALEN);
-+        break;
-+    case MICRO_AP_EV_BSS_ACTIVE:
-+        // carrier on
-+        priv->MediaConnected = TRUE;
-+        os_carrier_on(priv);
-+        os_start_queue(priv);
-+        break;
-+    case MICRO_AP_EV_BSS_IDLE:
-+        os_stop_queue(priv);
-+        os_carrier_off(priv);
-+        priv->MediaConnected = FALSE;
-+        break;
-+    case EVENT_PS_AWAKE:
-+        PRINTM(CMND, "UAP: PS_AWAKE\n");
-+        Adapter->ps_state = PS_STATE_AWAKE;
-+        Adapter->WakeupTries = 0;
-+        break;
-+    case EVENT_PS_SLEEP:
-+        PRINTM(CMND, "UAP: PS_SLEEP\n");
-+        Adapter->ps_state = PS_STATE_PRE_SLEEP;
-+        break;
-+    default:
-+        break;
-+    }
-+    if ((pEvent->EventId == EVENT_PS_AWAKE) ||
-+        (pEvent->EventId == EVENT_PS_SLEEP))
-+        goto done;
-+    if (sk) {
-+        /* Allocate skb */
-+        if (!(skb = alloc_skb(NLMSG_SPACE(NL_MAX_PAYLOAD), GFP_ATOMIC))) {
-+            PRINTM(ERROR, "Could not allocate skb for netlink.\n");
-+            ret = UAP_STATUS_FAILURE;
-+            goto done;
-+        }
-+        nlh = (struct nlmsghdr *) skb->data;
-+        nlh->nlmsg_len = NLMSG_SPACE(len);
-+
-+        /* From kernel */
-+        nlh->nlmsg_pid = 0;
-+        nlh->nlmsg_flags = 0;
-+
-+        /* Data */
-+        skb_put(skb, nlh->nlmsg_len);
-+        memcpy(NLMSG_DATA(nlh), payload, len);
-+
-+        /* From Kernel */
-+        NETLINK_CB(skb).pid = 0;
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
-+        /* Multicast message */
-+        NETLINK_CB(skb).dst_pid = 0;
-+#endif
-+
-+        /* Multicast group number */
-+        NETLINK_CB(skb).dst_group = NL_MULTICAST_GROUP;
-+
-+        /* Send message */
-+        netlink_broadcast(sk, skb, 0, NL_MULTICAST_GROUP, GFP_KERNEL);
-+
-+        ret = UAP_STATUS_SUCCESS;
-+    } else {
-+        PRINTM(ERROR, "Could not send event through NETLINK. Link down.\n");
-+        ret = UAP_STATUS_FAILURE;
-+    }
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function handles the interrupt. it will change PS
-+ *  state if applicable. it will wake up main_thread to handle
-+ *  the interrupt event as well.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return        n/a
-+ */
-+void
-+uap_interrupt(uap_private * priv)
-+{
-+    ENTER();
-+    priv->adapter->IntCounter++;
-+    priv->adapter->WakeupTries = 0;
-+    PRINTM(INFO, "*\n");
-+    wake_up_interruptible(&priv->MainThread.waitQ);
-+
-+    LEAVE();
-+
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29)
-+/** Network device handlers */
-+static const struct net_device_ops uap_netdev_ops = {
-+    .ndo_open = uap_open,
-+    .ndo_start_xmit = uap_hard_start_xmit,
-+    .ndo_stop = uap_close,
-+    .ndo_do_ioctl = uap_do_ioctl,
-+    .ndo_set_mac_address = uap_set_mac_address,
-+    .ndo_tx_timeout = uap_tx_timeout,
-+    .ndo_get_stats = uap_get_stats,
-+};
-+#endif
-+
-+/**
-+ * @brief This function adds the card. it will probe the
-+ * card, allocate the uap_priv and initialize the device.
-+ *
-+ *  @param card    A pointer to card
-+ *  @return        A pointer to uap_private structure
-+ */
-+uap_private *
-+uap_add_card(void *card)
-+{
-+    struct net_device *dev = NULL;
-+    uap_private *priv = NULL;
-+
-+    ENTER();
-+
-+    if (OS_ACQ_SEMAPHORE_BLOCK(&AddRemoveCardSem))
-+        goto exit_sem_err;
-+
-+    /* Allocate an Ethernet device */
-+    if (!(dev = alloc_etherdev(sizeof(uap_private)))) {
-+        PRINTM(FATAL, "Init ethernet device failed!\n");
-+        goto error;
-+    }
-+    priv = (uap_private *) netdev_priv(dev);
-+
-+    /* Allocate name */
-+    if (dev_alloc_name(dev, "uap%d") < 0) {
-+        PRINTM(ERROR, "Could not allocate device name!\n");
-+        goto error;
-+    }
-+
-+    /* Allocate buffer for uap_adapter */
-+    if (!(priv->adapter = kmalloc(sizeof(uap_adapter), GFP_KERNEL))) {
-+        PRINTM(FATAL, "Allocate buffer for uap_adapter failed!\n");
-+        goto error;
-+    }
-+    memset(priv->adapter, 0, sizeof(uap_adapter));
-+
-+    priv->uap_dev.netdev = dev;
-+    priv->uap_dev.card = card;
-+    priv->MediaConnected = FALSE;
-+    uappriv = priv;
-+    ((struct sdio_mmc_card *) card)->priv = priv;
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
-+    SET_MODULE_OWNER(dev);
-+#endif
-+
-+    /* Setup the OS Interface to our functions */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
-+    dev->open = uap_open;
-+    dev->stop = uap_close;
-+    dev->hard_start_xmit = uap_hard_start_xmit;
-+    dev->tx_timeout = uap_tx_timeout;
-+    dev->get_stats = uap_get_stats;
-+    dev->do_ioctl = uap_do_ioctl;
-+    dev->set_mac_address = uap_set_mac_address;
-+    dev->set_multicast_list = uap_set_multicast_list;
-+#else
-+    dev->netdev_ops = &uap_netdev_ops;
-+#endif
-+    dev->watchdog_timeo = MRVDRV_DEFAULT_WATCHDOG_TIMEOUT;
-+    dev->hard_header_len += sizeof(TxPD) + INTF_HEADER_LEN;
-+    dev->hard_header_len += HEADER_ALIGNMENT;
-+#define NETIF_F_DYNALLOC 16
-+    dev->features |= NETIF_F_DYNALLOC;
-+    dev->flags |= IFF_BROADCAST | IFF_MULTICAST;
-+
-+    /* Init SW */
-+    if (uap_init_sw(priv)) {
-+        PRINTM(FATAL, "Software Init Failed\n");
-+        goto error;
-+    }
-+
-+    PRINTM(INFO, "Starting kthread...\n");
-+    priv->MainThread.priv = priv;
-+    spin_lock_init(&priv->driver_lock);
-+    uap_create_thread(uap_service_main_thread, &priv->MainThread,
-+                      "uap_main_service");
-+    while (priv->MainThread.pid == 0) {
-+        os_sched_timeout(2);
-+    }
-+
-+    /* Register the device */
-+    if (sbi_register_dev(priv) < 0) {
-+        PRINTM(FATAL, "Failed to register uap device!\n");
-+        goto err_registerdev;
-+    }
-+#ifdef FW_DNLD_NEEDED
-+    SET_NETDEV_DEV(dev, priv->hotplug_device);
-+#endif
-+
-+    /* Init FW and HW */
-+    if (uap_init_fw(priv)) {
-+        PRINTM(FATAL, "Firmware Init Failed\n");
-+        goto err_init_fw;
-+    }
-+
-+    priv->uap_dev.cmd_sent = FALSE;
-+    priv->uap_dev.data_sent = FALSE;
-+
-+    /* Get mac address from firmware */
-+    if (uap_get_mac_address(priv)) {
-+        PRINTM(FATAL, "Fail to get mac address\n");
-+        goto err_init_fw;
-+    }
-+    /* Register network device */
-+    if (register_netdev(dev)) {
-+        printk(KERN_ERR "Cannot register network device!\n");
-+        goto err_init_fw;
-+    }
-+#ifdef CONFIG_PROC_FS
-+    uap_proc_entry(priv, dev);
-+    uap_debug_entry(priv, dev);
-+#endif /* CPNFIG_PROC_FS */
-+    OS_REL_SEMAPHORE(&AddRemoveCardSem);
-+
-+    LEAVE();
-+    return priv;
-+  err_init_fw:
-+    sbi_unregister_dev(priv);
-+  err_registerdev:
-+    ((struct sdio_mmc_card *) card)->priv = NULL;
-+    /* Stop the thread servicing the interrupts */
-+    priv->adapter->SurpriseRemoved = TRUE;
-+    wake_up_interruptible(&priv->MainThread.waitQ);
-+    while (priv->MainThread.pid) {
-+        os_sched_timeout(1);
-+    }
-+  error:
-+    if (dev) {
-+        if (dev->reg_state == NETREG_REGISTERED)
-+            unregister_netdev(dev);
-+        if (priv->adapter)
-+            uap_free_adapter(priv);
-+        free_netdev(dev);
-+        uappriv = NULL;
-+    }
-+    OS_REL_SEMAPHORE(&AddRemoveCardSem);
-+  exit_sem_err:
-+    LEAVE();
-+    return NULL;
-+}
-+
-+/**
-+ *  @brief This function removes the card.
-+ *
-+ *  @param card    A pointer to card
-+ *  @return        UAP_STATUS_SUCCESS
-+ */
-+int
-+uap_remove_card(void *card)
-+{
-+    uap_private *priv = uappriv;
-+    uap_adapter *Adapter;
-+    struct net_device *dev;
-+
-+    ENTER();
-+
-+    if (OS_ACQ_SEMAPHORE_BLOCK(&AddRemoveCardSem))
-+        goto exit_sem_err;
-+
-+    if (!priv || !(Adapter = priv->adapter)) {
-+        goto exit_remove;
-+    }
-+    Adapter->SurpriseRemoved = TRUE;
-+    if (Adapter->cmd_pending == TRUE) {
-+        /* Wake up cmd Q */
-+        Adapter->CmdWaitQWoken = TRUE;
-+        wake_up_interruptible(&Adapter->cmdwait_q);
-+    }
-+    dev = priv->uap_dev.netdev;
-+    if (priv->MediaConnected == TRUE) {
-+        os_stop_queue(priv);
-+        os_carrier_off(priv);
-+        priv->MediaConnected = FALSE;
-+    }
-+    Adapter->CmdSize = 0;
-+    Adapter->CmdWaitQWoken = TRUE;
-+    wake_up_interruptible(&Adapter->cmdwait_q);
-+    skb_queue_purge(&priv->adapter->tx_queue);
-+    skb_queue_purge(&priv->adapter->cmd_queue);
-+
-+    /* Disable interrupts on the card */
-+    sbi_disable_host_int(priv);
-+    PRINTM(INFO, "netdev_finish_unregister: %s%s.\n", dev->name,
-+           (dev->features & NETIF_F_DYNALLOC) ? "" : ", old style");
-+    unregister_netdev(dev);
-+    PRINTM(INFO, "Unregister finish\n");
-+    wake_up_interruptible(&priv->MainThread.waitQ);
-+    while (priv->MainThread.pid) {
-+        os_sched_timeout(1);
-+    }
-+
-+    if ((Adapter->nl_sk) && ((Adapter->nl_sk)->sk_socket)) {
-+        sock_release((Adapter->nl_sk)->sk_socket);
-+        Adapter->nl_sk = NULL;
-+    }
-+#ifdef CONFIG_PROC_FS
-+    uap_debug_remove(priv);
-+    uap_proc_remove(priv);
-+#endif
-+    sbi_unregister_dev(priv);
-+    PRINTM(INFO, "Free Adapter\n");
-+    uap_free_adapter(priv);
-+    priv->uap_dev.netdev = NULL;
-+    free_netdev(dev);
-+    uappriv = NULL;
-+
-+  exit_remove:
-+    OS_REL_SEMAPHORE(&AddRemoveCardSem);
-+  exit_sem_err:
-+    LEAVE();
-+    return UAP_STATUS_SUCCESS;
-+}
-+
-+/**
-+ *  @brief This function initializes module.
-+ *
-+ *  @return    UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int __init
-+uap_init_module(void)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    ENTER();
-+
-+    OS_INIT_SEMAPHORE(&AddRemoveCardSem);
-+    ret = sbi_register();
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function cleans module
-+ *
-+ *  @return        n/a
-+ */
-+static void __exit
-+uap_cleanup_module(void)
-+{
-+    ENTER();
-+
-+    if (OS_ACQ_SEMAPHORE_BLOCK(&AddRemoveCardSem))
-+        goto exit_sem_err;
-+
-+    if ((uappriv) && (uappriv->adapter)) {
-+        uap_func_shutdown(uappriv);
-+    }
-+    OS_REL_SEMAPHORE(&AddRemoveCardSem);
-+  exit_sem_err:
-+    sbi_unregister();
-+    LEAVE();
-+}
-+
-+module_init(uap_init_module);
-+module_exit(uap_cleanup_module);
-+module_param(helper_name, charp, 0);
-+MODULE_PARM_DESC(helper_name, "Helper name");
-+module_param(fw_name, charp, 0);
-+MODULE_PARM_DESC(fw_name, "Firmware name");
-+
-+MODULE_DESCRIPTION("M-UAP Driver");
-+MODULE_AUTHOR("Marvell International Ltd.");
-+MODULE_VERSION(DRIVER_VERSION);
-+MODULE_LICENSE("GPL");
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_proc.c compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_proc.c
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_proc.c    1970-01-01 01:00:00.000000000 +0100
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_proc.c        2012-07-31 14:23:04.000000000 +0200
-@@ -0,0 +1,296 @@
-+/** @file uap_proc.c
-+  * @brief This file contains functions for proc file.
-+  *
-+  * Copyright (C) 2008-2009, Marvell International Ltd.
-+  *
-+  * This software file (the "File") is distributed by Marvell International
-+  * Ltd. under the terms of the GNU General Public License Version 2, June 1991
-+  * (the "License").  You may use, redistribute and/or modify this File in
-+  * accordance with the terms and conditions of the License, a copy of which
-+  * is available along with the File in the gpl.txt file or by writing to
-+  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+  * 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
-+  *
-+  * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
-+  * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
-+  * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
-+  * this warranty disclaimer.
-+  *
-+  */
-+#ifdef CONFIG_PROC_FS
-+#include "uap_headers.h"
-+
-+/** /proc directory root */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
-+#define PROC_DIR NULL
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
-+#define PROC_DIR &proc_root
-+#else
-+#define PROC_DIR proc_net
-+#endif
-+
-+/********************************************************
-+              Local Variables
-+********************************************************/
-+
-+/********************************************************
-+              Global Variables
-+********************************************************/
-+
-+/********************************************************
-+              Local Functions
-+********************************************************/
-+
-+/**
-+ *  @brief proc read function
-+ *
-+ *  @param page          pointer to buffer
-+ *  @param start   read data starting position
-+ *  @param offset  offset
-+ *  @param count   counter
-+ *  @param eof     end of file flag
-+ *  @param data    data to output
-+ *  @return      number of output data
-+ */
-+static int
-+uap_proc_read(char *page, char **start, off_t offset,
-+              int count, int *eof, void *data)
-+{
-+    int i;
-+    char *p = page;
-+    struct net_device *netdev = data;
-+    struct netdev_hw_addr *ha;
-+    char fmt[64];
-+    uap_private *priv = (uap_private *) netdev_priv(netdev);
-+
-+    if (offset != 0) {
-+        *eof = 1;
-+        goto exit;
-+    }
-+
-+    strcpy(fmt, DRIVER_VERSION);
-+
-+    p += sprintf(p, "driver_name = " "\"uap\"\n");
-+    p += sprintf(p, "driver_version = %s-(FP%s)", fmt, FPNUM);
-+    p += sprintf(p, "\nInterfaceName=\"%s\"\n", netdev->name);
-+    p += sprintf(p, "State=\"%s\"\n",
-+                 ((priv->MediaConnected ==
-+                   FALSE) ? "Disconnected" : "Connected"));
-+    p += sprintf(p, "MACAddress=\"%02x:%02x:%02x:%02x:%02x:%02x\"\n",
-+                 netdev->dev_addr[0], netdev->dev_addr[1], netdev->dev_addr[2],
-+                 netdev->dev_addr[3], netdev->dev_addr[4], netdev->dev_addr[5]);
-+    i = 0;
-+    netdev_for_each_mc_addr(ha, netdev) {
-+        ++i;
-+    }
-+    p += sprintf(p, "MCCount=\"%d\"\n", i);
-+
-+    /*
-+     * Put out the multicast list
-+     */
-+    i = 0;
-+    netdev_for_each_mc_addr(ha, netdev) {
-+        p += sprintf(p,
-+                     "MCAddr[%d]=\"%02x:%02x:%02x:%02x:%02x:%02x\"\n",
-+                     i++,
-+                     ha->addr[0], ha->addr[1],
-+                     ha->addr[2], ha->addr[3],
-+                     ha->addr[4], ha->addr[5]);
-+    }
-+
-+    p += sprintf(p, "num_tx_bytes = %lu\n", priv->stats.tx_bytes);
-+    p += sprintf(p, "num_rx_bytes = %lu\n", priv->stats.rx_bytes);
-+    p += sprintf(p, "num_tx_pkts = %lu\n", priv->stats.tx_packets);
-+    p += sprintf(p, "num_rx_pkts = %lu\n", priv->stats.rx_packets);
-+    p += sprintf(p, "num_tx_pkts_dropped = %lu\n", priv->stats.tx_dropped);
-+    p += sprintf(p, "num_rx_pkts_dropped = %lu\n", priv->stats.rx_dropped);
-+    p += sprintf(p, "num_tx_pkts_err = %lu\n", priv->stats.tx_errors);
-+    p += sprintf(p, "num_rx_pkts_err = %lu\n", priv->stats.rx_errors);
-+    p += sprintf(p, "num_tx_timeout = %u\n", priv->num_tx_timeout);
-+    p += sprintf(p, "carrier %s\n",
-+                 ((netif_carrier_ok(priv->uap_dev.netdev)) ? "on" : "off"));
-+    p += sprintf(p, "tx queue %s\n",
-+                 ((netif_queue_stopped(priv->uap_dev.netdev)) ? "stopped" :
-+                  "started"));
-+
-+  exit:
-+    return (p - page);
-+}
-+
-+/**
-+ *  @brief hwstatus proc write function
-+ *
-+ *  @param f     file pointer
-+ *  @param buf     pointer to data buffer
-+ *  @param cnt     data number to write
-+ *  @param data    data to write
-+ *  @return      number of data
-+ */
-+static int
-+uap_hwstatus_write(struct file *f, const char *buf, unsigned long cnt,
-+                   void *data)
-+{
-+    struct net_device *netdev = data;
-+    uap_private *priv = (uap_private *) netdev_priv(netdev);
-+    char databuf[10];
-+    int hwstatus;
-+    MODULE_GET;
-+    if (cnt > 10) {
-+        MODULE_PUT;
-+        return cnt;
-+    }
-+    if (copy_from_user(databuf, buf, cnt)) {
-+        MODULE_PUT;
-+        return 0;
-+    }
-+    hwstatus = string_to_number(databuf);
-+    switch (hwstatus) {
-+    case HWReset:
-+        PRINTM(MSG, "reset hw\n");
-+        uap_soft_reset(priv);
-+        priv->adapter->HardwareStatus = HWReset;
-+        break;
-+    default:
-+        break;
-+    }
-+    MODULE_PUT;
-+    return cnt;
-+}
-+
-+/**
-+ *  @brief hwstatus proc read function
-+ *
-+ *  @param page          pointer to buffer
-+ *  @param s       read data starting position
-+ *  @param off     offset
-+ *  @param cnt     counter
-+ *  @param eof     end of file flag
-+ *  @param data    data to output
-+ *  @return      number of output data
-+ */
-+static int
-+uap_hwstatus_read(char *page, char **s, off_t off, int cnt, int *eof,
-+                  void *data)
-+{
-+    char *p = page;
-+    struct net_device *netdev = data;
-+    uap_private *priv = (uap_private *) netdev_priv(netdev);
-+    MODULE_GET;
-+    p += sprintf(p, "%d\n", priv->adapter->HardwareStatus);
-+    MODULE_PUT;
-+    return p - page;
-+}
-+
-+/********************************************************
-+              Global Functions
-+********************************************************/
-+/**
-+ *  @brief create uap proc file
-+ *
-+ *  @param priv          pointer uap_private
-+ *  @param dev     pointer net_device
-+ *  @return      N/A
-+ */
-+void
-+uap_proc_entry(uap_private * priv, struct net_device *dev)
-+{
-+    struct proc_dir_entry *r = PROC_DIR;
-+
-+    PRINTM(INFO, "Creating Proc Interface\n");
-+    /* Check if uap directory already exists */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
-+    for (r = r->subdir; r; r = r->next) {
-+        if (r->namelen && !strcmp("uap", r->name)) {
-+            /* Directory exists */
-+            PRINTM(WARN, "proc directory already exists!\n");
-+            priv->proc_uap = r;
-+            break;
-+        }
-+    }
-+#endif
-+    if (!priv->proc_uap) {
-+        priv->proc_uap = proc_mkdir("uap", PROC_DIR);
-+        if (!priv->proc_uap)
-+            return;
-+        else
-+            atomic_set(&priv->proc_uap->count, 1);
-+    } else {
-+        atomic_inc(&priv->proc_uap->count);
-+    }
-+    priv->proc_entry = proc_mkdir(dev->name, priv->proc_uap);
-+
-+    if (priv->proc_entry) {
-+        r = create_proc_read_entry("info", 0, priv->proc_entry, uap_proc_read,
-+                                   dev);
-+        r = create_proc_entry("hwstatus", 0644, priv->proc_entry);
-+        if (r) {
-+            r->data = dev;
-+            r->read_proc = uap_hwstatus_read;
-+            r->write_proc = uap_hwstatus_write;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
-+            r->owner = THIS_MODULE;
-+#endif
-+        } else
-+            PRINTM(MSG, "Fail to create proc hwstatus\n");
-+    }
-+}
-+
-+/**
-+ *  @brief remove proc file
-+ *
-+ *  @param priv          pointer uap_private
-+ *  @return      N/A
-+ */
-+void
-+uap_proc_remove(uap_private * priv)
-+{
-+    if (priv->proc_uap) {
-+        if (priv->proc_entry) {
-+            remove_proc_entry("info", priv->proc_entry);
-+            remove_proc_entry("hwstatus", priv->proc_entry);
-+        }
-+        remove_proc_entry(priv->uap_dev.netdev->name, priv->proc_uap);
-+        atomic_dec(&priv->proc_uap->count);
-+        if (atomic_read(&(priv->proc_uap->count)) == 0)
-+            remove_proc_entry("uap", PROC_DIR);
-+    }
-+}
-+
-+/**
-+ *  @brief convert string to number
-+ *
-+ *  @param s     pointer to numbered string
-+ *  @return      converted number from string s
-+ */
-+int
-+string_to_number(char *s)
-+{
-+    int r = 0;
-+    int base = 0;
-+    int pn = 1;
-+
-+    if (strncmp(s, "-", 1) == 0) {
-+        pn = -1;
-+        s++;
-+    }
-+    if ((strncmp(s, "0x", 2) == 0) || (strncmp(s, "0X", 2) == 0)) {
-+        base = 16;
-+        s += 2;
-+    } else
-+        base = 10;
-+
-+    for (s = s; *s != 0; s++) {
-+        if ((*s >= '0') && (*s <= '9'))
-+            r = (r * base) + (*s - '0');
-+        else if ((*s >= 'A') && (*s <= 'F'))
-+            r = (r * base) + (*s - 'A' + 10);
-+        else if ((*s >= 'a') && (*s <= 'f'))
-+            r = (r * base) + (*s - 'a' + 10);
-+        else
-+            break;
-+    }
-+
-+    return (r * pn);
-+}
-+
-+#endif
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_sdio_mmc.c compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_sdio_mmc.c
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_sdio_mmc.c        1970-01-01 01:00:00.000000000 +0100
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_sdio_mmc.c    2012-07-31 14:23:04.000000000 +0200
-@@ -0,0 +1,1428 @@
-+/** @file uap_sdio_mmc.c
-+ *  @brief This file contains SDIO IF (interface) module
-+ *  related functions.
-+ *
-+ * Copyright (C) 2007-2009, Marvell International Ltd.
-+ *
-+ * This software file (the "File") is distributed by Marvell International
-+ * Ltd. under the terms of the GNU General Public License Version 2, June 1991
-+ * (the "License").  You may use, redistribute and/or modify this File in
-+ * accordance with the terms and conditions of the License, a copy of which
-+ * is available along with the File in the gpl.txt file or by writing to
-+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ * 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
-+ *
-+ * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
-+ * this warranty disclaimer.
-+ *
-+ */
-+/****************************************************
-+Change log:
-+****************************************************/
-+
-+#include      "uap_sdio_mmc.h"
-+
-+#include <linux/firmware.h>
-+
-+/** define SDIO block size */
-+/* We support up to 480-byte block size due to FW buffer limitation. */
-+#define SD_BLOCK_SIZE         256
-+
-+/** define allocated buffer size */
-+#define ALLOC_BUF_SIZE                (((MAX(MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, \
-+                                      MRVDRV_SIZE_OF_CMD_BUFFER) + INTF_HEADER_LEN \
-+                                      + SD_BLOCK_SIZE - 1) / SD_BLOCK_SIZE) * SD_BLOCK_SIZE)
-+
-+/** Max retry number of CMD53 write */
-+#define MAX_WRITE_IOMEM_RETRY 2
-+
-+/********************************************************
-+              Local Variables
-+********************************************************/
-+
-+/** SDIO Rx unit */
-+static u8 sdio_rx_unit = 0;
-+
-+/**Interrupt status */
-+static u8 sd_ireg = 0;
-+/********************************************************
-+              Global Variables
-+********************************************************/
-+extern u8 *helper_name;
-+extern u8 *fw_name;
-+/** Default helper name */
-+#define DEFAULT_HELPER_NAME "mrvl/helper_sd.bin"
-+/** Default firmware name */
-+#define DEFAULT_FW_NAME "mrvl/sd8688_ap.bin"
-+
-+/********************************************************
-+              Local Functions
-+********************************************************/
-+/**
-+ *  @brief This function reads the IO register.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param reg           register to be read
-+ *  @param dat           A pointer to variable that keeps returned value
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+sbi_read_ioreg(uap_private * priv, u32 reg, u8 * dat)
-+{
-+    struct sdio_mmc_card *card;
-+    int ret = UAP_STATUS_FAILURE;
-+
-+    ENTER();
-+
-+    card = priv->uap_dev.card;
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "sbi_read_ioreg(): card or function is NULL!\n");
-+        goto done;
-+    }
-+
-+    *dat = sdio_readb(card->func, reg, &ret);
-+    if (ret) {
-+        PRINTM(ERROR, "sbi_read_ioreg(): sdio_readb failed! ret=%d\n", ret);
-+        goto done;
-+    }
-+
-+    PRINTM(INFO, "sbi_read_ioreg() priv=%p func=%d reg=%#x dat=%#x\n", priv,
-+           card->func->num, reg, *dat);
-+
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function writes the IO register.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param reg           register to be written
-+ *  @param dat           the value to be written
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+sbi_write_ioreg(uap_private * priv, u32 reg, u8 dat)
-+{
-+    struct sdio_mmc_card *card;
-+    int ret = UAP_STATUS_FAILURE;
-+
-+    ENTER();
-+
-+    card = priv->uap_dev.card;
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "sbi_write_ioreg(): card or function is NULL!\n");
-+        goto done;
-+    }
-+
-+    PRINTM(INFO, "sbi_write_ioreg() priv=%p func=%d reg=%#x dat=%#x\n", priv,
-+           card->func->num, reg, dat);
-+
-+    sdio_writeb(card->func, dat, reg, &ret);
-+    if (ret) {
-+        PRINTM(ERROR, "sbi_write_ioreg(): sdio_readb failed! ret=%d\n", ret);
-+        goto done;
-+    }
-+
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function get rx_unit value
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+sd_get_rx_unit(uap_private * priv)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u8 reg;
-+
-+    ENTER();
-+
-+    ret = sbi_read_ioreg(priv, CARD_RX_UNIT_REG, &reg);
-+    if (ret == UAP_STATUS_SUCCESS)
-+        sdio_rx_unit = reg;
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function reads rx length
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param dat           A pointer to keep returned data
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+sd_read_rx_len(uap_private * priv, u16 * dat)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u8 reg;
-+
-+    ENTER();
-+
-+    ret = sbi_read_ioreg(priv, CARD_RX_LEN_REG, &reg);
-+    if (ret == UAP_STATUS_SUCCESS)
-+        *dat = (u16) reg << sdio_rx_unit;
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function reads fw status registers
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param dat           A pointer to keep returned data
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+sd_read_firmware_status(uap_private * priv, u16 * dat)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u8 fws0;
-+    u8 fws1;
-+
-+    ENTER();
-+
-+    ret = sbi_read_ioreg(priv, CARD_FW_STATUS0_REG, &fws0);
-+    if (ret < 0) {
-+        LEAVE();
-+        return UAP_STATUS_FAILURE;
-+    }
-+
-+    ret = sbi_read_ioreg(priv, CARD_FW_STATUS1_REG, &fws1);
-+    if (ret < 0) {
-+        LEAVE();
-+        return UAP_STATUS_FAILURE;
-+    }
-+
-+    *dat = (((u16) fws1) << 8) | fws0;
-+
-+    LEAVE();
-+    return UAP_STATUS_SUCCESS;
-+}
-+
-+/**
-+ *  @brief This function polls the card status register.
-+ *
-+ *  @param priv       A pointer to uap_private structure
-+ *  @param bits       the bit mask
-+ *  @return           UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+mv_sdio_poll_card_status(uap_private * priv, u8 bits)
-+{
-+    int tries;
-+    u8 cs;
-+
-+    ENTER();
-+
-+    for (tries = 0; tries < MAX_POLL_TRIES; tries++) {
-+        if (sbi_read_ioreg(priv, CARD_STATUS_REG, &cs) < 0)
-+            break;
-+        else if ((cs & bits) == bits) {
-+            LEAVE();
-+            return UAP_STATUS_SUCCESS;
-+        }
-+        udelay(10);
-+    }
-+
-+    PRINTM(WARN, "mv_sdio_poll_card_status failed, tries = %d\n", tries);
-+
-+    LEAVE();
-+    return UAP_STATUS_FAILURE;
-+}
-+
-+/**
-+ *  @brief This function set the sdio bus width.
-+ *
-+ *  @param priv       A pointer to uap_private structure
-+ *  @param mode       1--1 bit mode, 4--4 bit mode
-+ *  @return           UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+#if 0
-+static int
-+sdio_set_bus_width(uap_private * priv, u8 mode)
-+{
-+    ENTER();
-+    LEAVE();
-+    return UAP_STATUS_SUCCESS;
-+}
-+#endif
-+
-+/**
-+ *  @brief This function reads data from the card.
-+ *
-+ *  @param priv       A pointer to uap_private structure
-+ *  @return           UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+sd_card_to_host(uap_private * priv)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u16 buf_len = 0;
-+    int buf_block_len;
-+    int blksz;
-+    struct sk_buff *skb = NULL;
-+    u16 type;
-+    u8 *payload = NULL;
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+
-+    ENTER();
-+
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "card or function is NULL!\n");
-+        ret = UAP_STATUS_FAILURE;
-+        goto exit;
-+    }
-+
-+    /* Read the length of data to be transferred */
-+    ret = sd_read_rx_len(priv, &buf_len);
-+    if (ret < 0) {
-+        PRINTM(ERROR, "card_to_host, read scratch reg failed\n");
-+        ret = UAP_STATUS_FAILURE;
-+        goto exit;
-+    }
-+
-+    /* Allocate buffer */
-+    blksz = SD_BLOCK_SIZE;
-+    buf_block_len = (buf_len + blksz - 1) / blksz;
-+    if (buf_len <= INTF_HEADER_LEN || (buf_block_len * blksz) > ALLOC_BUF_SIZE) {
-+        PRINTM(ERROR, "card_to_host, invalid packet length: %d\n", buf_len);
-+        ret = UAP_STATUS_FAILURE;
-+        goto exit;
-+    }
-+#ifdef PXA3XX_DMA_ALIGN
-+    skb = dev_alloc_skb(buf_block_len * blksz + PXA3XX_DMA_ALIGNMENT);
-+#else
-+    skb = dev_alloc_skb(buf_block_len * blksz);
-+#endif
-+    if (skb == NULL) {
-+        PRINTM(WARN, "No free skb\n");
-+        goto exit;
-+    }
-+#ifdef PXA3XX_DMA_ALIGN
-+    if ((u32) skb->data & (PXA3XX_DMA_ALIGNMENT - 1)) {
-+        skb_put(skb, (u32) skb->data & (PXA3XX_DMA_ALIGNMENT - 1));
-+        skb_pull(skb, (u32) skb->data & (PXA3XX_DMA_ALIGNMENT - 1));
-+    }
-+#endif /* PXA3XX_DMA_ALIGN */
-+
-+    payload = skb->tail;
-+    ret = sdio_readsb(card->func, payload, priv->uap_dev.ioport,
-+                      buf_block_len * blksz);
-+    if (ret < 0) {
-+        PRINTM(ERROR, "card_to_host, read iomem failed: %d\n", ret);
-+        ret = UAP_STATUS_FAILURE;
-+        goto exit;
-+    }
-+    HEXDUMP("SDIO Blk Rd", payload, blksz * buf_block_len);
-+    /*
-+     * This is SDIO specific header
-+     *  u16 length,
-+     *  u16 type (MV_TYPE_DAT = 0, MV_TYPE_CMD = 1, MV_TYPE_EVENT = 3)
-+     */
-+    buf_len = uap_le16_to_cpu(*(u16 *) & payload[0]);
-+    type = uap_le16_to_cpu(*(u16 *) & payload[2]);
-+    switch (type) {
-+    case MV_TYPE_EVENT:
-+        skb_put(skb, buf_len);
-+        skb_pull(skb, INTF_HEADER_LEN);
-+        uap_process_event(priv, skb->data, skb->len);
-+        kfree_skb(skb);
-+        skb = NULL;
-+        break;
-+    case MV_TYPE_CMD:
-+        skb_put(skb, buf_len);
-+        skb_pull(skb, INTF_HEADER_LEN);
-+        priv->adapter->cmd_pending = FALSE;
-+        if (priv->adapter->cmd_wait_option ==
-+            HostCmd_OPTION_WAITFORRSP_SLEEPCONFIRM) {
-+            priv->adapter->cmd_wait_option = FALSE;
-+            uap_process_sleep_confirm_resp(priv, skb->data, skb->len);
-+        } else if (priv->adapter->cmd_wait_option) {
-+            memcpy(priv->adapter->CmdBuf, skb->data, skb->len);
-+            priv->adapter->CmdSize = skb->len;
-+            priv->adapter->cmd_wait_option = FALSE;
-+            priv->adapter->CmdWaitQWoken = TRUE;
-+            wake_up_interruptible(&priv->adapter->cmdwait_q);
-+        }
-+        kfree_skb(skb);
-+        skb = NULL;
-+        break;
-+    case MV_TYPE_DAT:
-+        skb_put(skb, buf_len);
-+        skb_pull(skb, INTF_HEADER_LEN);
-+        uap_process_rx_packet(priv, skb);
-+        break;
-+    default:
-+        priv->stats.rx_errors++;
-+        priv->stats.rx_dropped++;
-+        /* Driver specified event and command resp should be handle here */
-+        PRINTM(INFO, "Unknown PKT type:%d\n", type);
-+        kfree_skb(skb);
-+        skb = NULL;
-+        break;
-+    }
-+  exit:
-+    if (ret) {
-+        if (skb)
-+            kfree_skb(skb);
-+    }
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function enables the host interrupts mask
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param mask          the interrupt mask
-+ *  @return      UAP_STATUS_SUCCESS
-+ */
-+static int
-+enable_host_int_mask(uap_private * priv, u8 mask)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+
-+    ENTER();
-+
-+    /* Simply write the mask to the register */
-+    ret = sbi_write_ioreg(priv, HOST_INT_MASK_REG, mask);
-+
-+    if (ret) {
-+        PRINTM(WARN, "Unable to enable the host interrupt!\n");
-+        ret = UAP_STATUS_FAILURE;
-+    }
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**  @brief This function disables the host interrupts mask.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param mask          the interrupt mask
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+disable_host_int_mask(uap_private * priv, u8 mask)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u8 host_int_mask;
-+
-+    ENTER();
-+
-+    /* Read back the host_int_mask register */
-+    ret = sbi_read_ioreg(priv, HOST_INT_MASK_REG, &host_int_mask);
-+    if (ret) {
-+        ret = UAP_STATUS_FAILURE;
-+        goto done;
-+    }
-+
-+    /* Update with the mask and write back to the register */
-+    host_int_mask &= ~mask;
-+    ret = sbi_write_ioreg(priv, HOST_INT_MASK_REG, host_int_mask);
-+    if (ret < 0) {
-+        PRINTM(WARN, "Unable to diable the host interrupt!\n");
-+        ret = UAP_STATUS_FAILURE;
-+        goto done;
-+    }
-+
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/********************************************************
-+              Global Functions
-+********************************************************/
-+
-+/**
-+ *  @brief This function handles the interrupt.
-+ *
-+ *  @param func          A pointer to sdio_func structure.
-+ *  @return      n/a
-+ */
-+static void
-+sbi_interrupt(struct sdio_func *func)
-+{
-+    struct sdio_mmc_card *card;
-+    uap_private *priv;
-+    u8 ireg = 0;
-+    int ret = UAP_STATUS_SUCCESS;
-+
-+    ENTER();
-+
-+    card = sdio_get_drvdata(func);
-+    if (!card || !card->priv) {
-+        PRINTM(MSG, "%s: sbi_interrupt(%p) card or priv is NULL, card=%p\n",
-+               __FUNCTION__, func, card);
-+        LEAVE();
-+        return;
-+    }
-+    priv = card->priv;
-+#ifdef FW_WAKEUP_TIME
-+    if ((priv->adapter->wt_pwrup_sending != 0L) &&
-+        (priv->adapter->wt_int == 0L))
-+        priv->adapter->wt_int = get_utimeofday();
-+#endif
-+
-+    ireg = sdio_readb(card->func, HOST_INTSTATUS_REG, &ret);
-+    if (ret) {
-+        PRINTM(WARN, "sdio_read_ioreg: read int status register failed\n");
-+        goto done;
-+    }
-+    if (ireg != 0) {
-+        /*
-+         * DN_LD_HOST_INT_STATUS and/or UP_LD_HOST_INT_STATUS
-+         * Clear the interrupt status register and re-enable the interrupt
-+         */
-+        PRINTM(INFO, "sdio_ireg = 0x%x\n", ireg);
-+        sdio_writeb(card->func,
-+                    ~(ireg) & (DN_LD_HOST_INT_STATUS | UP_LD_HOST_INT_STATUS),
-+                    HOST_INTSTATUS_REG, &ret);
-+        if (ret) {
-+            PRINTM(WARN,
-+                   "sdio_write_ioreg: clear int status register failed\n");
-+            goto done;
-+        }
-+    }
-+    OS_INT_DISABLE;
-+    sd_ireg |= ireg;
-+    OS_INT_RESTORE;
-+
-+    uap_interrupt(priv);
-+  done:
-+    LEAVE();
-+}
-+
-+/**
-+ *  @brief This function probe the card
-+ *
-+ *  @param func    A pointer to sdio_func structure
-+ *  @param id    A pointer to structure sd_device_id
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+static int
-+uap_probe(struct sdio_func *func, const struct sdio_device_id *id)
-+{
-+    int ret = UAP_STATUS_FAILURE;
-+    struct sdio_mmc_card *card = NULL;
-+
-+    ENTER();
-+
-+    PRINTM(MSG, "%s: vendor=0x%4.04X device=0x%4.04X class=%d function=%d\n",
-+           __FUNCTION__, func->vendor, func->device, func->class, func->num);
-+
-+    card = kzalloc(sizeof(struct sdio_mmc_card), GFP_KERNEL);
-+    if (!card) {
-+        ret = -ENOMEM;
-+        goto done;
-+    }
-+
-+    card->func = func;
-+
-+    if (!uap_add_card(card)) {
-+        PRINTM(ERROR, "%s: uap_add_callback failed\n", __FUNCTION__);
-+        kfree(card);
-+        ret = UAP_STATUS_FAILURE;
-+        goto done;
-+    }
-+
-+    ret = UAP_STATUS_SUCCESS;
-+
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function removes the card
-+ *
-+ *  @param func    A pointer to sdio_func structure
-+ *  @return        N/A
-+ */
-+static void
-+uap_remove(struct sdio_func *func)
-+{
-+    struct sdio_mmc_card *card;
-+
-+    ENTER();
-+
-+    if (func) {
-+        card = sdio_get_drvdata(func);
-+        if (card) {
-+            uap_remove_card(card);
-+            kfree(card);
-+        }
-+    }
-+
-+    LEAVE();
-+}
-+
-+#ifdef CONFIG_PM
-+/**
-+ *  @brief This function handles client driver suspend
-+ *
-+ *  @param func    A pointer to sdio_func structure
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+uap_suspend(struct sdio_func *func)
-+{
-+    ENTER();
-+    LEAVE();
-+    return 0;
-+}
-+
-+/**
-+ *  @brief This function handles client driver resume
-+ *
-+ *  @param func    A pointer to sdio_func structure
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+uap_resume(struct sdio_func *func)
-+{
-+    ENTER();
-+    LEAVE();
-+    return 0;
-+}
-+#endif
-+
-+/** Device ID for SD8688 */
-+#define  SD_DEVICE_ID_8688_UAP 0x9104
-+/** UAP IDs */
-+static const struct sdio_device_id uap_ids[] = {
-+    {SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SD_DEVICE_ID_8688_UAP)},
-+    {},
-+};
-+
-+MODULE_DEVICE_TABLE(sdio, uap_ids);
-+
-+static struct sdio_driver uap_sdio = {
-+    .name = "uap_sdio",
-+    .id_table = uap_ids,
-+    .probe = uap_probe,
-+    .remove = uap_remove,
-+#ifdef CONFIG_PM
-+/*    .suspend        = uap_suspend, */
-+/*    .resume = uap_resume, */
-+#endif
-+
-+};
-+
-+/**
-+ *  @brief This function registers the IF module in bus driver.
-+ *
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int __init
-+sbi_register()
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+
-+    ENTER();
-+
-+    /* SDIO Driver Registration */
-+    if (sdio_register_driver(&uap_sdio) != 0) {
-+        PRINTM(FATAL, "SDIO Driver Registration Failed \n");
-+        ret = UAP_STATUS_FAILURE;
-+    }
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function de-registers the IF module in bus driver.
-+ *
-+ *  @return      n/a
-+ */
-+void __exit
-+sbi_unregister(void)
-+{
-+    ENTER();
-+
-+    /* SDIO Driver Unregistration */
-+    sdio_unregister_driver(&uap_sdio);
-+
-+    LEAVE();
-+}
-+
-+/**
-+ *  @brief This function checks the interrupt status and handle it accordingly.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param ireg    A pointer to variable that keeps returned value
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+sbi_get_int_status(uap_private * priv, u8 * ireg)
-+{
-+    int ret = UAP_STATUS_SUCCESS;
-+    u8 sdio_ireg = 0;
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+
-+    ENTER();
-+
-+    *ireg = 0;
-+    OS_INT_DISABLE;
-+    sdio_ireg = sd_ireg;
-+    sd_ireg = 0;
-+    OS_INT_RESTORE;
-+
-+    sdio_claim_host(card->func);
-+
-+    if (sdio_ireg & DN_LD_HOST_INT_STATUS) {    /* tx_done INT */
-+        if (!priv->uap_dev.cmd_sent) {  /* tx_done already received */
-+            PRINTM(INFO,
-+                   "warning: tx_done already received: tx_dnld_rdy=0x%x int status=0x%x\n",
-+                   priv->uap_dev.cmd_sent, sdio_ireg);
-+        } else {
-+            priv->uap_dev.cmd_sent = FALSE;
-+            priv->uap_dev.data_sent = FALSE;
-+            if ( (priv->uap_dev.netdev->reg_state == NETREG_REGISTERED) && (skb_queue_len(&priv->adapter->tx_queue) < TX_LOW_WATERMARK)) {
-+                os_start_queue(priv);
-+          }
-+        }
-+    }
-+    if (sdio_ireg & UP_LD_HOST_INT_STATUS) {
-+        sd_card_to_host(priv);
-+    }
-+
-+    *ireg = sdio_ireg;
-+    ret = UAP_STATUS_SUCCESS;
-+    sdio_release_host(card->func);
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function disables the host interrupts.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+sbi_disable_host_int(uap_private * priv)
-+{
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+    int ret;
-+
-+    ENTER();
-+
-+    sdio_claim_host(card->func);
-+    ret = disable_host_int_mask(priv, HIM_DISABLE);
-+    sdio_release_host(card->func);
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function enables the host interrupts.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS
-+ */
-+int
-+sbi_enable_host_int(uap_private * priv)
-+{
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+    int ret;
-+
-+    ENTER();
-+
-+    sdio_claim_host(card->func);
-+    ret = enable_host_int_mask(priv, HIM_ENABLE);
-+    sdio_release_host(card->func);
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function de-registers the device.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS
-+ */
-+int
-+sbi_unregister_dev(uap_private * priv)
-+{
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+
-+    ENTER();
-+
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "Error: card or function is NULL!\n");
-+        goto done;
-+    }
-+
-+    sdio_claim_host(card->func);
-+    sdio_release_irq(card->func);
-+    sdio_disable_func(card->func);
-+    sdio_release_host(card->func);
-+
-+    sdio_set_drvdata(card->func, NULL);
-+
-+  done:
-+    LEAVE();
-+    return UAP_STATUS_SUCCESS;
-+}
-+
-+/**
-+ *  @brief This function registers the device.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+sbi_register_dev(uap_private * priv)
-+{
-+    int ret = UAP_STATUS_FAILURE;
-+    u8 reg;
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+    struct sdio_func *func;
-+
-+    ENTER();
-+
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "Error: card or function is NULL!\n");
-+        goto done;
-+    }
-+
-+    func = card->func;
-+
-+    /* Initialize the private structure */
-+    priv->uap_dev.ioport = 0;
-+
-+    sdio_claim_host(func);
-+
-+    ret = sdio_enable_func(func);
-+    if (ret) {
-+        PRINTM(FATAL, "sdio_enable_func() failed: ret=%d\n", ret);
-+        goto release_host;
-+    }
-+
-+    ret = sdio_claim_irq(func, sbi_interrupt);
-+    if (ret) {
-+        PRINTM(FATAL, "sdio_claim_irq failed: ret=%d\n", ret);
-+        goto disable_func;
-+    }
-+
-+    /* Read the IO port */
-+    ret = sbi_read_ioreg(priv, IO_PORT_0_REG, &reg);
-+    if (ret)
-+        goto release_irq;
-+    else
-+        priv->uap_dev.ioport |= reg;
-+
-+    ret = sbi_read_ioreg(priv, IO_PORT_1_REG, &reg);
-+    if (ret)
-+        goto release_irq;
-+    else
-+        priv->uap_dev.ioport |= (reg << 8);
-+
-+    ret = sbi_read_ioreg(priv, IO_PORT_2_REG, &reg);
-+    if (ret)
-+        goto release_irq;
-+    else
-+        priv->uap_dev.ioport |= (reg << 16);
-+
-+    PRINTM(INFO, "SDIO FUNC #%d IO port: 0x%x\n", func->num,
-+           priv->uap_dev.ioport);
-+
-+    ret = sdio_set_block_size(card->func, SD_BLOCK_SIZE);
-+    if (ret) {
-+        PRINTM(ERROR, "%s: cannot set SDIO block size\n", __FUNCTION__);
-+        ret = UAP_STATUS_FAILURE;
-+        goto release_irq;
-+    }
-+    priv->hotplug_device = &func->dev;
-+
-+    if (helper_name == NULL) {
-+        helper_name = DEFAULT_HELPER_NAME;
-+    }
-+    if (fw_name == NULL) {
-+        fw_name = DEFAULT_FW_NAME;
-+    }
-+    sdio_release_host(func);
-+
-+    sdio_set_drvdata(func, card);
-+
-+    ret = UAP_STATUS_SUCCESS;
-+    goto done;
-+
-+  release_irq:
-+    sdio_release_irq(func);
-+  disable_func:
-+    sdio_disable_func(func);
-+  release_host:
-+    sdio_release_host(func);
-+
-+  done:
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function sends data to the card.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param payload A pointer to the data/cmd buffer
-+ *  @param nb    the length of data/cmd
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+sbi_host_to_card(uap_private * priv, u8 * payload, u16 nb)
-+{
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+    int ret = UAP_STATUS_SUCCESS;
-+    int buf_block_len;
-+    int blksz;
-+    int i = 0;
-+    u8 *buf = NULL;
-+#ifdef PXA3XX_DMA_ALIGN
-+    void *tmpbuf = NULL;
-+    int tmpbufsz;
-+#endif
-+
-+    ENTER();
-+
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "card or function is NULL!\n");
-+        LEAVE();
-+        return UAP_STATUS_FAILURE;
-+    }
-+    buf = payload;
-+#ifdef PXA3XX_DMA_ALIGN
-+    if ((u32) payload & (PXA3XX_DMA_ALIGNMENT - 1)) {
-+        tmpbufsz = ALIGN_SZ(nb, PXA3XX_DMA_ALIGNMENT);
-+        tmpbuf = kmalloc(tmpbufsz, GFP_KERNEL);
-+        memset(tmpbuf, 0, tmpbufsz);
-+        /* Ensure 8-byte aligned CMD buffer */
-+        buf = (u8 *) ALIGN_ADDR(tmpbuf, PXA3XX_DMA_ALIGNMENT);
-+        memcpy(buf, payload, nb);
-+    }
-+#endif
-+    /* Allocate buffer and copy payload */
-+    blksz = SD_BLOCK_SIZE;
-+    buf_block_len = (nb + blksz - 1) / blksz;
-+    sdio_claim_host(card->func);
-+#define MAX_WRITE_IOMEM_RETRY 2
-+    priv->uap_dev.cmd_sent = TRUE;
-+    priv->uap_dev.data_sent = TRUE;
-+    do {
-+        /* Transfer data to card */
-+        ret = sdio_writesb(card->func, priv->uap_dev.ioport, buf,
-+                           buf_block_len * blksz);
-+        if (ret < 0) {
-+            i++;
-+            PRINTM(ERROR, "host_to_card, write iomem (%d) failed: %d\n", i,
-+                   ret);
-+            ret = UAP_STATUS_FAILURE;
-+            if (i > MAX_WRITE_IOMEM_RETRY)
-+                goto exit;
-+        } else {
-+            HEXDUMP("SDIO Blk Wr", payload, nb);
-+        }
-+    } while (ret == UAP_STATUS_FAILURE);
-+  exit:
-+    sdio_release_host(card->func);
-+#ifdef PXA3XX_DMA_ALIGN
-+    if (tmpbuf)
-+        kfree(tmpbuf);
-+#endif
-+    if (ret == UAP_STATUS_FAILURE) {
-+        priv->uap_dev.cmd_sent = FALSE;
-+        priv->uap_dev.data_sent = FALSE;
-+    }
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function reads CIS information.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param cisinfo A pointer to CIS information output buffer
-+ *  @param cislen  A pointer to length of CIS info output buffer
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+#if 0
-+static int
-+sbi_get_cis_info(uap_private * priv, void *cisinfo, int *cislen)
-+{
-+#define CIS_PTR (0x8000)
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+    unsigned int i, cis_ptr = CIS_PTR;
-+    int ret = UAP_STATUS_FAILURE;
-+
-+    ENTER();
-+
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "sbi_get_cis_info(): card or function is NULL!\n");
-+        goto exit;
-+    }
-+#define MAX_SDIO_CIS_INFO_LEN (256)
-+    if (!cisinfo || (*cislen < MAX_SDIO_CIS_INFO_LEN)) {
-+        PRINTM(WARN, "ERROR! get_cis_info: insufficient buffer passed\n");
-+        goto exit;
-+    }
-+
-+    *cislen = MAX_SDIO_CIS_INFO_LEN;
-+
-+    sdio_claim_host(card->func);
-+
-+    PRINTM(INFO, "cis_ptr=%#x\n", cis_ptr);
-+
-+    /* Read the Tuple Data */
-+    for (i = 0; i < *cislen; i++) {
-+        ((unsigned char *) cisinfo)[i] =
-+            sdio_readb(card->func, cis_ptr + i, &ret);
-+        if (ret) {
-+            PRINTM(WARN, "get_cis_info error: ret=%d\n", ret);
-+            ret = UAP_STATUS_FAILURE;
-+            goto done;
-+        }
-+        PRINTM(INFO, "cisinfo[%d]=%#x\n", i, ((unsigned char *) cisinfo)[i]);
-+    }
-+
-+  done:
-+    sdio_release_host(card->func);
-+  exit:
-+    LEAVE();
-+    return ret;
-+}
-+#endif
-+/**
-+ *  @brief This function downloads helper image to the card.
-+ *
-+ *  @param priv       A pointer to uap_private structure
-+ *  @return           UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+sbi_prog_helper(uap_private * priv)
-+{
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+    u8 *helper = NULL;
-+    int helperlen;
-+    int ret = UAP_STATUS_SUCCESS;
-+    void *tmphlprbuf = NULL;
-+    int tmphlprbufsz;
-+    u8 *hlprbuf;
-+    int hlprblknow;
-+    u32 tx_len;
-+#ifdef FW_DOWNLOAD_SPEED
-+    u32 tv1, tv2;
-+#endif
-+
-+    ENTER();
-+
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "sbi_prog_helper(): card or function is NULL!\n");
-+        goto done;
-+    }
-+
-+    if (priv->fw_helper) {
-+        helper = (u8 *) priv->fw_helper->data;
-+        helperlen = priv->fw_helper->size;
-+    } else {
-+        PRINTM(MSG, "No helper image found! Terminating download.\n");
-+        LEAVE();
-+        return UAP_STATUS_FAILURE;
-+    }
-+
-+    PRINTM(INFO, "Downloading helper image (%d bytes), block size %d bytes\n",
-+           helperlen, SD_BLOCK_SIZE);
-+
-+#ifdef FW_DOWNLOAD_SPEED
-+    tv1 = get_utimeofday();
-+#endif
-+
-+#ifdef PXA3XX_DMA_ALIGN
-+    tmphlprbufsz = ALIGN_SZ(UAP_UPLD_SIZE, PXA3XX_DMA_ALIGNMENT);
-+#else /* !PXA3XX_DMA_ALIGN */
-+    tmphlprbufsz = UAP_UPLD_SIZE;
-+#endif /* !PXA3XX_DMA_ALIGN */
-+    tmphlprbuf = kmalloc(tmphlprbufsz, GFP_KERNEL);
-+    if (!tmphlprbuf) {
-+        PRINTM(ERROR,
-+               "Unable to allocate buffer for helper. Terminating download\n");
-+        ret = UAP_STATUS_FAILURE;
-+        goto done;
-+    }
-+    memset(tmphlprbuf, 0, tmphlprbufsz);
-+#ifdef PXA3XX_DMA_ALIGN
-+    hlprbuf = (u8 *) ALIGN_ADDR(tmphlprbuf, PXA3XX_DMA_ALIGNMENT);
-+#else /* !PXA3XX_DMA_ALIGN */
-+    hlprbuf = (u8 *) tmphlprbuf;
-+#endif /* !PXA3XX_DMA_ALIGN */
-+
-+    sdio_claim_host(card->func);
-+
-+    /* Perform helper data transfer */
-+    tx_len = (FIRMWARE_TRANSFER_NBLOCK * SD_BLOCK_SIZE) - INTF_HEADER_LEN;
-+    hlprblknow = 0;
-+    do {
-+        /* The host polls for the DN_LD_CARD_RDY and CARD_IO_READY bits */
-+        ret = mv_sdio_poll_card_status(priv, CARD_IO_READY | DN_LD_CARD_RDY);
-+        if (ret < 0) {
-+            PRINTM(FATAL, "Helper download poll status timeout @ %d\n",
-+                   hlprblknow);
-+            goto done;
-+        }
-+
-+        /* More data? */
-+        if (hlprblknow >= helperlen)
-+            break;
-+
-+        /* Set blocksize to transfer - checking for last block */
-+        if (helperlen - hlprblknow < tx_len)
-+            tx_len = helperlen - hlprblknow;
-+
-+        /* Set length to the 4-byte header */
-+        *(u32 *) hlprbuf = uap_cpu_to_le32(tx_len);
-+
-+        /* Copy payload to buffer */
-+        memcpy(&hlprbuf[INTF_HEADER_LEN], &helper[hlprblknow], tx_len);
-+
-+        PRINTM(INFO, ".");
-+
-+        /* Send data */
-+        ret = sdio_writesb(card->func, priv->uap_dev.ioport,
-+                           hlprbuf, FIRMWARE_TRANSFER_NBLOCK * SD_BLOCK_SIZE);
-+
-+        if (ret < 0) {
-+            PRINTM(FATAL, "IO error during helper download @ %d\n", hlprblknow);
-+            goto done;
-+        }
-+
-+        hlprblknow += tx_len;
-+    } while (TRUE);
-+
-+#ifdef FW_DOWNLOAD_SPEED
-+    tv2 = get_utimeofday();
-+    PRINTM(INFO, "helper: %ld.%03ld.%03ld ", tv1 / 1000000,
-+           (tv1 % 1000000) / 1000, tv1 % 1000);
-+    PRINTM(INFO, " -> %ld.%03ld.%03ld ", tv2 / 1000000, (tv2 % 1000000) / 1000,
-+           tv2 % 1000);
-+    tv2 -= tv1;
-+    PRINTM(INFO, " == %ld.%03ld.%03ld\n", tv2 / 1000000, (tv2 % 1000000) / 1000,
-+           tv2 % 1000);
-+#endif
-+
-+    /* Write last EOF data */
-+    PRINTM(INFO, "\nTransferring helper image EOF block\n");
-+    memset(hlprbuf, 0x0, SD_BLOCK_SIZE);
-+    ret = sdio_writesb(card->func, priv->uap_dev.ioport,
-+                       hlprbuf, SD_BLOCK_SIZE);
-+
-+    if (ret < 0) {
-+        PRINTM(FATAL, "IO error in writing helper image EOF block\n");
-+        goto done;
-+    }
-+
-+    ret = UAP_STATUS_SUCCESS;
-+
-+  done:
-+    sdio_release_host(card->func);
-+    if (tmphlprbuf)
-+        kfree(tmphlprbuf);
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function downloads firmware image to the card.
-+ *
-+ *  @param priv       A pointer to uap_private structure
-+ *  @return           UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+sbi_prog_fw_w_helper(uap_private * priv)
-+{
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+    u8 *firmware = NULL;
-+    int firmwarelen;
-+    u8 base0;
-+    u8 base1;
-+    int ret = UAP_STATUS_SUCCESS;
-+    int offset;
-+    void *tmpfwbuf = NULL;
-+    int tmpfwbufsz;
-+    u8 *fwbuf;
-+    u16 len;
-+    int txlen = 0;
-+    int tx_blocks = 0;
-+    int i = 0;
-+    int tries = 0;
-+#ifdef FW_DOWNLOAD_SPEED
-+    u32 tv1, tv2;
-+#endif
-+
-+    ENTER();
-+
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "sbi_prog_fw_w_helper(): card or function is NULL!\n");
-+        goto done;
-+    }
-+
-+    if (priv->firmware) {
-+        firmware = (u8 *) priv->firmware->data;
-+        firmwarelen = priv->firmware->size;
-+    } else {
-+        PRINTM(MSG, "No firmware image found! Terminating download.\n");
-+        LEAVE();
-+        return UAP_STATUS_FAILURE;
-+    }
-+
-+    PRINTM(INFO, "Downloading FW image (%d bytes)\n", firmwarelen);
-+
-+#ifdef FW_DOWNLOAD_SPEED
-+    tv1 = get_utimeofday();
-+#endif
-+
-+#ifdef PXA3XX_DMA_ALIGN
-+    tmpfwbufsz = ALIGN_SZ(UAP_UPLD_SIZE, PXA3XX_DMA_ALIGNMENT);
-+#else /* PXA3XX_DMA_ALIGN */
-+    tmpfwbufsz = UAP_UPLD_SIZE;
-+#endif /* PXA3XX_DMA_ALIGN */
-+    tmpfwbuf = kmalloc(tmpfwbufsz, GFP_KERNEL);
-+    if (!tmpfwbuf) {
-+        PRINTM(ERROR,
-+               "Unable to allocate buffer for firmware. Terminating download.\n");
-+        ret = UAP_STATUS_FAILURE;
-+        goto done;
-+    }
-+    memset(tmpfwbuf, 0, tmpfwbufsz);
-+#ifdef PXA3XX_DMA_ALIGN
-+    /* Ensure 8-byte aligned firmware buffer */
-+    fwbuf = (u8 *) ALIGN_ADDR(tmpfwbuf, PXA3XX_DMA_ALIGNMENT);
-+#else /* PXA3XX_DMA_ALIGN */
-+    fwbuf = (u8 *) tmpfwbuf;
-+#endif /* PXA3XX_DMA_ALIGN */
-+
-+    sdio_claim_host(card->func);
-+
-+    /* Perform firmware data transfer */
-+    offset = 0;
-+    do {
-+        /* The host polls for the DN_LD_CARD_RDY and CARD_IO_READY bits */
-+        ret = mv_sdio_poll_card_status(priv, CARD_IO_READY | DN_LD_CARD_RDY);
-+        if (ret < 0) {
-+            PRINTM(FATAL, "FW download with helper poll status timeout @ %d\n",
-+                   offset);
-+            goto done;
-+        }
-+
-+        /* More data? */
-+        if (offset >= firmwarelen)
-+            break;
-+
-+        for (tries = 0; tries < MAX_POLL_TRIES; tries++) {
-+            if ((ret = sbi_read_ioreg(priv, HOST_F1_RD_BASE_0, &base0)) < 0) {
-+                PRINTM(WARN, "Dev BASE0 register read failed:"
-+                       " base0=0x%04X(%d). Terminating download.\n", base0,
-+                       base0);
-+                ret = UAP_STATUS_FAILURE;
-+                goto done;
-+            }
-+            if ((ret = sbi_read_ioreg(priv, HOST_F1_RD_BASE_1, &base1)) < 0) {
-+                PRINTM(WARN, "Dev BASE1 register read failed:"
-+                       " base1=0x%04X(%d). Terminating download.\n", base1,
-+                       base1);
-+                ret = UAP_STATUS_FAILURE;
-+                goto done;
-+            }
-+            len = (((u16) base1) << 8) | base0;
-+
-+            /* For SD8688 wait until the length is not 0, 1 or 2 before
-+               downloading the first FW block, since BOOT code writes the
-+               register to indicate the helper/FW download winner, the value
-+               could be 1 or 2 (Func1 or Func2). */
-+            if ((len && offset) || (len > 2))
-+                break;
-+            udelay(10);
-+        }
-+
-+        if (len == 0)
-+            break;
-+        else if (len > UAP_UPLD_SIZE) {
-+            PRINTM(FATAL, "FW download failure @ %d, invalid length %d\n",
-+                   offset, len);
-+            ret = UAP_STATUS_FAILURE;
-+            goto done;
-+        }
-+
-+        txlen = len;
-+
-+        if (len & BIT(0)) {
-+            i++;
-+            if (i > MAX_WRITE_IOMEM_RETRY) {
-+                PRINTM(FATAL,
-+                       "FW download failure @ %d, over max retry count\n",
-+                       offset);
-+                ret = UAP_STATUS_FAILURE;
-+                goto done;
-+            }
-+            PRINTM(ERROR, "FW CRC error indicated by the helper:"
-+                   " len = 0x%04X, txlen = %d\n", len, txlen);
-+            len &= ~BIT(0);
-+            /* Setting this to 0 to resend from same offset */
-+            txlen = 0;
-+        } else {
-+            i = 0;
-+
-+            /* Set blocksize to transfer - checking for last block */
-+            if (firmwarelen - offset < txlen) {
-+                txlen = firmwarelen - offset;
-+            }
-+            PRINTM(INFO, ".");
-+
-+            tx_blocks = (txlen + SD_BLOCK_SIZE - 1) / SD_BLOCK_SIZE;
-+
-+            /* Copy payload to buffer */
-+            memcpy(fwbuf, &firmware[offset], txlen);
-+        }
-+
-+        /* Send data */
-+        ret = sdio_writesb(card->func, priv->uap_dev.ioport,
-+                           fwbuf, tx_blocks * SD_BLOCK_SIZE);
-+
-+        if (ret < 0) {
-+            PRINTM(ERROR, "FW download, write iomem (%d) failed @ %d\n", i,
-+                   offset);
-+            if (sbi_write_ioreg(priv, CONFIGURATION_REG, 0x04) < 0) {
-+                PRINTM(ERROR, "write ioreg failed (CFG)\n");
-+            }
-+        }
-+
-+        offset += txlen;
-+    } while (TRUE);
-+
-+    PRINTM(INFO, "\nFW download over, size %d bytes\n", offset);
-+
-+    ret = UAP_STATUS_SUCCESS;
-+  done:
-+#ifdef FW_DOWNLOAD_SPEED
-+    tv2 = get_utimeofday();
-+    PRINTM(INFO, "FW: %ld.%03ld.%03ld ", tv1 / 1000000,
-+           (tv1 % 1000000) / 1000, tv1 % 1000);
-+    PRINTM(INFO, " -> %ld.%03ld.%03ld ", tv2 / 1000000,
-+           (tv2 % 1000000) / 1000, tv2 % 1000);
-+    tv2 -= tv1;
-+    PRINTM(INFO, " == %ld.%03ld.%03ld\n", tv2 / 1000000,
-+           (tv2 % 1000000) / 1000, tv2 % 1000);
-+#endif
-+    sdio_release_host(card->func);
-+    if (tmpfwbuf)
-+        kfree(tmpfwbuf);
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function checks if the firmware is ready to accept
-+ *  command or not.
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param pollnum Poll number
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+sbi_check_fw_status(uap_private * priv, int pollnum)
-+{
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+    int ret = UAP_STATUS_SUCCESS;
-+    u16 firmwarestat;
-+    int tries;
-+
-+    ENTER();
-+
-+    sdio_claim_host(card->func);
-+
-+    /* Wait for firmware initialization event */
-+    for (tries = 0; tries < pollnum; tries++) {
-+        if ((ret = sd_read_firmware_status(priv, &firmwarestat)) < 0)
-+            continue;
-+        if (firmwarestat == FIRMWARE_READY) {
-+            ret = UAP_STATUS_SUCCESS;
-+            break;
-+        } else {
-+            mdelay(10);
-+            ret = UAP_STATUS_FAILURE;
-+        }
-+    }
-+
-+    if (ret < 0)
-+        goto done;
-+
-+    ret = UAP_STATUS_SUCCESS;
-+    sd_get_rx_unit(priv);
-+
-+  done:
-+    sdio_release_host(card->func);
-+
-+    LEAVE();
-+    return ret;
-+}
-+
-+/**
-+ *  @brief This function set bus clock on/off
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @param option    TRUE--on , FALSE--off
-+ *  @return      UAP_STATUS_SUCCESS
-+ */
-+#if 0
-+static int
-+sbi_set_bus_clock(uap_private * priv, u8 option)
-+{
-+    ENTER();
-+    LEAVE();
-+    return UAP_STATUS_SUCCESS;
-+}
-+#endif
-+
-+/**
-+ *  @brief This function wakeup firmware
-+ *
-+ *  @param priv    A pointer to uap_private structure
-+ *  @return      UAP_STATUS_SUCCESS or UAP_STATUS_FAILURE
-+ */
-+int
-+sbi_wakeup_firmware(uap_private * priv)
-+{
-+    struct sdio_mmc_card *card = priv->uap_dev.card;
-+    int ret = UAP_STATUS_SUCCESS;
-+
-+    ENTER();
-+
-+    if (!card || !card->func) {
-+        PRINTM(ERROR, "card or function is NULL!\n");
-+        LEAVE();
-+        return UAP_STATUS_FAILURE;
-+    }
-+    sdio_claim_host(card->func);
-+    sdio_writeb(card->func, HOST_POWER_UP, CONFIGURATION_REG, &ret);
-+    sdio_release_host(card->func);
-+    LEAVE();
-+    return ret;
-+}
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_sdio_mmc.h compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_sdio_mmc.h
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/libertas_uap/uap_sdio_mmc.h        1970-01-01 01:00:00.000000000 +0100
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/libertas_uap/uap_sdio_mmc.h    2012-07-31 14:23:04.000000000 +0200
-@@ -0,0 +1,136 @@
-+/** @file uap_sdio_mmc.h
-+ *  @brief This file contains SDIO IF (interface) module
-+ *  related macros, enum, and structure.
-+ *
-+ * Copyright (C) 2007-2009, Marvell International Ltd.
-+ *
-+ * This software file (the "File") is distributed by Marvell International
-+ * Ltd. under the terms of the GNU General Public License Version 2, June 1991
-+ * (the "License").  You may use, redistribute and/or modify this File in
-+ * accordance with the terms and conditions of the License, a copy of which
-+ * is available along with the File in the gpl.txt file or by writing to
-+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+ * 02111-1307 or on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
-+ *
-+ * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
-+ * this warranty disclaimer.
-+ *
-+ */
-+/****************************************************
-+Change log:
-+      10/10/07: initial version
-+****************************************************/
-+
-+#ifndef       _UAP_SDIO_MMC_H
-+#define       _UAP_SDIO_MMC_H
-+
-+#include      <linux/mmc/sdio.h>
-+#include      <linux/mmc/sdio_ids.h>
-+#include      <linux/mmc/sdio_func.h>
-+#include      <linux/mmc/card.h>
-+
-+#include      "uap_headers.h"
-+
-+/** The number of times to try when waiting for downloaded firmware to
-+     become active. (polling the scratch register). */
-+#define MAX_FIRMWARE_POLL_TRIES               100
-+
-+/** Firmware ready */
-+#define FIRMWARE_READY                        0xfedc
-+
-+/** Number of firmware blocks to transfer */
-+#define FIRMWARE_TRANSFER_NBLOCK      2
-+
-+/* Host Control Registers */
-+/** Host Control Registers : I/O port 0 */
-+#define IO_PORT_0_REG                 0x00
-+/** Host Control Registers : I/O port 1 */
-+#define IO_PORT_1_REG                 0x01
-+/** Host Control Registers : I/O port 2 */
-+#define IO_PORT_2_REG                 0x02
-+
-+/** Host Control Registers : Configuration */
-+#define CONFIGURATION_REG             0x03
-+/** Host Control Registers : Host without Command 53 finish host */
-+#define HOST_WO_CMD53_FINISH_HOST     (0x1U << 2)
-+/** Host Control Registers : Host power up */
-+#define HOST_POWER_UP                 (0x1U << 1)
-+/** Host Control Registers : Host power down */
-+#define HOST_POWER_DOWN                       (0x1U << 0)
-+
-+/** Host Control Registers : Host interrupt mask */
-+#define HOST_INT_MASK_REG             0x04
-+/** Host Control Registers : Upload host interrupt mask */
-+#define UP_LD_HOST_INT_MASK           (0x1U)
-+/** Host Control Registers : Download host interrupt mask */
-+#define DN_LD_HOST_INT_MASK           (0x2U)
-+/** Enable Host interrupt mask */
-+#define HIM_ENABLE                    (UP_LD_HOST_INT_MASK | DN_LD_HOST_INT_MASK)
-+/** Disable Host interrupt mask */
-+#define       HIM_DISABLE                     0xff
-+
-+/** Host Control Registers : Host interrupt status */
-+#define HOST_INTSTATUS_REG            0x05
-+/** Host Control Registers : Upload host interrupt status */
-+#define UP_LD_HOST_INT_STATUS         (0x1U)
-+/** Host Control Registers : Download host interrupt status */
-+#define DN_LD_HOST_INT_STATUS         (0x2U)
-+
-+/** Host F1 read base 0 */
-+#define HOST_F1_RD_BASE_0             0x10
-+/** Host F1 read base 1 */
-+#define HOST_F1_RD_BASE_1             0x11
-+
-+/** Card Control Registers : Card status register */
-+#define CARD_STATUS_REG               0x20
-+/** Card Control Registers : Card I/O ready */
-+#define CARD_IO_READY                 (0x1U << 3)
-+/** Card Control Registers : CIS card ready */
-+#define CIS_CARD_RDY                  (0x1U << 2)
-+/** Card Control Registers : Upload card ready */
-+#define UP_LD_CARD_RDY                (0x1U << 1)
-+/** Card Control Registers : Download card ready */
-+#define DN_LD_CARD_RDY                (0x1U << 0)
-+
-+/** Card Control Registers : Card OCR 0 register */
-+#define CARD_OCR_0_REG                0x34
-+/** Card Control Registers : Card OCR 1 register */
-+#define CARD_OCR_1_REG                0x35
-+
-+/** Firmware status 0 register */
-+#define CARD_FW_STATUS0_REG           0x40
-+/** Firmware status 1 register */
-+#define CARD_FW_STATUS1_REG           0x41
-+/** Rx length register */
-+#define CARD_RX_LEN_REG                       0x42
-+/** Rx unit register */
-+#define CARD_RX_UNIT_REG              0x43
-+
-+/** Chip Id Register 0 */
-+#define CARD_CHIP_ID_0_REG            0x801c
-+/** Chip Id Register 1 */
-+#define CARD_CHIP_ID_1_REG            0x801d
-+
-+#ifdef PXA3XX_DMA_ALIGN
-+/** DMA alignment value for PXA3XX platforms */
-+#define PXA3XX_DMA_ALIGNMENT    8
-+/** Macros for Data Alignment : size */
-+#define ALIGN_SZ(p, a)  \
-+    (((p) + ((a) - 1)) & ~((a) - 1))
-+
-+/** Macros for Data Alignment : address */
-+#define ALIGN_ADDR(p, a)    \
-+    ((((u32)(p)) + (((u32)(a)) - 1)) & ~(((u32)(a)) - 1))
-+#endif /* PXA3XX_DMA_ALIGN */
-+
-+struct sdio_mmc_card
-+{
-+        /** sdio_func structure pointer */
-+    struct sdio_func *func;
-+        /** uap_private structure pointer */
-+    uap_private *priv;
-+};
-+
-+#endif /* _UAP_SDIO_MMC_H */
-diff -Naur compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/Makefile compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/Makefile
---- compat-wireless-3.5-rc5-1-snpc.org/drivers/net/wireless/Makefile   2012-07-05 03:48:01.000000000 +0200
-+++ compat-wireless-3.5-rc5-1-snpc/drivers/net/wireless/Makefile       2012-07-31 14:20:01.343608619 +0200
-@@ -22,6 +22,8 @@
- obj-$(CONFIG_LIBERTAS_THINFIRM)       += libertas_tf/
-+obj-$(CONFIG_LIBERTAS_UAP)    += libertas_uap/
-+
- obj-$(CONFIG_ADM8211) += adm8211.o
- obj-$(CONFIG_MWL8K)   += mwl8k.o
diff --git a/src/patches/compat-wireless_codel-avoid-a-nul-rec_inv_sqrt.patch b/src/patches/compat-wireless_codel-avoid-a-nul-rec_inv_sqrt.patch
deleted file mode 100644 (file)
index 210a58c..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-From patchwork Mon Jul 30 06:52:21 2012
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: codel: refine one condition to avoid a nul rec_inv_sqrt
-Date: Sun, 29 Jul 2012 20:52:21 -0000
-From: Eric Dumazet <eric.dumazet@gmail.com>
-X-Patchwork-Id: 173968
-Message-Id: <1343631141.2626.13293.camel@edumazet-glaptop>
-To: David Miller <davem@davemloft.net>
-Cc: netdev <netdev@vger.kernel.org>, Anton Mich <lp2s1h@gmail.com>
-
-From: Eric Dumazet <edumazet@google.com>
-
-One condition before codel_Newton_step() was not good if
-we never left the dropping state for a flow. As a result
-rec_inv_sqrt was 0, instead of the ~0 initial value.
-
-codel control law was then set to a very aggressive mode, dropping
-many packets before reaching 'target' and recovering from this problem.
-
-To keep codel_vars_init() as efficient as possible, refine
-the condition to make sure rec_inv_sqrt initial value is correct
-
-Many thanks to Anton Mich for discovering the issue and suggesting
-a fix.
-
-Reported-by: Anton Mich <lp2s1h@gmail.com>
-Signed-off-by: Eric Dumazet <edumazet@google.com>
-
----
-include/net/codel.h |    8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-
-
---
-To unsubscribe from this list: send the line "unsubscribe netdev" in
-the body of a message to majordomo@vger.kernel.org
-More majordomo info at  http://vger.kernel.org/majordomo-info.html
-
-diff --git a/include/net/codel.h b/include/net/codel.h
-index 550debf..389cf62 100644
---- a/include/net/codel.h
-+++ b/include/net/codel.h
-@@ -305,6 +305,8 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sch,
-                       }
-               }
-       } else if (drop) {
-+              u32 delta;
-+
-               if (params->ecn && INET_ECN_set_ce(skb)) {
-                       stats->ecn_mark++;
-               } else {
-@@ -320,9 +322,11 @@ static struct sk_buff *codel_dequeue(struct Qdisc *sch,
-                * assume that the drop rate that controlled the queue on the
-                * last cycle is a good starting point to control it now.
-                */
--              if (codel_time_before(now - vars->drop_next,
-+              delta = vars->count - vars->lastcount;
-+              if (delta > 1 &&
-+                  codel_time_before(now - vars->drop_next,
-                                     16 * params->interval)) {
--                      vars->count = (vars->count - vars->lastcount) | 1;
-+                      vars->count = delta;
-                       /* we dont care if rec_inv_sqrt approximation
-                        * is not very precise :
-                        * Next Newton steps will correct it quadratically.
diff --git a/src/patches/coreutils-5.96-futimes.patch b/src/patches/coreutils-5.96-futimes.patch
deleted file mode 100644 (file)
index e91f1df..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
---- coreutils-6.0.orig/lib/utimens.c   2006-06-11 09:14:31.000000000 +0200
-+++ coreutils-6.0/lib/utimens.c        2007-07-17 00:41:08.000000000 +0200
-@@ -75,7 +75,7 @@
-    Return 0 on success, -1 (setting errno) on failure.  */
- int
--futimens (int fd ATTRIBUTE_UNUSED,
-+cu_futimens (int fd ATTRIBUTE_UNUSED,
-         char const *file, struct timespec const timespec[2])
- {
-   /* There's currently no interface to set file timestamps with
-@@ -168,5 +168,5 @@
- int
- utimens (char const *file, struct timespec const timespec[2])
- {
--  return futimens (-1, file, timespec);
-+  return cu_futimens (-1, file, timespec);
- }
---- coreutils-6.0.orig/lib/utimens.h   2004-11-23 21:41:51.000000000 +0100
-+++ coreutils-6.0/lib/utimens.h        2007-07-17 00:41:31.000000000 +0200
-@@ -1,3 +1,3 @@
- #include "timespec.h"
--int futimens (int, char const *, struct timespec const [2]);
-+int cu_futimens (int, char const *, struct timespec const [2]);
- int utimens (char const *, struct timespec const [2]);
---- coreutils-6.0.orig/src/copy.c      2007-07-16 23:18:42.000000000 +0200
-+++ coreutils-6.0/src/copy.c   2007-07-17 00:43:10.000000000 +0200
-@@ -648,7 +648,7 @@
-       timespec[0] = get_stat_atime (src_sb);
-       timespec[1] = get_stat_mtime (src_sb);
--      if (futimens (dest_desc, dst_name, timespec) != 0)
-+      if (cu_futimens (dest_desc, dst_name, timespec) != 0)
-       {
-         error (0, errno, _("preserving times for %s"), quote (dst_name));
-         if (x->require_preserve)
---- coreutils-6.0.orig/src/touch.c     2005-11-02 11:01:07.000000000 +0100
-+++ coreutils-6.0/src/touch.c  2007-07-17 00:43:51.000000000 +0200
-@@ -167,7 +167,7 @@
-   if (amtime_now)
-     {
--      /* Pass NULL to futimens so it will not fail if we have
-+      /* Pass NULL to cu_futimens so it will not fail if we have
-        write access to the file, but don't own it.  */
-       t = NULL;
-     }
-@@ -182,7 +182,7 @@
-       t = timespec;
-     }
--  ok = (futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0);
-+  ok = (cu_futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0);
-   if (fd == STDIN_FILENO)
-     {
diff --git a/src/patches/coreutils-5.96-i18n-1.patch b/src/patches/coreutils-5.96-i18n-1.patch
deleted file mode 100644 (file)
index d1c8cf0..0000000
+++ /dev/null
@@ -1,4052 +0,0 @@
-Submitted by: Alexander E. Patrakov
-Date: 2005-11-12
-Initial Package Version: 5.93
-Upstream Status: Not accepted, but planned for 6.0
-Origin: RedHat CVS, see below how to regenerate
-http://cvs.fedora.redhat.com/viewcvs/*checkout*/devel/coreutils/coreutils-i18n.patch?rev=1.14
-Description: This patch fixes various problems with multibyte character support.
-LSB >= 2.0 tests for features added by this patch, but only Coreutils-5.2.1 plus
-http://www.linuxfromscratch.org/~alexander/patches/coreutils-5.2.1-i18n_fixes-1.patch
-actually pass the Li18nux2000-level1 testsuite.
-
-To regenerate:
-Get http://cvs.fedora.redhat.com/viewcvs/*checkout*/devel/coreutils/coreutils-i18n.patch?rev=1.14
-Replace the coreutils-5.93/tests/sort/Makefile.in hunk with that from rev 1.13
-Add this header.
-
---- coreutils-5.93/lib/linebuffer.h.i18n       2005-05-14 08:58:06.000000000 +0100
-+++ coreutils-5.93/lib/linebuffer.h    2005-12-23 08:53:01.000000000 +0000
-@@ -22,6 +22,11 @@
- # include <stdio.h>
-+/* Get mbstate_t.  */
-+# if HAVE_WCHAR_H
-+#  include <wchar.h>
-+# endif
-+
- /* A `struct linebuffer' holds a line of text. */
- struct linebuffer
-@@ -29,6 +34,9 @@
-   size_t size;                        /* Allocated. */
-   size_t length;              /* Used. */
-   char *buffer;
-+# if HAVE_WCHAR_H
-+  mbstate_t state;
-+# endif
- };
- /* Initialize linebuffer LINEBUFFER for use. */
---- coreutils-5.93/src/cut.c.i18n      2005-08-12 08:16:25.000000000 +0100
-+++ coreutils-5.93/src/cut.c   2005-12-23 08:53:01.000000000 +0000
-@@ -29,6 +29,11 @@
- #include <assert.h>
- #include <getopt.h>
- #include <sys/types.h>
-+
-+/* Get mbstate_t, mbrtowc().  */
-+#if HAVE_WCHAR_H
-+# include <wchar.h>
-+#endif
- #include "system.h"
- #include "error.h"
-@@ -37,6 +42,18 @@
- #include "quote.h"
- #include "xstrndup.h"
-+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
-+   installation; work around this configuration error.        */
-+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
-+# undef MB_LEN_MAX
-+# define MB_LEN_MAX 16
-+#endif
-+
-+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t.  */
-+#if HAVE_MBRTOWC && defined mbstate_t
-+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
-+#endif
-+
- /* The official name of this program (e.g., no `g' prefix).  */
- #define PROGRAM_NAME "cut"
-@@ -67,6 +84,52 @@
-     }                                                 \
-   while (0)
-+/* Refill the buffer BUF to get a multibyte character. */
-+#define REFILL_BUFFER(BUF, BUFPOS, BUFLEN, STREAM)                    \
-+  do                                                                  \
-+    {                                                                 \
-+      if (BUFLEN < MB_LEN_MAX && !feof (STREAM) && !ferror (STREAM))  \
-+      {                                                               \
-+        memmove (BUF, BUFPOS, BUFLEN);                                \
-+        BUFLEN += fread (BUF + BUFLEN, sizeof(char), BUFSIZ, STREAM); \
-+        BUFPOS = BUF;                                                 \
-+      }                                                               \
-+    }                                                                 \
-+  while (0)
-+
-+/* Get wide character on BUFPOS. BUFPOS is not included after that.
-+   If byte sequence is not valid as a character, CONVFAIL is 1. Otherwise 0. */ 
-+#define GET_NEXT_WC_FROM_BUFFER(WC, BUFPOS, BUFLEN, MBLENGTH, STATE, CONVFAIL) \
-+  do                                                                  \
-+    {                                                                 \
-+      mbstate_t state_bak;                                            \
-+                                                                      \
-+      if (BUFLEN < 1)                                                 \
-+      {                                                               \
-+        WC = WEOF;                                                    \
-+        break;                                                        \
-+      }                                                               \
-+                                                                      \
-+      /* Get a wide character. */                                     \
-+      CONVFAIL = 0;                                                   \
-+      state_bak = STATE;                                              \
-+      MBLENGTH = mbrtowc ((wchar_t *)&WC, BUFPOS, BUFLEN, &STATE);    \
-+                                                                      \
-+      switch (MBLENGTH)                                                       \
-+      {                                                               \
-+      case (size_t)-1:                                                \
-+      case (size_t)-2:                                                \
-+        CONVFAIL++;                                                   \
-+        STATE = state_bak;                                            \
-+        /* Fall througn. */                                           \
-+                                                                      \
-+      case 0:                                                         \
-+        MBLENGTH = 1;                                                 \
-+        break;                                                        \
-+      }                                                               \
-+    }                                                                 \
-+  while (0)
-+
- struct range_pair
-   {
-     size_t lo;
-@@ -85,7 +148,7 @@
- /* The number of bytes allocated for FIELD_1_BUFFER.  */
- static size_t field_1_bufsize;
--/* The largest field or byte index used as an endpoint of a closed
-+/* The largest byte, character or field index used as an endpoint of a closed
-    or degenerate range specification;  this doesn't include the starting
-    index of right-open-ended ranges.  For example, with either range spec
-    `2-5,9-', `2-3,5,9-' this variable would be set to 5.  */
-@@ -97,10 +160,11 @@
- /* This is a bit vector.
-    In byte mode, which bytes to output.
-+   In character mode, which characters to output.
-    In field mode, which DELIM-separated fields to output.
--   Both bytes and fields are numbered starting with 1,
-+   Bytes, characters and fields are numbered starting with 1,
-    so the zeroth bit of this array is unused.
--   A field or byte K has been selected if
-+   A byte, character or field K has been selected if
-    (K <= MAX_RANGE_ENDPOINT and is_printable_field(K))
-     || (EOL_RANGE_START > 0 && K >= EOL_RANGE_START).  */
- static unsigned char *printable_field;
-@@ -109,9 +173,12 @@
-   {
-     undefined_mode,
--    /* Output characters that are in the given bytes. */
-+    /* Output bytes that are at the given positions. */
-     byte_mode,
-+    /* Output characters that are at the given positions. */
-+    character_mode,
-+
-     /* Output the given delimeter-separated fields. */
-     field_mode
-   };
-@@ -121,6 +188,13 @@
- static enum operating_mode operating_mode;
-+/* If nonzero, when in byte mode, don't split multibyte characters.  */
-+static int byte_mode_character_aware;
-+
-+/* If nonzero, the function for single byte locale is work
-+   if this program runs on multibyte locale. */
-+static int force_singlebyte_mode;
-+
- /* If true do not output lines containing no delimeter characters.
-    Otherwise, all such lines are printed.  This option is valid only
-    with field mode.  */
-@@ -132,6 +206,9 @@
- /* The delimeter character for field mode. */
- static unsigned char delim;
-+#if HAVE_WCHAR_H
-+static wchar_t wcdelim;
-+#endif
- /* True if the --output-delimiter=STRING option was specified.  */
- static bool output_delimiter_specified;
-@@ -205,7 +282,7 @@
-   -f, --fields=LIST       select only these fields;  also print any line\n\
-                             that contains no delimiter character, unless\n\
-                             the -s option is specified\n\
--  -n                      (ignored)\n\
-+  -n                      with -b: don't split multibyte characters\n\
- "), stdout);
-       fputs (_("\
-       --complement        complement the set of selected bytes, characters\n\
-@@ -360,7 +437,7 @@
-         in_digits = false;
-         /* Starting a range. */
-         if (dash_found)
--          FATAL_ERROR (_("invalid byte or field list"));
-+          FATAL_ERROR (_("invalid byte, character or field list"));
-         dash_found = true;
-         fieldstr++;
-@@ -385,14 +462,16 @@
-             if (value == 0)
-               {
-                 /* `n-'.  From `initial' to end of line. */
--                eol_range_start = initial;
-+                if (eol_range_start == 0 ||
-+                    (eol_range_start != 0 && eol_range_start > initial))
-+                  eol_range_start = initial;
-                 field_found = true;
-               }
-             else
-               {
-                 /* `m-n' or `-n' (1-n). */
-                 if (value < initial)
--                  FATAL_ERROR (_("invalid byte or field list"));
-+                  FATAL_ERROR (_("invalid byte, character or field list"));
-                 /* Is there already a range going to end of line? */
-                 if (eol_range_start != 0)
-@@ -465,6 +544,9 @@
-             if (operating_mode == byte_mode)
-               error (0, 0,
-                      _("byte offset %s is too large"), quote (bad_num));
-+            else if (operating_mode == character_mode)
-+              error (0, 0,
-+                     _("character offset %s is too large"), quote (bad_num));
-             else
-               error (0, 0,
-                      _("field number %s is too large"), quote (bad_num));
-@@ -475,7 +557,7 @@
-         fieldstr++;
-       }
-       else
--      FATAL_ERROR (_("invalid byte or field list"));
-+      FATAL_ERROR (_("invalid byte, character or field list"));
-     }
-   max_range_endpoint = 0;
-@@ -568,6 +650,63 @@
-     }
- }
-+#if HAVE_MBRTOWC
-+/* This function is in use for the following case.
-+
-+   1. Read from the stream STREAM, printing to standard output any selected
-+   characters. 
-+
-+   2. Read from stream STREAM, printing to standard output any selected bytes,
-+   without splitting multibyte characters.  */
-+ 
-+static void
-+cut_characters_or_cut_bytes_no_split (FILE *stream)
-+{
-+  int idx;            /* number of bytes or characters in the line so far. */
-+  char buf[MB_LEN_MAX + BUFSIZ];  /* For spooling a read byte sequence. */
-+  char *bufpos;               /* Next read position of BUF. */
-+  size_t buflen;      /* The length of the byte sequence in buf. */
-+  wint_t wc;          /* A gotten wide character. */
-+  size_t mblength;    /* The byte size of a multibyte character which shows
-+                         as same character as WC. */
-+  mbstate_t state;    /* State of the stream. */
-+  int convfail;               /* 1, when conversion is failed. Otherwise 0. */
-+
-+  idx = 0;
-+  buflen = 0;
-+  bufpos = buf;
-+  memset (&state, '\0', sizeof(mbstate_t));
-+
-+  while (1)
-+    {
-+      REFILL_BUFFER (buf, bufpos, buflen, stream);
-+
-+      GET_NEXT_WC_FROM_BUFFER (wc, bufpos, buflen, mblength, state, convfail);
-+
-+      if (wc == WEOF)
-+      {
-+        if (idx > 0)
-+          putchar ('\n');
-+        break;
-+      }
-+      else if (wc == L'\n')
-+      {
-+        putchar ('\n');
-+        idx = 0;
-+      }
-+      else
-+      {
-+        idx += (operating_mode == byte_mode) ? mblength : 1;
-+        if (print_kth (idx, NULL))
-+          fwrite (bufpos, mblength, sizeof(char), stdout);
-+      }
-+
-+      buflen -= mblength;
-+      bufpos += mblength;
-+    }
-+}
-+#endif
-+                 
- /* Read from stream STREAM, printing to standard output any selected fields.  */
- static void
-@@ -689,13 +828,192 @@
-     }
- }
-+#if HAVE_MBRTOWC
-+static void
-+cut_fields_mb (FILE *stream)
-+{
-+  int c;
-+  unsigned int field_idx;
-+  int found_any_selected_field;
-+  int buffer_first_field;
-+  int empty_input;
-+  char buf[MB_LEN_MAX + BUFSIZ];  /* For spooling a read byte sequence. */
-+  char *bufpos;               /* Next read position of BUF. */
-+  size_t buflen;      /* The length of the byte sequence in buf. */
-+  wint_t wc = 0;      /* A gotten wide character. */
-+  size_t mblength;    /* The byte size of a multibyte character which shows
-+                         as same character as WC. */
-+  mbstate_t state;    /* State of the stream. */
-+  int convfail;               /* 1, when conversion is failed. Otherwise 0. */
-+
-+  found_any_selected_field = 0;
-+  field_idx = 1;
-+  bufpos = buf;
-+  buflen = 0;
-+  memset (&state, '\0', sizeof(mbstate_t));
-+
-+  c = getc (stream);
-+  empty_input = (c == EOF);
-+  if (c != EOF)
-+    ungetc (c, stream);
-+  else
-+    wc = WEOF;
-+
-+  /* To support the semantics of the -s flag, we may have to buffer
-+     all of the first field to determine whether it is `delimited.'
-+     But that is unnecessary if all non-delimited lines must be printed
-+     and the first field has been selected, or if non-delimited lines
-+     must be suppressed and the first field has *not* been selected.
-+     That is because a non-delimited line has exactly one field.  */
-+  buffer_first_field = (suppress_non_delimited ^ !print_kth (1, NULL));
-+
-+  while (1)
-+    {
-+      if (field_idx == 1 && buffer_first_field)
-+      {
-+        int len = 0;
-+
-+        while (1)
-+          {
-+            REFILL_BUFFER (buf, bufpos, buflen, stream);
-+
-+            GET_NEXT_WC_FROM_BUFFER
-+              (wc, bufpos, buflen, mblength, state, convfail);
-+
-+            if (wc == WEOF)
-+              break;
-+
-+            field_1_buffer = xrealloc (field_1_buffer, len + mblength);
-+            memcpy (field_1_buffer + len, bufpos, mblength);
-+            len += mblength;
-+            buflen -= mblength;
-+            bufpos += mblength;
-+
-+            if (!convfail && (wc == L'\n' || wc == wcdelim))
-+              break;
-+          }
-+
-+        if (wc == WEOF)
-+          break;
-+
-+        /* If the first field extends to the end of line (it is not
-+           delimited) and we are printing all non-delimited lines,
-+           print this one.  */
-+        if (convfail || (!convfail && wc != wcdelim))
-+          {
-+            if (suppress_non_delimited)
-+              {
-+                /* Empty.     */
-+              }
-+            else
-+              {
-+                fwrite (field_1_buffer, sizeof (char), len, stdout);
-+                /* Make sure the output line is newline terminated.  */
-+                if (convfail || (!convfail && wc != L'\n'))
-+                  putchar ('\n');
-+              }
-+            continue;
-+          }
-+
-+        if (print_kth (1, NULL))
-+          {
-+            /* Print the field, but not the trailing delimiter.  */
-+            fwrite (field_1_buffer, sizeof (char), len - 1, stdout);
-+            found_any_selected_field = 1;
-+          }
-+        ++field_idx;
-+      }
-+
-+      if (wc != WEOF)
-+      {
-+        if (print_kth (field_idx, NULL))
-+          {
-+            if (found_any_selected_field)
-+              {
-+                fwrite (output_delimiter_string, sizeof (char),
-+                        output_delimiter_length, stdout);
-+              }
-+            found_any_selected_field = 1;
-+          }
-+
-+        while (1)
-+          {
-+            REFILL_BUFFER (buf, bufpos, buflen, stream);
-+
-+            GET_NEXT_WC_FROM_BUFFER
-+              (wc, bufpos, buflen, mblength, state, convfail);
-+
-+            if (wc == WEOF)
-+              break;
-+            else if (!convfail && (wc == wcdelim || wc == L'\n'))
-+              {
-+                buflen -= mblength;
-+                bufpos += mblength;
-+                break;
-+              }
-+
-+            if (print_kth (field_idx, NULL))
-+              fwrite (bufpos, mblength, sizeof(char), stdout);
-+
-+            buflen -= mblength;
-+            bufpos += mblength;
-+          }
-+      }
-+
-+      if ((!convfail || wc == L'\n') && buflen < 1)
-+      wc = WEOF;
-+
-+      if (!convfail && wc == wcdelim)
-+      ++field_idx;
-+      else if (wc == WEOF || (!convfail && wc == L'\n'))
-+      {
-+        if (found_any_selected_field
-+            || (!empty_input && !(suppress_non_delimited && field_idx == 1)))
-+          putchar ('\n');
-+        if (wc == WEOF)
-+          break;
-+        field_idx = 1;
-+        found_any_selected_field = 0;
-+      }
-+    }
-+}
-+#endif
-+
- static void
- cut_stream (FILE *stream)
- {
--  if (operating_mode == byte_mode)
--    cut_bytes (stream);
-+#if HAVE_MBRTOWC
-+  if (MB_CUR_MAX > 1 && !force_singlebyte_mode)
-+    {
-+      switch (operating_mode)
-+      {
-+      case byte_mode:
-+        if (byte_mode_character_aware)
-+          cut_characters_or_cut_bytes_no_split (stream);
-+        else
-+          cut_bytes (stream);
-+        break;
-+
-+      case character_mode:
-+        cut_characters_or_cut_bytes_no_split (stream);
-+        break;
-+
-+      case field_mode:
-+        cut_fields_mb (stream);
-+        break;
-+
-+      default:
-+        abort ();
-+      }
-+    }
-   else
--    cut_fields (stream);
-+#endif
-+    {
-+      if (operating_mode == field_mode)
-+      cut_fields (stream);
-+      else
-+      cut_bytes (stream);
-+    }
- }
- /* Process file FILE to standard output.
-@@ -745,6 +1063,8 @@
-   bool ok;
-   bool delim_specified = false;
-   char *spec_list_string IF_LINT(= NULL);
-+  char mbdelim[MB_LEN_MAX + 1];
-+  size_t delimlen = 0;
-   initialize_main (&argc, &argv);
-   program_name = argv[0];
-@@ -767,7 +1087,6 @@
-       switch (optc)
-       {
-       case 'b':
--      case 'c':
-         /* Build the byte list. */
-         if (operating_mode != undefined_mode)
-           FATAL_ERROR (_("only one type of list may be specified"));
-@@ -775,6 +1094,14 @@
-         spec_list_string = optarg;
-         break;
-+      case 'c':
-+        /* Build the character list. */
-+        if (operating_mode != undefined_mode)
-+          FATAL_ERROR (_("only one type of list may be specified"));
-+        operating_mode = character_mode;
-+        spec_list_string = optarg;
-+        break;
-+
-       case 'f':
-         /* Build the field list. */
-         if (operating_mode != undefined_mode)
-@@ -786,10 +1113,35 @@
-       case 'd':
-         /* New delimiter. */
-         /* Interpret -d '' to mean `use the NUL byte as the delimiter.'  */
--        if (optarg[0] != '\0' && optarg[1] != '\0')
--          FATAL_ERROR (_("the delimiter must be a single character"));
--        delim = optarg[0];
--        delim_specified = true;
-+#if HAVE_MBRTOWC
-+          {
-+            if(MB_CUR_MAX > 1)
-+              {
-+                mbstate_t state;
-+
-+                memset (&state, '\0', sizeof(mbstate_t));
-+                delimlen = mbrtowc (&wcdelim, optarg, strnlen(optarg, MB_LEN_MAX), &state);
-+
-+                if (delimlen == (size_t)-1 || delimlen == (size_t)-2)
-+                  ++force_singlebyte_mode;
-+                else
-+                  {
-+                    delimlen = (delimlen < 1) ? 1 : delimlen;
-+                    if (wcdelim != L'\0' && *(optarg + delimlen) != '\0')
-+                      FATAL_ERROR (_("the delimiter must be a single character"));
-+                    memcpy (mbdelim, optarg, delimlen);
-+                  }
-+              }
-+
-+            if (MB_CUR_MAX <= 1 || force_singlebyte_mode)
-+#endif
-+              {
-+                if (optarg[0] != '\0' && optarg[1] != '\0')
-+                  FATAL_ERROR (_("the delimiter must be a single character"));
-+                delim = (unsigned char) optarg[0];
-+              }
-+          delim_specified = true;
-+        }
-         break;
-       case OUTPUT_DELIMITER_OPTION:
-@@ -802,6 +1154,7 @@
-         break;
-       case 'n':
-+        byte_mode_character_aware = 1;
-         break;
-       case 's':
-@@ -824,7 +1177,7 @@
-   if (operating_mode == undefined_mode)
-     FATAL_ERROR (_("you must specify a list of bytes, characters, or fields"));
--  if (delim != '\0' && operating_mode != field_mode)
-+  if (delim_specified && operating_mode != field_mode)
-     FATAL_ERROR (_("an input delimiter may be specified only\
-  when operating on fields"));
-@@ -851,15 +1204,34 @@
-     }
-   if (!delim_specified)
--    delim = '\t';
-+    {
-+      delim = '\t';
-+#ifdef HAVE_MBRTOWC
-+      wcdelim = L'\t';
-+      mbdelim[0] = '\t';
-+      mbdelim[1] = '\0';
-+      delimlen = 1;
-+#endif
-+    }
-   if (output_delimiter_string == NULL)
-     {
--      static char dummy[2];
--      dummy[0] = delim;
--      dummy[1] = '\0';
--      output_delimiter_string = dummy;
--      output_delimiter_length = 1;
-+#ifdef HAVE_MBRTOWC
-+      if (MB_CUR_MAX > 1 && !force_singlebyte_mode)
-+      {
-+        output_delimiter_string = xstrdup(mbdelim);
-+        output_delimiter_length = delimlen;
-+      }
-+
-+      if (MB_CUR_MAX <= 1 || force_singlebyte_mode)
-+#endif
-+      {
-+        static char dummy[2]; 
-+        dummy[0] = delim;
-+        dummy[1] = '\0';
-+        output_delimiter_string = dummy;
-+        output_delimiter_length = 1;
-+      }
-     }
-   if (optind == argc)
---- coreutils-5.93/src/pr.c.i18n       2005-09-16 08:50:33.000000000 +0100
-+++ coreutils-5.93/src/pr.c    2005-12-23 08:53:01.000000000 +0000
-@@ -313,6 +313,32 @@
- #include <getopt.h>
- #include <sys/types.h>
-+
-+/* Get MB_LEN_MAX.  */
-+#include <limits.h>
-+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
-+   installation; work around this configuration error.  */
-+#if !defined MB_LEN_MAX || MB_LEN_MAX == 1
-+# define MB_LEN_MAX 16
-+#endif
-+
-+/* Get MB_CUR_MAX.  */
-+#include <stdlib.h>
-+
-+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.  */
-+/* Get mbstate_t, mbrtowc(), wcwidth().  */
-+#if HAVE_WCHAR_H
-+# include <wchar.h>
-+#endif
-+
-+/* Get iswprint(). -- for wcwidth().  */
-+#if HAVE_WCTYPE_H
-+# include <wctype.h>
-+#endif
-+#if !defined iswprint && !HAVE_ISWPRINT
-+# define iswprint(wc) 1
-+#endif
-+
- #include "system.h"
- #include "error.h"
- #include "hard-locale.h"
-@@ -324,6 +350,18 @@
- #include "strftime.h"
- #include "xstrtol.h"
-+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t.  */
-+#if HAVE_MBRTOWC && defined mbstate_t
-+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
-+#endif
-+
-+#ifndef HAVE_DECL_WCWIDTH
-+"this configure-time declaration test was not run"
-+#endif
-+#if !HAVE_DECL_WCWIDTH
-+extern int wcwidth ();
-+#endif
-+
- /* The official name of this program (e.g., no `g' prefix).  */
- #define PROGRAM_NAME "pr"
-@@ -416,7 +454,20 @@
- #define NULLCOL (COLUMN *)0
--static int char_to_clump (char c);
-+/* Funtion pointers to switch functions for single byte locale or for
-+   multibyte locale. If multibyte functions do not exist in your sysytem,
-+   these pointers always point the function for single byte locale. */
-+static void (*print_char) (char c);
-+static int (*char_to_clump) (char c);
-+
-+/* Functions for single byte locale. */
-+static void print_char_single (char c);
-+static int char_to_clump_single (char c);
-+
-+/* Functions for multibyte locale. */
-+static void print_char_multi (char c);
-+static int char_to_clump_multi (char c);
-+
- static bool read_line (COLUMN *p);
- static bool print_page (void);
- static bool print_stored (COLUMN *p);
-@@ -426,6 +477,7 @@
- static void pad_across_to (int position);
- static void add_line_number (COLUMN *p);
- static void getoptarg (char *arg, char switch_char, char *character,
-+                     int *character_length, int *character_width,
-                      int *number);
- void usage (int status);
- static void print_files (int number_of_files, char **av);
-@@ -440,7 +492,6 @@
- static void pad_down (int lines);
- static void read_rest_of_line (COLUMN *p);
- static void skip_read (COLUMN *p, int column_number);
--static void print_char (char c);
- static void cleanup (void);
- static void print_sep_string (void);
- static void separator_string (const char *optarg_S);
-@@ -455,7 +506,7 @@
-    we store the leftmost columns contiguously in buff.
-    To print a line from buff, get the index of the first character
-    from line_vector[i], and print up to line_vector[i + 1]. */
--static char *buff;
-+static unsigned char *buff;
- /* Index of the position in buff where the next character
-    will be stored. */
-@@ -559,7 +610,7 @@
- static bool untabify_input = false;
- /* (-e) The input tab character. */
--static char input_tab_char = '\t';
-+static char input_tab_char[MB_LEN_MAX] = "\t";
- /* (-e) Tabstops are at chars_per_tab, 2*chars_per_tab, 3*chars_per_tab, ...
-    where the leftmost column is 1. */
-@@ -569,7 +620,10 @@
- static bool tabify_output = false;
- /* (-i) The output tab character. */
--static char output_tab_char = '\t';
-+static char output_tab_char[MB_LEN_MAX] = "\t";
-+
-+/* (-i) The byte length of output tab character. */
-+static int output_tab_char_length = 1;
- /* (-i) The width of the output tab. */
- static int chars_per_output_tab = 8;
-@@ -643,7 +697,13 @@
- static bool numbered_lines = false;
- /* (-n) Character which follows each line number. */
--static char number_separator = '\t';
-+static char number_separator[MB_LEN_MAX] = "\t";
-+
-+/* (-n) The byte length of the character which follows each line number. */
-+static int number_separator_length = 1;
-+
-+/* (-n) The character width of the character which follows each line number. */
-+static int number_separator_width = 0;
- /* (-n) line counting starts with 1st line of input file (not with 1st
-    line of 1st page printed). */
-@@ -696,6 +756,7 @@
-    -a|COLUMN|-m is a `space' and with the -J option a `tab'. */
- static char *col_sep_string = "";
- static int col_sep_length = 0;
-+static int col_sep_width = 0;
- static char *column_separator = " ";
- static char *line_separator = "\t";
-@@ -852,6 +913,13 @@
-   col_sep_length = (int) strlen (optarg_S);
-   col_sep_string = xmalloc (col_sep_length + 1);
-   strcpy (col_sep_string, optarg_S);
-+
-+#if HAVE_MBRTOWC
-+  if (MB_CUR_MAX > 1)
-+    col_sep_width = mbswidth (col_sep_string, 0);
-+  else
-+#endif
-+    col_sep_width = col_sep_length;
- }
- int
-@@ -877,6 +945,21 @@
-   atexit (close_stdout);
-+/* Define which functions are used, the ones for single byte locale or the ones
-+   for multibyte locale. */
-+#if HAVE_MBRTOWC
-+  if (MB_CUR_MAX > 1)
-+    {
-+      print_char = print_char_multi;
-+      char_to_clump = char_to_clump_multi;
-+    }
-+  else
-+#endif
-+    {
-+      print_char = print_char_single;
-+      char_to_clump = char_to_clump_single;
-+    }
-+
-   n_files = 0;
-   file_names = (argc > 1
-               ? xmalloc ((argc - 1) * sizeof (char *))
-@@ -949,8 +1032,12 @@
-         break;
-       case 'e':
-         if (optarg)
--          getoptarg (optarg, 'e', &input_tab_char,
--                     &chars_per_input_tab);
-+          {
-+            int dummy_length, dummy_width;
-+
-+            getoptarg (optarg, 'e', input_tab_char, &dummy_length,
-+                       &dummy_width, &chars_per_input_tab);
-+          }
-         /* Could check tab width > 0. */
-         untabify_input = true;
-         break;
-@@ -963,8 +1050,12 @@
-         break;
-       case 'i':
-         if (optarg)
--          getoptarg (optarg, 'i', &output_tab_char,
--                     &chars_per_output_tab);
-+          {
-+            int dummy_width;
-+
-+            getoptarg (optarg, 'i', output_tab_char, &output_tab_char_length,
-+                       &dummy_width, &chars_per_output_tab);
-+          }
-         /* Could check tab width > 0. */
-         tabify_output = true;
-         break;
-@@ -991,8 +1082,8 @@
-       case 'n':
-         numbered_lines = true;
-         if (optarg)
--          getoptarg (optarg, 'n', &number_separator,
--                     &chars_per_number);
-+          getoptarg (optarg, 'n', number_separator, &number_separator_length,
-+                     &number_separator_width, &chars_per_number);
-         break;
-       case 'N':
-         skip_count = false;
-@@ -1031,7 +1122,7 @@
-         old_s = false;
-         /* Reset an additional input of -s, -S dominates -s */
-         col_sep_string = "";
--        col_sep_length = 0;
-+        col_sep_length = col_sep_width = 0;
-         use_col_separator = true;
-         if (optarg)
-           separator_string (optarg);
-@@ -1188,10 +1279,45 @@
-    a number. */
- static void
--getoptarg (char *arg, char switch_char, char *character, int *number)
-+getoptarg (char *arg, char switch_char, char *character, int *character_length,
-+         int *character_width, int *number)
- {
-   if (!ISDIGIT (*arg))
--    *character = *arg++;
-+    {
-+#ifdef HAVE_MBRTOWC
-+      if (MB_CUR_MAX > 1)     /* for multibyte locale. */
-+      {
-+        wchar_t wc;
-+        size_t mblength;
-+        int width;
-+        mbstate_t state = {'\0'};
-+
-+        mblength = mbrtowc (&wc, arg, strnlen(arg, MB_LEN_MAX), &state);
-+
-+        if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+          {
-+            *character_length = 1;
-+            *character_width = 1;
-+          }
-+        else
-+          {
-+            *character_length = (mblength < 1) ? 1 : mblength;
-+            width = wcwidth (wc);
-+            *character_width = (width < 0) ? 0 : width;
-+          }
-+
-+        strncpy (character, arg, *character_length);
-+        arg += *character_length;
-+      }
-+      else                    /* for single byte locale. */
-+#endif
-+      {
-+        *character = *arg++;
-+        *character_length = 1;
-+        *character_width = 1;
-+      }
-+    }
-+
-   if (*arg)
-     {
-       long int tmp_long;
-@@ -1256,7 +1382,7 @@
-         else
-           col_sep_string = column_separator;
--        col_sep_length = 1;
-+        col_sep_length = col_sep_width = 1;
-         use_col_separator = true;
-       }
-       /* It's rather pointless to define a TAB separator with column
-@@ -1288,11 +1414,11 @@
-            TAB_WIDTH (chars_per_input_tab, chars_per_number);   */
-       /* Estimate chars_per_text without any margin and keep it constant. */
--      if (number_separator == '\t')
-+      if (number_separator[0] == '\t')
-       number_width = chars_per_number +
-         TAB_WIDTH (chars_per_default_tab, chars_per_number);
-       else
--      number_width = chars_per_number + 1;
-+      number_width = chars_per_number + number_separator_width;
-       /* The number is part of the column width unless we are
-        printing files in parallel. */
-@@ -1307,7 +1433,7 @@
-     }
-   chars_per_column = (chars_per_line - chars_used_by_number -
--                   (columns - 1) * col_sep_length) / columns;
-+                   (columns - 1) * col_sep_width) / columns;
-   if (chars_per_column < 1)
-     error (EXIT_FAILURE, 0, _("page width too narrow"));
-@@ -1432,7 +1558,7 @@
-   /* Enlarge p->start_position of first column to use the same form of
-      padding_not_printed with all columns. */
--  h = h + col_sep_length;
-+  h = h + col_sep_width;
-   /* This loop takes care of all but the rightmost column. */
-@@ -1466,7 +1592,7 @@
-       }
-       else
-       {
--        h = h_next + col_sep_length;
-+        h = h_next + col_sep_width;
-         h_next = h + chars_per_column;
-       }
-     }
-@@ -1756,9 +1882,9 @@
- align_column (COLUMN *p)
- {
-   padding_not_printed = p->start_position;
--  if (padding_not_printed - col_sep_length > 0)
-+  if (padding_not_printed - col_sep_width > 0)
-     {
--      pad_across_to (padding_not_printed - col_sep_length);
-+      pad_across_to (padding_not_printed - col_sep_width);
-       padding_not_printed = ANYWHERE;
-     }
-@@ -2029,13 +2155,13 @@
-       /* May be too generous. */
-       buff = X2REALLOC (buff, &buff_allocated);
-     }
--  buff[buff_current++] = c;
-+  buff[buff_current++] = (unsigned char) c;
- }
- static void
- add_line_number (COLUMN *p)
- {
--  int i;
-+  int i, j;
-   char *s;
-   int left_cut;
-@@ -2058,22 +2184,24 @@
-       /* Tabification is assumed for multiple columns, also for n-separators,
-        but `default n-separator = TAB' hasn't been given priority over
-        equal column_width also specified by POSIX. */
--      if (number_separator == '\t')
-+      if (number_separator[0] == '\t')
-         {
-           i = number_width - chars_per_number;
-           while (i-- > 0)
-           (p->char_func) (' ');
-         }
-       else
--        (p->char_func) (number_separator);
-+      for (j = 0; j < number_separator_length; j++)
-+        (p->char_func) (number_separator[j]);
-     }
-   else
-     /* To comply with POSIX, we avoid any expansion of default TAB
-        separator with a single column output. No column_width requirement
-        has to be considered. */
-     {
--      (p->char_func) (number_separator);
--      if (number_separator == '\t')
-+      for (j = 0; j < number_separator_length; j++)
-+      (p->char_func) (number_separator[j]);
-+      if (number_separator[0] == '\t')
-         output_position = POS_AFTER_TAB (chars_per_output_tab,
-                         output_position);
-     }
-@@ -2234,7 +2362,7 @@
-   while (goal - h_old > 1
-        && (h_new = POS_AFTER_TAB (chars_per_output_tab, h_old)) <= goal)
-     {
--      putchar (output_tab_char);
-+      fwrite (output_tab_char, sizeof(char), output_tab_char_length, stdout);
-       h_old = h_new;
-     }
-   while (++h_old <= goal)
-@@ -2254,6 +2382,7 @@
- {
-   char *s;
-   int l = col_sep_length;
-+  int not_space_flag;
-   s = col_sep_string;
-@@ -2267,6 +2396,7 @@
-     {
-       for (; separators_not_printed > 0; --separators_not_printed)
-       {
-+        not_space_flag = 0;
-         while (l-- > 0)
-           {
-             /* 3 types of sep_strings: spaces only, spaces and chars,
-@@ -2280,12 +2410,15 @@
-               }
-             else
-               {
-+                not_space_flag = 1;
-                 if (spaces_not_printed > 0)
-                   print_white_space ();
-                 putchar (*s++);
--                ++output_position;
-               }
-           }
-+        if (not_space_flag)
-+          output_position += col_sep_width;
-+
-           /* sep_string ends with some spaces */
-         if (spaces_not_printed > 0)
-           print_white_space ();
-@@ -2313,7 +2446,7 @@
-    required number of tabs and spaces. */
- static void
--print_char (char c)
-+print_char_single (char c)
- {
-   if (tabify_output)
-     {
-@@ -2337,6 +2470,74 @@
-   putchar (c);
- }
-+#ifdef HAVE_MBRTOWC
-+static void
-+print_char_multi (char c)
-+{
-+  static size_t mbc_pos = 0;
-+  static unsigned char mbc[MB_LEN_MAX] = {'\0'};
-+  static mbstate_t state = {'\0'};
-+  mbstate_t state_bak;
-+  wchar_t wc;
-+  size_t mblength;
-+  int width;
-+
-+  if (tabify_output)
-+    {
-+      state_bak = state;
-+      mbc[mbc_pos++] = (unsigned char)c;
-+      mblength = mbrtowc (&wc, mbc, mbc_pos, &state);
-+
-+      while (mbc_pos > 0)
-+      {
-+        switch (mblength)
-+          {
-+          case (size_t)-2:
-+            state = state_bak;
-+            return;
-+
-+          case (size_t)-1:
-+            state = state_bak;
-+            ++output_position;
-+            putchar (mbc[0]);
-+            memmove (mbc, mbc + 1, MB_CUR_MAX - 1);
-+            --mbc_pos;
-+            break;
-+
-+          case 0:
-+            mblength = 1;
-+
-+          default:
-+            if (wc == L' ')
-+              {
-+                memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength);
-+                --mbc_pos;
-+                ++spaces_not_printed;
-+                return;
-+              }
-+            else if (spaces_not_printed > 0)
-+              print_white_space ();
-+
-+            /* Nonprintables are assumed to have width 0, except L'\b'. */
-+            if ((width = wcwidth (wc)) < 1)
-+              {
-+                if (wc == L'\b')
-+                  --output_position;
-+              }
-+            else
-+              output_position += width;
-+
-+            fwrite (mbc, sizeof(char), mblength, stdout);
-+            memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength);
-+            mbc_pos -= mblength;
-+          }
-+      }
-+      return;
-+    }
-+  putchar (c);
-+}
-+#endif
-+
- /* Skip to page PAGE before printing.
-    PAGE may be larger than total number of pages. */
-@@ -2517,9 +2718,9 @@
-         align_empty_cols = false;
-       }
--      if (padding_not_printed - col_sep_length > 0)
-+      if (padding_not_printed - col_sep_width > 0)
-       {
--        pad_across_to (padding_not_printed - col_sep_length);
-+        pad_across_to (padding_not_printed - col_sep_width);
-         padding_not_printed = ANYWHERE;
-       }
-@@ -2620,9 +2821,9 @@
-       }
-     }
--  if (padding_not_printed - col_sep_length > 0)
-+  if (padding_not_printed - col_sep_width > 0)
-     {
--      pad_across_to (padding_not_printed - col_sep_length);
-+      pad_across_to (padding_not_printed - col_sep_width);
-       padding_not_printed = ANYWHERE;
-     }
-@@ -2635,8 +2836,8 @@
-   if (spaces_not_printed == 0)
-     {
-       output_position = p->start_position + end_vector[line];
--      if (p->start_position - col_sep_length == chars_per_margin)
--      output_position -= col_sep_length;
-+      if (p->start_position - col_sep_width == chars_per_margin)
-+      output_position -= col_sep_width;
-     }
-   return true;
-@@ -2655,7 +2856,7 @@
-    number of characters is 1.) */
- static int
--char_to_clump (char c)
-+char_to_clump_single (char c)
- {
-   unsigned char uc = c;
-   char *s = clump_buff;
-@@ -2665,10 +2866,10 @@
-   int chars;
-   int chars_per_c = 8;
--  if (c == input_tab_char)
-+  if (c == input_tab_char[0])
-     chars_per_c = chars_per_input_tab;
--  if (c == input_tab_char || c == '\t')
-+  if (c == input_tab_char[0] || c == '\t')
-     {
-       width = TAB_WIDTH (chars_per_c, input_position);
-@@ -2739,6 +2940,154 @@
-   return chars;
- }
-+#ifdef HAVE_MBRTOWC
-+static int
-+char_to_clump_multi (char c)
-+{
-+  static size_t mbc_pos = 0;
-+  static char mbc[MB_LEN_MAX] = {'\0'};
-+  static mbstate_t state = {'\0'};
-+  mbstate_t state_bak;
-+  wchar_t wc;
-+  size_t mblength;
-+  int wc_width;
-+  register int *s = clump_buff;
-+  register int i, j;
-+  char esc_buff[4];
-+  int width;
-+  int chars;
-+  int chars_per_c = 8;
-+
-+  state_bak = state;
-+  mbc[mbc_pos++] = c;
-+  mblength = mbrtowc (&wc, mbc, mbc_pos, &state);
-+
-+  width = 0;
-+  chars = 0;
-+  while (mbc_pos > 0)
-+    {
-+      switch (mblength)
-+      {
-+      case (size_t)-2:
-+        state = state_bak;
-+        return 0;
-+
-+      case (size_t)-1:
-+        state = state_bak;
-+        mblength = 1;
-+
-+        if (use_esc_sequence || use_cntrl_prefix)
-+          {
-+            width = +4;
-+            chars = +4;
-+            *s++ = '\\';
-+            sprintf (esc_buff, "%03o", mbc[0]);
-+            for (i = 0; i <= 2; ++i)
-+              *s++ = (int) esc_buff[i];
-+          }
-+        else
-+          {
-+            width += 1;
-+            chars += 1;
-+            *s++ = mbc[0];
-+          }
-+        break;
-+
-+      case 0:
-+        mblength = 1;
-+              /* Fall through */
-+
-+      default:
-+        if (memcmp (mbc, input_tab_char, mblength) == 0)
-+          chars_per_c = chars_per_input_tab;
-+
-+        if (memcmp (mbc, input_tab_char, mblength) == 0 || c == '\t')
-+          {
-+            int  width_inc;
-+
-+            width_inc = TAB_WIDTH (chars_per_c, input_position);
-+            width += width_inc;
-+
-+            if (untabify_input)
-+              {
-+                for (i = width_inc; i; --i)
-+                  *s++ = ' ';
-+                chars += width_inc;
-+              }
-+            else
-+              {
-+                for (i = 0; i <  mblength; i++)
-+                  *s++ = mbc[i];
-+                chars += mblength;
-+              }
-+          }
-+        else if ((wc_width = wcwidth (wc)) < 1)
-+          {
-+            if (use_esc_sequence)
-+              {
-+                for (i = 0; i < mblength; i++)
-+                  {
-+                    width += 4;
-+                    chars += 4;
-+                    *s++ = '\\';
-+                    sprintf (esc_buff, "%03o", c);
-+                    for (j = 0; j <= 2; ++j)
-+                      *s++ = (int) esc_buff[j];
-+                  }
-+              }
-+            else if (use_cntrl_prefix)
-+              {
-+                if (wc < 0200)
-+                  {
-+                    width += 2;
-+                    chars += 2;
-+                    *s++ = '^';
-+                    *s++ = wc ^ 0100;
-+                  }
-+                else
-+                  {
-+                    for (i = 0; i < mblength; i++)
-+                      {
-+                        width += 4;
-+                        chars += 4;
-+                        *s++ = '\\';
-+                        sprintf (esc_buff, "%03o", c);
-+                        for (j = 0; j <= 2; ++j)
-+                          *s++ = (int) esc_buff[j];
-+                      }
-+                  }
-+              }
-+            else if (wc == L'\b')
-+              {
-+                width += -1;
-+                chars += 1;
-+                *s++ = c;
-+              }
-+            else
-+              {
-+                width += 0;
-+                chars += mblength;
-+                for (i = 0; i < mblength; i++)
-+                  *s++ = mbc[i];
-+              }
-+          }
-+        else
-+          {
-+            width += wc_width;
-+            chars += mblength;
-+            for (i = 0; i < mblength; i++)
-+              *s++ = mbc[i];
-+          }
-+      }
-+      memmove (mbc, mbc + mblength, MB_CUR_MAX - mblength);
-+      mbc_pos -= mblength;
-+    }
-+
-+  input_position += width;
-+  return chars;
-+}
-+#endif
-+
- /* We've just printed some files and need to clean up things before
-    looking for more options and printing the next batch of files.
---- coreutils-5.93/src/uniq.c.i18n     2005-07-05 07:32:54.000000000 +0100
-+++ coreutils-5.93/src/uniq.c  2005-12-23 08:53:01.000000000 +0000
-@@ -23,6 +23,16 @@
- #include <getopt.h>
- #include <sys/types.h>
-+/* Get mbstate_t, mbrtowc(). */
-+#if HAVE_WCHAR_H
-+# include <wchar.h>
-+#endif
-+
-+/* Get isw* functions. */
-+#if HAVE_WCTYPE_H
-+# include <wctype.h>
-+#endif
-+
- #include "system.h"
- #include "argmatch.h"
- #include "linebuffer.h"
-@@ -32,7 +42,19 @@
- #include "quote.h"
- #include "xmemcoll.h"
- #include "xstrtol.h"
--#include "memcasecmp.h"
-+#include "xmemcoll.h"
-+
-+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
-+   installation; work around this configuration error.  */
-+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
-+# define MB_LEN_MAX 16
-+#endif
-+
-+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t.  */
-+#if HAVE_MBRTOWC && defined mbstate_t
-+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
-+#endif
-+
- /* The official name of this program (e.g., no `g' prefix).  */
- #define PROGRAM_NAME "uniq"
-@@ -109,6 +131,10 @@
- /* Select whether/how to delimit groups of duplicate lines.  */
- static enum delimit_method delimit_groups;
-+/* Function pointers. */
-+static char *
-+(*find_field) (struct linebuffer *line);
-+
- static struct option const longopts[] =
- {
-   {"count", no_argument, NULL, 'c'},
-@@ -189,7 +215,7 @@
-    return a pointer to the beginning of the line's field to be compared. */
- static char *
--find_field (const struct linebuffer *line)
-+find_field_uni (struct linebuffer *line)
- {
-   size_t count;
-   char *lp = line->buffer;
-@@ -210,6 +236,83 @@
-   return lp + i;
- }
-+#if HAVE_MBRTOWC
-+
-+# define MBCHAR_TO_WCHAR(WC, MBLENGTH, LP, POS, SIZE, STATEP, CONVFAIL)  \
-+  do                                                                  \
-+    {                                                                 \
-+      mbstate_t state_bak;                                            \
-+                                                                      \
-+      CONVFAIL = 0;                                                   \
-+      state_bak = *STATEP;                                            \
-+                                                                      \
-+      MBLENGTH = mbrtowc (&WC, LP + POS, SIZE - POS, STATEP);         \
-+                                                                      \
-+      switch (MBLENGTH)                                                       \
-+      {                                                               \
-+      case (size_t)-2:                                                \
-+      case (size_t)-1:                                                \
-+        *STATEP = state_bak;                                          \
-+        CONVFAIL++;                                                   \
-+        /* Fall through */                                            \
-+      case 0:                                                         \
-+        MBLENGTH = 1;                                                 \
-+      }                                                               \
-+    }                                                                 \
-+  while (0)
-+
-+static char *
-+find_field_multi (struct linebuffer *line)
-+{
-+  size_t count;
-+  char *lp = line->buffer;
-+  size_t size = line->length - 1;
-+  size_t pos;
-+  size_t mblength;
-+  wchar_t wc;
-+  mbstate_t *statep;
-+  int convfail;
-+
-+  pos = 0;
-+  statep = &(line->state);
-+
-+  /* skip fields. */
-+  for (count = 0; count < skip_fields && pos < size; count++)
-+    {
-+      while (pos < size)
-+      {
-+        MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail);
-+ 
-+        if (convfail || !iswblank (wc))
-+          {
-+            pos += mblength;
-+            break;
-+          }
-+        pos += mblength;
-+      }
-+
-+      while (pos < size)
-+      {
-+        MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail);
-+
-+        if (!convfail && iswblank (wc))
-+          break;
-+
-+        pos += mblength;
-+      }
-+    }
-+
-+  /* skip fields. */
-+  for (count = 0; count < skip_chars && pos < size; count++)
-+    {
-+      MBCHAR_TO_WCHAR (wc, mblength, lp, pos, size, statep, convfail);
-+      pos += mblength;
-+    }
-+
-+  return lp + pos;
-+}
-+#endif
-+
- /* Return false if two strings OLD and NEW match, true if not.
-    OLD and NEW point not to the beginnings of the lines
-    but rather to the beginnings of the fields to compare.
-@@ -218,6 +321,8 @@
- static bool
- different (char *old, char *new, size_t oldlen, size_t newlen)
- {
-+  char *copy_old, *copy_new;
-+
-   if (check_chars < oldlen)
-     oldlen = check_chars;
-   if (check_chars < newlen)
-@@ -225,14 +330,92 @@
-   if (ignore_case)
-     {
--      /* FIXME: This should invoke strcoll somehow.  */
--      return oldlen != newlen || memcasecmp (old, new, oldlen);
-+      size_t i;
-+
-+      copy_old = alloca (oldlen + 1);
-+      copy_new = alloca (oldlen + 1);
-+
-+      for (i = 0; i < oldlen; i++)
-+      {
-+        copy_old[i] = toupper (old[i]);
-+        copy_new[i] = toupper (new[i]);
-+      }
-     }
--  else if (hard_LC_COLLATE)
--    return xmemcoll (old, oldlen, new, newlen) != 0;
-   else
--    return oldlen != newlen || memcmp (old, new, oldlen);
-+    {
-+      copy_old = (char *)old;
-+      copy_new = (char *)new;
-+    }
-+
-+  return xmemcoll (copy_old, oldlen, copy_new, newlen);
-+}
-+
-+#if HAVE_MBRTOWC
-+static int
-+different_multi (const char *old, const char *new, size_t oldlen, size_t newlen, mbstate_t oldstate, mbstate_t newstate)
-+{
-+  size_t i, j, chars;
-+  const char *str[2];
-+  char *copy[2];
-+  size_t len[2];
-+  mbstate_t state[2];
-+  size_t mblength;
-+  wchar_t wc, uwc;
-+  mbstate_t state_bak;
-+
-+  str[0] = old;
-+  str[1] = new;
-+  len[0] = oldlen;
-+  len[1] = newlen;
-+  state[0] = oldstate;
-+  state[1] = newstate;
-+
-+  for (i = 0; i < 2; i++)
-+    {
-+      copy[i] = alloca (len[i] + 1);
-+
-+      for (j = 0, chars = 0; j < len[i] && chars < check_chars; chars++)
-+      {
-+        state_bak = state[i];
-+        mblength = mbrtowc (&wc, str[i] + j, len[i] - j, &(state[i]));
-+
-+        switch (mblength)
-+          {
-+          case (size_t)-1:
-+          case (size_t)-2:
-+            state[i] = state_bak;
-+            /* Fall through */
-+          case 0:
-+            mblength = 1;
-+            break;
-+
-+          default:
-+            if (ignore_case)
-+              {
-+                uwc = towupper (wc);
-+
-+                if (uwc != wc)
-+                  {
-+                    mbstate_t state_wc;
-+
-+                    memset (&state_wc, '\0', sizeof(mbstate_t));
-+                    wcrtomb (copy[i] + j, uwc, &state_wc);
-+                  }
-+                else
-+                  memcpy (copy[i] + j, str[i] + j, mblength);
-+              }
-+            else
-+              memcpy (copy[i] + j, str[i] + j, mblength);
-+          }
-+        j += mblength;
-+      }
-+      copy[i][j] = '\0';
-+      len[i] = j;
-+    }
-+
-+  return xmemcoll (copy[0], len[0], copy[1], len[1]);
- }
-+#endif
- /* Output the line in linebuffer LINE to standard output
-    provided that the switches say it should be output.
-@@ -286,15 +469,43 @@
-     {
-       char *prevfield IF_LINT (= NULL);
-       size_t prevlen IF_LINT (= 0);
-+#if HAVE_MBRTOWC
-+      mbstate_t prevstate;
-+
-+      memset (&prevstate, '\0', sizeof (mbstate_t));
-+#endif
-       while (!feof (stdin))
-       {
-         char *thisfield;
-         size_t thislen;
-+#if HAVE_MBRTOWC
-+        mbstate_t thisstate;
-+#endif
-+
-         if (readlinebuffer (thisline, stdin) == 0)
-           break;
-         thisfield = find_field (thisline);
-         thislen = thisline->length - 1 - (thisfield - thisline->buffer);
-+#if HAVE_MBRTOWC
-+        if (MB_CUR_MAX > 1)
-+            {
-+            thisstate = thisline->state;
-+
-+            if (prevline->length == 0 || different_multi
-+              (thisfield, prevfield, thislen, prevlen, thisstate, prevstate))
-+              {
-+                fwrite (thisline->buffer, sizeof (char),
-+                        thisline->length, stdout);
-+
-+                SWAP_LINES (prevline, thisline);
-+                prevfield = thisfield;
-+                prevlen = thislen;
-+                prevstate = thisstate;
-+              }
-+          }
-+      else
-+#endif
-         if (prevline->length == 0
-             || different (thisfield, prevfield, thislen, prevlen))
-           {
-@@ -313,17 +524,26 @@
-       size_t prevlen;
-       uintmax_t match_count = 0;
-       bool first_delimiter = true;
-+#if HAVE_MBRTOWC
-+      mbstate_t prevstate;
-+#endif
-       if (readlinebuffer (prevline, stdin) == 0)
-       goto closefiles;
-       prevfield = find_field (prevline);
-       prevlen = prevline->length - 1 - (prevfield - prevline->buffer);
-+#if HAVE_MBRTOWC
-+      prevstate = prevline->state;
-+#endif
-       while (!feof (stdin))
-       {
-         bool match;
-         char *thisfield;
-         size_t thislen;
-+#if HAVE_MBRTOWC
-+        mbstate_t thisstate;
-+#endif
-         if (readlinebuffer (thisline, stdin) == 0)
-           {
-             if (ferror (stdin))
-@@ -332,6 +552,15 @@
-           }
-         thisfield = find_field (thisline);
-         thislen = thisline->length - 1 - (thisfield - thisline->buffer);
-+#if HAVE_MBRTOWC
-+        if (MB_CUR_MAX > 1)
-+          {
-+              thisstate = thisline->state;
-+              match = !different_multi (thisfield, prevfield,
-+                                thislen, prevlen, thisstate, prevstate);
-+            }
-+        else
-+#endif
-         match = !different (thisfield, prevfield, thislen, prevlen);
-         match_count += match;
-@@ -364,6 +593,9 @@
-             SWAP_LINES (prevline, thisline);
-             prevfield = thisfield;
-             prevlen = thislen;
-+#if HAVE_MBRTOWC
-+            prevstate = thisstate;
-+#endif
-             if (!match)
-               match_count = 0;
-           }
-@@ -408,6 +640,19 @@
-   atexit (close_stdout);
-+#if HAVE_MBRTOWC
-+  if (MB_CUR_MAX > 1)
-+    {
-+      find_field = find_field_multi;
-+    }
-+  else
-+#endif
-+    {
-+      find_field = find_field_uni;
-+    }
-+
-+
-+
-   skip_chars = 0;
-   skip_fields = 0;
-   check_chars = SIZE_MAX;
---- coreutils-5.93/src/expand.c.i18n   2005-08-12 08:16:25.000000000 +0100
-+++ coreutils-5.93/src/expand.c        2005-12-23 08:53:01.000000000 +0000
-@@ -38,11 +38,28 @@
- #include <stdio.h>
- #include <getopt.h>
- #include <sys/types.h>
-+
-+/* Get mbstate_t, mbrtowc(), wcwidth(). */
-+#if HAVE_WCHAR_H
-+# include <wchar.h>
-+#endif
-+
- #include "system.h"
- #include "error.h"
- #include "quote.h"
- #include "xstrndup.h"
-+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
-+   installation; work around this configuration error.  */
-+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
-+# define MB_LEN_MAX 16
-+#endif
-+
-+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t.  */
-+#if HAVE_MBRTOWC && defined mbstate_t
-+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
-+#endif
-+
- /* The official name of this program (e.g., no `g' prefix).  */
- #define PROGRAM_NAME "expand"
-@@ -182,6 +199,7 @@
-             stops = num_start + len - 1;
-           }
-       }
-+
-       else
-       {
-         error (0, 0, _("tab size contains invalid character(s): %s"),
-@@ -364,6 +382,142 @@
-     }
- }
-+#if HAVE_MBRTOWC
-+static void
-+expand_multibyte (void)
-+{
-+  FILE *fp;                   /* Input strem. */
-+  mbstate_t i_state;          /* Current shift state of the input stream. */
-+  mbstate_t i_state_bak;      /* Back up the I_STATE. */
-+  mbstate_t o_state;          /* Current shift state of the output stream. */
-+  char buf[MB_LEN_MAX + BUFSIZ];  /* For spooling a read byte sequence. */
-+  char *bufpos;                       /* Next read position of BUF. */
-+  size_t buflen = 0;          /* The length of the byte sequence in buf. */
-+  wchar_t wc;                 /* A gotten wide character. */
-+  size_t mblength;            /* The byte size of a multibyte character
-+                                 which shows as same character as WC. */
-+  int tab_index = 0;          /* Index in `tab_list' of next tabstop. */
-+  int column = 0;             /* Column on screen of the next char. */
-+  int next_tab_column;                /* Column the next tab stop is on. */
-+  int convert = 1;            /* If nonzero, perform translations. */
-+
-+  fp = next_file ((FILE *) NULL);
-+  if (fp == NULL)
-+    return;
-+
-+  memset (&o_state, '\0', sizeof(mbstate_t));
-+  memset (&i_state, '\0', sizeof(mbstate_t));
-+
-+  for (;;)
-+    {
-+      /* Refill the buffer BUF. */
-+      if (buflen < MB_LEN_MAX && !feof(fp) && !ferror(fp))
-+      {
-+        memmove (buf, bufpos, buflen);
-+        buflen += fread (buf + buflen, sizeof(char), BUFSIZ, fp);
-+        bufpos = buf;
-+      }
-+
-+      /* No character is left in BUF. */
-+      if (buflen < 1)
-+      {
-+        fp = next_file (fp);
-+
-+        if (fp == NULL)
-+          break;              /* No more files. */
-+        else
-+          {
-+            memset (&i_state, '\0', sizeof(mbstate_t));
-+            continue;
-+          }
-+      }
-+
-+      /* Get a wide character. */
-+      i_state_bak = i_state;
-+      mblength = mbrtowc (&wc, bufpos, buflen, &i_state);
-+
-+      switch (mblength)
-+      {
-+      case (size_t)-1:        /* illegal byte sequence. */
-+      case (size_t)-2:
-+        mblength = 1;
-+        i_state = i_state_bak;
-+        if (convert)
-+          {
-+            ++column;
-+            if (convert_entire_line == 0)
-+              convert = 0;
-+          }
-+        putchar (*bufpos);
-+        break;
-+
-+      case 0:         /* null. */
-+        mblength = 1;
-+        if (convert && convert_entire_line == 0)
-+          convert = 0;
-+        putchar ('\0');
-+        break;
-+
-+      default:
-+        if (wc == L'\n')   /* LF. */
-+          {
-+            tab_index = 0;
-+            column = 0;
-+            convert = 1;
-+            putchar ('\n');
-+          }
-+        else if (wc == L'\t' && convert)      /* Tab. */
-+          {
-+            if (tab_size == 0)
-+              {
-+                /* Do not let tab_index == first_free_tab;
-+                   stop when it is 1 less. */
-+                while (tab_index < first_free_tab - 1
-+                    && column >= tab_list[tab_index])
-+                  tab_index++;
-+                next_tab_column = tab_list[tab_index];
-+                if (tab_index < first_free_tab - 1)
-+                  tab_index++;
-+                if (column >= next_tab_column)
-+                  next_tab_column = column + 1;
-+              }
-+            else
-+              next_tab_column = column + tab_size - column % tab_size;
-+
-+            while (column < next_tab_column)
-+              {
-+                putchar (' ');
-+                ++column;
-+              }
-+          }
-+        else  /* Others. */
-+          {
-+            if (convert)
-+              {
-+                if (wc == L'\b')
-+                  {
-+                    if (column > 0)
-+                      --column;
-+                  }
-+                else
-+                  {
-+                    int width;                /* The width of WC. */
-+
-+                    width = wcwidth (wc);
-+                    column += (width > 0) ? width : 0;
-+                    if (convert_entire_line == 0)
-+                      convert = 0;
-+                  }
-+              }
-+            fwrite (bufpos, sizeof(char), mblength, stdout);
-+          }
-+      }
-+      buflen -= mblength;
-+      bufpos += mblength;
-+    }
-+}
-+#endif
-+
- int
- main (int argc, char **argv)
- {
-@@ -428,7 +582,12 @@
-   file_list = (optind < argc ? &argv[optind] : stdin_argv);
--  expand ();
-+#if HAVE_MBRTOWC
-+  if (MB_CUR_MAX > 1)
-+    expand_multibyte ();
-+  else
-+#endif
-+    expand ();
-   if (have_read_stdin && fclose (stdin) != 0)
-     error (EXIT_FAILURE, errno, "-");
---- coreutils-5.93/src/fold.c.i18n     2005-08-12 08:29:38.000000000 +0100
-+++ coreutils-5.93/src/fold.c  2005-12-23 08:53:01.000000000 +0000
-@@ -23,11 +23,33 @@
- #include <getopt.h>
- #include <sys/types.h>
-+/* Get mbstate_t, mbrtowc(), wcwidth().  */
-+#if HAVE_WCHAR_H
-+# include <wchar.h>
-+#endif
-+
-+/* Get iswprint(), iswblank(), wcwidth().  */
-+#if HAVE_WCTYPE_H
-+# include <wctype.h>
-+#endif
-+
- #include "system.h"
- #include "error.h"
- #include "quote.h"
- #include "xstrtol.h"
-+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
-+      installation; work around this configuration error.  */
-+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
-+# undef MB_LEN_MAX
-+# define MB_LEN_MAX 16
-+#endif
-+
-+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t.  */
-+#if HAVE_MBRTOWC && defined mbstate_t
-+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
-+#endif
-+
- #define TAB_WIDTH 8
- /* The official name of this program (e.g., no `g' prefix).  */
-@@ -35,23 +57,44 @@
- #define AUTHORS "David MacKenzie"
-+#define FATAL_ERROR(Message)                                            \
-+  do                                                                    \
-+    {                                                                   \
-+      error (0, 0, (Message));                                          \
-+      usage (2);                                                        \
-+    }                                                                   \
-+  while (0)
-+
-+enum operating_mode
-+{
-+  /* Fold texts by columns that are at the given positions. */
-+  column_mode,
-+
-+  /* Fold texts by bytes that are at the given positions. */
-+  byte_mode,
-+
-+  /* Fold texts by characters that are at the given positions. */
-+  character_mode,
-+};
-+
- /* The name this program was run with. */
- char *program_name;
-+/* The argument shows current mode. (Default: column_mode) */
-+static enum operating_mode operating_mode;
-+
- /* If nonzero, try to break on whitespace. */
- static bool break_spaces;
--/* If nonzero, count bytes, not column positions. */
--static bool count_bytes;
--
- /* If nonzero, at least one of the files we read was standard input. */
- static bool have_read_stdin;
--static char const shortopts[] = "bsw:0::1::2::3::4::5::6::7::8::9::";
-+static char const shortopts[] = "bcsw:0::1::2::3::4::5::6::7::8::9::";
- static struct option const longopts[] =
- {
-   {"bytes", no_argument, NULL, 'b'},
-+  {"characters", no_argument, NULL, 'c'},
-   {"spaces", no_argument, NULL, 's'},
-   {"width", required_argument, NULL, 'w'},
-   {GETOPT_HELP_OPTION_DECL},
-@@ -81,6 +124,7 @@
- "), stdout);
-       fputs (_("\
-   -b, --bytes         count bytes rather than columns\n\
-+  -c, --characters    count characters rather than columns\n\
-   -s, --spaces        break at spaces\n\
-   -w, --width=WIDTH   use WIDTH columns instead of 80\n\
- "), stdout);
-@@ -98,7 +142,7 @@
- static size_t
- adjust_column (size_t column, char c)
- {
--  if (!count_bytes)
-+  if (operating_mode != byte_mode)
-     {
-       if (c == '\b')
-       {
-@@ -117,35 +161,14 @@
-   return column;
- }
--/* Fold file FILENAME, or standard input if FILENAME is "-",
--   to stdout, with maximum line length WIDTH.
--   Return true if successful.  */
--
--static bool
--fold_file (char *filename, size_t width)
-+static void
-+fold_text (FILE *istream, size_t width, int *saved_errno)
- {
--  FILE *istream;
-   int c;
-   size_t column = 0;          /* Screen column where next char will go. */
-   size_t offset_out = 0;      /* Index in `line_out' for next char. */
-   static char *line_out = NULL;
-   static size_t allocated_out = 0;
--  int saved_errno;
--
--  if (STREQ (filename, "-"))
--    {
--      istream = stdin;
--      have_read_stdin = true;
--    }
--  else
--    istream = fopen (filename, "r");
--
--  if (istream == NULL)
--    {
--      error (0, errno, "%s", filename);
--      return false;
--    }
--
-   while ((c = getc (istream)) != EOF)
-     {
-       if (offset_out + 1 >= allocated_out)
-@@ -172,6 +195,15 @@
-             bool found_blank = false;
-             size_t logical_end = offset_out;
-+            /* If LINE_OUT has no wide character,
-+               put a new wide character in LINE_OUT
-+               if column is bigger than width. */
-+            if (offset_out == 0)
-+              {
-+                line_out[offset_out++] = c;
-+                continue;
-+              }
-+
-             /* Look for the last blank. */
-             while (logical_end)
-               {
-@@ -218,11 +250,225 @@
-       line_out[offset_out++] = c;
-     }
--  saved_errno = errno;
-+  *saved_errno = errno;
-+
-+  if (offset_out)
-+    fwrite (line_out, sizeof (char), (size_t) offset_out, stdout);
-+
-+  free(line_out);
-+}
-+
-+#if HAVE_MBRTOWC
-+static void
-+fold_multibyte_text (FILE *istream, int width, int *saved_errno)
-+{
-+  char buf[MB_LEN_MAX + BUFSIZ];  /* For spooling a read byte sequence. */
-+  size_t buflen = 0;  /* The length of the byte sequence in buf. */
-+  char *bufpos;         /* Next read position of BUF. */
-+  wint_t wc;          /* A gotten wide character. */
-+  size_t mblength;    /* The byte size of a multibyte character which shows
-+                         as same character as WC. */
-+  mbstate_t state, state_bak; /* State of the stream. */
-+  int convfail;               /* 1, when conversion is failed. Otherwise 0. */
-+
-+  char *line_out = NULL;
-+  size_t offset_out = 0;      /* Index in `line_out' for next char. */
-+  size_t allocated_out = 0;
-+
-+  int increment;
-+  size_t column = 0;
-+
-+  size_t last_blank_pos;
-+  size_t last_blank_column;
-+  int is_blank_seen;
-+  int last_blank_increment;
-+  int is_bs_following_last_blank;
-+  size_t bs_following_last_blank_num;
-+  int is_cr_after_last_blank;
-+
-+#define CLEAR_FLAGS                           \
-+   do                                         \
-+     {                                                \
-+      last_blank_pos = 0;                     \
-+      last_blank_column = 0;                  \
-+      is_blank_seen = 0;                      \
-+      is_bs_following_last_blank = 0;         \
-+      bs_following_last_blank_num = 0;        \
-+      is_cr_after_last_blank = 0;             \
-+     }                                                \
-+   while (0)
-+
-+#define START_NEW_LINE                        \
-+   do                                 \
-+     {                                        \
-+      putchar ('\n');                 \
-+      column = 0;                     \
-+      offset_out = 0;                 \
-+      CLEAR_FLAGS;                    \
-+    }                                 \
-+   while (0)
-+
-+  CLEAR_FLAGS;
-+  memset (&state, '\0', sizeof(mbstate_t));
-+
-+  for (;; bufpos += mblength, buflen -= mblength)
-+    {
-+      if (buflen < MB_LEN_MAX && !feof (istream) && !ferror (istream))
-+      {
-+        memmove (buf, bufpos, buflen);
-+        buflen += fread (buf + buflen, sizeof(char), BUFSIZ, istream);
-+        bufpos = buf;
-+      }
-+
-+      if (buflen < 1)
-+      break;
-+
-+      /* Get a wide character. */
-+      convfail = 0;
-+      state_bak = state;
-+      mblength = mbrtowc ((wchar_t *)&wc, bufpos, buflen, &state);
-+
-+      switch (mblength)
-+      {
-+      case (size_t)-1:
-+      case (size_t)-2:
-+        convfail++;
-+        state = state_bak;
-+        /* Fall through. */
-+
-+      case 0:
-+        mblength = 1;
-+        break;
-+      }
-+
-+rescan:
-+      if (operating_mode == byte_mode)                        /* byte mode */
-+      increment = mblength;
-+      else if (operating_mode == character_mode)      /* character mode */
-+      increment = 1;
-+      else                                            /* column mode */
-+      {
-+        if (convfail)
-+          increment = 1;
-+        else
-+          {
-+            switch (wc)
-+              {
-+              case L'\n':
-+                fwrite (line_out, sizeof(char), offset_out, stdout);
-+                START_NEW_LINE;
-+                continue;
-+                
-+              case L'\b':
-+                increment = (column > 0) ? -1 : 0;
-+                break;
-+
-+              case L'\r':
-+                increment = -1 * column;
-+                break;
-+
-+              case L'\t':
-+                increment = 8 - column % 8;
-+                break;
-+
-+              default:
-+                increment = wcwidth (wc);
-+                increment = (increment < 0) ? 0 : increment;
-+              }
-+          }
-+      }
-+
-+      if (column + increment > width && break_spaces && last_blank_pos)
-+      {
-+        fwrite (line_out, sizeof(char), last_blank_pos, stdout);
-+        putchar ('\n');
-+
-+        offset_out = offset_out - last_blank_pos;
-+        column = column - last_blank_column + ((is_cr_after_last_blank)
-+            ? last_blank_increment : bs_following_last_blank_num);
-+        memmove (line_out, line_out + last_blank_pos, offset_out);
-+        CLEAR_FLAGS;
-+        goto rescan;
-+      }
-+
-+      if (column + increment > width && column != 0)
-+      {
-+        fwrite (line_out, sizeof(char), offset_out, stdout);
-+        START_NEW_LINE;
-+        goto rescan;
-+      }
-+
-+      if (allocated_out < offset_out + mblength)
-+      {
-+        allocated_out += 1024;
-+        line_out = xrealloc (line_out, allocated_out);
-+      }
-+
-+      memcpy (line_out + offset_out, bufpos, mblength);
-+      offset_out += mblength;
-+      column += increment;
-+
-+      if (is_blank_seen && !convfail && wc == L'\r')
-+      is_cr_after_last_blank = 1;
-+
-+      if (is_bs_following_last_blank && !convfail && wc == L'\b')
-+      ++bs_following_last_blank_num;
-+      else
-+      is_bs_following_last_blank = 0;
-+
-+      if (break_spaces && !convfail && iswblank (wc))
-+      {
-+        last_blank_pos = offset_out;
-+        last_blank_column = column;
-+        is_blank_seen = 1;
-+        last_blank_increment = increment;
-+        is_bs_following_last_blank = 1;
-+        bs_following_last_blank_num = 0;
-+        is_cr_after_last_blank = 0;
-+      }
-+    }
-+
-+  *saved_errno = errno;
-   if (offset_out)
-     fwrite (line_out, sizeof (char), (size_t) offset_out, stdout);
-+  free(line_out);
-+}
-+#endif
-+
-+/* Fold file FILENAME, or standard input if FILENAME is "-",
-+   to stdout, with maximum line length WIDTH.
-+   Return 0 if successful, 1 if an error occurs. */
-+
-+static int
-+fold_file (char *filename, int width)
-+{
-+  FILE *istream;
-+  int saved_errno;
-+
-+  if (STREQ (filename, "-"))
-+    {
-+      istream = stdin;
-+      have_read_stdin = 1;
-+    }
-+  else
-+    istream = fopen (filename, "r");
-+
-+  if (istream == NULL)
-+    {
-+      error (0, errno, "%s", filename);
-+      return 1;
-+    }
-+
-+  /* Define how ISTREAM is being folded. */
-+#if HAVE_MBRTOWC
-+  if (MB_CUR_MAX > 1)
-+    fold_multibyte_text (istream, width, &saved_errno);
-+  else
-+#endif
-+    fold_text (istream, width, &saved_errno);
-+
-   if (ferror (istream))
-     {
-       error (0, saved_errno, "%s", filename);
-@@ -255,7 +501,8 @@
-   atexit (close_stdout);
--  break_spaces = count_bytes = have_read_stdin = false;
-+  operating_mode = column_mode;
-+  break_spaces = have_read_stdin = false;
-   while ((optc = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1)
-     {
-@@ -264,7 +511,15 @@
-       switch (optc)
-       {
-       case 'b':               /* Count bytes rather than columns. */
--        count_bytes = true;
-+        if (operating_mode != column_mode)
-+          FATAL_ERROR (_("only one way of folding may be specified"));
-+        operating_mode = byte_mode;
-+        break;
-+
-+      case 'c':
-+        if (operating_mode != column_mode)
-+          FATAL_ERROR (_("only one way of folding may be specified"));
-+        operating_mode = character_mode;
-         break;
-       case 's':               /* Break at word boundaries. */
---- coreutils-5.93/src/join.c.i18n     2005-08-12 08:16:25.000000000 +0100
-+++ coreutils-5.93/src/join.c  2005-12-23 08:53:01.000000000 +0000
-@@ -23,16 +23,30 @@
- #include <sys/types.h>
- #include <getopt.h>
-+/* Get mbstate_t, mbrtowc(), mbrtowc(), wcwidth().  */
-+#if HAVE_WCHAR_H
-+# include <wchar.h>
-+#endif
-+
-+/* Get iswblank(), towupper.  */
-+#if HAVE_WCTYPE_H
-+# include <wctype.h>
-+#endif
-+
- #include "system.h"
- #include "error.h"
- #include "hard-locale.h"
- #include "linebuffer.h"
--#include "memcasecmp.h"
- #include "quote.h"
- #include "stdio--.h"
- #include "xmemcoll.h"
- #include "xstrtol.h"
-+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t.  */
-+#if HAVE_MBRTOWC && defined mbstate_t
-+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
-+#endif
-+
- /* The official name of this program (e.g., no `g' prefix).  */
- #define PROGRAM_NAME "join"
-@@ -104,10 +118,12 @@
- /* Last element in `outlist', where a new element can be added.  */
- static struct outlist *outlist_end = &outlist_head;
--/* Tab character separating fields.  If negative, fields are separated
--   by any nonempty string of blanks, otherwise by exactly one
--   tab character whose value (when cast to unsigned char) equals TAB.  */
--static int tab = -1;
-+/* Tab character separating fields.  If NULL, fields are separated
-+   by any nonempty string of blanks.  */
-+static char *tab = NULL;
-+
-+/* The number of bytes used for tab. */
-+static size_t tablen = 0;
- static struct option const longopts[] =
- {
-@@ -197,6 +213,8 @@
- /* Fill in the `fields' structure in LINE.  */
-+/* Fill in the `fields' structure in LINE.  */
-+
- static void
- xfields (struct line *line)
- {
-@@ -206,10 +224,11 @@
-   if (ptr == lim)
-     return;
--  if (0 <= tab)
-+  if (tab != NULL)
-     {
-+      unsigned char t = tab[0];
-       char *sep;
--      for (; (sep = memchr (ptr, tab, lim - ptr)) != NULL; ptr = sep + 1)
-+      for (; (sep = memchr (ptr, t, lim - ptr)) != NULL; ptr = sep + 1)
-       extract_field (line, ptr, sep - ptr);
-     }
-   else
-@@ -236,6 +255,148 @@
-   extract_field (line, ptr, lim - ptr);
- }
-+#if HAVE_MBRTOWC
-+static void
-+xfields_multibyte (struct line *line)
-+{
-+  char *ptr = line->buf.buffer;
-+  char const *lim = ptr + line->buf.length - 1;
-+  wchar_t wc = 0;
-+  size_t mblength = 1;
-+  mbstate_t state, state_bak;
-+
-+  memset (&state, 0, sizeof (mbstate_t));
-+
-+  if (ptr == lim)
-+    return;
-+
-+  if (tab != NULL)
-+    {
-+      unsigned char t = tab[0];
-+      char *sep = ptr;
-+      for (; ptr < lim; ptr = sep + mblength)
-+      {
-+        sep = ptr;
-+        while (sep < lim)
-+          {
-+            state_bak = state;
-+            mblength = mbrtowc (&wc, sep, lim - sep + 1, &state);
-+
-+            if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+              {
-+                mblength = 1;
-+                state = state_bak;
-+              }
-+            mblength = (mblength < 1) ? 1 : mblength;
-+
-+            if (mblength == tablen && !memcmp (sep, tab, mblength))
-+              break;
-+            else
-+              {
-+                sep += mblength;
-+                continue;
-+              }
-+          }
-+
-+        if (sep == lim)
-+          break;
-+
-+        extract_field (line, ptr, sep - ptr);
-+      }
-+    }
-+  else
-+    {
-+      /* Skip leading blanks before the first field.  */
-+      while(ptr < lim)
-+      {
-+        state_bak = state;
-+        mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state);
-+
-+        if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+          {
-+            mblength = 1;
-+            state = state_bak;
-+            break;
-+          }
-+        mblength = (mblength < 1) ? 1 : mblength;
-+
-+        if (!iswblank(wc))
-+          break;
-+        ptr += mblength;
-+      }
-+
-+      do
-+      {
-+        char *sep;
-+        state_bak = state;
-+        mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state);
-+        if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+          {
-+            mblength = 1;
-+            state = state_bak;
-+            break;
-+          }
-+        mblength = (mblength < 1) ? 1 : mblength;
-+
-+        sep = ptr + mblength;
-+        while (sep != lim)
-+          {
-+            state_bak = state;
-+            mblength = mbrtowc (&wc, sep, lim - sep + 1, &state);
-+            if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+              {
-+                mblength = 1;
-+                state = state_bak;
-+                break;
-+              }
-+            mblength = (mblength < 1) ? 1 : mblength;
-+
-+            if (iswblank (wc))
-+              break;
-+
-+            sep += mblength;
-+          }
-+
-+        extract_field (line, ptr, sep - ptr);
-+        if (sep == lim)
-+          return;
-+
-+        state_bak = state;
-+        mblength = mbrtowc (&wc, sep, lim - sep + 1, &state);
-+        if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+          {
-+            mblength = 1;
-+            state = state_bak;
-+            break;
-+          }
-+        mblength = (mblength < 1) ? 1 : mblength;
-+
-+        ptr = sep + mblength;
-+        while (ptr != lim)
-+          {
-+            state_bak = state;
-+            mblength = mbrtowc (&wc, ptr, lim - ptr + 1, &state);
-+            if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+              {
-+                mblength = 1;
-+                state = state_bak;
-+                break;
-+              }
-+            mblength = (mblength < 1) ? 1 : mblength;
-+
-+            if (!iswblank (wc))
-+              break;
-+
-+            ptr += mblength;
-+          }
-+      }
-+      while (ptr != lim);
-+    }
-+
-+  extract_field (line, ptr, lim - ptr);
-+}
-+#endif
-+
- /* Read a line from FP into LINE and split it into fields.
-    Return true if successful.  */
-@@ -256,6 +417,11 @@
-   line->nfields_allocated = 0;
-   line->nfields = 0;
-   line->fields = NULL;
-+#if HAVE_MBRTOWC
-+  if (MB_CUR_MAX > 1)
-+    xfields_multibyte (line);
-+  else
-+#endif
-   xfields (line);
-   return true;
- }
-@@ -310,56 +476,114 @@
- keycmp (struct line const *line1, struct line const *line2)
- {
-   /* Start of field to compare in each file.  */
--  char *beg1;
--  char *beg2;
--
--  size_t len1;
--  size_t len2;                /* Length of fields to compare.  */
-+  char *beg[2];
-+  char *copy[2];
-+  size_t len[2];      /* Length of fields to compare.  */
-   int diff;
-+  int i, j;
-   if (join_field_1 < line1->nfields)
-     {
--      beg1 = line1->fields[join_field_1].beg;
--      len1 = line1->fields[join_field_1].len;
-+      beg[0] = line1->fields[join_field_1].beg;
-+      len[0] = line1->fields[join_field_1].len;
-     }
-   else
-     {
--      beg1 = NULL;
--      len1 = 0;
-+      beg[0] = NULL;
-+      len[0] = 0;
-     }
-   if (join_field_2 < line2->nfields)
-     {
--      beg2 = line2->fields[join_field_2].beg;
--      len2 = line2->fields[join_field_2].len;
-+      beg[1] = line2->fields[join_field_2].beg;
-+      len[1] = line2->fields[join_field_2].len;
-     }
-   else
-     {
--      beg2 = NULL;
--      len2 = 0;
-+      beg[1] = NULL;
-+      len[1] = 0;
-     }
--  if (len1 == 0)
--    return len2 == 0 ? 0 : -1;
--  if (len2 == 0)
-+  if (len[0] == 0)
-+    return len[1] == 0 ? 0 : -1;
-+  if (len[1] == 0)
-     return 1;
-   if (ignore_case)
-     {
--      /* FIXME: ignore_case does not work with NLS (in particular,
--         with multibyte chars).  */
--      diff = memcasecmp (beg1, beg2, MIN (len1, len2));
-+#ifdef HAVE_MBRTOWC
-+      if (MB_CUR_MAX > 1)
-+      {
-+        size_t mblength;
-+        wchar_t wc, uwc;
-+        mbstate_t state, state_bak;
-+
-+        memset (&state, '\0', sizeof (mbstate_t));
-+
-+        for (i = 0; i < 2; i++)
-+          {
-+            copy[i] = alloca (len[i] + 1);
-+
-+            for (j = 0; j < MIN (len[0], len[1]);)
-+              {
-+                state_bak = state;
-+                mblength = mbrtowc (&wc, beg[i] + j, len[i] - j, &state);
-+
-+                switch (mblength)
-+                  {
-+                  case (size_t) -1:
-+                  case (size_t) -2:
-+                    state = state_bak;
-+                    /* Fall through */
-+                  case 0:
-+                    mblength = 1;
-+                    break;
-+
-+                  default:
-+                    uwc = towupper (wc);
-+
-+                    if (uwc != wc)
-+                      {
-+                        mbstate_t state_wc;
-+
-+                        memset (&state_wc, '\0', sizeof (mbstate_t));
-+                        wcrtomb (copy[i] + j, uwc, &state_wc);
-+                      }
-+                    else
-+                      memcpy (copy[i] + j, beg[i] + j, mblength);
-+                  }
-+                j += mblength;
-+              }
-+            copy[i][j] = '\0';
-+          }
-+      }
-+      else
-+#endif
-+      {
-+        for (i = 0; i < 2; i++)
-+          {
-+            copy[i] = alloca (len[i] + 1);
-+
-+            for (j = 0; j < MIN (len[0], len[1]); j++)
-+              copy[i][j] = toupper (beg[i][j]);
-+
-+            copy[i][j] = '\0';
-+          }
-+      }
-     }
-   else
-     {
--      if (hard_LC_COLLATE)
--      return xmemcoll (beg1, len1, beg2, len2);
--      diff = memcmp (beg1, beg2, MIN (len1, len2));
-+      copy[0] = (unsigned char *) beg[0];
-+      copy[1] = (unsigned char *) beg[1];
-     }
-+  if (HAVE_SETLOCALE && hard_LC_COLLATE)
-+    return xmemcoll ((char *) copy[0], len[0], (char *) copy[1], len[1]);
-+  diff = memcmp (copy[0], copy[1], MIN (len[0], len[1]));
-+
-   if (diff)
-     return diff;
--  return len1 < len2 ? -1 : len1 != len2;
-+  return len[0] - len[1];
- }
- /* Print field N of LINE if it exists and is nonempty, otherwise
-@@ -384,11 +608,18 @@
- /* Print the join of LINE1 and LINE2.  */
-+#define PUT_TAB_CHAR                                                  \
-+  do                                                                  \
-+    {                                                                 \
-+      (tab != NULL) ?                                                 \
-+      fwrite(tab, sizeof(char), tablen, stdout) : putchar (' ');      \
-+    }                                                                 \
-+  while (0)                                                           
-+
- static void
- prjoin (struct line const *line1, struct line const *line2)
- {
-   const struct outlist *outlist;
--  char output_separator = tab < 0 ? ' ' : tab;
-   outlist = outlist_head.next;
-   if (outlist)
-@@ -404,12 +635,12 @@
-         if (o->file == 0)
-           {
-             if (line1 == &uni_blank)
--              {
-+              {
-                 line = line2;
-                 field = join_field_2;
-               }
-             else
--              {
-+              {
-                 line = line1;
-                 field = join_field_1;
-               }
-@@ -423,7 +654,7 @@
-         o = o->next;
-         if (o == NULL)
-           break;
--        putchar (output_separator);
-+        PUT_TAB_CHAR;
-       }
-       putchar ('\n');
-     }
-@@ -441,23 +672,23 @@
-       prfield (join_field_1, line1);
-       for (i = 0; i < join_field_1 && i < line1->nfields; ++i)
-       {
--        putchar (output_separator);
-+        PUT_TAB_CHAR;
-         prfield (i, line1);
-       }
-       for (i = join_field_1 + 1; i < line1->nfields; ++i)
-       {
--        putchar (output_separator);
-+        PUT_TAB_CHAR;
-         prfield (i, line1);
-       }
-       for (i = 0; i < join_field_2 && i < line2->nfields; ++i)
-       {
--        putchar (output_separator);
-+        PUT_TAB_CHAR;
-         prfield (i, line2);
-       }
-       for (i = join_field_2 + 1; i < line2->nfields; ++i)
-       {
--        putchar (output_separator);
-+        PUT_TAB_CHAR;
-         prfield (i, line2);
-       }
-       putchar ('\n');
-@@ -869,20 +1100,41 @@
-       case 't':
-         {
--          unsigned char newtab = optarg[0];
--          if (! newtab)
-+          char *newtab;
-+          size_t newtablen;
-+          if (! optarg[0])
-             error (EXIT_FAILURE, 0, _("empty tab"));
--          if (optarg[1])
-+          newtab = xstrdup (optarg);
-+#if HAVE_MBRTOWC
-+          if (MB_CUR_MAX > 1)
-+            {
-+              mbstate_t state;
-+
-+              memset (&state, 0, sizeof (mbstate_t));
-+              newtablen = mbrtowc (NULL, newtab,
-+                                   strnlen (newtab, MB_LEN_MAX),
-+                                   &state);
-+              if (newtablen == (size_t) 0
-+                  || newtablen == (size_t) -1
-+                  || newtablen == (size_t) -2)
-+                newtablen = 1;
-+            }
-+          else
-+#endif
-+            newtablen = 1;
-+              
-+          if (newtablen == 1 && newtab[1])
-+            {
-+              if (STREQ (newtab, "\\0"))
-+                newtab[0] = '\0';
-+            }
-+          if (tab != NULL && strcmp (tab, newtab))
-             {
--              if (STREQ (optarg, "\\0"))
--                newtab = '\0';
--              else
--                error (EXIT_FAILURE, 0, _("multi-character tab %s"),
--                       quote (optarg));
-+              free (newtab);
-+              error (EXIT_FAILURE, 0, _("incompatible tabs"));
-             }
--          if (0 <= tab && tab != newtab)
--            error (EXIT_FAILURE, 0, _("incompatible tabs"));
-           tab = newtab;
-+          tablen = newtablen;
-         }
-         break;
---- coreutils-5.93/src/unexpand.c.i18n 2005-08-12 08:16:25.000000000 +0100
-+++ coreutils-5.93/src/unexpand.c      2005-12-23 08:53:01.000000000 +0000
-@@ -39,11 +39,28 @@
- #include <stdio.h>
- #include <getopt.h>
- #include <sys/types.h>
-+
-+/* Get mbstate_t, mbrtowc(), wcwidth(). */
-+#if HAVE_WCHAR_H
-+# include <wchar.h>
-+#endif
-+
- #include "system.h"
- #include "error.h"
- #include "quote.h"
- #include "xstrndup.h"
-+/* MB_LEN_MAX is incorrectly defined to be 1 in at least one GCC
-+      installation; work around this configuration error.  */
-+#if !defined MB_LEN_MAX || MB_LEN_MAX < 2
-+# define MB_LEN_MAX 16
-+#endif
-+
-+/* Some systems, like BeOS, have multibyte encodings but lack mbstate_t.  */
-+#if HAVE_MBRTOWC && defined mbstate_t
-+# define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0)
-+#endif
-+
- /* The official name of this program (e.g., no `g' prefix).  */
- #define PROGRAM_NAME "unexpand"
-@@ -110,6 +127,208 @@
-   {NULL, 0, NULL, 0}
- };
-+static FILE *next_file (FILE *fp);
-+
-+#if HAVE_MBRTOWC
-+static void
-+unexpand_multibyte (void)
-+{
-+  FILE *fp;                   /* Input stream. */
-+  mbstate_t i_state;          /* Current shift state of the input stream. */
-+  mbstate_t i_state_bak;      /* Back up the I_STATE. */
-+  mbstate_t o_state;          /* Current shift state of the output stream. */
-+  char buf[MB_LEN_MAX + BUFSIZ];  /* For spooling a read byte sequence. */
-+  char *bufpos;                       /* Next read position of BUF. */
-+  size_t buflen = 0;          /* The length of the byte sequence in buf. */
-+  wint_t wc;                  /* A gotten wide character. */
-+  size_t mblength;            /* The byte size of a multibyte character
-+                                 which shows as same character as WC. */
-+
-+  /* Index in `tab_list' of next tabstop: */
-+  int tab_index = 0;          /* For calculating width of pending tabs. */
-+  int print_tab_index = 0;    /* For printing as many tabs as possible. */
-+  unsigned int column = 0;    /* Column on screen of next char. */
-+  int next_tab_column;                /* Column the next tab stop is on. */
-+  int convert = 1;            /* If nonzero, perform translations. */
-+  unsigned int pending = 0;   /* Pending columns of blanks. */
-+
-+  fp = next_file ((FILE *) NULL);
-+  if (fp == NULL)
-+    return;
-+
-+  memset (&o_state, '\0', sizeof(mbstate_t));
-+  memset (&i_state, '\0', sizeof(mbstate_t));
-+
-+  for (;;)
-+    {
-+      if (buflen < MB_LEN_MAX && !feof(fp) && !ferror(fp))
-+      {
-+        memmove (buf, bufpos, buflen);
-+        buflen += fread (buf + buflen, sizeof(char), BUFSIZ, fp);
-+        bufpos = buf;
-+      }
-+
-+      /* Get a wide character. */
-+      if (buflen < 1)
-+      {
-+        mblength = 1;
-+        wc = WEOF;
-+      }
-+      else
-+      {
-+        i_state_bak = i_state;
-+        mblength = mbrtowc ((wchar_t *)&wc, bufpos, buflen, &i_state);
-+      }
-+
-+      if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+      {
-+        i_state = i_state_bak;
-+        wc = L'\0';
-+      }
-+
-+      if (wc == L' ' && convert && column < INT_MAX)
-+      {
-+        ++pending;
-+        ++column;
-+      }
-+      else if (wc == L'\t' && convert)
-+      {
-+        if (tab_size == 0)
-+          {
-+            /* Do not let tab_index == first_free_tab;
-+               stop when it is 1 less. */
-+            while (tab_index < first_free_tab - 1
-+                && column >= tab_list[tab_index])
-+              tab_index++;
-+            next_tab_column = tab_list[tab_index];
-+            if (tab_index < first_free_tab - 1)
-+              tab_index++;
-+            if (column >= next_tab_column)
-+              {
-+                convert = 0;  /* Ran out of tab stops. */
-+                goto flush_pend_mb;
-+              }
-+          }
-+        else
-+          {
-+            next_tab_column = column + tab_size - column % tab_size;
-+          }
-+        pending += next_tab_column - column;
-+        column = next_tab_column;
-+      }
-+      else
-+      {
-+flush_pend_mb:
-+        /* Flush pending spaces.  Print as many tabs as possible,
-+           then print the rest as spaces. */
-+        if (pending == 1)
-+          {
-+            putchar (' ');
-+            pending = 0;
-+          }
-+        column -= pending;
-+        while (pending > 0)
-+          {
-+            if (tab_size == 0)
-+              {
-+                /* Do not let print_tab_index == first_free_tab;
-+                   stop when it is 1 less. */
-+                while (print_tab_index < first_free_tab - 1
-+                    && column >= tab_list[print_tab_index])
-+                  print_tab_index++;
-+                next_tab_column = tab_list[print_tab_index];
-+                if (print_tab_index < first_free_tab - 1)
-+                  print_tab_index++;
-+              }
-+            else
-+              {
-+                next_tab_column =
-+                  column + tab_size - column % tab_size;
-+              }
-+            if (next_tab_column - column <= pending)
-+              {
-+                putchar ('\t');
-+                pending -= next_tab_column - column;
-+                column = next_tab_column;
-+              }
-+            else
-+              {
-+                --print_tab_index;
-+                column += pending;
-+                while (pending != 0)
-+                  {
-+                    putchar (' ');
-+                    pending--;
-+                  }
-+              }
-+          }
-+
-+        if (wc == WEOF)
-+          {
-+            fp = next_file (fp);
-+            if (fp == NULL)
-+              break;          /* No more files. */
-+            else
-+              {
-+                memset (&i_state, '\0', sizeof(mbstate_t));
-+                continue;
-+              }
-+          }
-+
-+        if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+          {
-+            if (convert)
-+              {
-+                ++column;
-+                if (convert_entire_line == 0)
-+                  convert = 0;
-+              }
-+            mblength = 1;
-+            putchar (buf[0]);
-+          }
-+        else if (mblength == 0)
-+          {
-+            if (convert && convert_entire_line == 0)
-+              convert = 0;
-+            mblength = 1;
-+            putchar ('\0');
-+          }
-+        else
-+          {
-+            if (convert)
-+              {
-+                if (wc == L'\b')
-+                  {
-+                    if (column > 0)
-+                      --column;
-+                  }
-+                else
-+                  {
-+                    int width;            /* The width of WC. */
-+
-+                    width = wcwidth (wc);
-+                    column += (width > 0) ? width : 0;
-+                    if (convert_entire_line == 0)
-+                      convert = 0;
-+                  }
-+              }
-+
-+            if (wc == L'\n')
-+              {
-+                tab_index = print_tab_index = 0;
-+                column = pending = 0;
-+                convert = 1;
-+              }
-+            fwrite (bufpos, sizeof(char), mblength, stdout);
-+          }
-+      }
-+      buflen -= mblength;
-+      bufpos += mblength;
-+    }
-+}
-+#endif
-+
-+
- void
- usage (int status)
- {
-@@ -532,7 +751,12 @@
-   file_list = (optind < argc ? &argv[optind] : stdin_argv);
--  unexpand ();
-+#if HAVE_MBRTOWC
-+  if (MB_CUR_MAX > 1)
-+    unexpand_multibyte ();
-+  else
-+#endif
-+    unexpand ();
-   if (have_read_stdin && fclose (stdin) != 0)
-     error (EXIT_FAILURE, errno, "-");
---- coreutils-5.93/src/sort.c.i18n     2005-10-07 19:48:28.000000000 +0100
-+++ coreutils-5.93/src/sort.c  2005-12-23 10:38:44.000000000 +0000
-@@ -23,9 +23,18 @@
- #include <config.h>
-+#include <assert.h>
- #include <getopt.h>
- #include <sys/types.h>
- #include <signal.h>
-+#if HAVE_WCHAR_H
-+# include <wchar.h>
-+#endif
-+/* Get isw* functions. */
-+#if HAVE_WCTYPE_H
-+# include <wctype.h>
-+#endif
-+
- #include "system.h"
- #include "error.h"
- #include "hard-locale.h"
-@@ -95,14 +104,38 @@
- /* Thousands separator; if -1, then there isn't one.  */
- static int thousands_sep;
-+static int force_general_numcompare = 0;
-+
- /* Nonzero if the corresponding locales are hard.  */
- static bool hard_LC_COLLATE;
--#if HAVE_NL_LANGINFO
-+#if HAVE_LANGINFO_CODESET
- static bool hard_LC_TIME;
- #endif
- #define NONZERO(x) ((x) != 0)
-+/* get a multibyte character's byte length. */
-+#define GET_BYTELEN_OF_CHAR(LIM, PTR, MBLENGTH, STATE)                        \
-+  do                                                                  \
-+    {                                                                 \
-+      wchar_t wc;                                                     \
-+      mbstate_t state_bak;                                            \
-+                                                                      \
-+      state_bak = STATE;                                              \
-+      mblength = mbrtowc (&wc, PTR, LIM - PTR, &STATE);                       \
-+                                                                      \
-+      switch (MBLENGTH)                                                       \
-+      {                                                               \
-+      case (size_t)-1:                                                \
-+      case (size_t)-2:                                                \
-+        STATE = state_bak;                                            \
-+              /* Fall through. */                                     \
-+      case 0:                                                         \
-+        MBLENGTH = 1;                                                 \
-+      }                                                                       \
-+    }                                                                 \
-+  while (0)
-+
- /* The kind of blanks for '-b' to skip in various options. */
- enum blanktype { bl_start, bl_end, bl_both };
-@@ -239,13 +272,11 @@
-    they were read if all keys compare equal.  */
- static bool stable;
--/* If TAB has this value, blanks separate fields.  */
--enum { TAB_DEFAULT = CHAR_MAX + 1 };
--
--/* Tab character separating fields.  If TAB_DEFAULT, then fields are
-+/* Tab character separating fields.  If tab_length is 0, then fields are
-    separated by the empty string between a non-blank character and a blank
-    character. */
--static int tab = TAB_DEFAULT;
-+static char tab[MB_LEN_MAX + 1];
-+static size_t tab_length = 0;
- /* Flag to remove consecutive duplicate lines from the output.
-    Only the last of a sequence of equal lines will be output. */
-@@ -392,6 +423,44 @@
- static struct tempnode *volatile temphead;
- static struct tempnode *volatile *temptail = &temphead;
-+/* Function pointers. */
-+static void
-+(*inittables) (void);
-+static char *
-+(*begfield) (const struct line*, const struct keyfield *);
-+static char *
-+(*limfield) (const struct line*, const struct keyfield *);
-+static int
-+(*getmonth) (char const *, size_t);
-+static int
-+(*keycompare) (const struct line *, const struct line *);
-+static int
-+(*numcompare) (const char *, const char *);
-+
-+/* Test for white space multibyte character.
-+   Set LENGTH the byte length of investigated multibyte character. */
-+#if HAVE_MBRTOWC
-+static int
-+ismbblank (const char *str, size_t len, size_t *length)
-+{
-+  size_t mblength;
-+  wchar_t wc;
-+  mbstate_t state;
-+
-+  memset (&state, '\0', sizeof(mbstate_t));
-+  mblength = mbrtowc (&wc, str, len, &state);
-+
-+  if (mblength == (size_t)-1 || mblength == (size_t)-2)
-+    {
-+      *length = 1;
-+      return 0;
-+    }
-+
-+  *length = (mblength < 1) ? 1 : mblength;
-+  return iswblank (wc);
-+}
-+#endif
-+
- /* Clean up any remaining temporary files.  */
- static void
-@@ -545,7 +614,7 @@
-   free (node);
- }
--#if HAVE_NL_LANGINFO
-+#if HAVE_LANGINFO_CODESET
- static int
- struct_month_cmp (const void *m1, const void *m2)
-@@ -560,7 +629,7 @@
- /* Initialize the character class tables. */
- static void
--inittables (void)
-+inittables_uni (void)
- {
-   size_t i;
-@@ -572,7 +641,7 @@
-       fold_toupper[i] = (ISLOWER (i) ? toupper (i) : i);
-     }
--#if HAVE_NL_LANGINFO
-+#if HAVE_LANGINFO_CODESET
-   /* If we're not in the "C" locale, read different names for months.  */
-   if (hard_LC_TIME)
-     {
-@@ -598,6 +667,64 @@
- #endif
- }
-+#if HAVE_MBRTOWC
-+static void
-+inittables_mb (void)
-+{
-+  int i, j, k, l;
-+  char *name, *s;
-+  size_t s_len, mblength;
-+  char mbc[MB_LEN_MAX];
-+  wchar_t wc, pwc;
-+  mbstate_t state_mb, state_wc;
-+
-+  for (i = 0; i < MONTHS_PER_YEAR; i++)
-+    {
-+      s = (char *) nl_langinfo (ABMON_1 + i);
-+      s_len = strlen (s);
-+      monthtab[i].name = name = (char *) xmalloc (s_len + 1);
-+      monthtab[i].val = i + 1;
-+
-+      memset (&state_mb, '\0', sizeof (mbstate_t));
-+      memset (&state_wc, '\0', sizeof (mbstate_t));
-+
-+      for (j = 0; j < s_len;)
-+      {
-+        if (!ismbblank (s + j, s_len - j, &mblength))
-+          break;
-+        j += mblength;
-+      }
-+
-+      for (k = 0; j < s_len;)
-+      {
-+        mblength = mbrtowc (&wc, (s + j), (s_len - j), &state_mb);
-+        assert (mblength != (size_t)-1 && mblength != (size_t)-2);
-+        if (mblength == 0)
-+          break;
-+
-+        pwc = towupper (wc);
-+        if (pwc == wc)
-+          {
-+            memcpy (mbc, s + j, mblength);
-+            j += mblength;
-+          }
-+        else
-+          {
-+            j += mblength;
-+            mblength = wcrtomb (mbc, pwc, &state_wc);
-+            assert (mblength != (size_t)0 && mblength != (size_t)-1);
-+          }
-+
-+        for (l = 0; l < mblength; l++)
-+          name[k++] = mbc[l];
-+      }
-+      name[k] = '\0';
-+    }
-+  qsort ((void *) monthtab, MONTHS_PER_YEAR,
-+      sizeof (struct month), struct_month_cmp);
-+}
-+#endif
-+
- /* Specify the amount of main memory to use when sorting.  */
- static void
- specify_sort_size (char const *s)
-@@ -808,7 +935,7 @@
-    by KEY in LINE. */
- static char *
--begfield (const struct line *line, const struct keyfield *key)
-+begfield_uni (const struct line *line, const struct keyfield *key)
- {
-   char *ptr = line->text, *lim = ptr + line->length - 1;
-   size_t sword = key->sword;
-@@ -818,10 +945,10 @@
-   /* The leading field separator itself is included in a field when -t
-      is absent.  */
--  if (tab != TAB_DEFAULT)
-+  if (tab_length)
-     while (ptr < lim && sword--)
-       {
--      while (ptr < lim && *ptr != tab)
-+      while (ptr < lim && *ptr != tab[0])
-         ++ptr;
-       if (ptr < lim)
-         ++ptr;
-@@ -849,11 +976,70 @@
-   return ptr;
- }
-+#if HAVE_MBRTOWC
-+static char *
-+begfield_mb (const struct line *line, const struct keyfield *key)
-+{
-+  int i;
-+  char *ptr = line->text, *lim = ptr + line->length - 1;
-+  size_t sword = key->sword;
-+  size_t schar = key->schar;
-+  size_t mblength;
-+  mbstate_t state;
-+
-+  memset (&state, '\0', sizeof(mbstate_t));
-+
-+  if (tab_length)
-+    while (ptr < lim && sword--)
-+      {
-+      while (ptr < lim && memcmp (ptr, tab, tab_length) != 0)
-+        {
-+          GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+          ptr += mblength;
-+        }
-+      if (ptr < lim)
-+        {
-+          GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+          ptr += mblength;
-+        }
-+      }
-+  else
-+    while (ptr < lim && sword--)
-+      {
-+      while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
-+        ptr += mblength;
-+      if (ptr < lim)
-+        {
-+          GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+          ptr += mblength;
-+        }
-+      while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength))
-+        ptr += mblength;
-+      }
-+
-+  if (key->skipsblanks)
-+    while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
-+      ptr += mblength;
-+
-+  for (i = 0; i < schar; i++)
-+    {
-+      GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+
-+      if (ptr + mblength > lim)
-+      break;
-+      else
-+      ptr += mblength;
-+    }
-+
-+  return ptr;
-+}
-+#endif
-+
- /* Return the limit of (a pointer to the first character after) the field
-    in LINE specified by KEY. */
- static char *
--limfield (const struct line *line, const struct keyfield *key)
-+limfield_uni (const struct line *line, const struct keyfield *key)
- {
-   char *ptr = line->text, *lim = ptr + line->length - 1;
-   size_t eword = key->eword, echar = key->echar;
-@@ -866,10 +1052,10 @@
-      `beginning' is the first character following the delimiting TAB.
-      Otherwise, leave PTR pointing at the first `blank' character after
-      the preceding field.  */
--  if (tab != TAB_DEFAULT)
-+  if (tab_length)
-     while (ptr < lim && eword--)
-       {
--      while (ptr < lim && *ptr != tab)
-+      while (ptr < lim && *ptr != tab[0])
-         ++ptr;
-       if (ptr < lim && (eword | echar))
-         ++ptr;
-@@ -915,10 +1101,10 @@
-      */
-   /* Make LIM point to the end of (one byte past) the current field.  */
--  if (tab != TAB_DEFAULT)
-+  if (tab_length)
-     {
-       char *newlim;
--      newlim = memchr (ptr, tab, lim - ptr);
-+      newlim = memchr (ptr, tab[0], lim - ptr);
-       if (newlim)
-       lim = newlim;
-     }
-@@ -951,6 +1137,107 @@
-   return ptr;
- }
-+#if HAVE_MBRTOWC
-+static char *
-+limfield_mb (const struct line *line, const struct keyfield *key)
-+{
-+  char *ptr = line->text, *lim = ptr + line->length - 1;
-+  size_t eword = key->eword, echar = key->echar;
-+  int i;
-+  size_t mblength;
-+  mbstate_t state;
-+
-+  memset (&state, '\0', sizeof(mbstate_t));
-+
-+  if (tab_length)
-+    while (ptr < lim && eword--)
-+      {
-+      while (ptr < lim && memcmp (ptr, tab, tab_length) != 0)
-+        {
-+          GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+          ptr += mblength;
-+        }
-+      if (ptr < lim && (eword | echar))
-+        {
-+          GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+          ptr += mblength;
-+        }
-+      }
-+  else
-+    while (ptr < lim && eword--)
-+      {
-+      while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
-+        ptr += mblength;
-+      if (ptr < lim)
-+        {
-+          GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+          ptr += mblength;
-+        }
-+      while (ptr < lim && !ismbblank (ptr, lim - ptr, &mblength))
-+        ptr += mblength;
-+      }
-+
-+
-+# ifdef POSIX_UNSPECIFIED
-+  /* Make LIM point to the end of (one byte past) the current field.  */
-+  if (tab_length)
-+    {
-+      char *newlim, *p;
-+
-+      newlim = NULL;
-+      for (p = ptr; p < lim;)
-+      {
-+        if (memcmp (p, tab, tab_length) == 0)
-+          {
-+            newlim = p;
-+            break;
-+          }
-+
-+        GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+        p += mblength;
-+      }
-+    }
-+  else
-+    {
-+      char *newlim;
-+      newlim = ptr;
-+
-+      while (newlim < lim && ismbblank (newlim, lim - newlim, &mblength))
-+      newlim += mblength;
-+      if (ptr < lim)
-+      {
-+        GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+        ptr += mblength;
-+      }
-+      while (newlim < lim && !ismbblank (newlim, lim - newlim, &mblength))
-+      newlim += mblength;
-+      lim = newlim;
-+    }
-+# endif
-+
-+  /* If we're skipping leading blanks, don't start counting characters
-+   *      until after skipping past any leading blanks.  */
-+  if (key->skipsblanks)
-+    while (ptr < lim && ismbblank (ptr, lim - ptr, &mblength))
-+      ptr += mblength;
-+
-+  memset (&state, '\0', sizeof(mbstate_t));
-+
-+  /* Advance PTR by ECHAR (if possible), but no further than LIM.  */
-+  for (i = 0; i < echar; i++)
-+    {
-+      GET_BYTELEN_OF_CHAR (lim, ptr, mblength, state);
-+
-+      if (ptr + mblength > lim)
-+      break;
-+      else
-+      ptr += mblength;
-+    }
-+
-+  return ptr;
-+}
-+#endif
-+
- /* Fill BUF reading from FP, moving buf->left bytes from the end
-    of buf->buf to the beginning first.  If EOF is reached and the
-    file wasn't terminated by a newline, supply one.  Set up BUF's line
-@@ -1067,7 +1354,7 @@
-    hideously fast. */
- static int
--numcompare (const char *a, const char *b)
-+numcompare_uni (const char *a, const char *b)
- {
-   while (blanks[to_uchar (*a)])
-     a++;
-@@ -1077,6 +1364,25 @@
-   return strnumcmp (a, b, decimal_point, thousands_sep);
- }
-+#if HAVE_MBRTOWC
-+static int
-+numcompare_mb (const char *a, const char *b)
-+{
-+  size_t mblength, len;
-+  len = strlen (a); /* okay for UTF-8 */
-+  while (*a && ismbblank (a, len > MB_CUR_MAX ? MB_CUR_MAX : len, &mblength))
-+    {
-+      a += mblength;
-+      len -= mblength;
-+    }
-+  len = strlen (b); /* okay for UTF-8 */
-+  while (*b && ismbblank (b, len > MB_CUR_MAX ? MB_CUR_MAX : len, &mblength))
-+    b += mblength;
-+
-+  return strnumcmp (a, b, decimal_point, thousands_sep);
-+}
-+#endif /* HAV_EMBRTOWC */
-+
- static int
- general_numcompare (const char *sa, const char *sb)
- {
-@@ -1110,7 +1416,7 @@
-    Return 0 if the name in S is not recognized.  */
- static int
--getmonth (char const *month, size_t len)
-+getmonth_uni (char const *month, size_t len)
- {
-   size_t lo = 0;
-   size_t hi = MONTHS_PER_YEAR;
-@@ -1152,11 +1458,79 @@
-   return 0;
- }
-+#if HAVE_MBRTOWC
-+static int
-+getmonth_mb (const char *s, size_t len)
-+{
-+  char *month;
-+  register size_t i;
-+  register int lo = 0, hi = MONTHS_PER_YEAR, result;
-+  char *tmp;
-+  size_t wclength, mblength;
-+  const char **pp;
-+  const wchar_t **wpp;
-+  wchar_t *month_wcs;
-+  mbstate_t state;
-+
-+  while (len > 0 && ismbblank (s, len, &mblength))
-+    {
-+      s += mblength;
-+      len -= mblength;
-+    }
-+
-+  if (len == 0)
-+    return 0;
-+
-+  month = (char *) alloca (len + 1);
-+
-+  tmp = (char *) alloca (len + 1);
-+  memcpy (tmp, s, len);
-+  tmp[len] = '\0';
-+  pp = (const char **)&tmp;
-+  month_wcs = (wchar_t *) alloca ((len + 1) * sizeof (wchar_t));
-+  memset (&state, '\0', sizeof(mbstate_t));
-+
-+  wclength = mbsrtowcs (month_wcs, pp, len + 1, &state);
-+  assert (wclength != (size_t)-1 && *pp == NULL);
-+
-+  for (i = 0; i < wclength; i++)
-+    {
-+      month_wcs[i] = towupper(month_wcs[i]);
-+      if (iswblank (month_wcs[i]))
-+      {
-+        month_wcs[i] = L'\0';
-+        break;
-+      }
-+    }
-+
-+  wpp = (const wchar_t **)&month_wcs;
-+
-+  mblength = wcsrtombs (month, wpp, len + 1, &state);
-+  assert (mblength != (-1) && *wpp == NULL);
-+
-+  do
-+    {
-+      int ix = (lo + hi) / 2;
-+
-+      if (strncmp (month, monthtab[ix].name, strlen (monthtab[ix].name)) < 0)
-+      hi = ix;
-+      else
-+      lo = ix;
-+    }
-+  while (hi - lo > 1);
-+
-+  result = (!strncmp (month, monthtab[lo].name, strlen (monthtab[lo].name))
-+      ? monthtab[lo].val : 0);
-+
-+  return result;
-+}
-+#endif
-+
- /* Compare two lines A and B trying every key in sequence until there
-    are no more keys or a difference is found. */
- static int
--keycompare (const struct line *a, const struct line *b)
-+keycompare_uni (const struct line *a, const struct line *b)
- {
-   struct keyfield const *key = keylist;
-@@ -1326,6 +1700,177 @@
-   return key->reverse ? -diff : diff;
- }
-+#if HAVE_MBRTOWC
-+static int
-+keycompare_mb (const struct line *a, const struct line *b)
-+{
-+  struct keyfield *key = keylist;
-+
-+  /* For the first iteration only, the key positions have been
-+     precomputed for us. */
-+  char *texta = a->keybeg;
-+  char *textb = b->keybeg;
-+  char *lima = a->keylim;
-+  char *limb = b->keylim;
-+
-+  size_t mblength_a, mblength_b;
-+  wchar_t wc_a, wc_b;
-+  mbstate_t state_a, state_b;
-+
-+  int diff;
-+
-+  memset (&state_a, '\0', sizeof(mbstate_t));
-+  memset (&state_b, '\0', sizeof(mbstate_t));
-+
-+  for (;;)
-+    {
-+      unsigned char *translate = (unsigned char *) key->translate;
-+      bool const *ignore = key->ignore;
-+
-+      /* Find the lengths. */
-+      size_t lena = lima <= texta ? 0 : lima - texta;
-+      size_t lenb = limb <= textb ? 0 : limb - textb;
-+
-+      /* Actually compare the fields. */
-+      if (key->numeric | key->general_numeric)
-+      {
-+        char savea = *lima, saveb = *limb;
-+
-+        *lima = *limb = '\0';
-+        if (force_general_numcompare)
-+          diff = general_numcompare (texta, textb);
-+        else
-+          diff = ((key->numeric ? numcompare : general_numcompare)
-+              (texta, textb));
-+        *lima = savea, *limb = saveb;
-+      }
-+      else if (key->month)
-+      diff = getmonth (texta, lena) - getmonth (textb, lenb);
-+      else
-+      {
-+        if (ignore || translate)
-+          {
-+            char *copy_a = (char *) alloca (lena + 1 + lenb + 1);
-+            char *copy_b = copy_a + lena + 1;
-+            size_t new_len_a, new_len_b;
-+            size_t i, j;
-+
-+            /* Ignore and/or translate chars before comparing.  */
-+# define IGNORE_CHARS(NEW_LEN, LEN, TEXT, COPY, WC, MBLENGTH, STATE)  \
-+  do                                                                  \
-+    {                                                                 \
-+      wchar_t uwc;                                                    \
-+      char mbc[MB_LEN_MAX];                                           \
-+      mbstate_t state_wc;                                             \
-+                                                                      \
-+      for (NEW_LEN = i = 0; i < LEN;)                                 \
-+      {                                                               \
-+        mbstate_t state_bak;                                          \
-+                                                                      \
-+        state_bak = STATE;                                            \
-+        MBLENGTH = mbrtowc (&WC, TEXT + i, LEN - i, &STATE);          \
-+                                                                      \
-+        if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1          \
-+            || MBLENGTH == 0)                                         \
-+          {                                                           \
-+            if (MBLENGTH == (size_t)-2 || MBLENGTH == (size_t)-1)     \
-+              STATE = state_bak;                                      \
-+            if (!ignore)                                              \
-+              COPY[NEW_LEN++] = TEXT[i++];                            \
-+            continue;                                                 \
-+          }                                                           \
-+                                                                      \
-+        if (ignore)                                                   \
-+          {                                                           \
-+            if ((ignore == nonprinting && !iswprint (WC))             \
-+                 || (ignore == nondictionary                          \
-+                     && !iswalnum (WC) && !iswblank (WC)))            \
-+              {                                                       \
-+                i += MBLENGTH;                                        \
-+                continue;                                             \
-+              }                                                       \
-+          }                                                           \
-+                                                                      \
-+        if (translate)                                                \
-+          {                                                           \
-+                                                                      \
-+            uwc = towupper(WC);                                       \
-+            if (WC == uwc)                                            \
-+              {                                                       \
-+                memcpy (mbc, TEXT + i, MBLENGTH);                     \
-+                i += MBLENGTH;                                        \
-+              }                                                       \
-+            else                                                      \
-+              {                                                       \
-+                i += MBLENGTH;                                        \
-+                WC = uwc;                                             \
-+                memset (&state_wc, '\0', sizeof (mbstate_t));         \
-+                                                                      \
-+                MBLENGTH = wcrtomb (mbc, WC, &state_wc);              \
-+                assert (MBLENGTH != (size_t)-1 && MBLENGTH != 0);     \
-+              }                                                       \
-+                                                                      \
-+            for (j = 0; j < MBLENGTH; j++)                            \
-+              COPY[NEW_LEN++] = mbc[j];                               \
-+          }                                                           \
-+        else                                                          \
-+          for (j = 0; j < MBLENGTH; j++)                              \
-+            COPY[NEW_LEN++] = TEXT[i++];                              \
-+      }                                                               \
-+      COPY[NEW_LEN] = '\0';                                           \
-+    }                                                                 \
-+  while (0)
-+            IGNORE_CHARS (new_len_a, lena, texta, copy_a,
-+                          wc_a, mblength_a, state_a);
-+            IGNORE_CHARS (new_len_b, lenb, textb, copy_b,
-+                          wc_b, mblength_b, state_b);
-+            diff = xmemcoll (copy_a, new_len_a, copy_b, new_len_b);
-+          }
-+        else if (lena == 0)
-+          diff = - NONZERO (lenb);
-+        else if (lenb == 0)
-+          goto greater;
-+        else
-+          diff = xmemcoll (texta, lena, textb, lenb);
-+      }
-+
-+      if (diff)
-+      goto not_equal;
-+
-+      key = key->next;
-+      if (! key)
-+      break;
-+
-+      /* Find the beginning and limit of the next field.  */
-+      if (key->eword != -1)
-+      lima = limfield (a, key), limb = limfield (b, key);
-+      else
-+      lima = a->text + a->length - 1, limb = b->text + b->length - 1;
-+
-+      if (key->sword != -1)
-+      texta = begfield (a, key), textb = begfield (b, key);
-+      else
-+      {
-+        texta = a->text, textb = b->text;
-+        if (key->skipsblanks)
-+          {
-+            while (texta < lima && ismbblank (texta, lima - texta, &mblength_a))
-+              texta += mblength_a;
-+            while (textb < limb && ismbblank (textb, limb - textb, &mblength_b))
-+              textb += mblength_b;
-+          }
-+      }
-+    }
-+
-+  return 0;
-+
-+greater:
-+  diff = 1;
-+not_equal:
-+  return key->reverse ? -diff : diff;
-+}
-+#endif
-+
- /* Compare two lines A and B, returning negative, zero, or positive
-    depending on whether A compares less than, equal to, or greater than B. */
-@@ -2127,7 +2672,7 @@
-   atexit (close_stdout);
-   hard_LC_COLLATE = hard_locale (LC_COLLATE);
--#if HAVE_NL_LANGINFO
-+#if HAVE_LANGINFO_CODESET
-   hard_LC_TIME = hard_locale (LC_TIME);
- #endif
-@@ -2148,6 +2693,27 @@
-       thousands_sep = -1;
-   }
-+#if HAVE_MBRTOWC
-+  if (MB_CUR_MAX > 1)
-+    {
-+      inittables = inittables_mb;
-+      begfield = begfield_mb;
-+      limfield = limfield_mb;
-+      getmonth = getmonth_mb;
-+      keycompare = keycompare_mb;
-+      numcompare = numcompare_mb;
-+    }
-+  else
-+#endif
-+    {
-+      inittables = inittables_uni;
-+      begfield = begfield_uni;
-+      limfield = limfield_uni;
-+      getmonth = getmonth_uni;
-+      keycompare = keycompare_uni;
-+      numcompare = numcompare_uni;
-+    }
-+
-   have_read_stdin = false;
-   inittables ();
-@@ -2349,13 +2915,35 @@
-       case 't':
-         {
--          char newtab = optarg[0];
--          if (! newtab)
-+          char newtab[MB_LEN_MAX + 1];
-+          size_t newtab_length = 1;
-+          strncpy (newtab, optarg, MB_LEN_MAX);
-+          if (! newtab[0])
-             error (SORT_FAILURE, 0, _("empty tab"));
--          if (optarg[1])
-+#if HAVE_MBRTOWC
-+          if (MB_CUR_MAX > 1)
-+            {
-+              wchar_t wc;
-+              mbstate_t state;
-+              size_t i;
-+
-+              memset (&state, '\0', sizeof (mbstate_t));
-+              newtab_length = mbrtowc (&wc, newtab, strnlen (newtab,
-+                                                             MB_LEN_MAX),
-+                                       &state);
-+              switch (newtab_length)
-+                {
-+                case (size_t) -1:
-+                case (size_t) -2:
-+                case 0:
-+                  newtab_length = 1;
-+                }
-+            }
-+#endif
-+          if (newtab_length == 1 && optarg[1])
-             {
-               if (STREQ (optarg, "\\0"))
--                newtab = '\0';
-+                newtab[0] = '\0';
-               else
-                 {
-                   /* Provoke with `sort -txx'.  Complain about
-@@ -2366,9 +2954,12 @@
-                          quote (optarg));
-                 }
-             }
--          if (tab != TAB_DEFAULT && tab != newtab)
-+          if (tab_length
-+              && (tab_length != newtab_length
-+                  || memcmp (tab, newtab, tab_length) != 0))
-             error (SORT_FAILURE, 0, _("incompatible tabs"));
--          tab = newtab;
-+          memcpy (tab, newtab, newtab_length);
-+          tab_length = newtab_length;
-         }
-         break;
---- /dev/null  2005-10-10 09:36:06.437701000 +0100
-+++ coreutils-5.93/tests/sort/sort-mb-tests    2005-12-23 08:53:01.000000000 +0000
-@@ -0,0 +1,58 @@
-+#! /bin/sh
-+case $# in
-+  0) xx='../../src/sort';;
-+  *) xx="$1";;
-+esac
-+test "$VERBOSE" && echo=echo || echo=:
-+$echo testing program: $xx
-+errors=0
-+test "$srcdir" || srcdir=.
-+test "$VERBOSE" && $xx --version 2> /dev/null
-+
-+export LC_ALL=en_US.UTF-8
-+locale -k LC_CTYPE 2>&1 | grep -q charmap.*UTF-8 || exit 77
-+errors=0
-+
-+$xx -t @ -k2 -n mb1.I > mb1.O
-+code=$?
-+if test $code != 0; then
-+  $echo "Test mb1 failed: $xx return code $code differs from expected value 0" 1>&2
-+  errors=`expr $errors + 1`
-+else
-+  cmp mb1.O $srcdir/mb1.X > /dev/null 2>&1
-+  case $? in
-+    0) if test "$VERBOSE"; then $echo "passed mb1"; fi;;
-+    1) $echo "Test mb1 failed: files mb1.O and $srcdir/mb1.X differ" 1>&2
-+       (diff -c mb1.O $srcdir/mb1.X) 2> /dev/null
-+       errors=`expr $errors + 1`;;
-+    2) $echo "Test mb1 may have failed." 1>&2
-+       $echo The command "cmp mb1.O $srcdir/mb1.X" failed. 1>&2
-+       errors=`expr $errors + 1`;;
-+  esac
-+fi
-+
-+$xx -t @ -k4 -n mb2.I > mb2.O
-+code=$?
-+if test $code != 0; then
-+  $echo "Test mb2 failed: $xx return code $code differs from expected value 0" 1>&2
-+  errors=`expr $errors + 1`
-+else
-+  cmp mb2.O $srcdir/mb2.X > /dev/null 2>&1
-+  case $? in
-+    0) if test "$VERBOSE"; then $echo "passed mb2"; fi;;
-+    1) $echo "Test mb2 failed: files mb2.O and $srcdir/mb2.X differ" 1>&2
-+       (diff -c mb2.O $srcdir/mb2.X) 2> /dev/null
-+       errors=`expr $errors + 1`;;
-+    2) $echo "Test mb2 may have failed." 1>&2
-+       $echo The command "cmp mb2.O $srcdir/mb2.X" failed. 1>&2
-+       errors=`expr $errors + 1`;;
-+  esac
-+fi
-+
-+if test $errors = 0; then
-+  $echo Passed all 113 tests. 1>&2
-+else
-+  $echo Failed $errors tests. 1>&2
-+fi
-+test $errors = 0 || errors=1
-+exit $errors
---- /dev/null  2005-10-10 09:36:06.437701000 +0100
-+++ coreutils-5.93/tests/sort/mb1.I    2005-12-23 08:53:01.000000000 +0000
-@@ -0,0 +1,4 @@
-+Apple@10
-+Banana@5
-+Citrus@20
-+Cherry@30
---- /dev/null  2005-10-10 09:36:06.437701000 +0100
-+++ coreutils-5.93/tests/sort/mb2.I    2005-12-23 08:53:01.000000000 +0000
-@@ -0,0 +1,4 @@
-+Apple@AA10@@20
-+Banana@AA5@@30
-+Citrus@AA20@@5
-+Cherry@AA30@@10
---- /dev/null  2005-10-10 09:36:06.437701000 +0100
-+++ coreutils-5.93/tests/sort/mb1.X    2005-12-23 08:53:01.000000000 +0000
-@@ -0,0 +1,4 @@
-+Banana@5
-+Apple@10
-+Citrus@20
-+Cherry@30
---- /dev/null  2005-10-10 09:36:06.437701000 +0100
-+++ coreutils-5.93/tests/sort/mb2.X    2005-12-23 08:53:01.000000000 +0000
-@@ -0,0 +1,4 @@
-+Citrus@AA20@@5
-+Cherry@AA30@@10
-+Apple@AA10@@20
-+Banana@AA5@@30
---- coreutils-5.93/tests/sort/Makefile.am.i18n 2005-10-24 22:02:25.000000000 +0100
-+++ coreutils-5.93/tests/sort/Makefile.am      2005-12-23 08:53:01.000000000 +0000
-@@ -43,14 +43,16 @@
- nul-nls.E use-nl.O use-nl.E o2.O o2.E nul-tab.O nul-tab.E
- ##test-files-end
--EXTRA_DIST = Test.pm $x-tests $(explicit) $(maint_gen)
--noinst_SCRIPTS = $x-tests
-+run_gen += mb1.O mb2.O
-+
-+EXTRA_DIST = Test.pm $x-tests $(explicit) $(maint_gen) mb1.I mb1.X mb2.I mb2.X
-+noinst_SCRIPTS = $x-tests # $x-mb-tests
- TESTS_ENVIRONMENT = \
-   PATH="`pwd`/../../src$(PATH_SEPARATOR)$$PATH"
- editpl = sed -e 's,@''PERL''@,$(PERL),g' -e 's,@''srcdir''@,$(srcdir),g'
--TESTS = $x-tests
-+TESTS = $x-tests $x-mb-tests
- mk_script = $(srcdir)/../mk-script
- $(srcdir)/$x-tests: $(mk_script) Test.pm Makefile.am
---- coreutils-5.93/tests/sort/Makefile.in.i18n 2005-10-22 19:13:23.000000000 +0100
-+++ coreutils-5.93/tests/sort/Makefile.in      2005-10-26 22:17:04.000000000 +0100
-@@ -338,13 +338,15 @@
- o-no-file1.E create-empty.O create-empty.E neg-nls.O neg-nls.E nul-nls.O \
- nul-nls.E use-nl.O use-nl.E o2.O o2.E nul-tab.O nul-tab.E
--EXTRA_DIST = Test.pm $x-tests $(explicit) $(maint_gen)
--noinst_SCRIPTS = $x-tests
-+run_gen += mb1.O mb2.O
-+
-+EXTRA_DIST = Test.pm $x-tests $(explicit) $(maint_gen) mb1.I mb1.X mb2.I mb2.X
-+noinst_SCRIPTS = $x-tests # $x-mb-tests
- TESTS_ENVIRONMENT = \
-   PATH="`pwd`/../../src$(PATH_SEPARATOR)$$PATH"
- editpl = sed -e 's,@''PERL''@,$(PERL),g' -e 's,@''srcdir''@,$(srcdir),g'
--TESTS = $x-tests
-+TESTS = $x-tests $x-mb-tests
- mk_script = $(srcdir)/../mk-script
- MAINTAINERCLEANFILES = $x-tests $(maint_gen)
- CLEANFILES = $(run_gen)
diff --git a/src/patches/coreutils-5.96-rename-tee.patch b/src/patches/coreutils-5.96-rename-tee.patch
deleted file mode 100644 (file)
index 60afab4..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-From b50508742035812f8ae8671eedc6623fac53f51d Mon Sep 17 00:00:00 2001
-From: Jim Meyering <jim@meyering.net>
-Date: Thu, 22 Jun 2006 12:50:32 +0000
-Subject: [PATCH] * src/tee.c (tee_files): Rename from tee, to avoid conflict with
- the function in glibc's <fcntl.h>.  Reported by Andreas Schwab.
-
----
- src/tee.c |    8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/tee.c b/src/tee.c
-index f99642d..f612181 100644
---- a/src/tee.c
-+++ b/src/tee.c
-@@ -1,5 +1,5 @@
- /* tee - read from standard input and write to standard output and files.
--   Copyright (C) 85,1990-2005 Free Software Foundation, Inc.
-+   Copyright (C) 85,1990-2006 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
-@@ -31,7 +31,7 @@
- #define AUTHORS "Mike Parker", "Richard M. Stallman", "David MacKenzie"
--static bool tee (int nfiles, const char **files);
-+static bool tee_files (int nfiles, const char **files);
- /* If true, append to output files rather than truncating them. */
- static bool append;
-@@ -121,7 +121,7 @@ main (int argc, char **argv)
-   /* Do *not* warn if tee is given no file arguments.
-      POSIX requires that it work when given no arguments.  */
--  ok = tee (argc - optind, (const char **) &argv[optind]);
-+  ok = tee_files (argc - optind, (const char **) &argv[optind]);
-   if (close (STDIN_FILENO) != 0)
-     error (EXIT_FAILURE, errno, _("standard input"));
-@@ -133,7 +133,7 @@ main (int argc, char **argv)
-    Return true if successful.  */
- static bool
--tee (int nfiles, const char **files)
-+tee_files (int nfiles, const char **files)
- {
-   FILE **descriptors;
-   char buffer[BUFSIZ];
--- 
-1.7.2.5
-
diff --git a/src/patches/coreutils-5.96-suppress_uptime_kill_su-1.patch b/src/patches/coreutils-5.96-suppress_uptime_kill_su-1.patch
deleted file mode 100644 (file)
index 6a08909..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-Submitted By: Matthew Burgess <matthew at linuxfromscratch dot org>
-Date: 2006-03-15
-Initial Package Version: 5.94
-Origin: original suppress_hotname_uptame_kill_su patch (Robert Connolly)
-Upstream Status: N/A
-Description: This patch supresses the building of uptime, and kill.  The su
-command is built so the testsuite can run, use './src/su', but it will not
-be installed. Also see:
-           http://www.linuxfromscratch.org/patches/downloads/coreutils/
-           coreutils-5.0-dupes-2.patch
-
-diff -Naur coreutils-5.94.orig/AUTHORS coreutils-5.94/AUTHORS
---- coreutils-5.94.orig/AUTHORS        2004-11-03 23:10:50.000000000 +0000
-+++ coreutils-5.94/AUTHORS     2006-03-15 22:20:49.000000000 +0000
-@@ -34,7 +34,6 @@
- hostname: Jim Meyering
- id: Arnold Robbins, David MacKenzie
- join: Mike Haertel
--kill: Paul Eggert
- link: Michael Stone
- ln: Mike Parker, David MacKenzie
- logname: FIXME: unknown
-@@ -83,7 +82,6 @@
- unexpand: David MacKenzie
- uniq: Richard Stallman, David MacKenzie
- unlink: Michael Stone
--uptime: Joseph Arceneaux, David MacKenzie, Kaveh Ghazi
- users: Joseph Arceneaux, David MacKenzie
- vdir: Richard Stallman, David MacKenzie
- wc: Paul Rubin, David MacKenzie
-diff -Naur coreutils-5.94.orig/Makefile.in coreutils-5.94/Makefile.in
---- coreutils-5.94.orig/Makefile.in    2006-02-13 12:52:03.000000000 +0000
-+++ coreutils-5.94/Makefile.in 2006-03-15 22:20:49.000000000 +0000
-@@ -148,7 +148,7 @@
-       $(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
-       $(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
-       $(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
--      $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
-+      $(top_srcdir)/m4/unlocked-io.m4 \
-       $(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
-       $(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
-       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-diff -Naur coreutils-5.94.orig/README coreutils-5.94/README
---- coreutils-5.94.orig/README 2005-09-28 18:34:26.000000000 +0000
-+++ coreutils-5.94/README      2006-03-15 22:20:49.000000000 +0000
-@@ -9,11 +9,11 @@
-   [ basename cat chgrp chmod chown chroot cksum comm cp csplit cut date dd
-   df dir dircolors dirname du echo env expand expr factor false fmt fold
--  ginstall groups head hostid hostname id join kill link ln logname ls
-+  ginstall groups head hostid hostname id join link ln logname ls
-   md5sum mkdir mkfifo mknod mv nice nl nohup od paste pathchk pinky pr
-   printenv printf ptx pwd readlink rm rmdir seq sha1sum shred sleep sort
-   split stat stty su sum sync tac tail tee test touch tr true tsort tty
--  uname unexpand uniq unlink uptime users vdir wc who whoami yes
-+  uname unexpand uniq unlink users vdir wc who whoami yes
- See the file NEWS for a list of major changes in the current release.
-diff -Naur coreutils-5.94.orig/configure coreutils-5.94/configure
---- coreutils-5.94.orig/configure      2006-02-13 12:52:04.000000000 +0000
-+++ coreutils-5.94/configure   2006-03-15 22:20:49.000000000 +0000
-@@ -50418,8 +50418,7 @@
- { echo "$as_me:$LINENO: result: $gnulib_cv_have_boot_time" >&5
- echo "${ECHO_T}$gnulib_cv_have_boot_time" >&6; }
-   if test $gnulib_cv_have_boot_time = yes; then
--  OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS uptime\$(EXEEXT)"
--  MAN="$MAN uptime.1"
-+echo "uptime is suppressed"
- fi
-diff -Naur coreutils-5.94.orig/man/Makefile.in coreutils-5.94/man/Makefile.in
---- coreutils-5.94.orig/man/Makefile.in        2006-02-13 12:51:58.000000000 +0000
-+++ coreutils-5.94/man/Makefile.in     2006-03-15 22:20:50.000000000 +0000
-@@ -142,7 +142,7 @@
-       $(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
-       $(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
-       $(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
--      $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
-+      $(top_srcdir)/m4/unlocked-io.m4 \
-       $(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
-       $(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
-       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-@@ -303,13 +303,13 @@
-   basename.1 cat.1 chgrp.1 chmod.1 chown.1 chroot.1 cksum.1 comm.1 \
-   cp.1 csplit.1 cut.1 date.1 dd.1 df.1 dir.1 dircolors.1 dirname.1 du.1 \
-   echo.1 env.1 expand.1 expr.1 factor.1 false.1 fmt.1 fold.1 groups.1 \
--  head.1 hostid.1 hostname.1 id.1 install.1 join.1 kill.1 \
-+  head.1 hostid.1 hostname.1 id.1 install.1 join.1 \
-   link.1 ln.1 logname.1 \
-   ls.1 md5sum.1 mkdir.1 mkfifo.1 mknod.1 mv.1 nice.1 nl.1 nohup.1 od.1 \
-   paste.1 pathchk.1 pinky.1 pr.1 printenv.1 printf.1 ptx.1 pwd.1 readlink.1 \
-   rm.1 rmdir.1 seq.1 sha1sum.1 shred.1 sleep.1 sort.1 split.1 stat.1 stty.1 \
--  su.1 sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
--  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 uptime.1 users.1 vdir.1 wc.1 \
-+  sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
-+  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 users.1 vdir.1 wc.1 \
-   who.1 whoami.1 yes.1
- man_aux = $(dist_man_MANS:.1=.x)
-@@ -575,7 +575,6 @@
- id.1:         $(common_dep)   $(srcdir)/id.x          ../src/id.c
- install.1:    $(common_dep)   $(srcdir)/install.x     ../src/install.c
- join.1:               $(common_dep)   $(srcdir)/join.x        ../src/join.c
--kill.1:               $(common_dep)   $(srcdir)/kill.x        ../src/kill.c
- link.1:               $(common_dep)   $(srcdir)/link.x        ../src/link.c
- ln.1:         $(common_dep)   $(srcdir)/ln.x          ../src/ln.c
- logname.1:    $(common_dep)   $(srcdir)/logname.x     ../src/logname.c
-@@ -608,7 +607,6 @@
- split.1:      $(common_dep)   $(srcdir)/split.x       ../src/split.c
- stat.1:               $(common_dep)   $(srcdir)/stat.x        ../src/stat.c
- stty.1:               $(common_dep)   $(srcdir)/stty.x        ../src/stty.c
--su.1:         $(common_dep)   $(srcdir)/su.x          ../src/su.c
- sum.1:                $(common_dep)   $(srcdir)/sum.x         ../src/sum.c
- sync.1:               $(common_dep)   $(srcdir)/sync.x        ../src/sync.c
- tac.1:                $(common_dep)   $(srcdir)/tac.x         ../src/tac.c
-@@ -624,7 +622,6 @@
- unexpand.1:   $(common_dep)   $(srcdir)/unexpand.x    ../src/unexpand.c
- uniq.1:               $(common_dep)   $(srcdir)/uniq.x        ../src/uniq.c
- unlink.1:     $(common_dep)   $(srcdir)/unlink.x      ../src/unlink.c
--uptime.1:     $(common_dep)   $(srcdir)/uptime.x      ../src/uptime.c
- users.1:      $(common_dep)   $(srcdir)/users.x       ../src/users.c
- vdir.1:               $(common_dep)   $(srcdir)/vdir.x        ../src/ls.c
- wc.1:         $(common_dep)   $(srcdir)/wc.x          ../src/wc.c
-@@ -656,7 +653,7 @@
- check-x-vs-1:
-       PATH=../src$(PATH_SEPARATOR)$$PATH; export PATH;                \
-       t=ls-files.$$$$;                                                \
--      (cd $(srcdir) && ls -1 *.x) | sed 's/\.x$$//' | $(ASSORT) > $$t;\
-+      (cd $(srcdir) && ls -1 *.x) | grep -v -e 'kill.x' -e 'su.x' -e 'uptime.x' | sed 's/\.x$$//' | $(ASSORT) > $$t;\
-       echo $(dist_man_MANS) | tr -s ' ' '\n' | sed 's/\.1$$//'        \
-         | $(ASSORT) | diff - $$t || { rm $$t; exit 1; };              \
-       rm $$t
-diff -Naur coreutils-5.94.orig/src/Makefile.in coreutils-5.94/src/Makefile.in
---- coreutils-5.94.orig/src/Makefile.in        2006-02-13 13:08:11.000000000 +0000
-+++ coreutils-5.94/src/Makefile.in     2006-03-15 22:20:50.000000000 +0000
-@@ -39,7 +39,7 @@
- host_triplet = @host@
- EXTRA_PROGRAMS = chroot$(EXEEXT) df$(EXEEXT) hostid$(EXEEXT) \
-       nice$(EXEEXT) pinky$(EXEEXT) stty$(EXEEXT) su$(EXEEXT) \
--      uname$(EXEEXT) uptime$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
-+      uname$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
- bin_PROGRAMS = [$(EXEEXT) chgrp$(EXEEXT) chown$(EXEEXT) chmod$(EXEEXT) \
-       cp$(EXEEXT) dd$(EXEEXT) dircolors$(EXEEXT) du$(EXEEXT) \
-       ginstall$(EXEEXT) link$(EXEEXT) ln$(EXEEXT) dir$(EXEEXT) \
-@@ -56,7 +56,7 @@
-       uniq$(EXEEXT) wc$(EXEEXT) basename$(EXEEXT) date$(EXEEXT) \
-       dirname$(EXEEXT) echo$(EXEEXT) env$(EXEEXT) expr$(EXEEXT) \
-       factor$(EXEEXT) false$(EXEEXT) hostname$(EXEEXT) id$(EXEEXT) \
--      kill$(EXEEXT) logname$(EXEEXT) pathchk$(EXEEXT) \
-+      logname$(EXEEXT) pathchk$(EXEEXT) \
-       printenv$(EXEEXT) printf$(EXEEXT) pwd$(EXEEXT) seq$(EXEEXT) \
-       sleep$(EXEEXT) tee$(EXEEXT) test$(EXEEXT) true$(EXEEXT) \
-       tty$(EXEEXT) whoami$(EXEEXT) yes$(EXEEXT) $(am__EXEEXT_1) \
-@@ -169,7 +169,7 @@
-       $(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
-       $(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
-       $(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
--      $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
-+      $(top_srcdir)/m4/unlocked-io.m4 \
-       $(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
-       $(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
-       $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-@@ -350,11 +350,6 @@
- join_LDADD = $(LDADD)
- join_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
-       ../lib/libcoreutils.a
--kill_SOURCES = kill.c
--kill_OBJECTS = kill.$(OBJEXT)
--kill_LDADD = $(LDADD)
--kill_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
--      ../lib/libcoreutils.a
- link_SOURCES = link.c
- link_OBJECTS = link.$(OBJEXT)
- link_LDADD = $(LDADD)
-@@ -577,9 +572,6 @@
- unlink_LDADD = $(LDADD)
- unlink_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
-       ../lib/libcoreutils.a
--uptime_SOURCES = uptime.c
--uptime_OBJECTS = uptime.$(OBJEXT)
--uptime_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
- users_SOURCES = users.c
- users_OBJECTS = users.$(OBJEXT)
- users_LDADD = $(LDADD)
-@@ -622,28 +614,28 @@
-       csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
-       dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
-       fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
--      id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
-+      id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
-       $(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
-       nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
-       printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
-       rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \
-       sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \
-       tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \
--      unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \
-+      unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \
-       wc.c who.c whoami.c yes.c
- DIST_SOURCES = $(__SOURCES) basename.c cat.c $(chgrp_SOURCES) chmod.c \
-       $(chown_SOURCES) chroot.c cksum.c comm.c $(cp_SOURCES) \
-       csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
-       dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
-       fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
--      id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
-+      id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
-       $(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
-       nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
-       printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
-       rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \
-       sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \
-       tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \
--      unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \
-+      unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \
-       wc.c who.c whoami.c yes.c
- HEADERS = $(noinst_HEADERS)
- ETAGS = etags
-@@ -840,7 +832,6 @@
- nanosec_libs = $(LDADD) $(POW_LIB) $(LIB_NANOSLEEP)
- sleep_LDADD = $(nanosec_libs)
- tail_LDADD = $(nanosec_libs)
--uptime_LDADD = $(LDADD) $(GETLOADAVG_LIBS)
- su_LDADD = $(LDADD) $(LIB_CRYPT)
- SUFFIXES = .sh
- installed_su = $(DESTDIR)$(bindir)/`echo su|sed '$(transform)'`
-@@ -1076,9 +1067,6 @@
- join$(EXEEXT): $(join_OBJECTS) $(join_DEPENDENCIES) 
-       @rm -f join$(EXEEXT)
-       $(LINK) $(join_LDFLAGS) $(join_OBJECTS) $(join_LDADD) $(LIBS)
--kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) 
--      @rm -f kill$(EXEEXT)
--      $(LINK) $(kill_LDFLAGS) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
- link$(EXEEXT): $(link_OBJECTS) $(link_DEPENDENCIES) 
-       @rm -f link$(EXEEXT)
-       $(LINK) $(link_LDFLAGS) $(link_OBJECTS) $(link_LDADD) $(LIBS)
-@@ -1226,9 +1214,6 @@
- unlink$(EXEEXT): $(unlink_OBJECTS) $(unlink_DEPENDENCIES) 
-       @rm -f unlink$(EXEEXT)
-       $(LINK) $(unlink_LDFLAGS) $(unlink_OBJECTS) $(unlink_LDADD) $(LIBS)
--uptime$(EXEEXT): $(uptime_OBJECTS) $(uptime_DEPENDENCIES) 
--      @rm -f uptime$(EXEEXT)
--      $(LINK) $(uptime_LDFLAGS) $(uptime_OBJECTS) $(uptime_LDADD) $(LIBS)
- users$(EXEEXT): $(users_OBJECTS) $(users_DEPENDENCIES) 
-       @rm -f users$(EXEEXT)
-       $(LINK) $(users_LDFLAGS) $(users_OBJECTS) $(users_LDADD) $(LIBS)
-@@ -1322,7 +1307,6 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/install.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/join.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbracket.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ln.Po@am__quote@
-@@ -1378,7 +1362,6 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unexpand.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uniq.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uptime.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/users.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wc.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/who.Po@am__quote@
-@@ -1606,7 +1589,7 @@
-         && can_create_suid_root_executable=yes; \
-       rm -f $$TMPFILE; \
-       if test $$can_create_suid_root_executable = yes; then \
--        $(INSTALL_SU); \
-+        echo "Installation of su is suppressed"; \
-       else \
-         echo "WARNING: insufficient access; not installing su"; \
-         echo "NOTE: to install su, run 'make install-root' as root"; \
diff --git a/src/patches/coreutils-5.96-uname-1.patch b/src/patches/coreutils-5.96-uname-1.patch
deleted file mode 100644 (file)
index 0ae413f..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-Submitted By: Robert Connolly <robert@linuxfromscratch.org> (ashes)
-Date: 2005-11-13
-Initial Package Version: 5.93
-Upstream Status: pending
-Origin: Scot McPherson and Zack Winkles
-Description: Fix the output of uname once and for all. This is the position independent
-version.
-
-       $ uname -m      # This always worked.
-       i686
-       $ uname -i      # Used to report 'unknown'.
-       i386
-       $ uname -p      # Likewise.
-       athlon-4
-
-Now 'uname -p' can be used by GCC's mtune/mcpu and march options. For example:
-
-       CFLAGS="-march=$(uname -m) -mtune=$(uname -p)"
-
-diff -Naur coreutils-5.93.orig/src/uname.c coreutils-5.93/src/uname.c
---- coreutils-5.93.orig/src/uname.c    2005-09-15 19:57:04.000000000 +0000
-+++ coreutils-5.93/src/uname.c 2005-11-13 19:18:35.000000000 +0000
-@@ -29,6 +29,26 @@
- # include <sys/systeminfo.h>
- #endif
-+#ifdef linux
-+/* Thanks to the ffmpeg team for this PIC version of cpuid() */
-+#ifdef ARCH_X86_64
-+#  define REG_b "rbx"
-+#  define REG_S "rsi"
-+#else
-+#  define REG_b "ebx"
-+#  define REG_S "esi"
-+#endif
-+#define cpuid(index,eax,ebx,ecx,edx)\
-+      __asm __volatile\
-+        ("mov %%"REG_b", %%"REG_S"\n\t"\
-+        "cpuid\n\t"\
-+        "xchg %%"REG_b", %%"REG_S\
-+        : "=a" (eax), "=S" (ebx),\
-+        "=c" (ecx), "=d" (edx)\
-+        : "0" (index));
-+int has_sse( void );
-+#endif
-+
- #if HAVE_SYS_SYSCTL_H
- # if HAVE_SYS_PARAM_H
- #  include <sys/param.h> /* needed for OpenBSD 3.0 */
-@@ -256,6 +276,99 @@
-       if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
-         element = processor;
-       }
-+#else
-+      {
-+      struct utsname u;
-+      uname (&u);
-+      element = u.machine;
-+#ifdef linux
-+/******************************************************************************
-+ *
-+ * Hello, major hack.  I shouldn't have to do this.  struct utsname should
-+ * have another element with this info in it.  There's probably a struct
-+ * somewhere that has this info, I just don't know where it is.
-+ *
-+ *****************************************************************************/
-+
-+      if( !strcmp( element, "i586" ) || !strcmp( element, "i686" ) ) {
-+        int eax, ebx, ecx, edx, unused;
-+        int model, family, sse;
-+     
-+        cpuid(0,unused,ebx,ecx,edx);
-+        cpuid(1,eax,unused,unused,unused);
-+        model = (eax >> 4) & 0xf;
-+        family = (eax >> 8) & 0xf;
-+
-+        switch(ebx) {
-+        case 0x756e6547: // Intel
-+          switch( family ) {
-+          case 5: // Pentium
-+            if( model <= 3 )
-+              element="pentium";
-+            if( model > 3 )
-+              element="pentium-mmx";
-+            break;
-+          case 6: // PentiumPro - Pentium III
-+            if( model == 1 ) // Pentium Pro
-+              element="pentiumpro";
-+            if( ( model == 3 ) || ( model == 5 ) ||
-+                ( model == 6 ) ) // Pentium II
-+              element="pentium2";
-+            if( ( model == 7 ) || ( model == 8 ) ||
-+                ( model == 10 ) || ( model == 11 ) ) // These are all Pentium III
-+              element="pentium3";
-+            break;
-+          case 15: // Pentium4
-+            if( model == 3 ) // Prescott
-+                element="prescott";
-+            else
-+            element="pentium4";
-+            break;
-+          default:
-+            break;
-+          } // end switch( family )
-+          break;
-+        case 0x68747541: // AMD
-+          switch(family) {
-+          case 5:
-+            if( ( model == 0 ) || ( model == 1 ) || 
-+                ( model == 2 ) || ( model == 3 ) ) // K5
-+              element="i586";
-+            if( ( model == 6 ) || ( model == 7 ) ) // K6
-+              element="k6";
-+            if( model == 8 ) // K6-2
-+              element="k6-2";
-+            if( model == 9 ) // K6-3
-+              element="k6-3";
-+            break;
-+          case 6:
-+            if( model <= 4 )
-+              element="athlon";
-+            if( model > 4 ) {
-+              sse = has_sse();
-+              if( sse == 0 )
-+                element="athlon";
-+              if( sse == 1 )
-+                element="athlon-4";
-+            }
-+            break;
-+          case 15:
-+            element="athlon-4";
-+            break;
-+          default:
-+            break;
-+          } // end switch( family )
-+          break;
-+        case 0x69727943: // Cyrix
-+          element="i386"; // who knows what cyrix supports, lets be safe
-+          break;
-+        default:
-+          break;
-+        } // end switch(ebx)
-+      }
-+
-+#endif
-+      }
- #endif
- #ifdef UNAME_PROCESSOR
-       if (element == unknown)
-@@ -293,7 +406,7 @@
-   if (toprint & PRINT_HARDWARE_PLATFORM)
-     {
--      char const *element = unknown;
-+      char *element = unknown;
- #if HAVE_SYSINFO && defined SI_PLATFORM
-       {
-       static char hardware_platform[257];
-@@ -301,6 +414,15 @@
-                         hardware_platform, sizeof hardware_platform))
-         element = hardware_platform;
-       }
-+#else
-+      {
-+      struct utsname u;
-+      uname (&u);
-+      element = u.machine;
-+      if (strlen (element) == 4 && element[0] == 'i' && element[2] == '8'
-+          && element[3] == '6')
-+        element[1] = '3';
-+      }
- #endif
- #ifdef UNAME_HARDWARE_PLATFORM
-       if (element == unknown)
-@@ -323,3 +445,29 @@
-   exit (EXIT_SUCCESS);
- }
-+
-+#ifdef linux
-+
-+/******************************************************************************
-+ *
-+ * int has_sse( void )
-+ * Checks Athlon CPU's to see if they support SSE.
-+ *
-+ *****************************************************************************/
-+
-+int has_sse( void )
-+{
-+  unsigned long edx, unused;
-+  int sse;
-+  cpuid(1,unused,unused,unused,edx);
-+  // I think, I need this tested on a Duron with SSE
-+  // and one without it.
-+  sse = edx & 0x2000000;
-+  if( sse == 0 ) {
-+    return 0;
-+  } else {
-+    return 1;
-+  }
-+
-+}
-+#endif
diff --git a/src/patches/dhcp-3.1_linux3.patch b/src/patches/dhcp-3.1_linux3.patch
deleted file mode 100644 (file)
index 44edb41..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -Naur dhcp-3.1-ESV-R3.org/configure dhcp-3.1-ESV-R3/configure
---- dhcp-3.1-ESV-R3.org/configure      2005-03-17 21:14:55.000000000 +0100
-+++ dhcp-3.1-ESV-R3/configure  2012-06-17 12:19:29.000000000 +0200
-@@ -104,6 +104,7 @@
-            2) sysname=linux-2.2 ;;
-            *) sysname=linux-2.2 ;;
-          esac;;
-+      3) sysname=linux-2.2 ;;
-       esac;;
-     SunOS)
-       release=`uname -r`
diff --git a/src/patches/dracut-006_add_run_dir.patch b/src/patches/dracut-006_add_run_dir.patch
deleted file mode 100644 (file)
index 08063f8..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -Naur dracut-006.org/modules.d/99base/init dracut-006/modules.d/99base/init
---- dracut-006.org/modules.d/99base/init       2010-06-17 10:46:29.000000000 +0200
-+++ dracut-006/modules.d/99base/init   2013-10-31 16:51:17.658771341 +0100
-@@ -87,6 +87,9 @@
- ln -s /proc/self/fd /dev/fd >/dev/null 2>&1
-+# create run dir
-+mkdir run
-+
- if getarg rdinitdebug; then
-     getarg quiet && DRACUT_QUIET="yes"
-     mkfifo /dev/initlog.pipe
diff --git a/src/patches/dracut-006_lzma.patch b/src/patches/dracut-006_lzma.patch
deleted file mode 100644 (file)
index ddf4991..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -Naur dracut-006.org/dracut dracut-006/dracut
---- dracut-006.org/dracut      2010-06-17 10:46:29.000000000 +0200
-+++ dracut-006/dracut  2010-08-07 21:00:38.000000000 +0200
-@@ -308,9 +308,7 @@
-       #strip -R .comment $note "$f" || :
-     done
- fi
--
--type pigz &>/dev/null && gzip=pigz || gzip=gzip
--( cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet |$gzip -9 > "$outfile"; ) 
-+( cd "$initdir"; find . |cpio -R 0:0 -H newc -o --quiet | lzma > "$outfile"; ) 
- if [ $? -ne 0 ]; then
-     derror "dracut: creation of $outfile failed"
-     exit 1
diff --git a/src/patches/dracut-006_remove_cdrom_wait.patch b/src/patches/dracut-006_remove_cdrom_wait.patch
deleted file mode 100644 (file)
index 23c084e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -Naur dracut-006.org/modules.d/99base/init dracut-006/modules.d/99base/init
---- dracut-006.org/modules.d/99base/init       2010-06-17 10:46:29.000000000 +0200
-+++ dracut-006/modules.d/99base/init   2011-01-12 11:40:41.713190125 +0100
-@@ -190,17 +190,6 @@
-     # no more udev jobs and queues empty.
-     sleep 0.5
--    # dirty hack for some cdrom drives,
--    # which report no medium for quiet
--    # some time.
--    for cdrom in /sys/block/sr*; do
--      [ -e "$cdrom" ] || continue
--      # skip, if cdrom medium was already found
--        strstr "$(udevadm info --query=env --path=${cdrom##/sys})" \
--          ID_CDROM_MEDIA && continue
--        echo change > "$cdrom/uevent"        
--    done
--    
-     i=$(($i+1))
-     [ $i -gt $RDRETRY ] \
-         && { flock -s 9 ; emergency_shell "No root device found"; } 9>/.console_lock
diff --git a/src/patches/dracut-006_remove_scsi_wait.patch b/src/patches/dracut-006_remove_scsi_wait.patch
deleted file mode 100644 (file)
index cfccf01..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Naur dracut-006.org/modules.d/99base/init dracut-006/modules.d/99base/init
---- dracut-006.org/modules.d/99base/init       2010-06-17 10:46:29.000000000 +0200
-+++ dracut-006/modules.d/99base/init   2013-10-31 17:05:09.135475525 +0100
-@@ -175,7 +175,7 @@
-     $UDEV_QUEUE_EMPTY >/dev/null 2>&1 || continue
--    modprobe scsi_wait_scan && rmmod scsi_wait_scan
-+    sleep 0.1
-     $UDEV_QUEUE_EMPTY >/dev/null 2>&1 || continue
diff --git a/src/patches/dracut-038-always-enable-mdraid.patch b/src/patches/dracut-038-always-enable-mdraid.patch
new file mode 100644 (file)
index 0000000..a65e59a
--- /dev/null
@@ -0,0 +1,55 @@
+diff --git a/modules.d/90mdraid/parse-md.sh b/modules.d/90mdraid/parse-md.sh
+index dd7bda2..7bc944c 100755
+--- a/modules.d/90mdraid/parse-md.sh
++++ b/modules.d/90mdraid/parse-md.sh
+@@ -4,32 +4,26 @@
+ MD_UUID=$(getargs rd.md.uuid -d rd_MD_UUID=)
+-if ( ! [ -n "$MD_UUID" ] && ! getargbool 0 rd.auto ) || ! getargbool 1 rd.md -d -n rd_NO_MD; then
+-    info "rd.md=0: removing MD RAID activation"
+-    udevproperty rd_NO_MD=1
+-else
+-    # rewrite the md rules to only process the specified raid array
+-    if [ -n "$MD_UUID" ]; then
+-        for f in /etc/udev/rules.d/65-md-incremental*.rules; do
+-            [ -e "$f" ] || continue
+-            while read line; do
+-                if [ "${line%%UUID CHECK}" != "$line" ]; then
+-                    printf 'IMPORT{program}="/sbin/mdadm --examine --export $tempnode"\n'
+-                    for uuid in $MD_UUID; do
+-                        printf 'ENV{MD_UUID}=="%s", GOTO="md_uuid_ok"\n' $uuid
+-                    done;
+-                    printf 'GOTO="md_end"\n'
+-                    printf 'LABEL="md_uuid_ok"\n'
+-                else
+-                    echo "$line"
+-                fi
+-            done < "${f}" > "${f}.new"
+-            mv "${f}.new" "$f"
+-        done
+-    fi
++# rewrite the md rules to only process the specified raid array
++if [ -n "$MD_UUID" ]; then
++    for f in /etc/udev/rules.d/65-md-incremental*.rules; do
++        [ -e "$f" ] || continue
++        while read line; do
++            if [ "${line%%UUID CHECK}" != "$line" ]; then
++                printf 'IMPORT{program}="/sbin/mdadm --examine --export $tempnode"\n'
++                for uuid in $MD_UUID; do
++                    printf 'ENV{MD_UUID}=="%s", GOTO="md_uuid_ok"\n' $uuid
++                done;
++                printf 'GOTO="md_end"\n'
++                printf 'LABEL="md_uuid_ok"\n'
++            else
++                echo "$line"
++            fi
++        done < "${f}" > "${f}.new"
++        mv "${f}.new" "$f"
++    done
+ fi
+-
+ if [ -e /etc/mdadm.conf ] && getargbool 1 rd.md.conf -d -n rd_NO_MDADMCONF; then
+     udevproperty rd_MDADMCONF=1
+     rm -f -- $hookdir/pre-pivot/*mdraid-cleanup.sh
diff --git a/src/patches/dracut-init_start_ipfireinstaller.patch b/src/patches/dracut-init_start_ipfireinstaller.patch
deleted file mode 100644 (file)
index 0103826..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-diff -Naur org/init new/init
---- init       2010-06-17 10:46:29.000000000 +0200
-+++ init       2010-08-10 17:55:41.000000000 +0200
-@@ -111,8 +111,9 @@
- getarg 'rdbreak=cmdline' && emergency_shell -n cmdline "Break before cmdline"
- source_all cmdline
--[ -z "$root" ] && die "No or empty root= argument"
--[ -z "$rootok" ] && die "Don't know how to handle 'root=$root'"
-+# Disable root argument check ...
-+#[ -z "$root" ] && die "No or empty root= argument"
-+#[ -z "$rootok" ] && die "Don't know how to handle 'root=$root'"
- # Network root scripts may need updated root= options,
- # so deposit them where they can see them (udev purges the env)
-@@ -202,12 +203,15 @@
-     done
-     
-     i=$(($i+1))
--    [ $i -gt $RDRETRY ] \
--        && { flock -s 9 ; emergency_shell "No root device found"; } 9>/.console_lock
-+      # Start IPFire installer after root was not found ;)
-+    [ $i -gt $RDRETRY ] && break 2;
-+
- done
- unset job
- unset queuetriggered
-+/etc/rc_installer
-+
- # pre-mount happens before we try to mount the root filesystem,
- # and happens once.
- getarg 'rdbreak=pre-mount' && emergency_shell -n pre-mount "Break pre-mount"
diff --git a/src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch b/src/patches/fireinfo/0001-bogomips-Don-t-crash-when-no-bogomips-are-available.patch
new file mode 100644 (file)
index 0000000..f228d52
--- /dev/null
@@ -0,0 +1,61 @@
+From a9401d9542fae575d9ce2bb534cd4e598e9c7b8e Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Tue, 28 Oct 2014 21:14:41 +0100
+Subject: [PATCH 1/2] bogomips: Don't crash when no bogomips are available
+
+The RPi doesn't provide bogomips in /proc/cpuinfo any more
+and fireinfo crashed when trying to read that file
+---
+ src/fireinfo/cpu.py    | 14 +++++++++-----
+ src/fireinfo/system.py |  4 +++-
+ 2 files changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/src/fireinfo/cpu.py b/src/fireinfo/cpu.py
+index 32d885db8124..541575af6bbb 100644
+--- a/src/fireinfo/cpu.py
++++ b/src/fireinfo/cpu.py
+@@ -80,12 +80,16 @@ class CPU(object):
+               """
+                       Return the bogomips of this CPU.
+               """
+-              try:
+-                      bogomips = self.__cpuinfo["bogomips"]
+-              except KeyError:
+-                      bogomips = self.__cpuinfo["BogoMIPS"]
++              bogomips = None
++
++              for key in ("bogomips", "BogoMIPS"):
++                      try:
++                              bogomips = self.__cpuinfo[key]
++                      except KeyError:
++                              continue
+-              return float(bogomips)
++              if bogomips:
++                      return float(bogomips)
+       @property
+       def model(self):
+diff --git a/src/fireinfo/system.py b/src/fireinfo/system.py
+index 8e903e8e3449..890f58c05027 100644
+--- a/src/fireinfo/system.py
++++ b/src/fireinfo/system.py
+@@ -144,12 +144,14 @@ class System(object):
+                       "model_string" : self.cpu.model_string,
+                       "stepping" : self.cpu.stepping,
+                       "flags" : self.cpu.flags,
+-                      "bogomips" : self.cpu.bogomips,
+                       "speed" : self.cpu.speed,
+                       "family" : self.cpu.family,
+                       "count" : self.cpu.count                                
+               }
++              if self.cpu.bogomips:
++                      p["bogomips"] = self.cpu.bogomips
++
+               p["network"] = {
+                       "green" : self.network.has_green(),
+                       "blue" : self.network.has_blue(),
+-- 
+1.9.3
+
diff --git a/src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch b/src/patches/fireinfo/0002-ARM-Read-board-model-from-device-tree-in-proc.patch
new file mode 100644 (file)
index 0000000..de65400
--- /dev/null
@@ -0,0 +1,72 @@
+From b9a068e26261007d4a0592fcb47f82658af2c775 Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Mon, 3 Nov 2014 21:33:45 +0100
+Subject: [PATCH 2/2] ARM: Read board model from device-tree in /proc
+
+---
+ src/fireinfo/system.py | 35 +++++++++--------------------------
+ 1 file changed, 9 insertions(+), 26 deletions(-)
+
+diff --git a/src/fireinfo/system.py b/src/fireinfo/system.py
+index 890f58c05027..195832e9f7eb 100644
+--- a/src/fireinfo/system.py
++++ b/src/fireinfo/system.py
+@@ -304,27 +304,6 @@ class System(object):
+               """
+               return read_from_file("/sys/class/dmi/id/bios_vendor")
+-      def vendor_model_tuple(self):
+-              try:
+-                      s = self.__cpuinfo["Hardware"]
+-              except KeyError:
+-                      return (None, None)
+-
+-              if s.startswith("ARM-Versatile"):
+-                      return ("ARM", s)
+-
+-              try:
+-                      v, m = s.split(" ", 1)
+-              except ValueError:
+-                      if s.startswith("BCM"):
+-                              v = "Broadcom"
+-                              m = s
+-                      else:
+-                              v = None
+-                              m = s
+-
+-              return v, m
+-
+       @property
+       def vendor(self):
+               """
+@@ -337,8 +316,10 @@ class System(object):
+                               break
+               if ret is None:
+-                      v, m = self.vendor_model_tuple()
+-                      ret = v
++                      try:
++                              return self.__cpuinfo["Hardware"]
++                      except KeyError:
++                              pass
+               return ret
+@@ -353,9 +334,11 @@ class System(object):
+                       if ret:
+                               break
+-              if ret is None:
+-                      v, m = self.vendor_model_tuple()
+-                      ret = m
++              # Read device-tree model if available
++              ret = read_from_file("/proc/device-tree/model")
++              if ret:
++                      # replace the NULL byte with which the DT string ends
++                      ret = ret.replace(u"\u0000", "")
+               return ret
+-- 
+1.9.3
+
diff --git a/src/patches/glibc-arm-dont-use-swp.patch b/src/patches/glibc-arm-dont-use-swp.patch
deleted file mode 100644 (file)
index 293c20c..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-commit 1ba025a9a21eda65d8c36cc0dbb51d214a3ebb1a
-Author: Daniel Jacobowitz <dan@codesourcery.com>
-Date:   Mon Jun 2 01:57:03 2008 +0000
-
-    2008-06-01  Paul Brook  <paul@codesourcery.com>
-           Zack Weinberg  <zack@codesourcery.com>
-           Daniel Jacobowitz  <dan@codesourcery.com>
-    
-       * sysdeps/arm/nptl/pthread_spin_lock.S,
-       sysdeps/arm/nptl/pthread_spin_trylock.S: Delete.
-       * sysdeps/arm/nptl/pthread_spin_lock.c,
-       sysdeps/arm/nptl/pthread_spin_trylock.c: New files using
-       atomic_compare_and_exchange_val_acq to take spinlocks.
-       * sysdeps/unix/sysv/linux/arm/nptl/bits/atomic.h (lll_trylock,
-       lll_cond_trylock): Use atomic_compare_and_exchange_val_acq.
-       (__lll_trylock, __lll_cond_trylock): Delete.
-       * sysdeps/unix/sysv/linux/arm/nptl/bits/atomic.h
-       (atomic_exchange_acq): Delete.
-       (atomic_full_barrier): Define.
-       (__arch_compare_and_exchange_val_32_acq): Use named operands.
-       * sysdeps/unix/sysv/linux/arm/eabi/configure.in: Update
-       arch_minimum_kernel to 2.6.16.
-       * sysdeps/unix/sysv/linux/arm/eabi/configure: Regenerated.
-
-diff --git a/sysdeps/arm/nptl/pthread_spin_lock.S b/sysdeps/arm/nptl/pthread_spin_lock.S
-deleted file mode 100644
-index bd6adf7..0000000
---- a/sysdeps/arm/nptl/pthread_spin_lock.S
-+++ /dev/null
-@@ -1,31 +0,0 @@
--/* Copyright (C) 2005 Free Software Foundation, Inc.
--   This file is part of the GNU C Library.
--
--   The GNU C Library is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public
--   License as published by the Free Software Foundation; either
--   version 2.1 of the License, or (at your option) any later version.
--
--   The GNU C Library 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with the GNU C Library; if not, write to the Free
--   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
--   02111-1307 USA.  */
--
--#include <sysdep.h>
--
--      .text
--      .align  4
--
--ENTRY (pthread_spin_lock)
--      mov     r1, #1
--1:    swp     r2, r1, [r0]
--      teq     r2, #0
--      bne     1b
--      mov     r0, #0
--      PSEUDO_RET_NOERRNO
--END (pthread_spin_lock)
-diff --git a/sysdeps/arm/nptl/pthread_spin_lock.c b/sysdeps/arm/nptl/pthread_spin_lock.c
-new file mode 100644
-index 0000000..1217b89
---- /dev/null
-+++ b/sysdeps/arm/nptl/pthread_spin_lock.c
-@@ -0,0 +1,30 @@
-+/* Copyright (C) 2008 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library 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
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, write to the Free
-+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+   02111-1307 USA.  */
-+
-+#include <atomic.h>
-+#include "pthreadP.h"
-+
-+int
-+pthread_spin_lock (pthread_spinlock_t *lock)
-+{
-+  while (atomic_compare_and_exchange_val_acq (lock, 1, 0) != 0)
-+   while (*lock != 0)
-+    ;
-+
-+  return 0;
-+}
-diff --git a/sysdeps/arm/nptl/pthread_spin_trylock.S b/sysdeps/arm/nptl/pthread_spin_trylock.S
-deleted file mode 100644
-index 8593150..0000000
---- a/sysdeps/arm/nptl/pthread_spin_trylock.S
-+++ /dev/null
-@@ -1,34 +0,0 @@
--/* Copyright (C) 2005 Free Software Foundation, Inc.
--   This file is part of the GNU C Library.
--
--   The GNU C Library is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public
--   License as published by the Free Software Foundation; either
--   version 2.1 of the License, or (at your option) any later version.
--
--   The GNU C Library 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
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with the GNU C Library; if not, write to the Free
--   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
--   02111-1307 USA.  */
--
--#define _ERRNO_H 1
--#include <bits/errno.h>
--
--#include <sysdep.h>
--
--      .text
--      .align  4
--
--ENTRY (pthread_spin_trylock)
--      mov     r1, #1
--      swp     r2, r1, [r0]
--      teq     r2, #0
--      moveq   r0, #0
--      movne   r0, #EBUSY
--      PSEUDO_RET_NOERRNO
--END (pthread_spin_trylock)
-diff --git a/sysdeps/arm/nptl/pthread_spin_trylock.c b/sysdeps/arm/nptl/pthread_spin_trylock.c
-new file mode 100644
-index 0000000..fb998d2
---- /dev/null
-+++ b/sysdeps/arm/nptl/pthread_spin_trylock.c
-@@ -0,0 +1,27 @@
-+/* Copyright (C) 2008 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library 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
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, write to the Free
-+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-+   02111-1307 USA.  */
-+
-+#include <errno.h>
-+#include <atomic.h>
-+#include "pthreadP.h"
-+
-+int
-+pthread_spin_trylock (pthread_spinlock_t *lock)
-+{
-+  return atomic_compare_and_exchange_val_acq (lock, 1, 0) ? EBUSY : 0;
-+}
-diff --git a/sysdeps/unix/sysv/linux/arm/eabi/configure b/sysdeps/unix/sysv/linux/arm/eabi/configure
-index ab83048..28fb9ef 100644
---- a/sysdeps/unix/sysv/linux/arm/eabi/configure
-+++ b/sysdeps/unix/sysv/linux/arm/eabi/configure
-@@ -1,5 +1,5 @@
- # This file is generated from configure.in by Autoconf.  DO NOT EDIT!
-  # Local configure fragment for sysdeps/unix/sysv/linux/arm/eabi.
--arch_minimum_kernel=2.6.14
-+arch_minimum_kernel=2.6.16
- libc_cv_gcc_unwind_find_fde=no
-diff --git a/sysdeps/unix/sysv/linux/arm/eabi/configure.in b/sysdeps/unix/sysv/linux/arm/eabi/configure.in
-index 83aa8fc..d1fb7f4 100644
---- a/sysdeps/unix/sysv/linux/arm/eabi/configure.in
-+++ b/sysdeps/unix/sysv/linux/arm/eabi/configure.in
-@@ -1,5 +1,5 @@
- GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
- # Local configure fragment for sysdeps/unix/sysv/linux/arm/eabi.
--arch_minimum_kernel=2.6.14
-+arch_minimum_kernel=2.6.16
- libc_cv_gcc_unwind_find_fde=no
-diff --git a/sysdeps/unix/sysv/linux/arm/nptl/bits/atomic.h b/sysdeps/unix/sysv/linux/arm/nptl/bits/atomic.h
-index 71ed714..247ddd3 100644
---- a/sysdeps/unix/sysv/linux/arm/nptl/bits/atomic.h
-+++ b/sysdeps/unix/sysv/linux/arm/nptl/bits/atomic.h
-@@ -37,22 +37,12 @@ typedef uintmax_t uatomic_max_t;
- void __arm_link_error (void);
--#define atomic_exchange_acq(mem, newvalue)                                  \
--  ({ __typeof (*mem) result;                                                \
--     if (sizeof (*mem) == 1)                                                \
--       __asm__ __volatile__ ("swpb %0, %1, [%2]"                            \
--                           : "=&r,&r" (result)                              \
--                           : "r,0" (newvalue), "r,r" (mem) : "memory");     \
--     else if (sizeof (*mem) == 4)                                           \
--       __asm__ __volatile__ ("swp %0, %1, [%2]"                                     \
--                           : "=&r,&r" (result)                              \
--                           : "r,0" (newvalue), "r,r" (mem) : "memory");     \
--     else                                                                   \
--       {                                                                    \
--       result = 0;                                                          \
--       abort ();                                                            \
--       }                                                                    \
--     result; })
-+#define atomic_full_barrier() \
-+     __asm__ __volatile__                                                   \
-+           ("mov\tip, #0xffff0fff\n\t"                                      \
-+            "mov\tlr, pc\n\t"                                               \
-+            "add\tpc, ip, #(0xffff0fa0 - 0xffff0fff)"                       \
-+            : : : "ip", "lr", "cc", "memory");
- /* Atomic compare and exchange.  This sequence relies on the kernel to
-    provide a compare and exchange operation which is atomic on the
-@@ -76,18 +66,19 @@ void __arm_link_error (void);
-      register __typeof (oldval) a_tmp asm ("r3");                           \
-      register __typeof (oldval) a_oldval2 asm ("r4") = (oldval);            \
-      __asm__ __volatile__                                                   \
--           ("0:\tldr\t%1,[%3]\n\t"                                          \
--            "cmp\t%1, %4\n\t"                                               \
-+           ("0:\tldr\t%[tmp],[%[ptr]]\n\t"                                  \
-+            "cmp\t%[tmp], %[old2]\n\t"                                      \
-             "bne\t1f\n\t"                                                   \
--            "mov\t%0, %4\n\t"                                               \
--            "mov\t%1, #0xffff0fff\n\t"                                      \
-+            "mov\t%[old], %[old2]\n\t"                                      \
-+            "mov\t%[tmp], #0xffff0fff\n\t"                                  \
-             "mov\tlr, pc\n\t"                                               \
--            "add\tpc, %1, #(0xffff0fc0 - 0xffff0fff)\n\t"                   \
-+            "add\tpc, %[tmp], #(0xffff0fc0 - 0xffff0fff)\n\t"               \
-             "bcc\t0b\n\t"                                                   \
--            "mov\t%1, %4\n\t"                                               \
-+            "mov\t%[tmp], %[old2]\n\t"                                      \
-             "1:"                                                            \
--            : "=&r" (a_oldval), "=&r" (a_tmp)                               \
--            : "r" (a_newval), "r" (a_ptr), "r" (a_oldval2)                  \
-+            : [old] "=&r" (a_oldval), [tmp] "=&r" (a_tmp)                   \
-+            : [new] "r" (a_newval), [ptr] "r" (a_ptr),                      \
-+              [old2] "r" (a_oldval2)                                        \
-             : "ip", "lr", "cc", "memory");                                  \
-      a_tmp; })
-diff --git a/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h b/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
-index f48e867..889f97c 100644
---- a/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
-+++ b/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
-@@ -126,43 +126,11 @@
-   })
--static inline int __attribute__((always_inline))
--__lll_mutex_trylock (int *futex)
--{
--  int flag = 1, old;
--  asm volatile (
--    "\tswp    %[old], %[flag], [%[futex]]     @ try to take the lock\n"
--    "\tcmp    %[old], #1                      @ check old lock value\n"
--    "\tmovlo  %[flag], #0                     @ if we got it, return 0\n"
--    "\tswphi  %[flag], %[old], [%[futex]]     @ if it was contested,\n"
--    "                                         @ restore the contested flag,\n"
--    "                                         @ and check whether that won."
--    : [futex] "+&r" (futex), [flag] "+&r" (flag), [old] "=&r" (old)
--    : : "memory" );
--
--  return flag;
--}
--#define lll_mutex_trylock(lock)       __lll_mutex_trylock (&(lock))
--
--
--static inline int __attribute__((always_inline))
--__lll_mutex_cond_trylock (int *futex)
--{
--  int flag = 2, old;
--  asm volatile (
--    "\tswp    %[old], %[flag], [%[futex]]     @ try to take the lock\n"
--    "\tcmp    %[old], #1                      @ check old lock value\n"
--    "\tmovlo  %[flag], #0                     @ if we got it, return 0\n"
--    "\tswphi  %[flag], %[old], [%[futex]]     @ if it was contested,\n"
--    "                                         @ restore the contested flag,\n"
--    "                                         @ and check whether that won."
--    : [futex] "+&r" (futex), [flag] "+&r" (flag), [old] "=&r" (old)
--    : : "memory" );
--
--  return flag;
--}
--#define lll_mutex_cond_trylock(lock)  __lll_mutex_cond_trylock (&(lock))
-+#define lll_mutex_trylock(lock)       \
-+  atomic_compare_and_exchange_val_acq(&(lock), 1, 0)
-+#define lll_mutex_cond_trylock(lock)  \
-+  atomic_compare_and_exchange_val_acq(&(lock), 2, 0)
- #define __lll_robust_trylock(futex, id) \
-   (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0)
diff --git a/src/patches/grub-2.00_disable_vga_fallback.patch b/src/patches/grub-2.00_disable_vga_fallback.patch
new file mode 100644 (file)
index 0000000..0d1dec9
--- /dev/null
@@ -0,0 +1,15 @@
+We have to remove the vga fallback because this not work on bay-trail and other
+new intel onboard graphics.
+
+diff -Naur grub-2.00.org/grub-core/video/i386/pc/vga.c grub-2.00/grub-core/video/i386/pc/vga.c
+--- grub-2.00.org/grub-core/video/i386/pc/vga.c        2012-06-06 23:21:02.000000000 +0200
++++ grub-2.00/grub-core/video/i386/pc/vga.c    2014-09-05 21:41:04.790870375 +0200
+@@ -122,7 +122,7 @@
+ {
+   grub_err_t err;
+-  if ((width && width != VGA_WIDTH) || (height && height != VGA_HEIGHT))
++//  if ((width && width != VGA_WIDTH) || (height && height != VGA_HEIGHT))
+     return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no matching mode found");
+   framebuffer.temporary_buffer = grub_malloc (VGA_HEIGHT * VGA_WIDTH);
diff --git a/src/patches/grub-gentoo-14.patch b/src/patches/grub-gentoo-14.patch
deleted file mode 100644 (file)
index d2bb959..0000000
+++ /dev/null
@@ -1,16087 +0,0 @@
-diff -Nur grub-0.97/acinclude.m4 grub-0.97-patched/acinclude.m4
---- grub-0.97/acinclude.m4     2004-04-27 22:48:06.000000000 +0200
-+++ grub-0.97-patched/acinclude.m4     2012-11-11 17:07:12.710729053 +0100
-@@ -57,7 +57,7 @@
- fi
- grub_cv_prog_objcopy_absolute=yes
- for link_addr in 2000 8000 7C00; do
--  if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then :
-+  if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} ${LDFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then :
-   else
-     AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
-   fi
-diff -Nur grub-0.97/ChangeLog grub-0.97-patched/ChangeLog
---- grub-0.97/ChangeLog        2005-05-08 04:47:02.000000000 +0200
-+++ grub-0.97-patched/ChangeLog        2012-11-11 17:07:12.708728989 +0100
-@@ -1,3 +1,127 @@
-+2008-05-20  Robert Millan  <rmh@aybabtu.com>
-+
-+      * netboot/cs89x0.c: Fix license violation.
-+      * netboot/cs89x0.h: Likewise.
-+
-+2008-04-10  Pavel Roskin  <proski@gnu.org>
-+
-+      * configure.ac: Always use "_cv_" in cache variables for
-+      compatibility with Autoconf 2.62.
-+
-+2008-03-28  Robert Millan  <rmh@aybabtu.com>
-+
-+      Surpass 1 TiB disk addressing limit.  Note: there are no plans to handle
-+      the 2 TiB disk limit in GRUB Legacy, since that would need considerable
-+      rework.  If you have >2TiB disks, use GRUB 2 instead.
-+
-+      * grub/asmstub.c (biosdisk): Add unsigned qualifier to `sector'.
-+      * stage2/bios.c (biosdisk): Likewise.
-+      * stage2/disk_io.c (rawread, devread, rawwrite, devwrite): Likewise.
-+      * stage2/shared.h (rawread, devread, rawwrite, devwrite): Likewise.
-+      * lib/device.c (get_drive_geometry): Replace BLKGETSIZE with
-+      BLKGETSIZE64.
-+
-+2007-10-29  Pavel Roskin  <proski@gnu.org>
-+
-+      * configure.ac: Test if '--build-id=none' is supported by the
-+      linker and add it to LDFLAGS if possible.  Build ID causes
-+      objcopy to generate huge binary files.
-+      * aclocal.m4 (grub_PROG_OBJCOPY_ABSOLUTE): Use LDFLAGS when
-+      linking, so that build ID doesn't break the test.
-+      * stage1/Makefile.am: Preserve LDFLAGS, use stage1_exec_LDFLAGS.
-+
-+2007-02-22  Pavel Roskin  <proski@gnu.org>
-+
-+      * stage2/iso9660.h: Remove unnecessary packed attributes.
-+
-+2007-02-22  Robert Millan  <rmh@aybabtu.com>
-+
-+      * util/mkbimage: Update my email address, and remove my name from
-+      some places where unnecessary credit is given.
-+
-+2006-09-10  Pavel Roskin  <proski@gnu.org>
-+
-+      * netboot/natsemi.c: Fix compile error with gcc 4.1.1.  Cast
-+      cannot make a variable volatile - it should be declared as such.
-+      * netboot/sis900.c: Likewise.
-+
-+2006-09-08  Pavel Roskin  <proski@gnu.org>
-+
-+      * netboot/etherboot.h: Remove incorrect extern declarations of
-+      the variables later declared static.  Move BOOTP_DATA_ADDR ...
-+      * netboot/main.c: ... here.  Eliminate end_of_rfc1533 - it's
-+      write-only.
-+
-+2006-06-24  Yoshinori K. Okuji  <okuji@enbug.org>
-+
-+      * docs/grub.texi: Changed the license term to the GNU Free
-+      Documentation License 1.2.
-+
-+      * docs/multiboot.texi: Reformatted to show the license term
-+      and the version number explicitly.
-+      
-+      * docs/fdl.texi: New file.
-+      
-+      * docs/Makefile.am (grub_TEXINFOS): Added fdl.texi.
-+
-+2006-06-24  Robert Millan  <robertmh@gnu.org>
-+
-+      * lib/device.c (write_to_partition): /dev/ataraid/ and /dev/rd/
-+      partitions have a "p" prefix.  Add it.
-+
-+2006-06-24  Robert Millan  <robertmh@gnu.org>
-+
-+      * lib/device.c (get_i2o_disk_name): New function.
-+      (init_device_map) [__linux__]: Add support for I2O devices.
-+
-+2006-05-02  Pavel Roskin  <proski@gnu.org>
-+
-+      * stage2/stage2.c (run_menu): Fix "savedefault" to save only top
-+      level menu positions.  Remember current position when calling a
-+      submenu.  Don't recalculate it when booting from a submenu.
-+
-+      * grub/main.c (main): Make sure the boot drive number doesn't
-+      exceed 255.
-+
-+2006-05-02  Vesa Jaaskelainen  <chaac@nic.fi>
-+
-+      * stage2/shared.h (vbe_mode): Back ported aligment fix from GRUB 2
-+      to GRUB Legacy.  Problem reported by Gerardo Richarte.
-+
-+2006-04-23  Robert Millan  <robertmh@gnu.org>
-+
-+      * grub/asmstub.c (get_diskinfo): Optimize sysctl routine.
-+
-+2006-04-20  Robert Millan  <robertmh@gnu.org>
-+
-+      Fixes for kernel of FreeBSD:
-+      * grub/asmstub.c (get_diskinfo): Toggle "kern.geom.debugflags" sysctl
-+      before opening a device for writing.
-+      * util/grub-install.in: Devices don't have this "r" prefix anymore.
-+
-+2006-04-16  Yoshinori K. Okuji  <okuji@enbug.org>
-+
-+      * docs/multiboot.texi: Correct the offset of address
-+      fields. Reported by Jeroen Dekkers.
-+
-+2006-03-21  Yoshinori K. Okuji  <okuji@enbug.org>
-+
-+      * stage2/builtins.c (setup_func): Specify the size of DEVICE to
-+      grub_strncat instead of a strange number 256. Reported by Vitaly
-+      Fertman <vitaly@namesys.com>.
-+
-+2005-09-29  Yoshinori K. Okuji  <okuji@enbug.org>
-+
-+      * docs/multiboot.texi: Fix a bug in the byte order of
-+      boot_device. I hope this won't affect any OS image.
-+      Increased the version number to 0.6.94.
-+
-+2005-09-28  Yoshinori K. Okuji  <okuji@enbug.org>
-+
-+      * stage2/boot.c (load_image): Even if an OS image is an ELF
-+      object, use the a.out kludge if MULTIBOOT_AOUT_KLUDGE is
-+      specified.
-+
- 2005-05-08  Yoshinori K. Okuji  <okuji@enbug.org>
-       * configure.ac (AC_INIT): Upgraded to 0.97.
-diff -Nur grub-0.97/configure.ac grub-0.97-patched/configure.ac
---- grub-0.97/configure.ac     2005-05-08 04:36:03.000000000 +0200
-+++ grub-0.97-patched/configure.ac     2012-11-11 17:07:12.752730394 +0100
-@@ -21,8 +21,12 @@
- AC_CANONICAL_HOST
- case "$host_cpu" in
--i[[3456]]86) host_cpu=i386 ;;
--x86_64) host_cpu=x86_64 ;;
-+i[[3456]]86)
-+  STAGE_MARCH="-march=$host_cpu"
-+  host_cpu=i386 ;;
-+x86_64)
-+  STAGE_MARCH="-march=i686"
-+  host_cpu=x86_64 ;;
- *) AC_MSG_ERROR([unsupported CPU type]) ;;
- esac
-@@ -56,12 +60,7 @@
- AC_CHECK_TOOL(CC, gcc)
- AC_PROG_CC
--# We need this for older versions of Autoconf.
--_AM_DEPENDENCIES(CC)
--
--dnl Because recent automake complains about AS, set it here.
--CCAS="$CC"
--AC_SUBST(CCAS)
-+AM_PROG_AS
- AC_ARG_WITH(binutils,
-   [  --with-binutils=DIR     search the directory DIR to find binutils])
-@@ -86,13 +85,13 @@
-     fi
-     STAGE1_CFLAGS="-O2"
-     GRUB_CFLAGS="-O2"
--    AC_CACHE_CHECK([whether optimization for size works], size_flag, [
-+    AC_CACHE_CHECK([whether optimization for size works], grub_cv_cc_Os, [
-       saved_CFLAGS=$CFLAGS
-       CFLAGS="-Os -g"
--      AC_TRY_COMPILE(, , size_flag=yes, size_flag=no)
-+      AC_TRY_COMPILE(, , grub_cv_cc_Os=yes, grub_cv_cc_Os=no)
-       CFLAGS=$saved_CFLAGS
-     ])
--    if test "x$size_flag" = xyes; then
-+    if test "x$grub_cv_cc_Os" = xyes; then
-       STAGE2_CFLAGS="-Os"
-     else
-       STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops"
-@@ -100,21 +99,38 @@
-     # OpenBSD has a GCC extension for protecting applications from
-     # stack smashing attacks, but GRUB doesn't want this feature.
-     AC_CACHE_CHECK([whether gcc has -fno-stack-protector],
--                 no_stack_protector_flag, [
-+                 grub_cv_cc_no_stack_protector, [
-       saved_CFLAGS=$CFLAGS
-       CFLAGS="-fno-stack-protector"
-       AC_TRY_COMPILE(,
-                    ,
--                   no_stack_protector_flag=yes,
--                   no_stack_protector_flag=no)
-+                   grub_cv_cc_no_stack_protector=yes,
-+                   grub_cv_cc_no_stack_protector=no)
-       CFLAGS=$saved_CFLAGS
-     ])
--    if test "x$no_stack_protector_flag" = xyes; then
-+    if test "x$grub_cv_cc_no_stack_protector" = xyes; then
-       STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector"
-     fi
-+    # Position Independent Executables, but GRUB doesn't want this feature.
-+    AC_CACHE_CHECK([whether gcc has -fPIE on as default], grub_cv_cc_fpie, [
-+      AC_TRY_COMPILE(,[
-+              #if ! defined (__PIC__) || ! defined (__PIE__)
-+              #error
-+              #endif
-+              ],
-+            grub_cv_cc_fpie=yes,
-+            grub_cv_cc_fpie=no)
-+    ])
-+    if test "x$grub_cv_cc_fpie" = xyes; then
-+      STAGE1_CFLAGS="$STAGE1_CFLAGS -nopie"
-+      STAGE2_CFLAGS="$STAGE2_CFLAGS -nopie"
-+    fi
-   fi
- fi
-+STAGE1_CFLAGS="$STAGE1_CFLAGS -fno-strict-aliasing $STAGE_MARCH"
-+STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-strict-aliasing $STAGE_MARCH"
-+GRUB_CFLAGS="$GRUB_CFLAGS -fno-strict-aliasing"
- AC_SUBST(STAGE1_CFLAGS)
- AC_SUBST(STAGE2_CFLAGS)
- AC_SUBST(GRUB_CFLAGS)
-@@ -123,33 +139,44 @@
- CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused -Wshadow"
- CPPFLAGS="$CPPFLAGS -Wpointer-arith"
--AC_CACHE_CHECK([whether -Wundef works], undef_flag, [
-+AC_CACHE_CHECK([whether -Wundef works], grub_cv_cc_Wundef, [
-   saved_CPPFLAGS="$CPPFLAGS"
-   CPPFLAGS="-Wundef"
--  AC_TRY_COMPILE(, , undef_flag=yes, undef_flag=no)
-+  AC_TRY_COMPILE(, , grub_cv_cc_Wundef=yes, grub_cv_cc_Wundef=no)
-   CPPFLAGS="$saved_CPPFLAGS"
- ])
- # The options `-falign-*' are supported by gcc 3.0 or later.
- # Probably it is sufficient to only check for -falign-loops.
--AC_CACHE_CHECK([whether -falign-loops works], [falign_loop_flag], [
-+AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
-   saved_CPPFLAGS="$CPPFLAGS"
-   CPPFLAGS="-falign-loops=1"
--  AC_TRY_COMPILE(, , [falign_loop_flag=yes], [falign_loop_flag=no])
-+  AC_TRY_COMPILE(, , [grub_cv_cc_falign_loop=yes], [grub_cv_cc_falign_loop=no])
-   CPPFLAGS="$saved_CPPFLAGS"
- ])
- # Force no alignment to save space.
--if test "x$falign_loop_flag" = xyes; then
-+if test "x$grub_cv_cc_falign_loop" = xyes; then
-   CPPFLAGS="$CPPFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
- else
-   CPPFLAGS="$CPPFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
- fi
--if test "x$undef_flag" = xyes; then
-+if test "x$grub_cv_cc_Wundef" = xyes; then
-   CPPFLAGS="$CPPFLAGS -Wundef"
- fi
-+# Check if build ID can be disabled in the linker
-+AC_MSG_CHECKING([whether linker accepts `--build-id=none'])
-+save_LDFLAGS="$LDFLAGS"
-+LDFLAGS="$LDFLAGS -Wl,--build-id=none"
-+AC_TRY_LINK(, , build_id_flag=yes, build_id_flag=no)
-+AC_MSG_RESULT([$build_id_flag])
-+LDFLAGS="$save_LDFLAGS"
-+if test "x$build_id_flag" = xyes; then
-+  LDFLAGS="$LDFLAGS -Wl,--build-id=none"
-+fi
-+
- if test "x$with_binutils" != x; then
- dnl  AC_PATH_TOOL(OBJCOPY, objcopy, , "$with_binutils:$PATH")
-   AC_PATH_PROG(OBJCOPY, objcopy, , "$with_binutils:$PATH")
-@@ -595,6 +622,11 @@
-   [  --enable-diskless       enable diskless support])
- AM_CONDITIONAL(DISKLESS_SUPPORT, test "x$enable_diskless" = xyes)
-+dnl Graphical splashscreen support
-+AC_ARG_ENABLE(graphics,
-+  [  --disable-graphics      disable graphics terminal support])
-+AM_CONDITIONAL(GRAPHICS_SUPPORT, test "x$enable_graphics" != xno)
-+
- dnl Hercules terminal
- AC_ARG_ENABLE(hercules,
-   [  --disable-hercules      disable hercules terminal support])
-diff -Nur grub-0.97/docs/fdl.texi grub-0.97-patched/docs/fdl.texi
---- grub-0.97/docs/fdl.texi    1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/docs/fdl.texi    2012-11-11 17:07:12.712729117 +0100
-@@ -0,0 +1,452 @@
-+
-+@node GNU Free Documentation License
-+@appendixsec GNU Free Documentation License
-+
-+@cindex FDL, GNU Free Documentation License
-+@center Version 1.2, November 2002
-+
-+@display
-+Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
-+51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
-+
-+Everyone is permitted to copy and distribute verbatim copies
-+of this license document, but changing it is not allowed.
-+@end display
-+
-+@enumerate 0
-+@item
-+PREAMBLE
-+
-+The purpose of this License is to make a manual, textbook, or other
-+functional and useful document @dfn{free} in the sense of freedom: to
-+assure everyone the effective freedom to copy and redistribute it,
-+with or without modifying it, either commercially or noncommercially.
-+Secondarily, this License preserves for the author and publisher a way
-+to get credit for their work, while not being considered responsible
-+for modifications made by others.
-+
-+This License is a kind of ``copyleft'', which means that derivative
-+works of the document must themselves be free in the same sense.  It
-+complements the GNU General Public License, which is a copyleft
-+license designed for free software.
-+
-+We have designed this License in order to use it for manuals for free
-+software, because free software needs free documentation: a free
-+program should come with manuals providing the same freedoms that the
-+software does.  But this License is not limited to software manuals;
-+it can be used for any textual work, regardless of subject matter or
-+whether it is published as a printed book.  We recommend this License
-+principally for works whose purpose is instruction or reference.
-+
-+@item
-+APPLICABILITY AND DEFINITIONS
-+
-+This License applies to any manual or other work, in any medium, that
-+contains a notice placed by the copyright holder saying it can be
-+distributed under the terms of this License.  Such a notice grants a
-+world-wide, royalty-free license, unlimited in duration, to use that
-+work under the conditions stated herein.  The ``Document'', below,
-+refers to any such manual or work.  Any member of the public is a
-+licensee, and is addressed as ``you''.  You accept the license if you
-+copy, modify or distribute the work in a way requiring permission
-+under copyright law.
-+
-+A ``Modified Version'' of the Document means any work containing the
-+Document or a portion of it, either copied verbatim, or with
-+modifications and/or translated into another language.
-+
-+A ``Secondary Section'' is a named appendix or a front-matter section
-+of the Document that deals exclusively with the relationship of the
-+publishers or authors of the Document to the Document's overall
-+subject (or to related matters) and contains nothing that could fall
-+directly within that overall subject.  (Thus, if the Document is in
-+part a textbook of mathematics, a Secondary Section may not explain
-+any mathematics.)  The relationship could be a matter of historical
-+connection with the subject or with related matters, or of legal,
-+commercial, philosophical, ethical or political position regarding
-+them.
-+
-+The ``Invariant Sections'' are certain Secondary Sections whose titles
-+are designated, as being those of Invariant Sections, in the notice
-+that says that the Document is released under this License.  If a
-+section does not fit the above definition of Secondary then it is not
-+allowed to be designated as Invariant.  The Document may contain zero
-+Invariant Sections.  If the Document does not identify any Invariant
-+Sections then there are none.
-+
-+The ``Cover Texts'' are certain short passages of text that are listed,
-+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-+the Document is released under this License.  A Front-Cover Text may
-+be at most 5 words, and a Back-Cover Text may be at most 25 words.
-+
-+A ``Transparent'' copy of the Document means a machine-readable copy,
-+represented in a format whose specification is available to the
-+general public, that is suitable for revising the document
-+straightforwardly with generic text editors or (for images composed of
-+pixels) generic paint programs or (for drawings) some widely available
-+drawing editor, and that is suitable for input to text formatters or
-+for automatic translation to a variety of formats suitable for input
-+to text formatters.  A copy made in an otherwise Transparent file
-+format whose markup, or absence of markup, has been arranged to thwart
-+or discourage subsequent modification by readers is not Transparent.
-+An image format is not Transparent if used for any substantial amount
-+of text.  A copy that is not ``Transparent'' is called ``Opaque''.
-+
-+Examples of suitable formats for Transparent copies include plain
-+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
-+format, @acronym{SGML} or @acronym{XML} using a publicly available
-+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
-+PostScript or @acronym{PDF} designed for human modification.  Examples
-+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
-+@acronym{JPG}.  Opaque formats include proprietary formats that can be
-+read and edited only by proprietary word processors, @acronym{SGML} or
-+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
-+not generally available, and the machine-generated @acronym{HTML},
-+PostScript or @acronym{PDF} produced by some word processors for
-+output purposes only.
-+
-+The ``Title Page'' means, for a printed book, the title page itself,
-+plus such following pages as are needed to hold, legibly, the material
-+this License requires to appear in the title page.  For works in
-+formats which do not have any title page as such, ``Title Page'' means
-+the text near the most prominent appearance of the work's title,
-+preceding the beginning of the body of the text.
-+
-+A section ``Entitled XYZ'' means a named subunit of the Document whose
-+title either is precisely XYZ or contains XYZ in parentheses following
-+text that translates XYZ in another language.  (Here XYZ stands for a
-+specific section name mentioned below, such as ``Acknowledgements'',
-+``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
-+of such a section when you modify the Document means that it remains a
-+section ``Entitled XYZ'' according to this definition.
-+
-+The Document may include Warranty Disclaimers next to the notice which
-+states that this License applies to the Document.  These Warranty
-+Disclaimers are considered to be included by reference in this
-+License, but only as regards disclaiming warranties: any other
-+implication that these Warranty Disclaimers may have is void and has
-+no effect on the meaning of this License.
-+
-+@item
-+VERBATIM COPYING
-+
-+You may copy and distribute the Document in any medium, either
-+commercially or noncommercially, provided that this License, the
-+copyright notices, and the license notice saying this License applies
-+to the Document are reproduced in all copies, and that you add no other
-+conditions whatsoever to those of this License.  You may not use
-+technical measures to obstruct or control the reading or further
-+copying of the copies you make or distribute.  However, you may accept
-+compensation in exchange for copies.  If you distribute a large enough
-+number of copies you must also follow the conditions in section 3.
-+
-+You may also lend copies, under the same conditions stated above, and
-+you may publicly display copies.
-+
-+@item
-+COPYING IN QUANTITY
-+
-+If you publish printed copies (or copies in media that commonly have
-+printed covers) of the Document, numbering more than 100, and the
-+Document's license notice requires Cover Texts, you must enclose the
-+copies in covers that carry, clearly and legibly, all these Cover
-+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-+the back cover.  Both covers must also clearly and legibly identify
-+you as the publisher of these copies.  The front cover must present
-+the full title with all words of the title equally prominent and
-+visible.  You may add other material on the covers in addition.
-+Copying with changes limited to the covers, as long as they preserve
-+the title of the Document and satisfy these conditions, can be treated
-+as verbatim copying in other respects.
-+
-+If the required texts for either cover are too voluminous to fit
-+legibly, you should put the first ones listed (as many as fit
-+reasonably) on the actual cover, and continue the rest onto adjacent
-+pages.
-+
-+If you publish or distribute Opaque copies of the Document numbering
-+more than 100, you must either include a machine-readable Transparent
-+copy along with each Opaque copy, or state in or with each Opaque copy
-+a computer-network location from which the general network-using
-+public has access to download using public-standard network protocols
-+a complete Transparent copy of the Document, free of added material.
-+If you use the latter option, you must take reasonably prudent steps,
-+when you begin distribution of Opaque copies in quantity, to ensure
-+that this Transparent copy will remain thus accessible at the stated
-+location until at least one year after the last time you distribute an
-+Opaque copy (directly or through your agents or retailers) of that
-+edition to the public.
-+
-+It is requested, but not required, that you contact the authors of the
-+Document well before redistributing any large number of copies, to give
-+them a chance to provide you with an updated version of the Document.
-+
-+@item
-+MODIFICATIONS
-+
-+You may copy and distribute a Modified Version of the Document under
-+the conditions of sections 2 and 3 above, provided that you release
-+the Modified Version under precisely this License, with the Modified
-+Version filling the role of the Document, thus licensing distribution
-+and modification of the Modified Version to whoever possesses a copy
-+of it.  In addition, you must do these things in the Modified Version:
-+
-+@enumerate A
-+@item
-+Use in the Title Page (and on the covers, if any) a title distinct
-+from that of the Document, and from those of previous versions
-+(which should, if there were any, be listed in the History section
-+of the Document).  You may use the same title as a previous version
-+if the original publisher of that version gives permission.
-+
-+@item
-+List on the Title Page, as authors, one or more persons or entities
-+responsible for authorship of the modifications in the Modified
-+Version, together with at least five of the principal authors of the
-+Document (all of its principal authors, if it has fewer than five),
-+unless they release you from this requirement.
-+
-+@item
-+State on the Title page the name of the publisher of the
-+Modified Version, as the publisher.
-+
-+@item
-+Preserve all the copyright notices of the Document.
-+
-+@item
-+Add an appropriate copyright notice for your modifications
-+adjacent to the other copyright notices.
-+
-+@item
-+Include, immediately after the copyright notices, a license notice
-+giving the public permission to use the Modified Version under the
-+terms of this License, in the form shown in the Addendum below.
-+
-+@item
-+Preserve in that license notice the full lists of Invariant Sections
-+and required Cover Texts given in the Document's license notice.
-+
-+@item
-+Include an unaltered copy of this License.
-+
-+@item
-+Preserve the section Entitled ``History'', Preserve its Title, and add
-+to it an item stating at least the title, year, new authors, and
-+publisher of the Modified Version as given on the Title Page.  If
-+there is no section Entitled ``History'' in the Document, create one
-+stating the title, year, authors, and publisher of the Document as
-+given on its Title Page, then add an item describing the Modified
-+Version as stated in the previous sentence.
-+
-+@item
-+Preserve the network location, if any, given in the Document for
-+public access to a Transparent copy of the Document, and likewise
-+the network locations given in the Document for previous versions
-+it was based on.  These may be placed in the ``History'' section.
-+You may omit a network location for a work that was published at
-+least four years before the Document itself, or if the original
-+publisher of the version it refers to gives permission.
-+
-+@item
-+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
-+the Title of the section, and preserve in the section all the
-+substance and tone of each of the contributor acknowledgements and/or
-+dedications given therein.
-+
-+@item
-+Preserve all the Invariant Sections of the Document,
-+unaltered in their text and in their titles.  Section numbers
-+or the equivalent are not considered part of the section titles.
-+
-+@item
-+Delete any section Entitled ``Endorsements''.  Such a section
-+may not be included in the Modified Version.
-+
-+@item
-+Do not retitle any existing section to be Entitled ``Endorsements'' or
-+to conflict in title with any Invariant Section.
-+
-+@item
-+Preserve any Warranty Disclaimers.
-+@end enumerate
-+
-+If the Modified Version includes new front-matter sections or
-+appendices that qualify as Secondary Sections and contain no material
-+copied from the Document, you may at your option designate some or all
-+of these sections as invariant.  To do this, add their titles to the
-+list of Invariant Sections in the Modified Version's license notice.
-+These titles must be distinct from any other section titles.
-+
-+You may add a section Entitled ``Endorsements'', provided it contains
-+nothing but endorsements of your Modified Version by various
-+parties---for example, statements of peer review or that the text has
-+been approved by an organization as the authoritative definition of a
-+standard.
-+
-+You may add a passage of up to five words as a Front-Cover Text, and a
-+passage of up to 25 words as a Back-Cover Text, to the end of the list
-+of Cover Texts in the Modified Version.  Only one passage of
-+Front-Cover Text and one of Back-Cover Text may be added by (or
-+through arrangements made by) any one entity.  If the Document already
-+includes a cover text for the same cover, previously added by you or
-+by arrangement made by the same entity you are acting on behalf of,
-+you may not add another; but you may replace the old one, on explicit
-+permission from the previous publisher that added the old one.
-+
-+The author(s) and publisher(s) of the Document do not by this License
-+give permission to use their names for publicity for or to assert or
-+imply endorsement of any Modified Version.
-+
-+@item
-+COMBINING DOCUMENTS
-+
-+You may combine the Document with other documents released under this
-+License, under the terms defined in section 4 above for modified
-+versions, provided that you include in the combination all of the
-+Invariant Sections of all of the original documents, unmodified, and
-+list them all as Invariant Sections of your combined work in its
-+license notice, and that you preserve all their Warranty Disclaimers.
-+
-+The combined work need only contain one copy of this License, and
-+multiple identical Invariant Sections may be replaced with a single
-+copy.  If there are multiple Invariant Sections with the same name but
-+different contents, make the title of each such section unique by
-+adding at the end of it, in parentheses, the name of the original
-+author or publisher of that section if known, or else a unique number.
-+Make the same adjustment to the section titles in the list of
-+Invariant Sections in the license notice of the combined work.
-+
-+In the combination, you must combine any sections Entitled ``History''
-+in the various original documents, forming one section Entitled
-+``History''; likewise combine any sections Entitled ``Acknowledgements'',
-+and any sections Entitled ``Dedications''.  You must delete all
-+sections Entitled ``Endorsements.''
-+
-+@item
-+COLLECTIONS OF DOCUMENTS
-+
-+You may make a collection consisting of the Document and other documents
-+released under this License, and replace the individual copies of this
-+License in the various documents with a single copy that is included in
-+the collection, provided that you follow the rules of this License for
-+verbatim copying of each of the documents in all other respects.
-+
-+You may extract a single document from such a collection, and distribute
-+it individually under this License, provided you insert a copy of this
-+License into the extracted document, and follow this License in all
-+other respects regarding verbatim copying of that document.
-+
-+@item
-+AGGREGATION WITH INDEPENDENT WORKS
-+
-+A compilation of the Document or its derivatives with other separate
-+and independent documents or works, in or on a volume of a storage or
-+distribution medium, is called an ``aggregate'' if the copyright
-+resulting from the compilation is not used to limit the legal rights
-+of the compilation's users beyond what the individual works permit.
-+When the Document is included in an aggregate, this License does not
-+apply to the other works in the aggregate which are not themselves
-+derivative works of the Document.
-+
-+If the Cover Text requirement of section 3 is applicable to these
-+copies of the Document, then if the Document is less than one half of
-+the entire aggregate, the Document's Cover Texts may be placed on
-+covers that bracket the Document within the aggregate, or the
-+electronic equivalent of covers if the Document is in electronic form.
-+Otherwise they must appear on printed covers that bracket the whole
-+aggregate.
-+
-+@item
-+TRANSLATION
-+
-+Translation is considered a kind of modification, so you may
-+distribute translations of the Document under the terms of section 4.
-+Replacing Invariant Sections with translations requires special
-+permission from their copyright holders, but you may include
-+translations of some or all Invariant Sections in addition to the
-+original versions of these Invariant Sections.  You may include a
-+translation of this License, and all the license notices in the
-+Document, and any Warranty Disclaimers, provided that you also include
-+the original English version of this License and the original versions
-+of those notices and disclaimers.  In case of a disagreement between
-+the translation and the original version of this License or a notice
-+or disclaimer, the original version will prevail.
-+
-+If a section in the Document is Entitled ``Acknowledgements'',
-+``Dedications'', or ``History'', the requirement (section 4) to Preserve
-+its Title (section 1) will typically require changing the actual
-+title.
-+
-+@item
-+TERMINATION
-+
-+You may not copy, modify, sublicense, or distribute the Document except
-+as expressly provided for under this License.  Any other attempt to
-+copy, modify, sublicense or distribute the Document is void, and will
-+automatically terminate your rights under this License.  However,
-+parties who have received copies, or rights, from you under this
-+License will not have their licenses terminated so long as such
-+parties remain in full compliance.
-+
-+@item
-+FUTURE REVISIONS OF THIS LICENSE
-+
-+The Free Software Foundation may publish new, revised versions
-+of the GNU Free Documentation License from time to time.  Such new
-+versions will be similar in spirit to the present version, but may
-+differ in detail to address new problems or concerns.  See
-+@uref{http://www.gnu.org/copyleft/}.
-+
-+Each version of the License is given a distinguishing version number.
-+If the Document specifies that a particular numbered version of this
-+License ``or any later version'' applies to it, you have the option of
-+following the terms and conditions either of that specified version or
-+of any later version that has been published (not as a draft) by the
-+Free Software Foundation.  If the Document does not specify a version
-+number of this License, you may choose any version ever published (not
-+as a draft) by the Free Software Foundation.
-+@end enumerate
-+
-+@page
-+@appendixsubsec ADDENDUM: How to use this License for your documents
-+
-+To use this License in a document you have written, include a copy of
-+the License in the document and put the following copyright and
-+license notices just after the title page:
-+
-+@smallexample
-+@group
-+  Copyright (C)  @var{year}  @var{your name}.
-+  Permission is granted to copy, distribute and/or modify this document
-+  under the terms of the GNU Free Documentation License, Version 1.2
-+  or any later version published by the Free Software Foundation;
-+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
-+  Texts.  A copy of the license is included in the section entitled ``GNU
-+  Free Documentation License''.
-+@end group
-+@end smallexample
-+
-+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-+replace the ``with...Texts.'' line with this:
-+
-+@smallexample
-+@group
-+    with the Invariant Sections being @var{list their titles}, with
-+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
-+    being @var{list}.
-+@end group
-+@end smallexample
-+
-+If you have Invariant Sections without Cover Texts, or some other
-+combination of the three, merge those two alternatives to suit the
-+situation.
-+
-+If your document contains nontrivial examples of program code, we
-+recommend releasing these examples in parallel under your choice of
-+free software license, such as the GNU General Public License,
-+to permit their use in free software.
-+
-+@c Local Variables:
-+@c ispell-local-pdict: "ispell-dict"
-+@c End:
-+
-diff -Nur grub-0.97/docs/grub.8 grub-0.97-patched/docs/grub.8
---- grub-0.97/docs/grub.8      2005-05-08 04:48:56.000000000 +0200
-+++ grub-0.97-patched/docs/grub.8      2012-11-11 17:07:12.715729211 +0100
-@@ -1,5 +1,5 @@
- .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
--.TH GRUB "8" "May 2005" "grub (GNU GRUB 0.97)" FSF
-+.TH GRUB "8" "June 2006" "grub (GNU GRUB 0.97)" FSF
- .SH NAME
- grub \- the grub shell
- .SH SYNOPSIS
-diff -Nur grub-0.97/docs/grub.8.additions grub-0.97-patched/docs/grub.8.additions
---- grub-0.97/docs/grub.8.additions    1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/docs/grub.8.additions    2012-11-11 17:07:12.702728798 +0100
-@@ -0,0 +1,3 @@
-+[SEE ALSO]
-+.BR update-grub (8),
-+.BR grub-install (8).
-diff -Nur grub-0.97/docs/grub-install.8 grub-0.97-patched/docs/grub-install.8
---- grub-0.97/docs/grub-install.8      2005-05-08 04:48:56.000000000 +0200
-+++ grub-0.97-patched/docs/grub-install.8      2012-11-11 17:07:12.713729149 +0100
-@@ -1,5 +1,5 @@
- .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
--.TH GRUB-INSTALL "8" "May 2005" "grub-install (GNU GRUB 0.97)" FSF
-+.TH GRUB-INSTALL "8" "June 2006" "grub-install (GNU GRUB 0.97)" FSF
- .SH NAME
- grub-install \- install GRUB on your drive
- .SH SYNOPSIS
-diff -Nur grub-0.97/docs/grub-install.8.additions grub-0.97-patched/docs/grub-install.8.additions
---- grub-0.97/docs/grub-install.8.additions    1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/docs/grub-install.8.additions    2012-11-11 17:07:12.703728829 +0100
-@@ -0,0 +1,3 @@
-+[SEE ALSO]
-+.BR grub (8),
-+.BR update-grub (8).
-diff -Nur grub-0.97/docs/grub-md5-crypt.8 grub-0.97-patched/docs/grub-md5-crypt.8
---- grub-0.97/docs/grub-md5-crypt.8    2005-05-08 04:48:56.000000000 +0200
-+++ grub-0.97-patched/docs/grub-md5-crypt.8    2012-11-11 17:07:12.713729149 +0100
-@@ -1,5 +1,5 @@
- .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
--.TH GRUB-MD5-CRYPT "8" "May 2005" "grub-md5-crypt (GNU GRUB )" FSF
-+.TH GRUB-MD5-CRYPT "8" "June 2006" "grub-md5-crypt (GNU GRUB )" FSF
- .SH NAME
- grub-md5-crypt \- Encrypt a password in MD5 format
- .SH SYNOPSIS
-diff -Nur grub-0.97/docs/grub-terminfo.8 grub-0.97-patched/docs/grub-terminfo.8
---- grub-0.97/docs/grub-terminfo.8     2005-05-08 04:48:56.000000000 +0200
-+++ grub-0.97-patched/docs/grub-terminfo.8     2012-11-11 17:07:12.714729180 +0100
-@@ -1,5 +1,5 @@
- .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
--.TH GRUB-TERMINFO "8" "May 2005" "grub-terminfo (GNU GRUB 0.97)" FSF
-+.TH GRUB-TERMINFO "8" "June 2006" "grub-terminfo (GNU GRUB 0.97)" FSF
- .SH NAME
- grub-terminfo \- Generate a terminfo command from a terminfo name
- .SH SYNOPSIS
-diff -Nur grub-0.97/docs/grub.texi grub-0.97-patched/docs/grub.texi
---- grub-0.97/docs/grub.texi   2005-05-08 04:59:59.000000000 +0200
-+++ grub-0.97-patched/docs/grub.texi   2012-11-11 17:07:12.717729276 +0100
-@@ -2,22 +2,41 @@
- @c -*-texinfo-*-
- @c %**start of header
- @setfilename grub.info
--@settitle GRUB Manual
--@c %**end of header
--
- @include version.texi
--
-+@settitle GNU GRUB Manual @value{VERSION}
- @c Unify all our little indices for now.
- @syncodeindex fn cp
- @syncodeindex vr cp
- @syncodeindex ky cp
- @syncodeindex pg cp
- @syncodeindex tp cp
-+@c %**end of header
- @footnotestyle separate
- @paragraphindent 3
- @finalout
-+@copying
-+This manual is for GNU GRUB (version @value{VERSION},
-+@value{UPDATED}).
-+
-+Copyright @copyright{} 1999,2000,2001,2002,2004,2006 Free Software Foundation, Inc.
-+
-+@quotation
-+Permission is granted to copy, distribute and/or modify this document
-+under the terms of the GNU Free Documentation License, Version 1.2 or
-+any later version published by the Free Software Foundation; with no
-+Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
-+and with the Back-Cover Texts as in (a) below.  A copy of the
-+license is included in the section entitled ``GNU Free Documentation
-+License.''
-+
-+(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
-+this GNU Manual, like GNU software.  Copies published by the Free
-+Software Foundation raise funds for GNU development.''
-+@end quotation
-+@end copying
-+
- @dircategory Kernel
- @direntry
- * GRUB: (grub).                 The GRand Unified Bootloader
-@@ -34,53 +53,16 @@
- @setchapternewpage odd
--@ifinfo
--Copyright @copyright{} 1999,2000,2001,2002,2004 Free Software Foundation, Inc.
--
--Permission is granted to make and distribute verbatim copies of
--this manual provided the copyright notice and this permission notice
--are preserved on all copies.
--
--@ignore
--Permission is granted to process this file through TeX and print the
--results, provided the printed document carries a copying permission
--notice identical to this one except for the removal of this paragraph
--(this paragraph not being relevant to the printed manual).
--
--@end ignore
--
--Permission is granted to copy and distribute modified versions of this
--manual under the conditions for verbatim copying, provided also that
--the entire resulting derived work is distributed under the terms of a
--permission notice identical to this one.
--
--Permission is granted to copy and distribute translations of this manual
--into another language, under the above conditions for modified versions.
--@end ifinfo
--
- @titlepage
- @sp 10
--@title the GRUB manual
-+@title the GNU GRUB manual
- @subtitle The GRand Unified Bootloader, version @value{VERSION}, @value{UPDATED}.
- @author Gordon Matzigkeit
- @author Yoshinori K. Okuji
- @c The following two commands start the copyright page.
- @page
- @vskip 0pt plus 1filll
--Copyright @copyright{} 1999,2000,2001,2002,2004 Free Software Foundation, Inc.
--
--Permission is granted to make and distribute verbatim copies of
--this manual provided the copyright notice and this permission notice
--are preserved on all copies.
--Permission is granted to copy and distribute modified versions of this
--manual under the conditions for verbatim copying, provided that the entire
--resulting derived work is distributed under the terms of a permission
--notice identical to this one.
--
--Permission is granted to copy and distribute translations of this manual
--into another language, under the above conditions for modified versions,
--except that this permission notice may be stated in a translation approved
--by Free Software Foundation.
-+@insertcopying
- @end titlepage
- @c Output the table of contents at the beginning.
-@@ -91,12 +73,14 @@
- @ifnottex
- @node Top
--@top GRUB manual
-+@top GNU GRUB manual
- This is the documentation of GNU GRUB, the GRand Unified Bootloader,
- a flexible and powerful boot loader program for @sc{pc}s.
- This edition documents version @value{VERSION}.
-+
-+@insertcopying
- @end ifnottex
- @menu
-@@ -124,6 +108,7 @@
- * Reporting bugs::              Where you should send a bug report
- * Future::                      Some future plans on GRUB
- * Internals::                   Hacking GRUB
-+* Copying This Manual::         Copying This Manual
- * Index::
- @end menu
-@@ -3965,6 +3950,16 @@
- @include internals.texi
-+@node Copying This Manual
-+@appendix Copying This Manual
-+
-+@menu
-+* GNU Free Documentation License::  License for copying this manual.
-+@end menu
-+
-+@include fdl.texi
-+
-+
- @node Index
- @unnumbered Index
-diff -Nur grub-0.97/docs/help2man grub-0.97-patched/docs/help2man
---- grub-0.97/docs/help2man    2003-07-09 13:45:36.000000000 +0200
-+++ grub-0.97-patched/docs/help2man    2012-11-11 17:07:12.701728766 +0100
-@@ -455,7 +455,9 @@
-     $include{$sect} .= <<EOT;
- The full documentation for
- .B $program
--is maintained as a Texinfo manual.  If the
-+is maintained as a Texinfo manual in the
-+.B grub-doc
-+package.  If the
- .B info
- and
- .B $program
-diff -Nur grub-0.97/docs/Makefile.am grub-0.97-patched/docs/Makefile.am
---- grub-0.97/docs/Makefile.am 2003-07-09 13:45:35.000000000 +0200
-+++ grub-0.97-patched/docs/Makefile.am 2012-11-11 17:07:12.711729085 +0100
-@@ -1,5 +1,5 @@
- info_TEXINFOS = grub.texi multiboot.texi
--grub_TEXINFOS = internals.texi
-+grub_TEXINFOS = internals.texi fdl.texi
- EXAMPLES = boot.S kernel.c multiboot.h
- multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi
- man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8
-@@ -37,14 +37,14 @@
-       $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@
- if MAINTAINER_MODE
--$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN)
-+$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN) $(srcdir)/grub.8.additions
-       $(PERL) $(srcdir)/$(HELP2MAN) --name="the grub shell" \
--              --section=8 --output=$@ $<
-+              --section=8 --include=$@.additions --output=$@ $<
--$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN)
-+$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN)  $(srcdir)/grub-install.8.additions
-       chmod 755 $<
-       $(PERL) $(srcdir)/$(HELP2MAN) --name="install GRUB on your drive" \
--              --section=8 --output=$@ $<
-+              --section=8 --include=$@.additions --output=$@ $<
- $(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN)
-       $(PERL) $(srcdir)/$(HELP2MAN) \
-diff -Nur grub-0.97/docs/mbchk.1 grub-0.97-patched/docs/mbchk.1
---- grub-0.97/docs/mbchk.1     2005-05-08 04:48:56.000000000 +0200
-+++ grub-0.97-patched/docs/mbchk.1     2012-11-11 17:07:12.717729276 +0100
-@@ -1,5 +1,5 @@
- .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
--.TH MBCHK "1" "May 2005" "mbchk (GNU GRUB 0.97)" FSF
-+.TH MBCHK "1" "June 2006" "mbchk (GNU GRUB 0.97)" FSF
- .SH NAME
- mbchk \- check the format of a Multiboot kernel
- .SH SYNOPSIS
-diff -Nur grub-0.97/docs/menu.lst grub-0.97-patched/docs/menu.lst
---- grub-0.97/docs/menu.lst    2004-05-11 14:11:17.000000000 +0200
-+++ grub-0.97-patched/docs/menu.lst    2012-11-11 17:07:07.225553829 +0100
-@@ -11,6 +11,9 @@
- # Fallback to the second entry.
- fallback 1
-+# Splash image to show behind grub.
-+splashimage=(hd0,0)/boot/grub/splash.xpm.gz
-+
- # For booting GNU/Hurd
- title  GNU/Hurd
- root   (hd0,0)
-@@ -23,6 +26,11 @@
- kernel /vmlinuz root=/dev/hdb1
- #initrd /initrd.img
-+# For booting Gentoo with the static rescue shell
-+title  Gentoo (rescue shell)
-+root (hd1,0)
-+kernel /vmlinuz root=/dev/hdb1 init=/bin/bb
-+
- # For booting GNU/kFreeBSD
- title  GNU/kFreeBSD
- root   (hd0,2,a)
-diff -Nur grub-0.97/docs/menu.lst.orig grub-0.97-patched/docs/menu.lst.orig
---- grub-0.97/docs/menu.lst.orig       1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/docs/menu.lst.orig       2004-05-11 14:11:17.000000000 +0200
-@@ -0,0 +1,82 @@
-+#
-+# Sample boot menu configuration file
-+#
-+
-+# Boot automatically after 30 secs.
-+timeout 30
-+
-+# By default, boot the first entry.
-+default 0
-+
-+# Fallback to the second entry.
-+fallback 1
-+
-+# For booting GNU/Hurd
-+title  GNU/Hurd
-+root   (hd0,0)
-+kernel /boot/gnumach.gz root=hd0s1
-+module /boot/serverboot.gz
-+
-+# For booting GNU/Linux
-+title  GNU/Linux
-+root (hd1,0)
-+kernel /vmlinuz root=/dev/hdb1
-+#initrd /initrd.img
-+
-+# For booting GNU/kFreeBSD
-+title  GNU/kFreeBSD
-+root   (hd0,2,a)
-+kernel /boot/loader.gz
-+
-+# For booting GNU/kNetBSD
-+title  GNU/kNetBSD
-+root   (hd0,2,a)
-+kernel --type=netbsd /boot/knetbsd.gz
-+
-+# For booting Mach (getting kernel from floppy)
-+title  Utah Mach4 multiboot
-+root   (hd0,2)
-+pause  Insert the diskette now\a!!
-+kernel (fd0)/boot/kernel root=hd0s3
-+module (fd0)/boot/bootstrap
-+
-+# For booting FreeBSD
-+title  FreeBSD
-+root   (hd0,2,a)
-+kernel /boot/loader
-+
-+# For booting NetBSD
-+title  NetBSD
-+root   (hd0,2,a)
-+kernel --type=netbsd /netbsd
-+
-+# For booting OpenBSD
-+title  OpenBSD
-+root   (hd0,2,a)
-+kernel --type=netbsd /bsd
-+
-+# For booting OS/2
-+title OS/2
-+root  (hd0,1)
-+makeactive
-+# chainload OS/2 bootloader from the first sector
-+chainloader +1
-+# This is similar to "chainload", but loads a specific file
-+#chainloader /boot/chain.os2
-+
-+# For booting Windows NT or Windows95
-+title Windows NT / Windows 95 boot menu
-+rootnoverify (hd0,0)
-+makeactive
-+chainloader  +1
-+# For loading DOS if Windows NT is installed
-+# chainload /bootsect.dos
-+
-+# For installing GRUB into the hard disk
-+title Install GRUB into the hard disk
-+root    (hd0,0)
-+setup   (hd0)
-+
-+# Change the colors.
-+title Change the colors
-+color light-green/brown blink-red/blue
-diff -Nur grub-0.97/docs/multiboot.texi grub-0.97-patched/docs/multiboot.texi
---- grub-0.97/docs/multiboot.texi      2003-07-09 13:45:36.000000000 +0200
-+++ grub-0.97-patched/docs/multiboot.texi      2012-11-11 17:07:12.718729309 +0100
-@@ -1,32 +1,28 @@
- \input texinfo @c -*-texinfo-*-
--@c -*-texinfo-*-
- @c %**start of header
- @setfilename multiboot.info
--@settitle Multiboot Specification
--@c %**end of header
--
-+@set VERSION 0.6.95
-+@settitle Multiboot Specification version @value{VERSION}
- @c Unify all our little indices for now.
- @syncodeindex fn cp
- @syncodeindex vr cp
- @syncodeindex ky cp
- @syncodeindex pg cp
- @syncodeindex tp cp
-+@c %**end of header
- @footnotestyle separate
- @paragraphindent 3
- @finalout
-+@copying
-+Copyright @copyright{} 1995,96 Bryan Ford <baford@@cs.utah.edu>
--@dircategory Kernel
--@direntry
--* Multiboot Specification: (multiboot).               Multiboot Specification.
--@end direntry
-+Copyright @copyright{} 1995,96 Erich Stefan Boleyn <erich@@uruk.org>
--@ifinfo
--Copyright @copyright{} 1995, 96 Bryan Ford <baford@@cs.utah.edu>
--Copyright @copyright{} 1995, 96 Erich Stefan Boleyn <erich@@uruk.org>
--Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-+Copyright @copyright{} 1999,2000,2001,2002,2005,2006 Free Software Foundation, Inc.
-+@quotation
- Permission is granted to make and distribute verbatim copies of
- this manual provided the copyright notice and this permission notice
- are preserved on all copies.
-@@ -36,7 +32,6 @@
- results, provided the printed document carries a copying permission
- notice identical to this one except for the removal of this paragraph
- (this paragraph not being relevant to the printed manual).
--
- @end ignore
- Permission is granted to copy and distribute modified versions of this
-@@ -45,31 +40,23 @@
- permission notice identical to this one.
- Permission is granted to copy and distribute translations of this manual
--into another language, under the above conditions for modified versions.
--@end ifinfo
-+into another language, under the above conditions for modified
-+versions.
-+@end quotation
-+@end copying
-+
-+@dircategory Kernel
-+@direntry
-+* Multiboot Specification: (multiboot).               Multiboot Specification.
-+@end direntry
- @titlepage
- @sp 10
--@title The Multiboot Specification
-+@title The Multiboot Specification version @value{VERSION}
- @author Yoshinori K. Okuji, Bryan Ford, Erich Stefan Boleyn, Kunihiro Ishiguro
- @page
--
- @vskip 0pt plus 1filll
--Copyright @copyright{} 1995, 96 Bryan Ford <baford@@cs.utah.edu>
--Copyright @copyright{} 1995, 96 Erich Stefan Boleyn <erich@@uruk.org>
--Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
--
--Permission is granted to make and distribute verbatim copies of
--this manual provided the copyright notice and this permission notice
--are preserved on all copies.
--
--Permission is granted to copy and distribute modified versions of this
--manual under the conditions for verbatim copying, provided also that
--the entire resulting derived work is distributed under the terms of a
--permission notice identical to this one.
--
--Permission is granted to copy and distribute translations of this manual
--into another language, under the above conditions for modified versions.
-+@insertcopying
- @end titlepage
- @finalout
-@@ -80,7 +67,9 @@
- @top Multiboot Specification
- This file documents Multiboot Specification, the proposal for the boot
--sequence standard. This edition documents version 0.6.93.
-+sequence standard. This edition documents version @value{VERSION}.
-+
-+@insertcopying
- @end ifnottex
- @menu
-@@ -426,7 +415,7 @@
- kernel.
- If bit 16 in the @samp{flags} word is set, then the fields at offsets
--8-24 in the Multiboot header are valid, and the boot loader should use
-+12-28 in the Multiboot header are valid, and the boot loader should use
- them instead of the fields in the actual executable header to calculate
- where to load the OS image. This information does not need to be
- provided if the kernel image is in @sc{elf} format, but it @emph{must}
-@@ -677,7 +666,7 @@
- @example
- @group
- +-------+-------+-------+-------+
--| drive | part1 | part2 | part3 |
-+| part3 | part2 | part1 | drive |
- +-------+-------+-------+-------+
- @end group
- @end example
-@@ -1197,6 +1186,17 @@
- @item
- The maintainer changes to the GNU GRUB maintainer team
- @email{bug-grub@@gnu.org}, from Bryan Ford and Erich Stefan Boleyn.
-+
-+@item
-+The byte order of the @samp{boot_device} in Multiboot information is
-+reversed. This was a mistake.
-+
-+@item
-+The offset of the address fields were wrong.
-+
-+@item
-+The format is adapted to a newer Texinfo, and the version number is
-+specified more explicitly in the title.
- @end itemize
- @item 0.6
-diff -Nur grub-0.97/grub/asmstub.c grub-0.97-patched/grub/asmstub.c
---- grub-0.97/grub/asmstub.c   2005-02-16 21:45:14.000000000 +0100
-+++ grub-0.97-patched/grub/asmstub.c   2012-11-11 17:07:12.719729342 +0100
-@@ -42,6 +42,7 @@
- #include <sys/time.h>
- #include <termios.h>
- #include <signal.h>
-+#include <sys/mman.h>
- #ifdef __linux__
- # include <sys/ioctl.h>               /* ioctl */
-@@ -55,6 +56,10 @@
- # endif /* ! BLKFLSBUF */
- #endif /* __linux__ */
-+#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
-+# include <sys/sysctl.h>
-+#endif
-+
- /* We want to prevent any circularararity in our stubs, as well as
-    libc name clashes. */
- #define WITHOUT_LIBC_STUBS 1
-@@ -79,7 +84,7 @@
- struct apm_info apm_bios_info;
- /* Emulation requirements. */
--char *grub_scratch_mem = 0;
-+void *grub_scratch_mem = 0;
- struct geometry *disks = 0;
-@@ -103,14 +108,62 @@
- static unsigned int serial_speed;
- #endif /* SIMULATE_SLOWNESS_OF_SERIAL */
-+/* This allocates page-aligned storage of the specified size, which must be
-+ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE)
-+ */
-+#ifdef __linux__
-+static void *
-+grub_mmap_alloc(size_t len)
-+{
-+  int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE;
-+
-+#ifdef MAP_32BIT
-+  mmap_flags |= MAP_32BIT;
-+#endif
-+  /* Mark the simulated stack executable, as GCC uses stack trampolines
-+   * to implement nested functions. */
-+  return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0);
-+}
-+#else /* !defined(__linux__) */
-+static void *
-+grub_mmap_alloc(size_t len)
-+{
-+  int fd = 0, offset = 0, ret = 0;
-+  void *pa = MAP_FAILED; 
-+  char template[] = "/tmp/grub_mmap_alloc_XXXXXX";
-+  int e;
-+
-+  fd = mkstemp(template);
-+  if (fd < 0)
-+    return pa;
-+
-+  unlink(template);
-+
-+  ret = ftruncate(fd, len);
-+  if (ret < 0)
-+    return pa;
-+
-+  /* Mark the simulated stack executable, as GCC uses stack trampolines
-+   * to implement nested functions. */
-+  pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC,
-+                  MAP_PRIVATE, fd, offset);
-+
-+  e = errno;
-+  close(fd);
-+  errno = e;
-+  return pa;
-+}
-+#endif /* defined(__linux__) */
-+
- /* The main entry point into this mess. */
- int
- grub_stage2 (void)
- {
-   /* These need to be static, because they survive our stack transitions. */
-   static int status = 0;
--  static char *realstack;
--  char *scratch, *simstack;
-+  static void *realstack;
-+  void *simstack_alloc_base, *simstack;
-+  size_t simstack_size, page_size;
-   int i;
-   auto void doit (void);
-@@ -142,9 +195,35 @@
-     }
-   assert (grub_scratch_mem == 0);
--  scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15);
--  assert (scratch);
--  grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4);
-+
-+  /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and
-+   * make sure the memory is aligned to a multiple of the system's
-+   * page size */
-+  page_size = sysconf (_SC_PAGESIZE);
-+  simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15);
-+  if (simstack_size % page_size)
-+    {
-+      /* If we're not on a page_size boundary, round up to the next one */
-+      simstack_size &= ~(page_size-1);
-+      simstack_size += page_size;
-+    }
-+
-+  /* Add one for a PROT_NONE boundary page at each end. */
-+  simstack_size += 2 * page_size;
-+
-+  simstack_alloc_base = grub_mmap_alloc(simstack_size);
-+  assert (simstack_alloc_base != MAP_FAILED);
-+
-+  /* mark pages above and below our simstack area as innaccessable.
-+   * If the implementation we're using doesn't support that, then the
-+   * new protection modes are undefined.  It's safe to just ignore
-+   * them, though.  It'd be nice if we knew that we'd get a SEGV for
-+   * touching the area, but that's all.  it'd be nice to have. */
-+  mprotect (simstack_alloc_base, page_size, PROT_NONE);
-+  mprotect ((void *)((unsigned long)simstack_alloc_base +
-+                         simstack_size - page_size),  page_size, PROT_NONE);
-+
-+  grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size);
-   /* FIXME: simulate the memory holes using mprot, if available. */
-@@ -217,7 +296,7 @@
-   device_map = 0;
-   free (disks);
-   disks = 0;
--  free (scratch);
-+  munmap(simstack_alloc_base, simstack_size);
-   grub_scratch_mem = 0;
-   if (serial_device)
-@@ -777,7 +856,39 @@
-       /* Open read/write, or read-only if that failed. */
-       if (! read_only)
--      disks[drive].flags = open (devname, O_RDWR);
-+      {
-+/* By default, kernel of FreeBSD does not allow overwriting MBR */
-+#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
-+#define GEOM_SYSCTL   "kern.geom.debugflags"
-+        int old_flags, flags;
-+        size_t sizeof_int = sizeof (int);
-+
-+        if (sysctlbyname (GEOM_SYSCTL, &old_flags, &sizeof_int, NULL, 0) != 0)
-+          grub_printf ("failed to get " GEOM_SYSCTL "sysctl: %s\n", strerror (errno));
-+
-+        if ((old_flags & 0x10) == 0)
-+          {
-+            /* "allow foot shooting", see geom(4) */
-+            flags = old_flags | 0x10;
-+
-+            if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &flags, sizeof (int)) != 0)
-+              {
-+                flags = old_flags;
-+                grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno));
-+              }
-+          }
-+        else
-+          flags = old_flags;
-+#endif
-+        disks[drive].flags = open (devname, O_RDWR);
-+#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
-+        if (flags != old_flags)
-+          {
-+            if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &old_flags, sizeof (int)) != 0)
-+              grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno));
-+          }
-+#endif
-+      }
-       if (disks[drive].flags == -1)
-       {
-@@ -926,7 +1037,7 @@
- int
- biosdisk (int subfunc, int drive, struct geometry *geometry,
--        int sector, int nsec, int segment)
-+        unsigned int sector, int nsec, int segment)
- {
-   char *buf;
-   int fd = geometry->flags;
-diff -Nur grub-0.97/grub/asmstub.c.orig grub-0.97-patched/grub/asmstub.c.orig
---- grub-0.97/grub/asmstub.c.orig      1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/grub/asmstub.c.orig      2005-02-16 21:45:14.000000000 +0100
-@@ -0,0 +1,1275 @@
-+/* asmstub.c - a version of shared_src/asm.S that works under Unix */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 1999,2000,2001,2002,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 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.
-+ */
-+
-+/* Try to use glibc's transparant LFS support. */
-+#define _LARGEFILE_SOURCE     1
-+/* lseek becomes synonymous with lseek64.  */
-+#define _FILE_OFFSET_BITS     64
-+
-+/* Simulator entry point. */
-+int grub_stage2 (void);
-+
-+#include <stdlib.h>
-+#include <string.h>
-+#include <ctype.h>
-+#include <assert.h>
-+#include <stdio.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <fcntl.h>
-+#include <time.h>
-+#include <errno.h>
-+#include <string.h>
-+#include <unistd.h>
-+#include <setjmp.h>
-+#include <sys/time.h>
-+#include <termios.h>
-+#include <signal.h>
-+
-+#ifdef __linux__
-+# include <sys/ioctl.h>               /* ioctl */
-+# if !defined(__GLIBC__) || \
-+      ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))
-+/* Maybe libc doesn't have large file support.  */
-+#  include <linux/unistd.h>   /* _llseek */
-+# endif /* (GLIBC < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR < 1)) */
-+# ifndef BLKFLSBUF
-+#  define BLKFLSBUF   _IO (0x12,97)   /* flush buffer cache */
-+# endif /* ! BLKFLSBUF */
-+#endif /* __linux__ */
-+
-+/* We want to prevent any circularararity in our stubs, as well as
-+   libc name clashes. */
-+#define WITHOUT_LIBC_STUBS 1
-+#include <shared.h>
-+#include <device.h>
-+#include <serial.h>
-+#include <term.h>
-+
-+/* Simulated memory sizes. */
-+#define EXTENDED_MEMSIZE (3 * 1024 * 1024)    /* 3MB */
-+#define CONVENTIONAL_MEMSIZE (640 * 1024)     /* 640kB */
-+
-+unsigned long install_partition = 0x20000;
-+unsigned long boot_drive = 0;
-+int saved_entryno = 0;
-+char version_string[] = VERSION;
-+char config_file[128] = "/boot/grub/menu.lst"; /* FIXME: arbitrary */
-+unsigned long linux_text_len = 0;
-+char *linux_data_tmp_addr = 0;
-+char *linux_data_real_addr = 0;
-+unsigned short io_map[IO_MAP_SIZE];
-+struct apm_info apm_bios_info;
-+
-+/* Emulation requirements. */
-+char *grub_scratch_mem = 0;
-+
-+struct geometry *disks = 0;
-+
-+/* The map between BIOS drives and UNIX device file names.  */
-+char **device_map = 0;
-+
-+/* The jump buffer for exiting correctly.  */
-+static jmp_buf env_for_exit;
-+
-+/* The current color for console.  */
-+int console_current_color = A_NORMAL;
-+
-+/* The file descriptor for a serial device.  */
-+static int serial_fd = -1;
-+
-+/* The file name of a serial device.  */
-+static char *serial_device = 0;
-+
-+#ifdef SIMULATE_SLOWNESS_OF_SERIAL
-+/* The speed of a serial device.  */
-+static unsigned int serial_speed;
-+#endif /* SIMULATE_SLOWNESS_OF_SERIAL */
-+
-+/* The main entry point into this mess. */
-+int
-+grub_stage2 (void)
-+{
-+  /* These need to be static, because they survive our stack transitions. */
-+  static int status = 0;
-+  static char *realstack;
-+  char *scratch, *simstack;
-+  int i;
-+
-+  auto void doit (void);
-+  
-+  /* We need a nested function so that we get a clean stack frame,
-+     regardless of how the code is optimized. */
-+  void doit (void)
-+    {
-+      /* Make sure our stack lives in the simulated memory area. */
-+      asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
-+                  : "=&r" (realstack) : "r" (simstack));
-+      
-+      /* Do a setjmp here for the stop command.  */
-+      if (! setjmp (env_for_exit))
-+      {
-+        /* Actually enter the generic stage2 code.  */
-+        status = 0;
-+        init_bios_info ();
-+      }
-+      else
-+      {
-+        /* If ERRNUM is non-zero, then set STATUS to non-zero.  */
-+        if (errnum)
-+          status = 1;
-+      }
-+      
-+      /* Replace our stack before we use any local variables. */
-+      asm volatile ("movl %0, %%esp\n" : : "r" (realstack));
-+    }
-+
-+  assert (grub_scratch_mem == 0);
-+  scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15);
-+  assert (scratch);
-+  grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4);
-+
-+  /* FIXME: simulate the memory holes using mprot, if available. */
-+
-+  assert (disks == 0);
-+  disks = malloc (NUM_DISKS * sizeof (*disks));
-+  assert (disks);
-+  /* Initialize DISKS.  */
-+  for (i = 0; i < NUM_DISKS; i++)
-+    disks[i].flags = -1;
-+
-+  if (! init_device_map (&device_map, device_map_file, floppy_disks))
-+    return 1;
-+  
-+  /* Check some invariants. */
-+  assert ((SCRATCHSEG << 4) == SCRATCHADDR);
-+  assert ((BUFFERSEG << 4) == BUFFERADDR);
-+  assert (BUFFERADDR + BUFFERLEN == SCRATCHADDR);
-+  assert (FSYS_BUF % 16 == 0);
-+  assert (FSYS_BUF + FSYS_BUFLEN == BUFFERADDR);
-+
-+#ifdef HAVE_LIBCURSES
-+  /* Get into char-at-a-time mode. */
-+  if (use_curses)
-+    {
-+      initscr ();
-+      cbreak ();
-+      noecho ();
-+      nonl ();
-+      scrollok (stdscr, TRUE);
-+      keypad (stdscr, TRUE);
-+      wtimeout (stdscr, 100);
-+      signal (SIGWINCH, SIG_IGN);
-+    }
-+#endif
-+
-+  /* Make sure that actual writing is done.  */
-+  sync ();
-+
-+  /* Set our stack, and go for it. */
-+  simstack = (char *) PROTSTACKINIT;
-+  doit ();
-+
-+  /* I don't know if this is necessary really.  */
-+  sync ();
-+
-+#ifdef HAVE_LIBCURSES
-+  if (use_curses)
-+    endwin ();
-+#endif
-+
-+  /* Close off the file descriptors we used. */
-+  for (i = 0; i < NUM_DISKS; i ++)
-+    if (disks[i].flags != -1)
-+      {
-+#ifdef __linux__
-+      /* In Linux, invalidate the buffer cache. In other OSes, reboot
-+         is one of the solutions...  */
-+      ioctl (disks[i].flags, BLKFLSBUF, 0);
-+#else
-+# warning "In your operating system, the buffer cache will not be flushed."
-+#endif
-+      close (disks[i].flags);
-+      }
-+
-+  if (serial_fd >= 0)
-+    close (serial_fd);
-+  
-+  /* Release memory. */
-+  restore_device_map (device_map);
-+  device_map = 0;
-+  free (disks);
-+  disks = 0;
-+  free (scratch);
-+  grub_scratch_mem = 0;
-+
-+  if (serial_device)
-+    free (serial_device);
-+  serial_device = 0;
-+  
-+  /* Ahh... at last we're ready to return to caller. */
-+  return status;
-+}
-+
-+/* Assign DRIVE to a device name DEVICE.  */
-+void
-+assign_device_name (int drive, const char *device)
-+{
-+  /* If DRIVE is already assigned, free it.  */
-+  if (device_map[drive])
-+    free (device_map[drive]);
-+
-+  /* If the old one is already opened, close it.  */
-+  if (disks[drive].flags != -1)
-+    {
-+      close (disks[drive].flags);
-+      disks[drive].flags = -1;
-+    }
-+
-+  /* Assign DRIVE to DEVICE.  */
-+  if (! device)
-+    device_map[drive] = 0;
-+  else
-+    device_map[drive] = strdup (device);
-+}
-+
-+void
-+stop (void)
-+{
-+#ifdef HAVE_LIBCURSES
-+  if (use_curses)
-+    endwin ();
-+#endif
-+
-+  /* Jump to doit.  */
-+  longjmp (env_for_exit, 1);
-+}
-+
-+void
-+grub_reboot (void)
-+{
-+  stop ();
-+}
-+
-+void
-+grub_halt (int no_apm)
-+{
-+  stop ();
-+}
-+
-+/* calls for direct boot-loader chaining */
-+void
-+chain_stage1 (unsigned long segment, unsigned long offset,
-+            unsigned long part_table_addr)
-+{
-+  stop ();
-+}
-+
-+
-+void
-+chain_stage2 (unsigned long segment, unsigned long offset, int second_sector)
-+{
-+  stop ();
-+}
-+
-+
-+/* do some funky stuff, then boot linux */
-+void
-+linux_boot (void)
-+{
-+  stop ();
-+}
-+
-+
-+/* For bzImage kernels. */
-+void
-+big_linux_boot (void)
-+{
-+  stop ();
-+}
-+
-+
-+/* booting a multiboot executable */
-+void
-+multi_boot (int start, int mb_info)
-+{
-+  stop ();
-+}
-+
-+/* sets it to linear or wired A20 operation */
-+void
-+gateA20 (int linear)
-+{
-+  /* Nothing to do in the simulator. */
-+}
-+
-+/* Set up the int15 handler.  */
-+void
-+set_int15_handler (void)
-+{
-+  /* Nothing to do in the simulator.  */
-+}
-+
-+/* Restore the original int15 handler.  */
-+void
-+unset_int15_handler (void)
-+{
-+  /* Nothing to do in the simulator.  */
-+}
-+
-+/* The key map.  */
-+unsigned short bios_key_map[KEY_MAP_SIZE + 1];
-+unsigned short ascii_key_map[KEY_MAP_SIZE + 1];
-+
-+/* Copy MAP to the drive map and set up the int13 handler.  */
-+void
-+set_int13_handler (unsigned short *map)
-+{
-+  /* Nothing to do in the simulator.  */
-+}
-+
-+int
-+get_code_end (void)
-+{
-+  /* Just return a little area for simulation. */
-+  return BOOTSEC_LOCATION + (60 * 1024);
-+}
-+
-+
-+/* memory probe routines */
-+int
-+get_memsize (int type)
-+{
-+  if (! type)
-+    return CONVENTIONAL_MEMSIZE >> 10;
-+  else
-+    return EXTENDED_MEMSIZE >> 10;
-+}
-+
-+
-+/* get_eisamemsize() :  return packed EISA memory map, lower 16 bits is
-+ *            memory between 1M and 16M in 1K parts, upper 16 bits is
-+ *            memory above 16M in 64K parts.  If error, return -1.
-+ */
-+int
-+get_eisamemsize (void)
-+{
-+  return (EXTENDED_MEMSIZE >> 10);
-+}
-+
-+
-+#define MMAR_DESC_TYPE_AVAILABLE 1 /* available to OS */
-+#define MMAR_DESC_TYPE_RESERVED 2 /* not available */
-+#define MMAR_DESC_TYPE_ACPI_RECLAIM 3 /* usable by OS after reading ACPI */
-+#define MMAR_DESC_TYPE_ACPI_NVS 4 /* required to save between NVS sessions */
-+
-+#define MMAR_DESC_LENGTH      20
-+
-+/* Fetch the next entry in the memory map and return the continuation
-+   value.  DESC is a pointer to the descriptor buffer, and CONT is the
-+   previous continuation value (0 to get the first entry in the
-+   map).  */
-+int
-+get_mmap_entry (struct mmar_desc *desc, int cont)
-+{
-+  /* Record the memory map statically.  */
-+  static struct mmar_desc desc_table[] =
-+  {
-+    /* The conventional memory.  */
-+    {
-+      MMAR_DESC_LENGTH,
-+      0,
-+      CONVENTIONAL_MEMSIZE,
-+      MMAR_DESC_TYPE_AVAILABLE
-+    },
-+    /* BIOS RAM and ROM (such as video memory).  */
-+    {
-+      MMAR_DESC_LENGTH,
-+      CONVENTIONAL_MEMSIZE,
-+      0x100000 - CONVENTIONAL_MEMSIZE,
-+      MMAR_DESC_TYPE_RESERVED
-+    },
-+    /* The extended memory.  */
-+    {
-+      MMAR_DESC_LENGTH,
-+      0x100000,
-+      EXTENDED_MEMSIZE,
-+      MMAR_DESC_TYPE_AVAILABLE
-+    }
-+  };
-+  
-+  int num = sizeof (desc_table) / sizeof (*desc_table);
-+
-+  if (cont < 0 || cont >= num)
-+    {
-+      /* Should not happen.  */
-+      desc->desc_len = 0;
-+    }
-+  else
-+    {
-+      /* Copy the entry.  */
-+      *desc = desc_table[cont++];
-+
-+      /* If the next entry exists, return the index.  */
-+      if (cont < num)
-+      return cont;
-+    }
-+  
-+  return 0;
-+}
-+
-+/* Track the int13 handler.  */
-+void
-+track_int13 (int drive)
-+{
-+  /* Nothing to do in the simulator.  */
-+}
-+
-+/* Get the ROM configuration table.  */
-+unsigned long
-+get_rom_config_table (void)
-+{
-+  return 0;
-+}
-+
-+/* Get APM BIOS information.  */
-+void
-+get_apm_info (void)
-+{
-+  /* Nothing to do in the simulator.  */
-+}
-+
-+/* Get VBE controller information.  */
-+int
-+get_vbe_controller_info (struct vbe_controller *controller)
-+{
-+  /* Always fails.  */
-+  return 0;
-+}
-+
-+/* Get VBE mode information.  */
-+int
-+get_vbe_mode_info (int mode_number, struct vbe_mode *mode)
-+{
-+  /* Always fails.  */
-+  return 0;
-+}
-+
-+/* Set VBE mode.  */
-+int
-+set_vbe_mode (int mode_number)
-+{
-+  /* Always fails.  */
-+  return 0;
-+}
-+
-+/* low-level timing info */
-+int
-+getrtsecs (void)
-+{
-+  /* FIXME: exact value is not important, so just return time_t for now. */
-+  return time (0);
-+}
-+
-+int
-+currticks (void)
-+{
-+  struct timeval tv;
-+  long csecs;
-+  int ticks_per_csec, ticks_per_usec;
-+
-+  /* Note: 18.2 ticks/sec.  */
-+
-+  /* Get current time.  */
-+  gettimeofday (&tv, 0);
-+
-+  /* Compute centiseconds.  */
-+  csecs = tv.tv_sec / 10;
-+
-+  /* Ticks per centisecond.  */
-+  ticks_per_csec = csecs * 182;
-+
-+  /* Ticks per microsecond.  */
-+  ticks_per_usec = (((tv.tv_sec - csecs * 10) * 1000000 + tv.tv_usec)
-+                  * 182 / 10000000);
-+
-+  /* Sum them.  */
-+  return ticks_per_csec + ticks_per_usec;
-+}
-+
-+/* displays an ASCII character.  IBM displays will translate some
-+   characters to special graphical ones */
-+void
-+console_putchar (int c)
-+{
-+  /* Curses doesn't have VGA fonts.  */
-+  switch (c)
-+    {
-+    case DISP_UL:
-+      c = ACS_ULCORNER;
-+      break;
-+    case DISP_UR:
-+      c = ACS_URCORNER;
-+      break;
-+    case DISP_LL:
-+      c = ACS_LLCORNER;
-+      break;
-+    case DISP_LR:
-+      c = ACS_LRCORNER;
-+      break;
-+    case DISP_HORIZ:
-+      c = ACS_HLINE;
-+      break;
-+    case DISP_VERT:
-+      c = ACS_VLINE;
-+      break;
-+    case DISP_LEFT:
-+      c = ACS_LARROW;
-+      break;
-+    case DISP_RIGHT:
-+      c = ACS_RARROW;
-+      break;
-+    case DISP_UP:
-+      c = ACS_UARROW;
-+      break;
-+    case DISP_DOWN:
-+      c = ACS_DARROW;
-+      break;
-+    default:
-+      break;
-+    }
-+
-+#ifdef HAVE_LIBCURSES
-+  if (use_curses)
-+    {
-+      /* In ncurses, a newline is treated badly, so we emulate it in our
-+       own way.  */
-+      if (c == '\n')
-+      {
-+        int x, y;
-+
-+        getyx (stdscr, y, x);
-+        if (y + 1 == LINES)
-+          scroll (stdscr);
-+        else
-+          move (y + 1, x);
-+      }
-+      else if (isprint (c))
-+      {
-+        int x, y;
-+
-+        getyx (stdscr, y, x);
-+        if (x + 1 == COLS)
-+          {
-+            console_putchar ('\r');
-+            console_putchar ('\n');
-+          }
-+        addch (c | console_current_color);
-+      }
-+      else
-+      {
-+        addch (c);
-+      }
-+      
-+#ifdef REFRESH_IMMEDIATELY
-+      refresh ();
-+#endif
-+    }
-+  else
-+#endif
-+    {
-+      /* CR is not used in Unix.  */
-+      if (c != '\r')
-+      putchar (c);
-+    }
-+}
-+
-+/* The store for ungetch simulation. This is necessary, because
-+   ncurses-1.9.9g is still used in the world and its ungetch is
-+   completely broken.  */
-+#ifdef HAVE_LIBCURSES
-+static int save_char = ERR;
-+#endif
-+
-+static int
-+console_translate_key (int c)
-+{
-+  switch (c)
-+    {
-+    case KEY_LEFT:
-+      return 2;
-+    case KEY_RIGHT:
-+      return 6;
-+    case KEY_UP:
-+      return 16;
-+    case KEY_DOWN:
-+      return 14;
-+    case KEY_DC:
-+      return 4;
-+    case KEY_BACKSPACE:
-+      return 8;
-+    case KEY_HOME:
-+      return 1;
-+    case KEY_END:
-+      return 5;
-+    case KEY_PPAGE:
-+      return 7;
-+    case KEY_NPAGE:
-+      return 3;
-+    default:
-+      break;
-+    }
-+
-+  return c;
-+}
-+
-+/* like 'getkey', but doesn't wait, returns -1 if nothing available */
-+int
-+console_checkkey (void)
-+{
-+#ifdef HAVE_LIBCURSES
-+  if (use_curses)
-+    {
-+      int c;
-+
-+      /* Check for SAVE_CHAR. This should not be true, because this
-+       means checkkey is called twice continuously.  */
-+      if (save_char != ERR)
-+      return save_char;
-+
-+      c = getch ();
-+      /* If C is not ERR, then put it back in the input queue.  */
-+      if (c != ERR)
-+      save_char = c;
-+      return console_translate_key (c);
-+    }
-+#endif
-+
-+  /* Just pretend they hit the space bar, then read the real key when
-+     they call getkey. */
-+  return ' ';
-+}
-+
-+/* returns packed BIOS/ASCII code */
-+int
-+console_getkey (void)
-+{
-+  int c;
-+
-+#ifdef HAVE_LIBCURSES
-+  if (use_curses)
-+    {
-+      /* If checkkey has already got a character, then return it.  */
-+      if (save_char != ERR)
-+      {
-+        c = save_char;
-+        save_char = ERR;
-+        return console_translate_key (c);
-+      }
-+
-+      wtimeout (stdscr, -1);
-+      c = getch ();
-+      wtimeout (stdscr, 100);
-+    }
-+  else
-+#endif
-+    c = getchar ();
-+
-+  /* Quit if we get EOF. */
-+  if (c == -1)
-+    stop ();
-+  
-+  return console_translate_key (c);
-+}
-+
-+/* returns packed values, LSB+1 is x, LSB is y */
-+int
-+console_getxy (void)
-+{
-+  int y, x;
-+#ifdef HAVE_LIBCURSES
-+  if (use_curses)
-+    getyx (stdscr, y, x);
-+  else
-+#endif
-+  y = x = 0;
-+  return (x << 8) | (y & 0xff);
-+}
-+
-+void
-+console_gotoxy (int x, int y)
-+{
-+#ifdef HAVE_LIBCURSES
-+  if (use_curses)
-+    move (y, x);
-+#endif
-+}
-+
-+/* low-level character I/O */
-+void
-+console_cls (void)
-+{
-+#ifdef HAVE_LIBCURSES
-+  if (use_curses)
-+    clear ();
-+#endif
-+}
-+
-+void
-+console_setcolorstate (color_state state)
-+{
-+  console_current_color = 
-+    (state == COLOR_STATE_HIGHLIGHT) ? A_REVERSE : A_NORMAL;
-+}
-+
-+void
-+console_setcolor (int normal_color, int highlight_color)
-+{
-+  /* Nothing to do.  */
-+}
-+
-+int
-+console_setcursor (int on)
-+{
-+  return 1;
-+}
-+
-+/* Low-level disk I/O.  Our stubbed version just returns a file
-+   descriptor, not the actual geometry. */
-+int
-+get_diskinfo (int drive, struct geometry *geometry)
-+{
-+  /* FIXME: this function is truly horrid.  We try opening the device,
-+     then severely abuse the GEOMETRY->flags field to pass a file
-+     descriptor to biosdisk.  Thank God nobody's looking at this comment,
-+     or my reputation would be ruined. --Gord */
-+
-+  /* See if we have a cached device. */
-+  if (disks[drive].flags == -1)
-+    {
-+      /* The unpartitioned device name: /dev/XdX */
-+      char *devname = device_map[drive];
-+      char buf[512];
-+
-+      if (! devname)
-+      return -1;
-+
-+      if (verbose)
-+      grub_printf ("Attempt to open drive 0x%x (%s)\n",
-+                   drive, devname);
-+
-+      /* Open read/write, or read-only if that failed. */
-+      if (! read_only)
-+      disks[drive].flags = open (devname, O_RDWR);
-+
-+      if (disks[drive].flags == -1)
-+      {
-+        if (read_only || errno == EACCES || errno == EROFS || errno == EPERM)
-+          {
-+            disks[drive].flags = open (devname, O_RDONLY);
-+            if (disks[drive].flags == -1)
-+              {
-+                assign_device_name (drive, 0);
-+                return -1;
-+              }
-+          }
-+        else
-+          {
-+            assign_device_name (drive, 0);
-+            return -1;
-+          }
-+      }
-+
-+      /* Attempt to read the first sector.  */
-+      if (read (disks[drive].flags, buf, 512) != 512)
-+      {
-+        close (disks[drive].flags);
-+        disks[drive].flags = -1;
-+        assign_device_name (drive, 0);
-+        return -1;
-+      }
-+
-+      if (disks[drive].flags != -1)
-+      get_drive_geometry (&disks[drive], device_map, drive);
-+    }
-+
-+  if (disks[drive].flags == -1)
-+    return -1;
-+
-+#ifdef __linux__
-+  /* In Linux, invalidate the buffer cache, so that left overs
-+     from other program in the cache are flushed and seen by us */
-+  ioctl (disks[drive].flags, BLKFLSBUF, 0);
-+#endif
-+
-+  *geometry = disks[drive];
-+  return 0;
-+}
-+
-+/* Read LEN bytes from FD in BUF. Return less than or equal to zero if an
-+   error occurs, otherwise return LEN.  */
-+static int
-+nread (int fd, char *buf, size_t len)
-+{
-+  int size = len;
-+
-+  while (len)
-+    {
-+      int ret = read (fd, buf, len);
-+
-+      if (ret <= 0)
-+      {
-+        if (errno == EINTR)
-+          continue;
-+        else
-+          return ret;
-+      }
-+
-+      len -= ret;
-+      buf += ret;
-+    }
-+
-+  return size;
-+}
-+
-+/* Write LEN bytes from BUF to FD. Return less than or equal to zero if an
-+   error occurs, otherwise return LEN.  */
-+static int
-+nwrite (int fd, char *buf, size_t len)
-+{
-+  int size = len;
-+
-+  while (len)
-+    {
-+      int ret = write (fd, buf, len);
-+
-+      if (ret <= 0)
-+      {
-+        if (errno == EINTR)
-+          continue;
-+        else
-+          return ret;
-+      }
-+
-+      len -= ret;
-+      buf += ret;
-+    }
-+
-+  return size;
-+}
-+
-+/* Dump BUF in the format of hexadecimal numbers.  */
-+static void
-+hex_dump (void *buf, size_t size)
-+{
-+  /* FIXME: How to determine which length is readable?  */
-+#define MAX_COLUMN    70
-+
-+  /* use unsigned char for numerical computations */
-+  unsigned char *ptr = buf;
-+  /* count the width of the line */
-+  int column = 0;
-+  /* how many bytes written */
-+  int count = 0;
-+
-+  while (size > 0)
-+    {
-+      /* high 4 bits */
-+      int hi = *ptr >> 4;
-+      /* low 4 bits */
-+      int low = *ptr & 0xf;
-+
-+      /* grub_printf does not handle prefix number, such as %2x, so
-+       format the number by hand...  */
-+      grub_printf ("%x%x", hi, low);
-+      column += 2;
-+      count++;
-+      ptr++;
-+      size--;
-+
-+      /* Insert space or newline with the interval 4 bytes.  */
-+      if (size != 0 && (count % 4) == 0)
-+      {
-+        if (column < MAX_COLUMN)
-+          {
-+            grub_printf (" ");
-+            column++;
-+          }
-+        else
-+          {
-+            grub_printf ("\n");
-+            column = 0;
-+          }
-+      }
-+    }
-+
-+  /* Add a newline at the end for readability.  */
-+  grub_printf ("\n");
-+}
-+
-+int
-+biosdisk (int subfunc, int drive, struct geometry *geometry,
-+        int sector, int nsec, int segment)
-+{
-+  char *buf;
-+  int fd = geometry->flags;
-+
-+  /* Get the file pointer from the geometry, and make sure it matches. */
-+  if (fd == -1 || fd != disks[drive].flags)
-+    return BIOSDISK_ERROR_GEOMETRY;
-+
-+  /* Seek to the specified location. */
-+#if defined(__linux__) && (!defined(__GLIBC__) || \
-+      ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
-+  /* Maybe libc doesn't have large file support.  */
-+  {
-+    loff_t offset, result;
-+    static int _llseek (uint filedes, ulong hi, ulong lo,
-+                      loff_t *res, uint wh);
-+    _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
-+             loff_t *, res, uint, wh);
-+
-+    offset = (loff_t) sector * (loff_t) SECTOR_SIZE;
-+    if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))
-+      return -1;
-+  }
-+#else
-+  {
-+    off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
-+
-+    if (lseek (fd, offset, SEEK_SET) != offset)
-+      return -1;
-+  }
-+#endif
-+
-+  buf = (char *) (segment << 4);
-+
-+  switch (subfunc)
-+    {
-+    case BIOSDISK_READ:
-+#ifdef __linux__
-+      if (sector == 0 && nsec > 1)
-+      {
-+        /* Work around a bug in linux's ez remapping.  Linux remaps all
-+           sectors that are read together with the MBR in one read.  It
-+           should only remap the MBR, so we split the read in two 
-+           parts. -jochen  */
-+        if (nread (fd, buf, SECTOR_SIZE) != SECTOR_SIZE)
-+          return -1;
-+        buf += SECTOR_SIZE;
-+        nsec--;
-+      }
-+#endif
-+      if (nread (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE)
-+      return -1;
-+      break;
-+
-+    case BIOSDISK_WRITE:
-+      if (verbose)
-+      {
-+        grub_printf ("Write %d sectors starting from %d sector"
-+                     " to drive 0x%x (%s)\n",
-+                     nsec, sector, drive, device_map[drive]);
-+        hex_dump (buf, nsec * SECTOR_SIZE);
-+      }
-+      if (! read_only)
-+      if (nwrite (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE)
-+        return -1;
-+      break;
-+
-+    default:
-+      grub_printf ("unknown subfunc %d\n", subfunc);
-+      break;
-+    }
-+
-+  return 0;
-+}
-+
-+
-+void
-+stop_floppy (void)
-+{
-+  /* NOTUSED */
-+}
-+
-+/* Fetch a key from a serial device.  */
-+int
-+serial_hw_fetch (void)
-+{
-+  fd_set fds;
-+  struct timeval to;
-+  char c;
-+
-+  /* Wait only for the serial device.  */
-+  FD_ZERO (&fds);
-+  FD_SET (serial_fd, &fds);
-+
-+  to.tv_sec = 0;
-+  to.tv_usec = 0;
-+  
-+  if (select (serial_fd + 1, &fds, 0, 0, &to) > 0)
-+    {
-+      if (nread (serial_fd, &c, 1) != 1)
-+      stop ();
-+
-+      return c;
-+    }
-+  
-+  return -1;
-+}
-+
-+/* Put a character to a serial device.  */
-+void
-+serial_hw_put (int c)
-+{
-+  char ch = (char) c;
-+  
-+  if (nwrite (serial_fd, &ch, 1) != 1)
-+    stop ();
-+}
-+
-+void
-+serial_hw_delay (void)
-+{
-+#ifdef SIMULATE_SLOWNESS_OF_SERIAL
-+  struct timeval otv, tv;
-+
-+  gettimeofday (&otv, 0);
-+
-+  while (1)
-+    {
-+      long delta;
-+      
-+      gettimeofday (&tv, 0);
-+      delta = tv.tv_usec - otv.tv_usec;
-+      if (delta < 0)
-+      delta += 1000000;
-+      
-+      if (delta >= 1000000 / (serial_speed >> 3))
-+      break;
-+    }
-+#endif /* SIMULATE_SLOWNESS_OF_SERIAL */
-+}
-+
-+static speed_t
-+get_termios_speed (int speed)
-+{
-+  switch (speed)
-+    {
-+    case 2400: return B2400;
-+    case 4800: return B4800;
-+    case 9600: return B9600;
-+    case 19200: return B19200;
-+    case 38400: return B38400;
-+#ifdef B57600
-+    case 57600: return B57600;
-+#endif
-+#ifdef B115200      
-+    case 115200: return B115200;
-+#endif
-+    }
-+
-+  return B0;
-+}
-+
-+/* Get the port number of the unit UNIT. In the grub shell, this doesn't
-+   make sense.  */
-+unsigned short
-+serial_hw_get_port (int unit)
-+{
-+  return 0;
-+}
-+
-+/* Initialize a serial device. In the grub shell, PORT is unused.  */
-+int
-+serial_hw_init (unsigned short port, unsigned int speed,
-+              int word_len, int parity, int stop_bit_len)
-+{
-+  struct termios termios;
-+  speed_t termios_speed;
-+  int i;
-+  
-+  /* Check if the file name is specified.  */
-+  if (! serial_device)
-+    return 0;
-+
-+  /* If a serial device is already opened, close it first.  */
-+  if (serial_fd >= 0)
-+    close (serial_fd);
-+  
-+  /* Open the device file.  */
-+  serial_fd = open (serial_device,
-+                  O_RDWR | O_NOCTTY
-+#if defined(O_SYNC)
-+                  /* O_SYNC is used in Linux (and some others?).  */
-+                  | O_SYNC
-+#elif defined(O_FSYNC)
-+                  /* O_FSYNC is used in FreeBSD.  */
-+                  | O_FSYNC
-+#endif
-+                  );
-+  if (serial_fd < 0)
-+    return 0;
-+
-+  /* Get the termios parameters.  */
-+  if (tcgetattr (serial_fd, &termios))
-+    goto fail;
-+
-+  /* Raw mode.  */
-+  cfmakeraw (&termios);
-+
-+  /* Set the speed.  */
-+  termios_speed = get_termios_speed (speed);
-+  if (termios_speed == B0)
-+    goto fail;
-+  
-+  cfsetispeed (&termios, termios_speed);
-+  cfsetospeed (&termios, termios_speed);
-+
-+  /* Set the word length.  */
-+  termios.c_cflag &= ~CSIZE;
-+  switch (word_len)
-+    {
-+    case UART_5BITS_WORD:
-+      termios.c_cflag |= CS5;
-+      break;
-+    case UART_6BITS_WORD:
-+      termios.c_cflag |= CS6;
-+      break;
-+    case UART_7BITS_WORD:
-+      termios.c_cflag |= CS7;
-+      break;
-+    case UART_8BITS_WORD:
-+      termios.c_cflag |= CS8;
-+      break;
-+    default:
-+      goto fail;
-+    }
-+
-+  /* Set the parity.  */
-+  switch (parity)
-+    {
-+    case UART_NO_PARITY:
-+      termios.c_cflag &= ~PARENB;
-+      break;
-+    case UART_ODD_PARITY:
-+      termios.c_cflag |= PARENB;
-+      termios.c_cflag |= PARODD;
-+      break;
-+    case UART_EVEN_PARITY:
-+      termios.c_cflag |= PARENB;
-+      termios.c_cflag &= ~PARODD;
-+      break;
-+    default:
-+      goto fail;
-+    }
-+
-+  /* Set the length of stop bit.  */
-+  switch (stop_bit_len)
-+    {
-+    case UART_1_STOP_BIT:
-+      termios.c_cflag &= ~CSTOPB;
-+      break;
-+    case UART_2_STOP_BITS:
-+      termios.c_cflag |= CSTOPB;
-+      break;
-+    default:
-+      goto fail;
-+    }
-+
-+  /* Set the parameters.  */
-+  if (tcsetattr (serial_fd, TCSANOW, &termios))
-+    goto fail;
-+
-+#ifdef SIMULATE_SLOWNESS_OF_SERIAL
-+  serial_speed = speed;
-+#endif /* SIMUATE_SLOWNESS_OF_SERIAL */
-+
-+  /* Get rid of the flag TERM_NEED_INIT from the serial terminal.  */
-+  for (i = 0; term_table[i].name; i++)
-+    {
-+      if (strcmp (term_table[i].name, "serial") == 0)
-+      {
-+        term_table[i].flags &= ~(TERM_NEED_INIT);
-+        break;
-+      }
-+    }
-+  
-+  return 1;
-+
-+ fail:
-+  close (serial_fd);
-+  serial_fd = -1;
-+  return 0;
-+}
-+
-+/* Set the file name of a serial device (or a pty device). This is a
-+   function specific to the grub shell.  */
-+void
-+serial_set_device (const char *device)
-+{
-+  if (serial_device)
-+    free (serial_device);
-+  
-+  serial_device = strdup (device);
-+}
-+
-+/* There is no difference between console and hercules in the grub shell.  */
-+void
-+hercules_putchar (int c)
-+{
-+  console_putchar (c);
-+}
-+
-+int
-+hercules_getxy (void)
-+{
-+  return console_getxy ();
-+}
-+
-+void
-+hercules_gotoxy (int x, int y)
-+{
-+  console_gotoxy (x, y);
-+}
-+
-+void
-+hercules_cls (void)
-+{
-+  console_cls ();
-+}
-+
-+void
-+hercules_setcolorstate (color_state state)
-+{
-+  console_setcolorstate (state);
-+}
-+
-+void
-+hercules_setcolor (int normal_color, int highlight_color)
-+{
-+  console_setcolor (normal_color, highlight_color);
-+}
-+
-+int
-+hercules_setcursor (int on)
-+{
-+  return 1;
-+}
-diff -Nur grub-0.97/grub/main.c grub-0.97-patched/grub/main.c
---- grub-0.97/grub/main.c      2003-07-09 13:45:36.000000000 +0200
-+++ grub-0.97-patched/grub/main.c      2012-11-11 17:07:12.720729374 +0100
-@@ -32,6 +32,7 @@
- #define WITHOUT_LIBC_STUBS 1
- #include <shared.h>
- #include <term.h>
-+#include <device.h>
- char *program_name = 0;
- int use_config_file = 1;
-@@ -140,10 +141,7 @@
-   program_name = argv[0];
-   default_boot_drive = boot_drive;
-   default_install_partition = install_partition;
--  if (config_file)
--    default_config_file = config_file;
--  else
--    default_config_file = "NONE";
-+  default_config_file = config_file;
-   
-   /* Parse command-line options. */
-   do
-@@ -192,6 +190,12 @@
-             perror ("strtoul");
-             exit (1);
-           }
-+        if (boot_drive >= NUM_DISKS)
-+          {
-+            fprintf (stderr, "boot_drive should be from 0 to %d\n",
-+                     NUM_DISKS - 1);
-+            exit (1);
-+          }
-         break;
-       case OPT_NO_CONFIG_FILE:
-diff -Nur grub-0.97/grub/main.c.orig grub-0.97-patched/grub/main.c.orig
---- grub-0.97/grub/main.c.orig 1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/grub/main.c.orig 2003-07-09 13:45:36.000000000 +0200
-@@ -0,0 +1,265 @@
-+/* main.c - experimental GRUB stage2 that runs under Unix */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 1999,2000,2001,2002  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 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.
-+ */
-+
-+/* Simulator entry point. */
-+int grub_stage2 (void);
-+
-+#include <stdio.h>
-+#include <getopt.h>
-+#include <unistd.h>
-+#include <string.h>
-+#include <stdlib.h>
-+#include <limits.h>
-+#include <setjmp.h>
-+
-+#define WITHOUT_LIBC_STUBS 1
-+#include <shared.h>
-+#include <term.h>
-+
-+char *program_name = 0;
-+int use_config_file = 1;
-+int use_preset_menu = 0;
-+#ifdef HAVE_LIBCURSES
-+int use_curses = 1;
-+#else
-+int use_curses = 0;
-+#endif
-+int verbose = 0;
-+int read_only = 0;
-+int floppy_disks = 1;
-+char *device_map_file = 0;
-+static int default_boot_drive;
-+static int default_install_partition;
-+static char *default_config_file;
-+
-+#define OPT_HELP              -2
-+#define OPT_VERSION           -3
-+#define OPT_HOLD              -4
-+#define OPT_CONFIG_FILE               -5
-+#define OPT_INSTALL_PARTITION -6
-+#define OPT_BOOT_DRIVE                -7
-+#define OPT_NO_CONFIG_FILE    -8
-+#define OPT_NO_CURSES         -9
-+#define OPT_BATCH             -10
-+#define OPT_VERBOSE           -11
-+#define OPT_READ_ONLY         -12
-+#define OPT_PROBE_SECOND_FLOPPY       -13
-+#define OPT_NO_FLOPPY         -14
-+#define OPT_DEVICE_MAP                -15
-+#define OPT_PRESET_MENU               -16
-+#define OPT_NO_PAGER          -17
-+#define OPTSTRING ""
-+
-+static struct option longopts[] =
-+{
-+  {"batch", no_argument, 0, OPT_BATCH},
-+  {"boot-drive", required_argument, 0, OPT_BOOT_DRIVE},
-+  {"config-file", required_argument, 0, OPT_CONFIG_FILE},
-+  {"device-map", required_argument, 0, OPT_DEVICE_MAP},
-+  {"help", no_argument, 0, OPT_HELP},
-+  {"hold", optional_argument, 0, OPT_HOLD},
-+  {"install-partition", required_argument, 0, OPT_INSTALL_PARTITION},
-+  {"no-config-file", no_argument, 0, OPT_NO_CONFIG_FILE},
-+  {"no-curses", no_argument, 0, OPT_NO_CURSES},
-+  {"no-floppy", no_argument, 0, OPT_NO_FLOPPY},
-+  {"no-pager", no_argument, 0, OPT_NO_PAGER},
-+  {"preset-menu", no_argument, 0, OPT_PRESET_MENU},
-+  {"probe-second-floppy", no_argument, 0, OPT_PROBE_SECOND_FLOPPY},
-+  {"read-only", no_argument, 0, OPT_READ_ONLY},
-+  {"verbose", no_argument, 0, OPT_VERBOSE},
-+  {"version", no_argument, 0, OPT_VERSION},
-+  {0},
-+};
-+
-+
-+static void
-+usage (int status)
-+{
-+  if (status)
-+    fprintf (stderr, "Try ``grub --help'' for more information.\n");
-+  else
-+    printf ("\
-+Usage: grub [OPTION]...\n\
-+\n\
-+Enter the GRand Unified Bootloader command shell.\n\
-+\n\
-+    --batch                  turn on batch mode for non-interactive use\n\
-+    --boot-drive=DRIVE       specify stage2 boot_drive [default=0x%x]\n\
-+    --config-file=FILE       specify stage2 config_file [default=%s]\n\
-+    --device-map=FILE        use the device map file FILE\n\
-+    --help                   display this message and exit\n\
-+    --hold                   wait until a debugger will attach\n\
-+    --install-partition=PAR  specify stage2 install_partition [default=0x%x]\n\
-+    --no-config-file         do not use the config file\n\
-+    --no-curses              do not use curses\n\
-+    --no-floppy              do not probe any floppy drive\n\
-+    --no-pager               do not use internal pager\n\
-+    --preset-menu            use the preset menu\n\
-+    --probe-second-floppy    probe the second floppy drive\n\
-+    --read-only              do not write anything to devices\n\
-+    --verbose                print verbose messages\n\
-+    --version                print version information and exit\n\
-+\n\
-+Report bugs to <bug-grub@gnu.org>.\n\
-+",
-+          default_boot_drive, default_config_file,
-+          default_install_partition);
-+
-+  exit (status);
-+}
-+
-+
-+int
-+main (int argc, char **argv)
-+{
-+  int c;
-+  int hold = 0;
-+
-+  /* First of all, call sync so that all in-core data is scheduled to be
-+     actually written to disks. This is very important because GRUB does
-+     not use ordinary stdio interface but raw devices.  */
-+  sync ();
-+  
-+  program_name = argv[0];
-+  default_boot_drive = boot_drive;
-+  default_install_partition = install_partition;
-+  if (config_file)
-+    default_config_file = config_file;
-+  else
-+    default_config_file = "NONE";
-+  
-+  /* Parse command-line options. */
-+  do
-+    {
-+      c = getopt_long (argc, argv, OPTSTRING, longopts, 0);
-+      switch (c)
-+      {
-+      case EOF:
-+        /* Fall through the bottom of the loop. */
-+        break;
-+
-+      case OPT_HELP:
-+        usage (0);
-+        break;
-+
-+      case OPT_VERSION:
-+        printf ("grub (GNU GRUB " VERSION ")\n");
-+        exit (0);
-+        break;
-+
-+      case OPT_HOLD:
-+        if (! optarg)
-+          hold = -1;
-+        else
-+          hold = atoi (optarg);
-+        break;
-+
-+      case OPT_CONFIG_FILE:
-+        strncpy (config_file, optarg, 127); /* FIXME: arbitrary */
-+        config_file[127] = '\0';
-+        break;
-+
-+      case OPT_INSTALL_PARTITION:
-+        install_partition = strtoul (optarg, 0, 0);
-+        if (install_partition == ULONG_MAX)
-+          {
-+            perror ("strtoul");
-+            exit (1);
-+          }
-+        break;
-+
-+      case OPT_BOOT_DRIVE:
-+        boot_drive = strtoul (optarg, 0, 0);
-+        if (boot_drive == ULONG_MAX)
-+          {
-+            perror ("strtoul");
-+            exit (1);
-+          }
-+        break;
-+
-+      case OPT_NO_CONFIG_FILE:
-+        use_config_file = 0;
-+        break;
-+
-+      case OPT_NO_CURSES:
-+        use_curses = 0;
-+        break;
-+
-+      case OPT_NO_PAGER:
-+        use_pager = 0;
-+        break;
-+
-+      case OPT_BATCH:
-+        /* This is the same as "--no-config-file --no-curses --no-pager".  */
-+        use_config_file = 0;
-+        use_curses = 0;
-+        use_pager = 0;
-+        break;
-+
-+      case OPT_READ_ONLY:
-+        read_only = 1;
-+        break;
-+
-+      case OPT_VERBOSE:
-+        verbose = 1;
-+        break;
-+
-+      case OPT_NO_FLOPPY:
-+        floppy_disks = 0;
-+        break;
-+
-+      case OPT_PROBE_SECOND_FLOPPY:
-+        floppy_disks = 2;
-+        break;
-+
-+      case OPT_DEVICE_MAP:
-+        device_map_file = strdup (optarg);
-+        break;
-+
-+      case OPT_PRESET_MENU:
-+        use_preset_menu = 1;
-+        break;
-+        
-+      default:
-+        usage (1);
-+      }
-+    }
-+  while (c != EOF);
-+
-+  /* Wait until the HOLD variable is cleared by an attached debugger. */
-+  if (hold && verbose)
-+    printf ("Run \"gdb %s %d\", and set HOLD to zero.\n",
-+          program_name, (int) getpid ());
-+  while (hold)
-+    {
-+      if (hold > 0)
-+      hold--;
-+      
-+      sleep (1);
-+    }
-+
-+  /* If we don't have curses (!HAVE_LIBCURSES or --no-curses or
-+     --batch) put terminal to dumb for better handling of line i/o */
-+  if (! use_curses)
-+    current_term->flags = TERM_NO_EDIT | TERM_DUMB;
-+
-+  /* Transfer control to the stage2 simulator. */
-+  exit (grub_stage2 ());
-+}
-diff -Nur grub-0.97/lib/device.c grub-0.97-patched/lib/device.c
---- grub-0.97/lib/device.c     2005-03-28 01:14:25.000000000 +0200
-+++ grub-0.97-patched/lib/device.c     2012-11-11 17:07:12.748730268 +0100
-@@ -69,9 +69,9 @@
- # ifndef CDROM_GET_CAPABILITY
- #  define CDROM_GET_CAPABILITY        0x5331  /* get capabilities */
- # endif /* ! CDROM_GET_CAPABILITY */
--# ifndef BLKGETSIZE
--#  define BLKGETSIZE  _IO(0x12,96)    /* return device size */
--# endif /* ! BLKGETSIZE */
-+# ifndef BLKGETSIZE64
-+#  define BLKGETSIZE64        _IOR(0x12,114,size_t)   /* return device size */
-+# endif /* ! BLKGETSIZE64 */
- #endif /* __linux__ */
- /* Use __FreeBSD_kernel__ instead of __FreeBSD__ for compatibility with
-@@ -131,6 +131,152 @@
- #include <shared.h>
- #include <device.h>
-+#if defined(__linux__)
-+/* The 2.6 kernel has removed all of the geometry handling for IDE drives
-+ * that did fixups for LBA, etc.  This means that the geometry we get
-+ * with the ioctl has a good chance of being wrong.  So, we get to 
-+ * also know about partition tables and try to read what the geometry
-+ * is there. *grumble*   Very closely based on code from cfdisk
-+ */
-+static void get_kernel_geometry(int fd, long long *cyl, int *heads, int *sectors) {
-+    struct hd_geometry hdg;
-+    
-+    if (ioctl (fd, HDIO_GETGEO, &hdg))
-+        return;
-+
-+    *cyl = hdg.cylinders;
-+    *heads = hdg.heads;
-+    *sectors = hdg.sectors;
-+}
-+
-+struct partition {
-+        unsigned char boot_ind;         /* 0x80 - active */
-+        unsigned char head;             /* starting head */
-+        unsigned char sector;           /* starting sector */
-+        unsigned char cyl;              /* starting cylinder */
-+        unsigned char sys_ind;          /* What partition type */
-+        unsigned char end_head;         /* end head */
-+        unsigned char end_sector;       /* end sector */
-+        unsigned char end_cyl;          /* end cylinder */
-+        unsigned char start4[4];        /* starting sector counting from 0 */
-+        unsigned char size4[4];         /* nr of sectors in partition */
-+};
-+
-+#define ALIGNMENT 2
-+typedef union {
-+    struct {
-+      unsigned char align[ALIGNMENT];
-+      unsigned char b[SECTOR_SIZE];
-+    } c;
-+    struct {
-+      unsigned char align[ALIGNMENT];
-+      unsigned char buffer[0x1BE];
-+      struct partition part[4];
-+      unsigned char magicflag[2];
-+    } p;
-+} partition_table;
-+
-+#define PART_TABLE_FLAG0 0x55
-+#define PART_TABLE_FLAG1 0xAA
-+
-+static void
-+get_partition_table_geometry(partition_table *bufp, long long *cyl, int *heads, 
-+                             int *sectors) {
-+    struct partition *p;
-+    int i,h,s,hh,ss;
-+    int first = 1;
-+    int bad = 0;
-+
-+    if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 ||
-+      bufp->p.magicflag[1] != PART_TABLE_FLAG1) {
-+          /* Matthew Wilcox: slightly friendlier version of
-+             fatal(_("Bad signature on partition table"), 3);
-+          */
-+            fprintf(stderr, "Unknown partition table signature\n");
-+          return;
-+    }
-+
-+    hh = ss = 0;
-+    for (i=0; i<4; i++) {
-+      p = &(bufp->p.part[i]);
-+      if (p->sys_ind != 0) {
-+          h = p->end_head + 1;
-+          s = (p->end_sector & 077);
-+          if (first) {
-+              hh = h;
-+              ss = s;
-+              first = 0;
-+          } else if (hh != h || ss != s)
-+              bad = 1;
-+      }
-+    }
-+
-+    if (!first && !bad) {
-+      *heads = hh;
-+      *sectors = ss;
-+    }
-+}
-+
-+static long long my_lseek (unsigned int fd, long long offset, 
-+                           unsigned int origin)
-+{
-+#if defined(__linux__) && (!defined(__GLIBC__) || \
-+        ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
-+  /* Maybe libc doesn't have large file support.  */
-+  loff_t offset, result;
-+  static int _llseek (uint filedes, ulong hi, ulong lo,
-+                      loff_t *res, uint wh);
-+  _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
-+             loff_t *, res, uint, wh);
-+  
-+  if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET) < 0)
-+    return (long long) -1;
-+  return result;
-+#else
-+  return lseek(fd, offset, SEEK_SET);
-+#endif
-+}
-+
-+static void get_linux_geometry (int fd, struct geometry *geom) {
-+    long long kern_cyl = 0; int kern_head = 0, kern_sectors = 0;
-+    long long pt_cyl = 0; int pt_head = 0, pt_sectors = 0;
-+    partition_table bufp;
-+    char *buff, *buf_unaligned;
-+
-+    buf_unaligned = malloc(sizeof(partition_table) + 4095);
-+    buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
-+                     (~(4096-1)));
-+
-+    get_kernel_geometry(fd, &kern_cyl, &kern_head, &kern_sectors);
-+
-+    if (my_lseek (fd, 0*SECTOR_SIZE, SEEK_SET) < 0) {
-+        fprintf(stderr, "Unable to seek");
-+    }
-+
-+    if (read(fd, buff, SECTOR_SIZE) == SECTOR_SIZE) {
-+        memcpy(bufp.c.b, buff, SECTOR_SIZE);
-+        get_partition_table_geometry(&bufp, &pt_cyl, &pt_head, &pt_sectors);
-+    } else {
-+        fprintf(stderr, "Unable to read partition table: %s\n", strerror(errno));
-+    }
-+
-+    if (pt_head && pt_sectors) {
-+        int cyl_size;
-+
-+        geom->heads = pt_head;
-+        geom->sectors = pt_sectors;
-+        cyl_size = pt_head * pt_sectors;
-+        geom->cylinders = geom->total_sectors/cyl_size;
-+    } else {
-+        geom->heads = kern_head;
-+        geom->sectors = kern_sectors;
-+        geom->cylinders = kern_cyl;
-+    }
-+
-+    return;
-+}
-+#endif
-+
- /* Get the geometry of a drive DRIVE.  */
- void
- get_drive_geometry (struct geometry *geom, char **map, int drive)
-@@ -151,20 +297,16 @@
- #if defined(__linux__)
-   /* Linux */
-   {
--    struct hd_geometry hdg;
--    unsigned long nr;
-+    unsigned long long nr;
-     
--    if (ioctl (fd, HDIO_GETGEO, &hdg))
--      goto fail;
--
--    if (ioctl (fd, BLKGETSIZE, &nr))
-+    if (ioctl (fd, BLKGETSIZE64, &nr))
-       goto fail;
-     
-     /* Got the geometry, so save it. */
--    geom->cylinders = hdg.cylinders;
--    geom->heads = hdg.heads;
--    geom->sectors = hdg.sectors;
--    geom->total_sectors = nr;
-+    get_linux_geometry(fd, geom);
-+    if (!geom->heads && !geom->cylinders && !geom->sectors)
-+      goto fail;
-+    geom->total_sectors = nr / 512;
-     
-     goto success;
-   }
-@@ -403,10 +545,28 @@
- }
- static void
-+get_cciss_disk_name (char *name, int controller, int drive)
-+{
-+  sprintf (name, "/dev/cciss/c%dd%d", controller, drive);
-+}
-+
-+static void
-+get_ida_disk_name (char *name, int controller, int drive)
-+{
-+  sprintf (name, "/dev/ida/c%dd%d", controller, drive);
-+}
-+
-+static void
- get_ataraid_disk_name (char *name, int unit)
- {
-   sprintf (name, "/dev/ataraid/d%c", unit + '0');
- }
-+
-+static void
-+get_i2o_disk_name (char *name, char unit)
-+{
-+  sprintf (name, "/dev/i2o/hd%c", unit);
-+}
- #endif
- /* Check if DEVICE can be read. If an error occurs, return zero,
-@@ -801,6 +961,97 @@
-         }
-       }
-   }
-+    
-+  /* This is for I2O - we have /dev/i2o/hd<logical drive><partition> */
-+  {
-+    int unit;
-+
-+    for (unit = 'a'; unit < 'f'; unit++)
-+      {
-+        char name[24];
-+    
-+        get_i2o_disk_name (name, unit);
-+        if (check_device (name))
-+          {
-+              (*map)[num_hd + 0x80] = strdup (name);
-+                  assert ((*map)[num_hd + 0x80]);
-+                  
-+          /* If the device map file is opened, write the map.  */
-+               if (fp)
-+                     fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
-+                     
-+          num_hd++;
-+          }
-+      }
-+  }
-+
-+  /* This is for CCISS, its like the DAC960  - we have
-+     /dev/cciss/<controller>d<logical drive>p<partition> 
-+
-+     It currently supports up to 3 controllers, 10 logical volumes
-+     and 10 partitions
-+
-+     Code gratuitously copied from DAC960 above.
-+     Horms <horms@verge.net.au> 23rd July 2004
-+  */
-+  {
-+    int controller, drive;
-+    
-+    for (controller = 0; controller < 2; controller++)
-+      {
-+      for (drive = 0; drive < 9; drive++)
-+        {
-+          char name[24];
-+          
-+          get_cciss_disk_name (name, controller, drive);
-+          if (check_device (name))
-+            {
-+              (*map)[num_hd + 0x80] = strdup (name);
-+              assert ((*map)[num_hd + 0x80]);
-+              
-+              /* If the device map file is opened, write the map.  */
-+              if (fp)
-+                fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
-+              
-+              num_hd++;
-+            }
-+        }
-+      }
-+  }
-+
-+  /* This is for Compaq Smart Array, its like the DAC960  - we have
-+     /dev/ida/<controller>d<logical drive>p<partition> 
-+
-+     It currently supports up to 3 controllers, 10 logical volumes
-+     and 15 partitions
-+
-+     Code gratuitously copied from DAC960 above.
-+     Piotr Roszatycki <dexter@debian.org>
-+  */
-+  {
-+    int controller, drive;
-+    
-+    for (controller = 0; controller < 2; controller++)
-+      {
-+      for (drive = 0; drive < 9; drive++)
-+        {
-+          char name[24];
-+          
-+          get_ida_disk_name (name, controller, drive);
-+          if (check_device (name))
-+            {
-+              (*map)[num_hd + 0x80] = strdup (name);
-+              assert ((*map)[num_hd + 0x80]);
-+              
-+              /* If the device map file is opened, write the map.  */
-+              if (fp)
-+                fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
-+              
-+              num_hd++;
-+            }
-+        }
-+      }
-+  }
- #endif /* __linux__ */
-   
-   /* OK, close the device map file if opened.  */
-@@ -844,6 +1095,7 @@
- {
-   char dev[PATH_MAX]; /* XXX */
-   int fd;
-+  off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
-   
-   if ((partition & 0x00FF00) != 0x00FF00)
-     {
-@@ -861,6 +1113,14 @@
-       if (strcmp (dev + strlen(dev) - 5, "/disc") == 0)
-       strcpy (dev + strlen(dev) - 5, "/part");
-     }
-+  else
-+    {
-+      if ((strncmp (dev, "/dev/ataraid/", 13) == 0) ||
-+         (strncmp (dev, "/dev/ida/", 9) == 0) ||
-+         (strncmp (dev, "/dev/cciss/", 11) == 0) ||
-+         (strncmp (dev, "/dev/rd/", 8) == 0))
-+        strcpy (dev + strlen(dev), "p");
-+    }
-   sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1);
-   
-   /* Open the partition.  */
-@@ -870,35 +1130,13 @@
-       errnum = ERR_NO_PART;
-       return 0;
-     }
--  
--#if defined(__linux__) && (!defined(__GLIBC__) || \
--        ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
--  /* Maybe libc doesn't have large file support.  */
--  {
--    loff_t offset, result;
--    static int _llseek (uint filedes, ulong hi, ulong lo,
--                        loff_t *res, uint wh);
--    _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
--               loff_t *, res, uint, wh);
--    offset = (loff_t) sector * (loff_t) SECTOR_SIZE;
--    if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))
--      {
--      errnum = ERR_DEV_VALUES;
--      return 0;
--      }
--  }
--#else
--  {
--    off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
--    if (lseek (fd, offset, SEEK_SET) != offset)
--      {
--      errnum = ERR_DEV_VALUES;
--      return 0;
--      }
--  }
--#endif
-+  if (my_lseek(fd, offset, SEEK_SET) != offset)
-+    {
-+      errnum = ERR_DEV_VALUES;
-+      return 0;
-+    }
-   
-   if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE))
-     {
-diff -Nur grub-0.97/netboot/cs89x0.c grub-0.97-patched/netboot/cs89x0.c
---- grub-0.97/netboot/cs89x0.c 2003-07-09 13:45:37.000000000 +0200
-+++ grub-0.97-patched/netboot/cs89x0.c 2012-11-11 17:07:12.722729437 +0100
-@@ -1,3 +1,21 @@
-+/**
-+   Per an email message from Russ Nelson <nelson@crynwr.com> on
-+   18 March 2008 this file is now licensed under GPL Version 2.
-+
-+   From: Russ Nelson <nelson@crynwr.com>
-+   Date: Tue, 18 Mar 2008 12:42:00 -0400
-+   Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot
-+   -- quote from email
-+   As copyright holder, if I say it doesn't conflict with the GPL,
-+   then it doesn't conflict with the GPL.
-+
-+   However, there's no point in causing people's brains to overheat,
-+   so yes, I grant permission for the code to be relicensed under the
-+   GPLv2.  Please make sure that this change in licensing makes its
-+   way upstream.  -russ
-+   -- quote from email
-+**/
-+
- /* cs89x0.c: A Crystal Semiconductor CS89[02]0 driver for etherboot. */
- /*
-   Permission is granted to distribute the enclosed cs89x0.[ch] driver
-diff -Nur grub-0.97/netboot/cs89x0.h grub-0.97-patched/netboot/cs89x0.h
---- grub-0.97/netboot/cs89x0.h 2003-07-09 13:45:37.000000000 +0200
-+++ grub-0.97-patched/netboot/cs89x0.h 2012-11-11 17:07:12.723729469 +0100
-@@ -1,3 +1,21 @@
-+/**
-+   Per an email message from Russ Nelson <nelson@crynwr.com> on
-+   18 March 2008 this file is now licensed under GPL Version 2.
-+
-+   From: Russ Nelson <nelson@crynwr.com>
-+   Date: Tue, 18 Mar 2008 12:42:00 -0400
-+   Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot
-+   -- quote from email
-+   As copyright holder, if I say it doesn't conflict with the GPL,
-+   then it doesn't conflict with the GPL.
-+
-+   However, there's no point in causing people's brains to overheat,
-+   so yes, I grant permission for the code to be relicensed under the
-+   GPLv2.  Please make sure that this change in licensing makes its
-+   way upstream.  -russ
-+   -- quote from email
-+**/
-+
- /*  Copyright, 1988-1992, Russell Nelson, Crynwr Software
-    This program is free software; you can redistribute it and/or modify
-diff -Nur grub-0.97/netboot/etherboot.h grub-0.97-patched/netboot/etherboot.h
---- grub-0.97/netboot/etherboot.h      2003-07-09 13:45:37.000000000 +0200
-+++ grub-0.97-patched/netboot/etherboot.h      2012-11-11 17:07:12.723729469 +0100
-@@ -531,9 +531,6 @@
- extern int network_ready;
- extern struct rom_info rom;
- extern struct arptable_t arptable[MAX_ARP];
--extern struct bootpd_t bootp_data;
--#define       BOOTP_DATA_ADDR (&bootp_data)
--extern unsigned char *end_of_rfc1533;
- /* config.c */
- extern struct nic nic;
-diff -Nur grub-0.97/netboot/main.c grub-0.97-patched/netboot/main.c
---- grub-0.97/netboot/main.c   2004-05-21 00:19:33.000000000 +0200
-+++ grub-0.97-patched/netboot/main.c   2012-11-11 17:07:12.724729500 +0100
-@@ -56,7 +56,8 @@
- static unsigned long netmask;
- static struct bootpd_t bootp_data;
- static unsigned long xid;
--static unsigned char *end_of_rfc1533 = NULL;
-+
-+#define       BOOTP_DATA_ADDR (&bootp_data)
- #ifndef       NO_DHCP_SUPPORT
- #endif /* NO_DHCP_SUPPORT */
-@@ -83,7 +84,9 @@
-   RFC2132_MAX_SIZE,2, /* request as much as we can */
-   ETH_MAX_MTU / 256, ETH_MAX_MTU % 256,
-   RFC2132_PARAM_LIST, 4, RFC1533_NETMASK, RFC1533_GATEWAY,
--  RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH
-+  RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH,
-+  /* Vendor class identifier */
-+  RFC2132_VENDOR_CLASS_ID, 10, 'G', 'R', 'U', 'B', 'C', 'l', 'i', 'e', 'n', 't',
- };
- static const unsigned char dhcprequest[] =
-@@ -103,6 +106,8 @@
-   /* Etherboot vendortags */
-   RFC1533_VENDOR_MAGIC,
-   RFC1533_VENDOR_CONFIGFILE,
-+  /* Vendor class identifier */
-+  RFC2132_VENDOR_CLASS_ID, 10, 'G', 'R', 'U', 'B', 'C', 'l', 'i', 'e', 'n', 't',
- };
- #endif /* ! NO_DHCP_SUPPORT */
-@@ -701,7 +706,7 @@
-      "adcw %%ax,%0\n\t"               /* add carry of previous iteration */
-      "loop 1b\n\t"
-      "adcw $0,%0"             /* add carry of last iteration */
--     : "=b" (*sum), "=S"(start), "=c"(len)
-+     : "=r" (*sum), "=S"(start), "=c"(len)
-      : "0"(*sum), "1"(start), "2"(len)
-      : "ax", "cc"
-      );
-@@ -967,7 +972,6 @@
-   
-   if (block == 0)
-     {
--      end_of_rfc1533 = NULL;
-       vendorext_isvalid = 0;
-       
-       if (grub_memcmp (p, rfc1533_cookie, 4))
-@@ -1021,7 +1025,7 @@
-       }
-       else if (c == RFC1533_END)
-       {
--        end_of_rfc1533 = endp = p;
-+        endp = p;
-         continue;
-       }
-       else if (c == RFC1533_NETMASK)
-diff -Nur grub-0.97/netboot/natsemi.c grub-0.97-patched/netboot/natsemi.c
---- grub-0.97/netboot/natsemi.c        2003-07-09 13:45:38.000000000 +0200
-+++ grub-0.97-patched/netboot/natsemi.c        2012-11-11 17:07:12.724729500 +0100
-@@ -608,7 +608,7 @@
-                const char  *p)     /* Packet */
- {
-     u32 status, to, nstype;
--    u32 tx_status;
-+    volatile u32 tx_status;
-     
-     /* Stop the transmitter */
-     outl(TxOff, ioaddr + ChipCmd);
-@@ -647,7 +647,7 @@
-     to = currticks() + TX_TIMEOUT;
--    while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to))
-+    while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to))
-         /* wait */ ;
-     if (currticks() >= to) {
-diff -Nur grub-0.97/netboot/pci.c grub-0.97-patched/netboot/pci.c
---- grub-0.97/netboot/pci.c    2003-07-09 13:45:38.000000000 +0200
-+++ grub-0.97-patched/netboot/pci.c    2012-11-11 17:07:07.227553894 +0100
-@@ -105,13 +105,16 @@
-       save_flags(flags);
-       __asm__(
-+              "pushl %%ebx\n\t" /* save %ebx */
- #ifdef ABSOLUTE_WITHOUT_ASTERISK
--              "lcall (%%edi)"
-+              "lcall (%%edi)\n\t"
- #else
--              "lcall *(%%edi)"
-+              "lcall *(%%edi)\n\t"
- #endif
-+              "movl %%ebx, %1\n\t" /* capture what was in %ebx */
-+              "popl %%ebx\n\t" /* restore %ebx */
-               : "=a" (return_code),
--                "=b" (address),
-+                "=r" (address),
-                 "=c" (length),
-                 "=d" (entry)
-               : "0" (service),
-@@ -141,18 +144,21 @@
-         save_flags(flags);
-         __asm__(
-+              "pushl %%ebx\n\t" /* save %ebx */
-+              "movl %3, %%ebx\n\t" /* put the value into ebx */
- #ifdef ABSOLUTE_WITHOUT_ASTERISK
-               "lcall (%%esi)\n\t"
- #else
-               "lcall *(%%esi)\n\t"
- #endif
-                 "jc 1f\n\t"
--                "xor %%ah, %%ah\n"
-+              "popl %%ebx\n\t" /* restore %ebx */
-+              "xor %%ah, %%ah\n\t"
-                 "1:"
-                 : "=c" (*value),
-                   "=a" (ret)
-                 : "1" (PCIBIOS_READ_CONFIG_BYTE),
--                  "b" (bx),
-+                  "r" (bx),
-                   "D" ((long) where),
-                   "S" (&pci_indirect));
-         restore_flags(flags);
-@@ -168,18 +174,21 @@
-         save_flags(flags);
-         __asm__(
-+              "pushl %%ebx\n\t" /* save %ebx */
-+              "movl %3, %%ebx\n\t" /* put the value into ebx */
- #ifdef ABSOLUTE_WITHOUT_ASTERISK
-               "lcall (%%esi)\n\t"
- #else
-               "lcall *(%%esi)\n\t"
- #endif
-                 "jc 1f\n\t"
--                "xor %%ah, %%ah\n"
-+              "popl %%ebx\n\t" /* restore %ebx */
-+              "xor %%ah, %%ah\n\t"
-                 "1:"
-                 : "=c" (*value),
-                   "=a" (ret)
-                 : "1" (PCIBIOS_READ_CONFIG_WORD),
--                  "b" (bx),
-+              "r" (bx),
-                   "D" ((long) where),
-                   "S" (&pci_indirect));
-         restore_flags(flags);
-@@ -195,18 +204,21 @@
-         save_flags(flags);
-         __asm__(
-+          "pushl %%ebx\n\t" /* save %ebx */
-+          "movl %3, %%ebx\n\t" /* put the value into ebx */
- #ifdef ABSOLUTE_WITHOUT_ASTERISK
-               "lcall (%%esi)\n\t"
- #else
-               "lcall *(%%esi)\n\t"
- #endif
-                 "jc 1f\n\t"
--                "xor %%ah, %%ah\n"
-+          "popl %%ebx\n\t" /* restore %ebx */
-+          "xor %%ah, %%ah\n\t"
-                 "1:"
-                 : "=c" (*value),
-                   "=a" (ret)
-                 : "1" (PCIBIOS_READ_CONFIG_DWORD),
--                  "b" (bx),
-+          "r" (bx),
-                   "D" ((long) where),
-                   "S" (&pci_indirect));
-         restore_flags(flags);
-@@ -222,18 +234,21 @@
-       save_flags(flags); cli();
-       __asm__(
-+          "pushl %%ebx\n\t" /* save %ebx */
-+          "movl %3, %%ebx\n\t" /* put the value into ebx */
- #ifdef ABSOLUTE_WITHOUT_ASTERISK
-               "lcall (%%esi)\n\t"
- #else
-               "lcall *(%%esi)\n\t"
- #endif
-               "jc 1f\n\t"
--              "xor %%ah, %%ah\n"
-+          "popl %%ebx\n\t" /* restore %ebx */
-+          "xor %%ah, %%ah\n\t"
-               "1:"
-               : "=a" (ret)
-               : "0" (PCIBIOS_WRITE_CONFIG_BYTE),
-                 "c" (value),
--                "b" (bx),
-+          "r" (bx),
-                 "D" ((long) where),
-                 "S" (&pci_indirect));
-       restore_flags(flags);
-@@ -249,18 +264,21 @@
-       save_flags(flags); cli();
-       __asm__(
-+          "pushl %%ebx\n\t" /* save %ebx */
-+          "movl %3, %%ebx\n\t" /* put the value into ebx */
- #ifdef ABSOLUTE_WITHOUT_ASTERISK
-               "lcall (%%esi)\n\t"
- #else
-               "lcall *(%%esi)\n\t"
- #endif
-               "jc 1f\n\t"
--              "xor %%ah, %%ah\n"
-+          "popl %%ebx\n\t" /* restore %ebx */
-+          "xor %%ah, %%ah\n\t"
-               "1:"
-               : "=a" (ret)
-               : "0" (PCIBIOS_WRITE_CONFIG_WORD),
-                 "c" (value),
--                "b" (bx),
-+          "r" (bx),
-                 "D" ((long) where),
-                 "S" (&pci_indirect));
-       restore_flags(flags);
-@@ -276,18 +294,21 @@
-       save_flags(flags); cli();
-       __asm__(
-+          "pushl %%ebx\n\t" /* save %ebx */
-+          "movl %3, %%ebx\n\t" /* put the value into ebx */
- #ifdef ABSOLUTE_WITHOUT_ASTERISK
-               "lcall (%%esi)\n\t"
- #else
-               "lcall *(%%esi)\n\t"
- #endif
-               "jc 1f\n\t"
--              "xor %%ah, %%ah\n"
-+          "popl %%ebx\n\t" /* restore %ebx */
-+          "xor %%ah, %%ah\n\t"
-               "1:"
-               : "=a" (ret)
-               : "0" (PCIBIOS_WRITE_CONFIG_DWORD),
-                 "c" (value),
--                "b" (bx),
-+          "r" (bx),
-                 "D" ((long) where),
-                 "S" (&pci_indirect));
-       restore_flags(flags);
-@@ -308,20 +329,22 @@
-               save_flags(flags);
-               __asm__(
-+              "pushl %%ebx\n\t" /* save %ebx */
- #ifdef ABSOLUTE_WITHOUT_ASTERISK
-                       "lcall (%%edi)\n\t"
- #else
-                       "lcall *(%%edi)\n\t"
- #endif
-                       "jc 1f\n\t"
--                      "xor %%ah, %%ah\n"
-+              "xor %%ah, %%ah\n\t"
-                       "1:\tshl $8, %%eax\n\t"
--                      "movw %%bx, %%ax"
-+              "movw %%bx, %%ax\n\t"
-+              "popl %%ebx\n\t" /* restore %ebx */
-                       : "=d" (signature),
-                         "=a" (pack)
-                       : "1" (PCIBIOS_PCI_BIOS_PRESENT),
-                         "D" (&pci_indirect)
--                      : "bx", "cx");
-+              : "cx");
-               restore_flags(flags);
-               present_status = (pack >> 16) & 0xff;
-diff -Nur grub-0.97/netboot/sis900.c grub-0.97-patched/netboot/sis900.c
---- grub-0.97/netboot/sis900.c 2003-07-09 13:45:38.000000000 +0200
-+++ grub-0.97-patched/netboot/sis900.c 2012-11-11 17:07:12.725729531 +0100
-@@ -901,7 +901,7 @@
-                 const char  *p)     /* Packet */
- {
-     u32 status, to, nstype;
--    u32 tx_status;
-+    volatile u32 tx_status;
-     
-     /* Stop the transmitter */
-     outl(TxDIS, ioaddr + cr);
-@@ -940,7 +940,7 @@
-     to = currticks() + TX_TIMEOUT;
--    while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to))
-+    while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to))
-         /* wait */ ;
-     if (currticks() >= to) {
-diff -Nur grub-0.97/stage1/Makefile.am grub-0.97-patched/stage1/Makefile.am
---- grub-0.97/stage1/Makefile.am       2004-07-16 13:44:56.000000000 +0200
-+++ grub-0.97-patched/stage1/Makefile.am       2012-11-11 17:07:12.747730236 +0100
-@@ -1,11 +1,11 @@
--pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
--nodist_pkglib_DATA = stage1
-+stagedir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
-+nodist_stage_DATA = stage1
--CLEANFILES = $(nodist_pkglib_DATA)
-+CLEANFILES = $(nodist_stage_DATA)
- # We can't use builtins or standard includes.
- AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc
--LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00
-+stage1_exec_LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00
- noinst_PROGRAMS = stage1.exec
- stage1_exec_SOURCES = stage1.S stage1.h
-diff -Nur grub-0.97/stage2/asm.S grub-0.97-patched/stage2/asm.S
---- grub-0.97/stage2/asm.S     2004-06-19 18:55:22.000000000 +0200
-+++ grub-0.97-patched/stage2/asm.S     2012-11-11 17:07:03.850446017 +0100
-@@ -1651,7 +1651,29 @@
-       jnz     3f
-       ret
--3:    /* use keyboard controller */
-+3:    /*
-+       * try to switch gateA20 using PORT92, the "Fast A20 and Init"
-+       * register
-+      */
-+      mov $0x92, %dx
-+      inb %dx, %al
-+      /* skip the port92 code if it's unimplemented (read returns 0xff) */
-+      cmpb $0xff, %al
-+      jz 6f
-+      
-+      /* set or clear bit1, the ALT_A20_GATE bit */
-+      movb 4(%esp), %ah
-+      testb %ah, %ah
-+      jz 4f
-+      orb $2, %al
-+      jmp 5f
-+4:    and $0xfd, %al
-+      
-+      /* clear the INIT_NOW bit don't accidently reset the machine */
-+5:    and $0xfe, %al
-+      outb %al, %dx
-+      
-+6:    /* use keyboard controller */
-       pushl   %eax
-       call    gloop1
-@@ -1661,9 +1683,12 @@
- gloopint1:
-       inb     $K_STATUS
-+      cmpb    $0xff, %al
-+      jz      gloopint1_done
-       andb    $K_IBUF_FUL, %al
-       jnz     gloopint1
-+gloopint1_done:       
-       movb    $KB_OUTPUT_MASK, %al
-       cmpb    $0, 0x8(%esp)
-       jz      gdoit
-@@ -1684,6 +1709,8 @@
- gloop1:
-       inb     $K_STATUS
-+      cmpb    $0xff, %al
-+      jz      gloop2ret
-       andb    $K_IBUF_FUL, %al
-       jnz     gloop1
-@@ -1991,6 +2018,11 @@
- ENTRY(console_getkey)
-       push    %ebp
-+wait_for_key:
-+      call    EXT_C(console_checkkey)
-+      incl    %eax
-+      jz      wait_for_key
-+      
-       call    EXT_C(prot_to_real)
-       .code16
-@@ -2216,6 +2248,156 @@
-       pop     %ebx
-       pop     %ebp
-       ret
-+
-+/* graphics mode functions */
-+#ifdef SUPPORT_GRAPHICS
-+VARIABLE(cursorX)
-+.word 0
-+VARIABLE(cursorY)
-+.word 0
-+VARIABLE(cursorCount)
-+.word 0
-+VARIABLE(cursorBuf)
-+.byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-+
-+      
-+/*
-+ * int set_videomode(mode)
-+ * BIOS call "INT 10H Function 0h" to set video mode
-+ *    Call with       %ah = 0x0
-+ *                    %al = video mode
-+ *      Returns old videomode.
-+ */
-+ENTRY(set_videomode)
-+      push    %ebp
-+      push    %ebx
-+      push    %ecx
-+
-+      movb    0x10(%esp), %cl
-+
-+      call    EXT_C(prot_to_real)
-+      .code16
-+
-+      xorw    %bx, %bx
-+      movb    $0xf, %ah
-+      int     $0x10                   /* Get Current Video mode */
-+      movb    %al, %ch
-+      xorb    %ah, %ah
-+      movb    %cl, %al
-+        int   $0x10                   /* Set Video mode */
-+
-+      DATA32  call    EXT_C(real_to_prot)
-+      .code32
-+
-+      xorb    %ah, %ah
-+      movb    %ch, %al
-+
-+      pop     %ecx
-+      pop     %ebx
-+      pop     %ebp
-+      ret
-+
-+
-+/*
-+ * unsigned char * graphics_get_font()
-+ * BIOS call "INT 10H Function 11h" to set font
-+ *      Call with       %ah = 0x11
-+ */
-+ENTRY(graphics_get_font)
-+      push    %ebp
-+      push    %ebx
-+      push    %ecx
-+      push    %edx
-+
-+      call    EXT_C(prot_to_real)
-+      .code16
-+
-+      movw    $0x1130, %ax
-+      movb    $6, %bh         /* font 8x16 */
-+      int     $0x10
-+      movw    %bp, %dx
-+      movw    %es, %cx
-+
-+      DATA32  call    EXT_C(real_to_prot)
-+      .code32
-+
-+      xorl    %eax, %eax
-+      movw    %cx, %ax
-+      shll    $4, %eax
-+      movw    %dx, %ax
-+
-+      pop     %edx
-+      pop     %ecx
-+      pop     %ebx
-+      pop     %ebp
-+      ret
-+      
-+
-+      
-+/*
-+ * graphics_set_palette(index, red, green, blue)
-+ * BIOS call "INT 10H Function 10h" to set individual dac register
-+ *    Call with       %ah = 0x10
-+ *                    %bx = register number
-+ *                    %ch = new value for green (0-63)
-+ *                    %cl = new value for blue (0-63)
-+ *                    %dh = new value for red (0-63)
-+ */
-+
-+ENTRY(graphics_set_palette)
-+      push    %ebp
-+      push    %eax
-+      push    %ebx
-+      push    %ecx
-+      push    %edx
-+
-+      movw    $0x3c8, %bx             /* address write mode register */
-+
-+      /* wait vertical retrace */
-+
-+      movw    $0x3da, %dx
-+l1b:  inb     %dx, %al        /* wait vertical active display */
-+      test    $8, %al
-+      jnz     l1b
-+
-+l2b:  inb     %dx, %al        /* wait vertical retrace */
-+      test    $8, %al
-+      jnz     l2b
-+
-+      mov     %bx, %dx
-+      movb    0x18(%esp), %al         /* index */
-+      outb    %al, %dx
-+      inc     %dx
-+
-+      movb    0x1c(%esp), %al         /* red */
-+      outb    %al, %dx
-+
-+      movb    0x20(%esp), %al         /* green */
-+      outb    %al, %dx
-+
-+      movb    0x24(%esp), %al         /* blue */
-+      outb    %al, %dx
-+
-+      movw    0x18(%esp), %bx
-+
-+      call    EXT_C(prot_to_real)
-+      .code16
-+
-+      movb    %bl, %bh
-+      movw    $0x1000, %ax
-+      int     $0x10
-+
-+      DATA32  call    EXT_C(real_to_prot)
-+      .code32 
-+
-+      pop     %edx
-+      pop     %ecx
-+      pop     %ebx
-+      pop     %eax
-+      pop     %ebp
-+      ret
-+
-+#endif /* SUPPORT_GRAPHICS */
-               
- /*
-  * getrtsecs()
-diff -Nur grub-0.97/stage2/bios.c grub-0.97-patched/stage2/bios.c
---- grub-0.97/stage2/bios.c    2004-03-27 17:34:04.000000000 +0100
-+++ grub-0.97-patched/stage2/bios.c    2012-11-11 17:07:12.751730363 +0100
-@@ -47,7 +47,7 @@
-    return the error number. Otherwise, return 0.  */
- int
- biosdisk (int read, int drive, struct geometry *geometry,
--        int sector, int nsec, int segment)
-+        unsigned int sector, int nsec, int segment)
- {
-   int err;
-   
-@@ -60,7 +60,18 @@
-       unsigned short blocks;
-       unsigned long buffer;
-       unsigned long long block;
--      } __attribute__ ((packed)) dap;
-+
-+      /* This structure is passed in the stack. A buggy BIOS could write
-+       * garbage data to the tail of the struct and hang the machine. So
-+       * we need this protection. - Tinybit
-+       */
-+      unsigned char dummy[16];
-+      } __attribute__ ((packed)) *dap;
-+
-+      /* Even the above protection is not enough to avoid stupid actions by
-+       * buggy BIOSes. So we do it in the 0040:0000 segment. - Tinybit
-+       */
-+      dap = (struct disk_address_packet *)0x580;
-       /* XXX: Don't check the geometry by default, because some buggy
-        BIOSes don't return the number of total sectors correctly,
-@@ -72,15 +83,15 @@
-       /* FIXME: sizeof (DAP) must be 0x10. Should assert that the compiler
-        can't add any padding.  */
--      dap.length = sizeof (dap);
--      dap.block = sector;
--      dap.blocks = nsec;
--      dap.reserved = 0;
-+      dap->length = 0x10;
-+      dap->block = sector;
-+      dap->blocks = nsec;
-+      dap->reserved = 0;
-       /* This is undocumented part. The address is formated in
-        SEGMENT:ADDRESS.  */
--      dap.buffer = segment << 16;
-+      dap->buffer = segment << 16;
-       
--      err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, &dap);
-+      err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, dap);
- /* #undef NO_INT13_FALLBACK */
- #ifndef NO_INT13_FALLBACK
-diff -Nur grub-0.97/stage2/boot.c grub-0.97-patched/stage2/boot.c
---- grub-0.97/stage2/boot.c    2004-03-30 13:44:08.000000000 +0200
-+++ grub-0.97-patched/stage2/boot.c    2012-11-11 17:07:12.727729596 +0100
-@@ -1,7 +1,7 @@
- /* boot.c - load and bootstrap a kernel */
- /*
-  *  GRUB  --  GRand Unified Bootloader
-- *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
-+ *  Copyright (C) 1999,2000,2001,2002,2003,2004,2005  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
-@@ -96,7 +96,7 @@
-   lh = (struct linux_kernel_header *) buffer;
-   
-   /* ELF loading supported if multiboot, FreeBSD and NetBSD.  */
--  if ((type == KERNEL_TYPE_MULTIBOOT
-+  if (((type == KERNEL_TYPE_MULTIBOOT && ! (flags & MULTIBOOT_AOUT_KLUDGE))
-        || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD
-        || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0
-        || suggested_type == KERNEL_TYPE_NETBSD)
-@@ -241,7 +241,7 @@
-           }
-         if (lh->version >= 0x0202)
--          lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET;
-+          lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_0202_PRM_OFFSET;
-         else
-           {
-             lh->cl_magic = LINUX_CL_MAGIC;
-@@ -407,6 +407,15 @@
-           while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src)
-             *(dest++) = *(src++);
-       
-+          {
-+          char *src = skip_to (0, arg);
-+          char *dest = linux_data_tmp_addr + LINUX_CL_0202_PRM_OFFSET;
-+      
-+          while (dest < linux_data_tmp_addr + LINUX_CL_0202_PRM_END_OFFSET && *src)
-+            *(dest++) = *(src++);
-+          *dest = 0;
-+          }
-+
-           /* Old Linux kernels have problems determining the amount of
-              the available memory.  To work around this problem, we add
-              the "mem" option to the kernel command line.  This has its
-@@ -824,8 +833,11 @@
-     moveto = (mbi.mem_upper + 0x400) << 10;
-   
-   moveto = (moveto - len) & 0xfffff000;
--  max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203
--            ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS);
-+  max_addr = LINUX_INITRD_MAX_ADDRESS;
-+  if (lh->header == LINUX_MAGIC_SIGNATURE &&
-+      lh->version >= 0x0203 &&
-+      lh->initrd_addr_max < max_addr)
-+    max_addr = lh->initrd_addr_max;
-   if (moveto + len >= max_addr)
-     moveto = (max_addr - len) & 0xfffff000;
-   
-diff -Nur grub-0.97/stage2/boot.c.orig grub-0.97-patched/stage2/boot.c.orig
---- grub-0.97/stage2/boot.c.orig       1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/stage2/boot.c.orig       2004-03-30 13:44:08.000000000 +0200
-@@ -0,0 +1,1020 @@
-+/* boot.c - load and bootstrap a kernel */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 1999,2000,2001,2002,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 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.
-+ */
-+
-+
-+#include "shared.h"
-+
-+#include "freebsd.h"
-+#include "imgact_aout.h"
-+#include "i386-elf.h"
-+
-+static int cur_addr;
-+entry_func entry_addr;
-+static struct mod_list mll[99];
-+static int linux_mem_size;
-+
-+/*
-+ *  The next two functions, 'load_image' and 'load_module', are the building
-+ *  blocks of the multiboot loader component.  They handle essentially all
-+ *  of the gory details of loading in a bootable image and the modules.
-+ */
-+
-+kernel_t
-+load_image (char *kernel, char *arg, kernel_t suggested_type,
-+          unsigned long load_flags)
-+{
-+  int len, i, exec_type = 0, align_4k = 1;
-+  entry_func real_entry_addr = 0;
-+  kernel_t type = KERNEL_TYPE_NONE;
-+  unsigned long flags = 0, text_len = 0, data_len = 0, bss_len = 0;
-+  char *str = 0, *str2 = 0;
-+  struct linux_kernel_header *lh;
-+  union
-+    {
-+      struct multiboot_header *mb;
-+      struct exec *aout;
-+      Elf32_Ehdr *elf;
-+    }
-+  pu;
-+  /* presuming that MULTIBOOT_SEARCH is large enough to encompass an
-+     executable header */
-+  unsigned char buffer[MULTIBOOT_SEARCH];
-+
-+  /* sets the header pointer to point to the beginning of the
-+     buffer by default */
-+  pu.aout = (struct exec *) buffer;
-+
-+  if (!grub_open (kernel))
-+    return KERNEL_TYPE_NONE;
-+
-+  if (!(len = grub_read (buffer, MULTIBOOT_SEARCH)) || len < 32)
-+    {
-+      grub_close ();
-+      
-+      if (!errnum)
-+      errnum = ERR_EXEC_FORMAT;
-+
-+      return KERNEL_TYPE_NONE;
-+    }
-+
-+  for (i = 0; i < len; i++)
-+    {
-+      if (MULTIBOOT_FOUND ((int) (buffer + i), len - i))
-+      {
-+        flags = ((struct multiboot_header *) (buffer + i))->flags;
-+        if (flags & MULTIBOOT_UNSUPPORTED)
-+          {
-+            grub_close ();
-+            errnum = ERR_BOOT_FEATURES;
-+            return KERNEL_TYPE_NONE;
-+          }
-+        type = KERNEL_TYPE_MULTIBOOT;
-+        str2 = "Multiboot";
-+        break;
-+      }
-+    }
-+
-+  /* Use BUFFER as a linux kernel header, if the image is Linux zImage
-+     or bzImage.  */
-+  lh = (struct linux_kernel_header *) buffer;
-+  
-+  /* ELF loading supported if multiboot, FreeBSD and NetBSD.  */
-+  if ((type == KERNEL_TYPE_MULTIBOOT
-+       || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD
-+       || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0
-+       || suggested_type == KERNEL_TYPE_NETBSD)
-+      && len > sizeof (Elf32_Ehdr)
-+      && BOOTABLE_I386_ELF ((*((Elf32_Ehdr *) buffer))))
-+    {
-+      if (type == KERNEL_TYPE_MULTIBOOT)
-+      entry_addr = (entry_func) pu.elf->e_entry;
-+      else
-+      entry_addr = (entry_func) (pu.elf->e_entry & 0xFFFFFF);
-+
-+      if (entry_addr < (entry_func) 0x100000)
-+      errnum = ERR_BELOW_1MB;
-+
-+      /* don't want to deal with ELF program header at some random
-+         place in the file -- this generally won't happen */
-+      if (pu.elf->e_phoff == 0 || pu.elf->e_phnum == 0
-+        || ((pu.elf->e_phoff + (pu.elf->e_phentsize * pu.elf->e_phnum))
-+            >= len))
-+      errnum = ERR_EXEC_FORMAT;
-+      str = "elf";
-+
-+      if (type == KERNEL_TYPE_NONE)
-+      {
-+        /* At the moment, there is no way to identify a NetBSD ELF
-+           kernel, so rely on the suggested type by the user.  */
-+        if (suggested_type == KERNEL_TYPE_NETBSD)
-+          {
-+            str2 = "NetBSD";
-+            type = suggested_type;
-+          }
-+        else
-+          {
-+            str2 = "FreeBSD";
-+            type = KERNEL_TYPE_FREEBSD;
-+          }
-+      }
-+    }
-+  else if (flags & MULTIBOOT_AOUT_KLUDGE)
-+    {
-+      pu.mb = (struct multiboot_header *) (buffer + i);
-+      entry_addr = (entry_func) pu.mb->entry_addr;
-+      cur_addr = pu.mb->load_addr;
-+      /* first offset into file */
-+      grub_seek (i - (pu.mb->header_addr - cur_addr));
-+
-+      /* If the load end address is zero, load the whole contents.  */
-+      if (! pu.mb->load_end_addr)
-+      pu.mb->load_end_addr = cur_addr + filemax;
-+      
-+      text_len = pu.mb->load_end_addr - cur_addr;
-+      data_len = 0;
-+
-+      /* If the bss end address is zero, assume that there is no bss area.  */
-+      if (! pu.mb->bss_end_addr)
-+      pu.mb->bss_end_addr = pu.mb->load_end_addr;
-+      
-+      bss_len = pu.mb->bss_end_addr - pu.mb->load_end_addr;
-+
-+      if (pu.mb->header_addr < pu.mb->load_addr
-+        || pu.mb->load_end_addr <= pu.mb->load_addr
-+        || pu.mb->bss_end_addr < pu.mb->load_end_addr
-+        || (pu.mb->header_addr - pu.mb->load_addr) > i)
-+      errnum = ERR_EXEC_FORMAT;
-+
-+      if (cur_addr < 0x100000)
-+      errnum = ERR_BELOW_1MB;
-+
-+      pu.aout = (struct exec *) buffer;
-+      exec_type = 2;
-+      str = "kludge";
-+    }
-+  else if (len > sizeof (struct exec) && !N_BADMAG ((*(pu.aout))))
-+    {
-+      entry_addr = (entry_func) pu.aout->a_entry;
-+
-+      if (type == KERNEL_TYPE_NONE)
-+      {
-+        /*
-+         *  If it doesn't have a Multiboot header, then presume
-+         *  it is either a FreeBSD or NetBSD executable.  If so,
-+         *  then use a magic number of normal ordering, ZMAGIC to
-+         *  determine if it is FreeBSD.
-+         *
-+         *  This is all because freebsd and netbsd seem to require
-+         *  masking out some address bits...  differently for each
-+         *  one...  plus of course we need to know which booting
-+         *  method to use.
-+         */
-+        entry_addr = (entry_func) ((int) entry_addr & 0xFFFFFF);
-+        
-+        if (buffer[0] == 0xb && buffer[1] == 1)
-+          {
-+            type = KERNEL_TYPE_FREEBSD;
-+            cur_addr = (int) entry_addr;
-+            str2 = "FreeBSD";
-+          }
-+        else
-+          {
-+            type = KERNEL_TYPE_NETBSD;
-+            cur_addr = (int) entry_addr & 0xF00000;
-+            if (N_GETMAGIC ((*(pu.aout))) != NMAGIC)
-+              align_4k = 0;
-+            str2 = "NetBSD";
-+          }
-+      }
-+
-+      /* first offset into file */
-+      grub_seek (N_TXTOFF (*(pu.aout)));
-+      text_len = pu.aout->a_text;
-+      data_len = pu.aout->a_data;
-+      bss_len = pu.aout->a_bss;
-+
-+      if (cur_addr < 0x100000)
-+      errnum = ERR_BELOW_1MB;
-+
-+      exec_type = 1;
-+      str = "a.out";
-+    }
-+  else if (lh->boot_flag == BOOTSEC_SIGNATURE
-+         && lh->setup_sects <= LINUX_MAX_SETUP_SECTS)
-+    {
-+      int big_linux = 0;
-+      int setup_sects = lh->setup_sects;
-+
-+      if (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0200)
-+      {
-+        big_linux = (lh->loadflags & LINUX_FLAG_BIG_KERNEL);
-+        lh->type_of_loader = LINUX_BOOT_LOADER_TYPE;
-+
-+        /* Put the real mode part at as a high location as possible.  */
-+        linux_data_real_addr
-+          = (char *) ((mbi.mem_lower << 10) - LINUX_SETUP_MOVE_SIZE);
-+        /* But it must not exceed the traditional area.  */
-+        if (linux_data_real_addr > (char *) LINUX_OLD_REAL_MODE_ADDR)
-+          linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR;
-+
-+        if (lh->version >= 0x0201)
-+          {
-+            lh->heap_end_ptr = LINUX_HEAP_END_OFFSET;
-+            lh->loadflags |= LINUX_FLAG_CAN_USE_HEAP;
-+          }
-+
-+        if (lh->version >= 0x0202)
-+          lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET;
-+        else
-+          {
-+            lh->cl_magic = LINUX_CL_MAGIC;
-+            lh->cl_offset = LINUX_CL_OFFSET;
-+            lh->setup_move_size = LINUX_SETUP_MOVE_SIZE;
-+          }
-+      }
-+      else
-+      {
-+        /* Your kernel is quite old...  */
-+        lh->cl_magic = LINUX_CL_MAGIC;
-+        lh->cl_offset = LINUX_CL_OFFSET;
-+        
-+        setup_sects = LINUX_DEFAULT_SETUP_SECTS;
-+
-+        linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR;
-+      }
-+      
-+      /* If SETUP_SECTS is not set, set it to the default (4).  */
-+      if (! setup_sects)
-+      setup_sects = LINUX_DEFAULT_SETUP_SECTS;
-+
-+      data_len = setup_sects << 9;
-+      text_len = filemax - data_len - SECTOR_SIZE;
-+
-+      linux_data_tmp_addr = (char *) LINUX_BZIMAGE_ADDR + text_len;
-+      
-+      if (! big_linux
-+        && text_len > linux_data_real_addr - (char *) LINUX_ZIMAGE_ADDR)
-+      {
-+        grub_printf (" linux 'zImage' kernel too big, try 'make bzImage'\n");
-+        errnum = ERR_WONT_FIT;
-+      }
-+      else if (linux_data_real_addr + LINUX_SETUP_MOVE_SIZE
-+             > RAW_ADDR ((char *) (mbi.mem_lower << 10)))
-+      errnum = ERR_WONT_FIT;
-+      else
-+      {
-+        grub_printf ("   [Linux-%s, setup=0x%x, size=0x%x]\n",
-+                     (big_linux ? "bzImage" : "zImage"), data_len, text_len);
-+
-+        /* Video mode selection support. What a mess!  */
-+        /* NOTE: Even the word "mess" is not still enough to
-+           represent how wrong and bad the Linux video support is,
-+           but I don't want to hear complaints from Linux fanatics
-+           any more. -okuji  */
-+        {
-+          char *vga;
-+      
-+          /* Find the substring "vga=".  */
-+          vga = grub_strstr (arg, "vga=");
-+          if (vga)
-+            {
-+              char *value = vga + 4;
-+              int vid_mode;
-+          
-+              /* Handle special strings.  */
-+              if (substring ("normal", value) < 1)
-+                vid_mode = LINUX_VID_MODE_NORMAL;
-+              else if (substring ("ext", value) < 1)
-+                vid_mode = LINUX_VID_MODE_EXTENDED;
-+              else if (substring ("ask", value) < 1)
-+                vid_mode = LINUX_VID_MODE_ASK;
-+              else if (safe_parse_maxint (&value, &vid_mode))
-+                ;
-+              else
-+                {
-+                  /* ERRNUM is already set inside the function
-+                     safe_parse_maxint.  */
-+                  grub_close ();
-+                  return KERNEL_TYPE_NONE;
-+                }
-+          
-+              lh->vid_mode = vid_mode;
-+            }
-+        }
-+
-+        /* Check the mem= option to limit memory used for initrd.  */
-+        {
-+          char *mem;
-+      
-+          mem = grub_strstr (arg, "mem=");
-+          if (mem)
-+            {
-+              char *value = mem + 4;
-+          
-+              safe_parse_maxint (&value, &linux_mem_size);
-+              switch (errnum)
-+                {
-+                case ERR_NUMBER_OVERFLOW:
-+                  /* If an overflow occurs, use the maximum address for
-+                     initrd instead. This is good, because MAXINT is
-+                     greater than LINUX_INITRD_MAX_ADDRESS.  */
-+                  linux_mem_size = LINUX_INITRD_MAX_ADDRESS;
-+                  errnum = ERR_NONE;
-+                  break;
-+              
-+                case ERR_NONE:
-+                  {
-+                    int shift = 0;
-+                
-+                    switch (grub_tolower (*value))
-+                      {
-+                      case 'g':
-+                        shift += 10;
-+                      case 'm':
-+                        shift += 10;
-+                      case 'k':
-+                        shift += 10;
-+                      default:
-+                        break;
-+                      }
-+                
-+                    /* Check an overflow.  */
-+                    if (linux_mem_size > (MAXINT >> shift))
-+                      linux_mem_size = LINUX_INITRD_MAX_ADDRESS;
-+                    else
-+                      linux_mem_size <<= shift;
-+                  }
-+                  break;
-+              
-+                default:
-+                  linux_mem_size = 0;
-+                  errnum = ERR_NONE;
-+                  break;
-+                }
-+            }
-+          else
-+            linux_mem_size = 0;
-+        }
-+      
-+        /* It is possible that DATA_LEN + SECTOR_SIZE is greater than
-+           MULTIBOOT_SEARCH, so the data may have been read partially.  */
-+        if (data_len + SECTOR_SIZE <= MULTIBOOT_SEARCH)
-+          grub_memmove (linux_data_tmp_addr, buffer,
-+                        data_len + SECTOR_SIZE);
-+        else
-+          {
-+            grub_memmove (linux_data_tmp_addr, buffer, MULTIBOOT_SEARCH);
-+            grub_read (linux_data_tmp_addr + MULTIBOOT_SEARCH,
-+                       data_len + SECTOR_SIZE - MULTIBOOT_SEARCH);
-+          }
-+        
-+        if (lh->header != LINUX_MAGIC_SIGNATURE ||
-+            lh->version < 0x0200)
-+          /* Clear the heap space.  */
-+          grub_memset (linux_data_tmp_addr + ((setup_sects + 1) << 9),
-+                       0,
-+                       (64 - setup_sects - 1) << 9);
-+      
-+        /* Copy command-line plus memory hack to staging area.
-+           NOTE: Linux has a bug that it doesn't handle multiple spaces
-+           between two options and a space after a "mem=" option isn't
-+           removed correctly so the arguments to init could be like
-+           {"init", "", "", NULL}. This affects some not-very-clever
-+           shells. Thus, the code below does a trick to avoid the bug.
-+           That is, copy "mem=XXX" to the end of the command-line, and
-+           avoid to copy spaces unnecessarily. Hell.  */
-+        {
-+          char *src = skip_to (0, arg);
-+          char *dest = linux_data_tmp_addr + LINUX_CL_OFFSET;
-+      
-+          while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src)
-+            *(dest++) = *(src++);
-+      
-+          /* Old Linux kernels have problems determining the amount of
-+             the available memory.  To work around this problem, we add
-+             the "mem" option to the kernel command line.  This has its
-+             own drawbacks because newer kernels can determine the
-+             memory map more accurately.  Boot protocol 2.03, which
-+             appeared in Linux 2.4.18, provides a pointer to the kernel
-+             version string, so we could check it.  But since kernel
-+             2.4.18 and newer are known to detect memory reliably, boot
-+             protocol 2.03 already implies that the kernel is new
-+             enough.  The "mem" option is added if neither of the
-+             following conditions is met:
-+             1) The "mem" option is already present.
-+             2) The "kernel" command is used with "--no-mem-option".
-+             3) GNU GRUB is configured not to pass the "mem" option.
-+             4) The kernel supports boot protocol 2.03 or newer.  */
-+          if (! grub_strstr (arg, "mem=")
-+              && ! (load_flags & KERNEL_LOAD_NO_MEM_OPTION)
-+              && lh->version < 0x0203         /* kernel version < 2.4.18 */
-+              && dest + 15 < linux_data_tmp_addr + LINUX_CL_END_OFFSET)
-+            {
-+              *dest++ = ' ';
-+              *dest++ = 'm';
-+              *dest++ = 'e';
-+              *dest++ = 'm';
-+              *dest++ = '=';
-+          
-+              dest = convert_to_ascii (dest, 'u', (extended_memory + 0x400));
-+              *dest++ = 'K';
-+            }
-+      
-+          *dest = 0;
-+        }
-+      
-+        /* offset into file */
-+        grub_seek (data_len + SECTOR_SIZE);
-+      
-+        cur_addr = (int) linux_data_tmp_addr + LINUX_SETUP_MOVE_SIZE;
-+        grub_read ((char *) LINUX_BZIMAGE_ADDR, text_len);
-+      
-+        if (errnum == ERR_NONE)
-+          {
-+            grub_close ();
-+        
-+            /* Sanity check.  */
-+            if (suggested_type != KERNEL_TYPE_NONE
-+                && ((big_linux && suggested_type != KERNEL_TYPE_BIG_LINUX)
-+                    || (! big_linux && suggested_type != KERNEL_TYPE_LINUX)))
-+              {
-+                errnum = ERR_EXEC_FORMAT;
-+                return KERNEL_TYPE_NONE;
-+              }
-+        
-+            /* Ugly hack.  */
-+            linux_text_len = text_len;
-+        
-+            return big_linux ? KERNEL_TYPE_BIG_LINUX : KERNEL_TYPE_LINUX;
-+          }
-+      }
-+    }
-+  else                                /* no recognizable format */
-+    errnum = ERR_EXEC_FORMAT;
-+
-+  /* return if error */
-+  if (errnum)
-+    {
-+      grub_close ();
-+      return KERNEL_TYPE_NONE;
-+    }
-+
-+  /* fill the multiboot info structure */
-+  mbi.cmdline = (int) arg;
-+  mbi.mods_count = 0;
-+  mbi.mods_addr = 0;
-+  mbi.boot_device = (current_drive << 24) | current_partition;
-+  mbi.flags &= ~(MB_INFO_MODS | MB_INFO_AOUT_SYMS | MB_INFO_ELF_SHDR);
-+  mbi.syms.a.tabsize = 0;
-+  mbi.syms.a.strsize = 0;
-+  mbi.syms.a.addr = 0;
-+  mbi.syms.a.pad = 0;
-+
-+  printf ("   [%s-%s", str2, str);
-+
-+  str = "";
-+
-+  if (exec_type)              /* can be loaded like a.out */
-+    {
-+      if (flags & MULTIBOOT_AOUT_KLUDGE)
-+      str = "-and-data";
-+
-+      printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len);
-+
-+      /* read text, then read data */
-+      if (grub_read ((char *) RAW_ADDR (cur_addr), text_len) == text_len)
-+      {
-+        cur_addr += text_len;
-+
-+        if (!(flags & MULTIBOOT_AOUT_KLUDGE))
-+          {
-+            /* we have to align to a 4K boundary */
-+            if (align_4k)
-+              cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
-+            else
-+              printf (", C");
-+
-+            printf (", data=0x%x", data_len);
-+
-+            if ((grub_read ((char *) RAW_ADDR (cur_addr), data_len)
-+                 != data_len)
-+                && !errnum)
-+              errnum = ERR_EXEC_FORMAT;
-+            cur_addr += data_len;
-+          }
-+
-+        if (!errnum)
-+          {
-+            memset ((char *) RAW_ADDR (cur_addr), 0, bss_len);
-+            cur_addr += bss_len;
-+
-+            printf (", bss=0x%x", bss_len);
-+          }
-+      }
-+      else if (!errnum)
-+      errnum = ERR_EXEC_FORMAT;
-+
-+      if (!errnum && pu.aout->a_syms
-+        && pu.aout->a_syms < (filemax - filepos))
-+      {
-+        int symtab_err, orig_addr = cur_addr;
-+
-+        /* we should align to a 4K boundary here for good measure */
-+        if (align_4k)
-+          cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
-+
-+        mbi.syms.a.addr = cur_addr;
-+
-+        *((int *) RAW_ADDR (cur_addr)) = pu.aout->a_syms;
-+        cur_addr += sizeof (int);
-+        
-+        printf (", symtab=0x%x", pu.aout->a_syms);
-+
-+        if (grub_read ((char *) RAW_ADDR (cur_addr), pu.aout->a_syms)
-+            == pu.aout->a_syms)
-+          {
-+            cur_addr += pu.aout->a_syms;
-+            mbi.syms.a.tabsize = pu.aout->a_syms;
-+
-+            if (grub_read ((char *) &i, sizeof (int)) == sizeof (int))
-+              {
-+                *((int *) RAW_ADDR (cur_addr)) = i;
-+                cur_addr += sizeof (int);
-+
-+                mbi.syms.a.strsize = i;
-+
-+                i -= sizeof (int);
-+
-+                printf (", strtab=0x%x", i);
-+
-+                symtab_err = (grub_read ((char *) RAW_ADDR (cur_addr), i)
-+                              != i);
-+                cur_addr += i;
-+              }
-+            else
-+              symtab_err = 1;
-+          }
-+        else
-+          symtab_err = 1;
-+
-+        if (symtab_err)
-+          {
-+            printf ("(bad)");
-+            cur_addr = orig_addr;
-+            mbi.syms.a.tabsize = 0;
-+            mbi.syms.a.strsize = 0;
-+            mbi.syms.a.addr = 0;
-+          }
-+        else
-+          mbi.flags |= MB_INFO_AOUT_SYMS;
-+      }
-+    }
-+  else
-+    /* ELF executable */
-+    {
-+      unsigned loaded = 0, memaddr, memsiz, filesiz;
-+      Elf32_Phdr *phdr;
-+
-+      /* reset this to zero for now */
-+      cur_addr = 0;
-+
-+      /* scan for program segments */
-+      for (i = 0; i < pu.elf->e_phnum; i++)
-+      {
-+        phdr = (Elf32_Phdr *)
-+          (pu.elf->e_phoff + ((int) buffer)
-+           + (pu.elf->e_phentsize * i));
-+        if (phdr->p_type == PT_LOAD)
-+          {
-+            /* offset into file */
-+            grub_seek (phdr->p_offset);
-+            filesiz = phdr->p_filesz;
-+            
-+            if (type == KERNEL_TYPE_FREEBSD || type == KERNEL_TYPE_NETBSD)
-+              memaddr = RAW_ADDR (phdr->p_paddr & 0xFFFFFF);
-+            else
-+              memaddr = RAW_ADDR (phdr->p_paddr);
-+            
-+            memsiz = phdr->p_memsz;
-+            if (memaddr < RAW_ADDR (0x100000))
-+              errnum = ERR_BELOW_1MB;
-+
-+            /* If the memory range contains the entry address, get the
-+               physical address here.  */
-+            if (type == KERNEL_TYPE_MULTIBOOT
-+                && (unsigned) entry_addr >= phdr->p_vaddr
-+                && (unsigned) entry_addr < phdr->p_vaddr + memsiz)
-+              real_entry_addr = (entry_func) ((unsigned) entry_addr
-+                                              + memaddr - phdr->p_vaddr);
-+              
-+            /* make sure we only load what we're supposed to! */
-+            if (filesiz > memsiz)
-+              filesiz = memsiz;
-+            /* mark memory as used */
-+            if (cur_addr < memaddr + memsiz)
-+              cur_addr = memaddr + memsiz;
-+            printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz,
-+                    memsiz - filesiz);
-+            /* increment number of segments */
-+            loaded++;
-+
-+            /* load the segment */
-+            if (memcheck (memaddr, memsiz)
-+                && grub_read ((char *) memaddr, filesiz) == filesiz)
-+              {
-+                if (memsiz > filesiz)
-+                  memset ((char *) (memaddr + filesiz), 0, memsiz - filesiz);
-+              }
-+            else
-+              break;
-+          }
-+      }
-+
-+      if (! errnum)
-+      {
-+        if (! loaded)
-+          errnum = ERR_EXEC_FORMAT;
-+        else
-+          {
-+            /* Load ELF symbols.  */
-+            Elf32_Shdr *shdr = NULL;
-+            int tab_size, sec_size;
-+            int symtab_err = 0;
-+
-+            mbi.syms.e.num = pu.elf->e_shnum;
-+            mbi.syms.e.size = pu.elf->e_shentsize;
-+            mbi.syms.e.shndx = pu.elf->e_shstrndx;
-+            
-+            /* We should align to a 4K boundary here for good measure.  */
-+            if (align_4k)
-+              cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
-+            
-+            tab_size = pu.elf->e_shentsize * pu.elf->e_shnum;
-+            
-+            grub_seek (pu.elf->e_shoff);
-+            if (grub_read ((char *) RAW_ADDR (cur_addr), tab_size)
-+                == tab_size)
-+              {
-+                mbi.syms.e.addr = cur_addr;
-+                shdr = (Elf32_Shdr *) mbi.syms.e.addr;
-+                cur_addr += tab_size;
-+                
-+                printf (", shtab=0x%x", cur_addr);
-+                
-+                for (i = 0; i < mbi.syms.e.num; i++)
-+                  {
-+                    /* This section is a loaded section,
-+                       so we don't care.  */
-+                    if (shdr[i].sh_addr != 0)
-+                      continue;
-+                    
-+                    /* This section is empty, so we don't care.  */
-+                    if (shdr[i].sh_size == 0)
-+                      continue;
-+                    
-+                    /* Align the section to a sh_addralign bits boundary.  */
-+                    cur_addr = ((cur_addr + shdr[i].sh_addralign) & 
-+                                - (int) shdr[i].sh_addralign);
-+                    
-+                    grub_seek (shdr[i].sh_offset);
-+                    
-+                    sec_size = shdr[i].sh_size;
-+
-+                    if (! (memcheck (cur_addr, sec_size)
-+                           && (grub_read ((char *) RAW_ADDR (cur_addr),
-+                                          sec_size)
-+                               == sec_size)))
-+                      {
-+                        symtab_err = 1;
-+                        break;
-+                      }
-+                    
-+                    shdr[i].sh_addr = cur_addr;
-+                    cur_addr += sec_size;
-+                  }
-+              }
-+            else 
-+              symtab_err = 1;
-+            
-+            if (mbi.syms.e.addr < RAW_ADDR(0x10000))
-+              symtab_err = 1;
-+            
-+            if (symtab_err) 
-+              {
-+                printf ("(bad)");
-+                mbi.syms.e.num = 0;
-+                mbi.syms.e.size = 0;
-+                mbi.syms.e.addr = 0;
-+                mbi.syms.e.shndx = 0;
-+                cur_addr = 0;
-+              }
-+            else
-+              mbi.flags |= MB_INFO_ELF_SHDR;
-+          }
-+      }
-+    }
-+
-+  if (! errnum)
-+    {
-+      grub_printf (", entry=0x%x]\n", (unsigned) entry_addr);
-+      
-+      /* If the entry address is physically different from that of the ELF
-+       header, correct it here.  */
-+      if (real_entry_addr)
-+      entry_addr = real_entry_addr;
-+    }
-+  else
-+    {
-+      putchar ('\n');
-+      type = KERNEL_TYPE_NONE;
-+    }
-+
-+  grub_close ();
-+
-+  /* Sanity check.  */
-+  if (suggested_type != KERNEL_TYPE_NONE && suggested_type != type)
-+    {
-+      errnum = ERR_EXEC_FORMAT;
-+      return KERNEL_TYPE_NONE;
-+    }
-+  
-+  return type;
-+}
-+
-+int
-+load_module (char *module, char *arg)
-+{
-+  int len;
-+
-+  /* if we are supposed to load on 4K boundaries */
-+  cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
-+
-+  if (!grub_open (module))
-+    return 0;
-+
-+  len = grub_read ((char *) cur_addr, -1);
-+  if (! len)
-+    {
-+      grub_close ();
-+      return 0;
-+    }
-+
-+  printf ("   [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len);
-+
-+  /* these two simply need to be set if any modules are loaded at all */
-+  mbi.flags |= MB_INFO_MODS;
-+  mbi.mods_addr = (int) mll;
-+
-+  mll[mbi.mods_count].cmdline = (int) arg;
-+  mll[mbi.mods_count].mod_start = cur_addr;
-+  cur_addr += len;
-+  mll[mbi.mods_count].mod_end = cur_addr;
-+  mll[mbi.mods_count].pad = 0;
-+
-+  /* increment number of modules included */
-+  mbi.mods_count++;
-+
-+  grub_close ();
-+  return 1;
-+}
-+
-+int
-+load_initrd (char *initrd)
-+{
-+  int len;
-+  unsigned long moveto;
-+  unsigned long max_addr;
-+  struct linux_kernel_header *lh
-+    = (struct linux_kernel_header *) (cur_addr - LINUX_SETUP_MOVE_SIZE);
-+  
-+#ifndef NO_DECOMPRESSION
-+  no_decompression = 1;
-+#endif
-+  
-+  if (! grub_open (initrd))
-+    goto fail;
-+
-+  len = grub_read ((char *) cur_addr, -1);
-+  if (! len)
-+    {
-+      grub_close ();
-+      goto fail;
-+    }
-+
-+  if (linux_mem_size)
-+    moveto = linux_mem_size;
-+  else
-+    moveto = (mbi.mem_upper + 0x400) << 10;
-+  
-+  moveto = (moveto - len) & 0xfffff000;
-+  max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203
-+            ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS);
-+  if (moveto + len >= max_addr)
-+    moveto = (max_addr - len) & 0xfffff000;
-+  
-+  /* XXX: Linux 2.3.xx has a bug in the memory range check, so avoid
-+     the last page.
-+     XXX: Linux 2.2.xx has a bug in the memory range check, which is
-+     worse than that of Linux 2.3.xx, so avoid the last 64kb. *sigh*  */
-+  moveto -= 0x10000;
-+  memmove ((void *) RAW_ADDR (moveto), (void *) cur_addr, len);
-+
-+  printf ("   [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len);
-+
-+  /* FIXME: Should check if the kernel supports INITRD.  */
-+  lh->ramdisk_image = RAW_ADDR (moveto);
-+  lh->ramdisk_size = len;
-+
-+  grub_close ();
-+
-+ fail:
-+  
-+#ifndef NO_DECOMPRESSION
-+  no_decompression = 0;
-+#endif
-+
-+  return ! errnum;
-+}
-+
-+
-+#ifdef GRUB_UTIL
-+/* Dummy function to fake the *BSD boot.  */
-+static void
-+bsd_boot_entry (int flags, int bootdev, int sym_start, int sym_end,
-+              int mem_upper, int mem_lower)
-+{
-+  stop ();
-+}
-+#endif
-+
-+
-+/*
-+ *  All "*_boot" commands depend on the images being loaded into memory
-+ *  correctly, the variables in this file being set up correctly, and
-+ *  the root partition being set in the 'saved_drive' and 'saved_partition'
-+ *  variables.
-+ */
-+
-+
-+void
-+bsd_boot (kernel_t type, int bootdev, char *arg)
-+{
-+  char *str;
-+  int clval = 0, i;
-+  struct bootinfo bi;
-+
-+#ifdef GRUB_UTIL
-+  entry_addr = (entry_func) bsd_boot_entry;
-+#else
-+  stop_floppy ();
-+#endif
-+
-+  while (*(++arg) && *arg != ' ');
-+  str = arg;
-+  while (*str)
-+    {
-+      if (*str == '-')
-+      {
-+        while (*str && *str != ' ')
-+          {
-+            if (*str == 'C')
-+              clval |= RB_CDROM;
-+            if (*str == 'a')
-+              clval |= RB_ASKNAME;
-+            if (*str == 'b')
-+              clval |= RB_HALT;
-+            if (*str == 'c')
-+              clval |= RB_CONFIG;
-+            if (*str == 'd')
-+              clval |= RB_KDB;
-+            if (*str == 'D')
-+              clval |= RB_MULTIPLE;
-+            if (*str == 'g')
-+              clval |= RB_GDB;
-+            if (*str == 'h')
-+              clval |= RB_SERIAL;
-+            if (*str == 'm')
-+              clval |= RB_MUTE;
-+            if (*str == 'r')
-+              clval |= RB_DFLTROOT;
-+            if (*str == 's')
-+              clval |= RB_SINGLE;
-+            if (*str == 'v')
-+              clval |= RB_VERBOSE;
-+            str++;
-+          }
-+        continue;
-+      }
-+      str++;
-+    }
-+
-+  if (type == KERNEL_TYPE_FREEBSD)
-+    {
-+      clval |= RB_BOOTINFO;
-+
-+      bi.bi_version = BOOTINFO_VERSION;
-+
-+      *arg = 0;
-+      while ((--arg) > (char *) MB_CMDLINE_BUF && *arg != '/');
-+      if (*arg == '/')
-+      bi.bi_kernelname = arg + 1;
-+      else
-+      bi.bi_kernelname = 0;
-+
-+      bi.bi_nfs_diskless = 0;
-+      bi.bi_n_bios_used = 0;  /* this field is apparently unused */
-+
-+      for (i = 0; i < N_BIOS_GEOM; i++)
-+      {
-+        struct geometry geom;
-+
-+        /* XXX Should check the return value.  */
-+        get_diskinfo (i + 0x80, &geom);
-+        /* FIXME: If HEADS or SECTORS is greater than 255, then this will
-+           break the geometry information. That is a drawback of BSD
-+           but not of GRUB.  */
-+        bi.bi_bios_geom[i] = (((geom.cylinders - 1) << 16)
-+                              + (((geom.heads - 1) & 0xff) << 8)
-+                              + (geom.sectors & 0xff));
-+      }
-+
-+      bi.bi_size = sizeof (struct bootinfo);
-+      bi.bi_memsizes_valid = 1;
-+      bi.bi_bios_dev = saved_drive;
-+      bi.bi_basemem = mbi.mem_lower;
-+      bi.bi_extmem = extended_memory;
-+
-+      if (mbi.flags & MB_INFO_AOUT_SYMS)
-+      {
-+        bi.bi_symtab = mbi.syms.a.addr;
-+        bi.bi_esymtab = mbi.syms.a.addr + 4
-+          + mbi.syms.a.tabsize + mbi.syms.a.strsize;
-+      }
-+#if 0
-+      else if (mbi.flags & MB_INFO_ELF_SHDR)
-+      {
-+        /* FIXME: Should check if a symbol table exists and, if exists,
-+           pass the table to BI.  */
-+      }
-+#endif
-+      else
-+      {
-+        bi.bi_symtab = 0;
-+        bi.bi_esymtab = 0;
-+      }
-+
-+      /* call entry point */
-+      (*entry_addr) (clval, bootdev, 0, 0, 0, ((int) (&bi)));
-+    }
-+  else
-+    {
-+      /*
-+       *  We now pass the various bootstrap parameters to the loaded
-+       *  image via the argument list.
-+       *
-+       *  This is the official list:
-+       *
-+       *  arg0 = 8 (magic)
-+       *  arg1 = boot flags
-+       *  arg2 = boot device
-+       *  arg3 = start of symbol table (0 if not loaded)
-+       *  arg4 = end of symbol table (0 if not loaded)
-+       *  arg5 = transfer address from image
-+       *  arg6 = transfer address for next image pointer
-+       *  arg7 = conventional memory size (640)
-+       *  arg8 = extended memory size (8196)
-+       *
-+       *  ...in actuality, we just pass the parameters used by the kernel.
-+       */
-+
-+      /* call entry point */
-+      unsigned long end_mark;
-+
-+      if (mbi.flags & MB_INFO_AOUT_SYMS)
-+      end_mark = (mbi.syms.a.addr + 4
-+                  + mbi.syms.a.tabsize + mbi.syms.a.strsize);
-+      else
-+      /* FIXME: it should be mbi.syms.e.size.  */
-+      end_mark = 0;
-+      
-+      (*entry_addr) (clval, bootdev, 0, end_mark,
-+                   extended_memory, mbi.mem_lower);
-+    }
-+}
-diff -Nur grub-0.97/stage2/builtins.c grub-0.97-patched/stage2/builtins.c
---- grub-0.97/stage2/builtins.c        2005-02-15 22:58:23.000000000 +0100
-+++ grub-0.97-patched/stage2/builtins.c        2012-11-11 17:07:12.729729661 +0100
-@@ -131,63 +131,98 @@
- }
\f
-+/* blocklist_read_helper nee disk_read_blocklist_func was a nested
-+ * function, to which pointers were taken and exposed globally.  Even
-+ * in the GNU-C nested functions extension, they have local linkage,
-+ * and aren't guaranteed to be accessable *at all* outside of their 
-+ * containing scope.
-+ *
-+ * Above and beyond all of that, the variables within blocklist_func_context
-+ * are originally local variables, with local (not even static) linkage,
-+ * from within blocklist_func.  These were each referenced by
-+ * disk_read_blocklist_func, which is only called from other functions
-+ * through a globally scoped pointer.
-+ * 
-+ * The documentation in GCC actually uses the words "all hell will break
-+ * loose" to describe this scenario.
-+ *
-+ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn
-+ * about it (possibly because of the scoping madness?)
-+ */
-+   
-+static struct {
-+       int start_sector;
-+       int num_sectors;
-+       int num_entries;
-+       int last_length;
-+} blocklist_func_context = {
-+       .start_sector = 0,
-+       .num_sectors = 0,
-+       .num_entries = 0,
-+       .last_length = 0
-+};
-+
-+/* Collect contiguous blocks into one entry as many as possible,
-+   and print the blocklist notation on the screen.  */
-+static void
-+blocklist_read_helper (int sector, int offset, int length)
-+{
-+  int *start_sector = &blocklist_func_context.start_sector;
-+  int *num_sectors = &blocklist_func_context.num_sectors;
-+  int *num_entries = &blocklist_func_context.num_entries;
-+  int *last_length = &blocklist_func_context.last_length;
-+
-+  if (*num_sectors > 0)
-+  {
-+    if (*start_sector + *num_sectors == sector
-+      && offset == 0 && *last_length == SECTOR_SIZE)
-+    {
-+      *num_sectors++;
-+      *last_length = length;
-+      return;
-+    }
-+    else
-+    {
-+      if (*last_length == SECTOR_SIZE)
-+        grub_printf ("%s%d+%d", *num_entries ? "," : "",
-+          *start_sector - part_start, *num_sectors);
-+      else if (*num_sectors > 1)
-+        grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "",
-+          *start_sector - part_start, *num_sectors-1,
-+          *start_sector + *num_sectors-1 - part_start, 
-+          *last_length);
-+      else
-+        grub_printf ("%s%d[0-%d]", *num_entries ? "," : "",
-+          *start_sector - part_start, *last_length);
-+      *num_entries++;
-+      *num_sectors = 0;
-+    }
-+  }
-+
-+  if (offset > 0)
-+  {
-+    grub_printf("%s%d[%d-%d]", *num_entries ? "," : "",
-+          sector-part_start, offset, offset+length);
-+    *num_entries++;
-+  }
-+  else
-+  {
-+    *start_sector = sector;
-+    *num_sectors = 1;
-+    *last_length = length;
-+  }
-+}
-+
- /* blocklist */
- static int
- blocklist_func (char *arg, int flags)
- {
-   char *dummy = (char *) RAW_ADDR (0x100000);
--  int start_sector;
--  int num_sectors = 0;
--  int num_entries = 0;
--  int last_length = 0;
--  auto void disk_read_blocklist_func (int sector, int offset, int length);
-+  int *start_sector = &blocklist_func_context.start_sector;
-+  int *num_sectors = &blocklist_func_context.num_sectors;
-+  int *num_entries = &blocklist_func_context.num_entries;
-   
--  /* Collect contiguous blocks into one entry as many as possible,
--     and print the blocklist notation on the screen.  */
--  auto void disk_read_blocklist_func (int sector, int offset, int length)
--    {
--      if (num_sectors > 0)
--      {
--        if (start_sector + num_sectors == sector
--            && offset == 0 && last_length == SECTOR_SIZE)
--          {
--            num_sectors++;
--            last_length = length;
--            return;
--          }
--        else
--          {
--            if (last_length == SECTOR_SIZE)
--              grub_printf ("%s%d+%d", num_entries ? "," : "",
--                           start_sector - part_start, num_sectors);
--            else if (num_sectors > 1)
--              grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "",
--                           start_sector - part_start, num_sectors-1,
--                           start_sector + num_sectors-1 - part_start, 
--                           last_length);
--            else
--              grub_printf ("%s%d[0-%d]", num_entries ? "," : "",
--                           start_sector - part_start, last_length);
--            num_entries++;
--            num_sectors = 0;
--          }
--      }
--
--      if (offset > 0)
--      {
--        grub_printf("%s%d[%d-%d]", num_entries ? "," : "",
--                    sector-part_start, offset, offset+length);
--        num_entries++;
--      }
--      else
--      {
--        start_sector = sector;
--        num_sectors = 1;
--        last_length = length;
--      }
--    }
--
-   /* Open the file.  */
-   if (! grub_open (arg))
-     return 1;
-@@ -206,15 +241,15 @@
-   grub_printf (")");
-   /* Read in the whole file to DUMMY.  */
--  disk_read_hook = disk_read_blocklist_func;
-+  disk_read_hook = blocklist_read_helper;
-   if (! grub_read (dummy, -1))
-     goto fail;
-   /* The last entry may not be printed yet.  Don't check if it is a
-    * full sector, since it doesn't matter if we read too much. */
--  if (num_sectors > 0)
--    grub_printf ("%s%d+%d", num_entries ? "," : "",
--               start_sector - part_start, num_sectors);
-+  if (*num_sectors > 0)
-+      grub_printf ("%s%d+%d", *num_entries ? "," : "",
-+                *start_sector - part_start, *num_sectors);
-   grub_printf ("\n");
-   
-@@ -852,6 +887,138 @@
- };
- #endif /* SUPPORT_NETBOOT */
-+static int terminal_func (char *arg, int flags);
-+
-+#ifdef SUPPORT_GRAPHICS
-+\f
-+static int splashimage_func(char *arg, int flags) {
-+    char splashimage[64];
-+    int i;
-+    
-+    /* filename can only be 64 characters due to our buffer size */
-+    if (strlen(arg) > 63)
-+      return 1;
-+    if (flags == BUILTIN_CMDLINE) {
-+      if (!grub_open(arg))
-+          return 1;
-+      grub_close();
-+    }
-+
-+    strcpy(splashimage, arg);
-+
-+    /* get rid of TERM_NEED_INIT from the graphics terminal. */
-+    for (i = 0; term_table[i].name; i++) {
-+      if (grub_strcmp (term_table[i].name, "graphics") == 0) {
-+          term_table[i].flags &= ~TERM_NEED_INIT;
-+          break;
-+      }
-+    }
-+    
-+    graphics_set_splash(splashimage);
-+
-+    if (flags == BUILTIN_CMDLINE && graphics_inited) {
-+      graphics_end();
-+      graphics_init();
-+      graphics_cls();
-+    }
-+
-+    /* FIXME: should we be explicitly switching the terminal as a 
-+     * side effect here? */
-+    terminal_func("graphics", flags);
-+
-+    return 0;
-+}
-+
-+static struct builtin builtin_splashimage =
-+{
-+  "splashimage",
-+  splashimage_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "splashimage FILE",
-+  "Load FILE as the background image when in graphics mode."
-+};
-+
-+\f
-+/* foreground */
-+static int
-+foreground_func(char *arg, int flags)
-+{
-+    if (grub_strlen(arg) == 6) {
-+      int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2;
-+      int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2;
-+      int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2;
-+
-+      foreground = (r << 16) | (g << 8) | b;
-+      if (graphics_inited)
-+          graphics_set_palette(15, r, g, b);
-+
-+      return (0);
-+    }
-+
-+    return (1);
-+}
-+
-+static struct builtin builtin_foreground =
-+{
-+  "foreground",
-+  foreground_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "foreground RRGGBB",
-+  "Sets the foreground color when in graphics mode."
-+  "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal."
-+};
-+
-+\f
-+/* background */
-+static int
-+background_func(char *arg, int flags)
-+{
-+    if (grub_strlen(arg) == 6) {
-+      int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2;
-+      int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2;
-+      int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2;
-+
-+      background = (r << 16) | (g << 8) | b;
-+      if (graphics_inited)
-+          graphics_set_palette(0, r, g, b);
-+      return (0);
-+    }
-+
-+    return (1);
-+}
-+
-+static struct builtin builtin_background =
-+{
-+  "background",
-+  background_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "background RRGGBB",
-+  "Sets the background color when in graphics mode."
-+  "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal."
-+};
-+
-+#endif /* SUPPORT_GRAPHICS */
-+
-+\f
-+/* clear */
-+static int 
-+clear_func() 
-+{
-+  if (current_term->cls)
-+    current_term->cls();
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_clear =
-+{
-+  "clear",
-+  clear_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "clear",
-+  "Clear the screen"
-+};
-+
\f
- /* displayapm */
- static int
-@@ -1233,14 +1400,15 @@
-   for (drive = 0x80; drive < 0x88; drive++)
-     {
-       unsigned long part = 0xFFFFFF;
--      unsigned long start, len, offset, ext_offset;
--      int type, entry;
-+      unsigned long start, len, offset, ext_offset, gpt_offset;
-+      int type, entry, gpt_count, gpt_size;
-       char buf[SECTOR_SIZE];
-       current_drive = drive;
-       while (next_partition (drive, 0xFFFFFF, &part, &type,
-                            &start, &len, &offset, &entry,
--                           &ext_offset, buf))
-+                            &ext_offset, &gpt_offset,
-+                            &gpt_count, &gpt_size, buf))
-       {
-         if (type != PC_SLICE_TYPE_NONE
-             && ! IS_PC_SLICE_TYPE_BSD (type)
-@@ -1740,6 +1908,77 @@
\f
- /* install */
-+static struct {
-+       int saved_sector;
-+       int installaddr;
-+       int installlist;
-+       char *stage2_first_buffer;
-+} install_func_context = {
-+       .saved_sector = 0,
-+       .installaddr = 0,
-+       .installlist = 0,
-+       .stage2_first_buffer = NULL,
-+};
-+
-+/* Save the first sector of Stage2 in STAGE2_SECT.  */
-+/* Formerly disk_read_savesect_func with local scope inside install_func */
-+static void
-+install_savesect_helper(int sector, int offset, int length)
-+{
-+  if (debug)
-+    printf ("[%d]", sector);
-+
-+  /* ReiserFS has files which sometimes contain data not aligned
-+     on sector boundaries.  Returning an error is better than
-+     silently failing. */
-+  if (offset != 0 || length != SECTOR_SIZE)
-+    errnum = ERR_UNALIGNED;
-+
-+  install_func_context.saved_sector = sector;
-+}
-+
-+/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and  INSTALLSECT.  */
-+/* Formerly disk_read_blocklist_func with local scope inside install_func */
-+static void
-+install_blocklist_helper (int sector, int offset, int length)
-+{
-+  int *installaddr = &install_func_context.installaddr;
-+  int *installlist = &install_func_context.installlist;
-+  char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
-+  /* Was the last sector full? */
-+  static int last_length = SECTOR_SIZE;
-+
-+  if (debug)
-+    printf("[%d]", sector);
-+
-+  if (offset != 0 || last_length != SECTOR_SIZE)
-+    {
-+      /* We found a non-sector-aligned data block. */
-+      errnum = ERR_UNALIGNED;
-+      return;
-+    }
-+
-+  last_length = length;
-+
-+  if (*((unsigned long *) (*installlist - 4))
-+      + *((unsigned short *) *installlist) != sector
-+      || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4)
-+    {
-+      *installlist -= 8;
-+
-+      if (*((unsigned long *) (*installlist - 8)))
-+        errnum = ERR_WONT_FIT;
-+      else
-+        {
-+          *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4);
-+          *((unsigned long *) (*installlist - 4)) = sector;
-+        }
-+    }
-+
-+  *((unsigned short *) *installlist) += 1;
-+  *installaddr += 512;
-+}
-+
- static int
- install_func (char *arg, int flags)
- {
-@@ -1747,8 +1986,12 @@
-   char *stage1_buffer = (char *) RAW_ADDR (0x100000);
-   char *stage2_buffer = stage1_buffer + SECTOR_SIZE;
-   char *old_sect = stage2_buffer + SECTOR_SIZE;
--  char *stage2_first_buffer = old_sect + SECTOR_SIZE;
--  char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE;
-+  /* stage2_first_buffer used to be defined as:
-+   * char *stage2_first_buffer = old_sect + SECTOR_SIZE;  */
-+  char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
-+  /* and stage2_second_buffer was:
-+   * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */
-+  char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE;
-   /* XXX: Probably SECTOR_SIZE is reasonable.  */
-   char *config_filename = stage2_second_buffer + SECTOR_SIZE;
-   char *dummy = config_filename + SECTOR_SIZE;
-@@ -1757,10 +2000,11 @@
-   int src_drive, src_partition, src_part_start;
-   int i;
-   struct geometry dest_geom, src_geom;
--  int saved_sector;
-+  int *saved_sector = &install_func_context.saved_sector;
-   int stage2_first_sector, stage2_second_sector;
-   char *ptr;
--  int installaddr, installlist;
-+  int *installaddr = &install_func_context.installaddr;
-+  int *installlist = &install_func_context.installlist;
-   /* Point to the location of the name of a configuration file in Stage 2.  */
-   char *config_file_location;
-   /* If FILE is a Stage 1.5?  */
-@@ -1769,67 +2013,13 @@
-   int is_open = 0;
-   /* If LBA is forced?  */
-   int is_force_lba = 0;
--  /* Was the last sector full? */
--  int last_length = SECTOR_SIZE;
--  
-+
-+  *stage2_first_buffer = old_sect + SECTOR_SIZE;
- #ifdef GRUB_UTIL
-   /* If the Stage 2 is in a partition mounted by an OS, this will store
-      the filename under the OS.  */
-   char *stage2_os_file = 0;
- #endif /* GRUB_UTIL */
--  
--  auto void disk_read_savesect_func (int sector, int offset, int length);
--  auto void disk_read_blocklist_func (int sector, int offset, int length);
--  
--  /* Save the first sector of Stage2 in STAGE2_SECT.  */
--  auto void disk_read_savesect_func (int sector, int offset, int length)
--    {
--      if (debug)
--      printf ("[%d]", sector);
--
--      /* ReiserFS has files which sometimes contain data not aligned
--         on sector boundaries.  Returning an error is better than
--         silently failing. */
--      if (offset != 0 || length != SECTOR_SIZE)
--      errnum = ERR_UNALIGNED;
--
--      saved_sector = sector;
--    }
--
--  /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and
--     INSTALLSECT.  */
--  auto void disk_read_blocklist_func (int sector, int offset, int length)
--    {
--      if (debug)
--      printf("[%d]", sector);
--
--      if (offset != 0 || last_length != SECTOR_SIZE)
--      {
--        /* We found a non-sector-aligned data block. */
--        errnum = ERR_UNALIGNED;
--        return;
--      }
--
--      last_length = length;
--
--      if (*((unsigned long *) (installlist - 4))
--        + *((unsigned short *) installlist) != sector
--        || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4)
--      {
--        installlist -= 8;
--
--        if (*((unsigned long *) (installlist - 8)))
--          errnum = ERR_WONT_FIT;
--        else
--          {
--            *((unsigned short *) (installlist + 2)) = (installaddr >> 4);
--            *((unsigned long *) (installlist - 4)) = sector;
--          }
--      }
--
--      *((unsigned short *) installlist) += 1;
--      installaddr += 512;
--    }
-   /* First, check the GNU-style long option.  */
-   while (1)
-@@ -1862,10 +2052,10 @@
-   addr = skip_to (0, file);
-   /* Get the installation address.  */
--  if (! safe_parse_maxint (&addr, &installaddr))
-+  if (! safe_parse_maxint (&addr, installaddr))
-     {
-       /* ADDR is not specified.  */
--      installaddr = 0;
-+      *installaddr = 0;
-       ptr = addr;
-       errnum = 0;
-     }
-@@ -1961,17 +2151,17 @@
-       = 0x9090;
-   
-   /* Read the first sector of Stage 2.  */
--  disk_read_hook = disk_read_savesect_func;
--  if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-+  disk_read_hook = install_savesect_helper;
-+  if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-     goto fail;
--  stage2_first_sector = saved_sector;
-+  stage2_first_sector = *saved_sector;
-   
-   /* Read the second sector of Stage 2.  */
-   if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-     goto fail;
--  stage2_second_sector = saved_sector;
-+  stage2_second_sector = *saved_sector;
-   
-   /* Check for the version of Stage 2.  */
-   if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS))
-@@ -1987,27 +2177,27 @@
-   /* If INSTALLADDR is not specified explicitly in the command-line,
-      determine it by the Stage 2 id.  */
--  if (! installaddr)
-+  if (! *installaddr)
-     {
-       if (! is_stage1_5)
-       /* Stage 2.  */
--      installaddr = 0x8000;
-+      *installaddr = 0x8000;
-       else
-       /* Stage 1.5.  */
--      installaddr = 0x2000;
-+      *installaddr = 0x2000;
-     }
-   *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR))
-     = stage2_first_sector;
-   *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS))
--    = installaddr;
-+    = *installaddr;
-   *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT))
--    = installaddr >> 4;
-+    = *installaddr >> 4;
--  i = (int) stage2_first_buffer + SECTOR_SIZE - 4;
-+  i = (int) *stage2_first_buffer + SECTOR_SIZE - 4;
-   while (*((unsigned long *) i))
-     {
--      if (i < (int) stage2_first_buffer
-+      if (i < (int) *stage2_first_buffer
-         || (*((int *) (i - 4)) & 0x80000000)
-         || *((unsigned short *) i) >= 0xA00
-         || *((short *) (i + 2)) == 0)
-@@ -2021,13 +2211,13 @@
-       i -= 8;
-     }
--  installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4;
--  installaddr += SECTOR_SIZE;
-+  *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4;
-+  *installaddr += SECTOR_SIZE;
-   
-   /* Read the whole of Stage2 except for the first sector.  */
-   grub_seek (SECTOR_SIZE);
--  disk_read_hook = disk_read_blocklist_func;
-+  disk_read_hook = install_blocklist_helper;
-   if (! grub_read (dummy, -1))
-     goto fail;
-   
-@@ -2110,7 +2300,7 @@
-         /* Skip the first sector.  */
-         grub_seek (SECTOR_SIZE);
-         
--        disk_read_hook = disk_read_savesect_func;
-+        disk_read_hook = install_savesect_helper;
-         if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-           goto fail;
-         
-@@ -2180,7 +2370,7 @@
-         else
- #endif /* GRUB_UTIL */
-           {
--            if (! devwrite (saved_sector - part_start, 1, stage2_buffer))
-+            if (! devwrite (*saved_sector - part_start, 1, stage2_buffer))
-               goto fail;
-           }
-       }
-@@ -2202,7 +2392,7 @@
-         goto fail;
-       }
--      if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
-+      if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
-       {
-         fclose (fp);
-         errnum = ERR_WRITE;
-@@ -2229,7 +2419,7 @@
-       goto fail;
-       if (! devwrite (stage2_first_sector - src_part_start, 1,
--                    stage2_first_buffer))
-+                    *stage2_first_buffer))
-       goto fail;
-       if (! devwrite (stage2_second_sector - src_part_start, 1,
-@@ -2815,8 +3005,8 @@
- {
-   int new_type;
-   unsigned long part = 0xFFFFFF;
--  unsigned long start, len, offset, ext_offset;
--  int entry, type;
-+  unsigned long start, len, offset, ext_offset, gpt_offset;
-+  int entry, type, gpt_count, gpt_size;
-   char mbr[512];
-   /* Get the drive and the partition.  */
-@@ -2853,8 +3043,15 @@
-   /* Look for the partition.  */
-   while (next_partition (current_drive, 0xFFFFFF, &part, &type,
-                        &start, &len, &offset, &entry,
--                       &ext_offset, mbr))
-+                       &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
-     {
-+        /* The partition may not be a GPT partition.  */
-+        if (gpt_offset != 0)
-+          {
-+              errnum = ERR_BAD_ARGUMENT;
-+              return 1;
-+          }
-+
-       if (part == current_partition)
-       {
-         /* Found.  */
-@@ -3830,15 +4027,15 @@
-       {
-         char tmp[16];
-         grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF);
--        grub_strncat (device, tmp, 256);
-+        grub_strncat (device, tmp, sizeof (device));
-       }
-       if ((partition & 0x00FF00) != 0x00FF00)
-       {
-         char tmp[16];
-         grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF));
--        grub_strncat (device, tmp, 256);
-+        grub_strncat (device, tmp, sizeof (device));
-       }
--      grub_strncat (device, ")", 256);
-+      grub_strncat (device, ")", sizeof (device));
-     }
-   
-   int embed_stage1_5 (char *stage1_5, int drive, int partition)
-@@ -4085,7 +4282,7 @@
- };
\f
--#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
-+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS)
- /* terminal */
- static int
- terminal_func (char *arg, int flags)
-@@ -4244,17 +4441,21 @@
-  end:
-   current_term = term_table + default_term;
-   current_term->flags = term_flags;
--  
-+
-   if (lines)
-     max_lines = lines;
-   else
--    /* 24 would be a good default value.  */
--    max_lines = 24;
--  
-+    max_lines = current_term->max_lines;
-+
-   /* If the interface is currently the command-line,
-      restart it to repaint the screen.  */
--  if (current_term != prev_term && (flags & BUILTIN_CMDLINE))
-+  if ((current_term != prev_term) && (flags & BUILTIN_CMDLINE)){
-+    if (prev_term->shutdown)
-+      prev_term->shutdown();
-+    if (current_term->startup)
-+      current_term->startup();
-     grub_longjmp (restart_cmdline_env, 0);
-+  }
-   
-   return 0;
- }
-@@ -4264,7 +4465,7 @@
-   "terminal",
-   terminal_func,
-   BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
--  "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]",
-+  "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]",
-   "Select a terminal. When multiple terminals are specified, wait until"
-   " you push any key to continue. If both console and serial are specified,"
-   " the terminal to which you input a key first will be selected. If no"
-@@ -4276,7 +4477,7 @@
-   " seconds. The option --lines specifies the maximum number of lines."
-   " The option --silent is used to suppress messages."
- };
--#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
-+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */
\f
- #ifdef SUPPORT_SERIAL
-@@ -4795,6 +4996,9 @@
- /* The table of builtin commands. Sorted in dictionary order.  */
- struct builtin *builtin_table[] =
- {
-+#ifdef SUPPORT_GRAPHICS
-+  &builtin_background,
-+#endif
-   &builtin_blocklist,
-   &builtin_boot,
- #ifdef SUPPORT_NETBOOT
-@@ -4802,6 +5006,7 @@
- #endif /* SUPPORT_NETBOOT */
-   &builtin_cat,
-   &builtin_chainloader,
-+  &builtin_clear,
-   &builtin_cmp,
-   &builtin_color,
-   &builtin_configfile,
-@@ -4821,6 +5026,9 @@
-   &builtin_embed,
-   &builtin_fallback,
-   &builtin_find,
-+#ifdef SUPPORT_GRAPHICS
-+  &builtin_foreground,
-+#endif
-   &builtin_fstest,
-   &builtin_geometry,
-   &builtin_halt,
-@@ -4864,9 +5072,12 @@
- #endif /* SUPPORT_SERIAL */
-   &builtin_setkey,
-   &builtin_setup,
--#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
-+#ifdef SUPPORT_GRAPHICS
-+  &builtin_splashimage,
-+#endif /* SUPPORT_GRAPHICS */
-+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS)
-   &builtin_terminal,
--#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
-+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */
- #ifdef SUPPORT_SERIAL
-   &builtin_terminfo,
- #endif /* SUPPORT_SERIAL */
-diff -Nur grub-0.97/stage2/builtins.c.orig grub-0.97-patched/stage2/builtins.c.orig
---- grub-0.97/stage2/builtins.c.orig   1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/stage2/builtins.c.orig   2005-02-15 22:58:23.000000000 +0100
-@@ -0,0 +1,4884 @@
-+/* builtins.c - the GRUB builtin commands */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 1999,2000,2001,2002,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 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.
-+ */
-+
-+/* Include stdio.h before shared.h, because we can't define
-+   WITHOUT_LIBC_STUBS here.  */
-+#ifdef GRUB_UTIL
-+# include <stdio.h>
-+#endif
-+
-+#include <shared.h>
-+#include <filesys.h>
-+#include <term.h>
-+
-+#ifdef SUPPORT_NETBOOT
-+# define GRUB 1
-+# include <etherboot.h>
-+#endif
-+
-+#ifdef SUPPORT_SERIAL
-+# include <serial.h>
-+# include <terminfo.h>
-+#endif
-+
-+#ifdef GRUB_UTIL
-+# include <device.h>
-+#else /* ! GRUB_UTIL */
-+# include <apic.h>
-+# include <smp-imps.h>
-+#endif /* ! GRUB_UTIL */
-+
-+#ifdef USE_MD5_PASSWORDS
-+# include <md5.h>
-+#endif
-+
-+/* The type of kernel loaded.  */
-+kernel_t kernel_type;
-+/* The boot device.  */
-+static int bootdev;
-+/* True when the debug mode is turned on, and false
-+   when it is turned off.  */
-+int debug = 0;
-+/* The default entry.  */
-+int default_entry = 0;
-+/* The fallback entry.  */
-+int fallback_entryno;
-+int fallback_entries[MAX_FALLBACK_ENTRIES];
-+/* The number of current entry.  */
-+int current_entryno;
-+/* The address for Multiboot command-line buffer.  */
-+static char *mb_cmdline;
-+/* The password.  */
-+char *password;
-+/* The password type.  */
-+password_t password_type;
-+/* The flag for indicating that the user is authoritative.  */
-+int auth = 0;
-+/* The timeout.  */
-+int grub_timeout = -1;
-+/* Whether to show the menu or not.  */
-+int show_menu = 1;
-+/* The BIOS drive map.  */
-+static unsigned short bios_drive_map[DRIVE_MAP_SIZE + 1];
-+
-+/* Prototypes for allowing straightfoward calling of builtins functions
-+   inside other functions.  */
-+static int configfile_func (char *arg, int flags);
-+
-+/* Initialize the data for builtins.  */
-+void
-+init_builtins (void)
-+{
-+  kernel_type = KERNEL_TYPE_NONE;
-+  /* BSD and chainloading evil hacks!  */
-+  bootdev = set_bootdev (0);
-+  mb_cmdline = (char *) MB_CMDLINE_BUF;
-+}
-+
-+/* Initialize the data for the configuration file.  */
-+void
-+init_config (void)
-+{
-+  default_entry = 0;
-+  password = 0;
-+  fallback_entryno = -1;
-+  fallback_entries[0] = -1;
-+  grub_timeout = -1;
-+}
-+
-+/* Check a password for correctness.  Returns 0 if password was
-+   correct, and a value != 0 for error, similarly to strcmp. */
-+int
-+check_password (char *entered, char* expected, password_t type)
-+{
-+  switch (type)
-+    {
-+    case PASSWORD_PLAIN:
-+      return strcmp (entered, expected);
-+
-+#ifdef USE_MD5_PASSWORDS
-+    case PASSWORD_MD5:
-+      return check_md5_password (entered, expected);
-+#endif
-+    default: 
-+      /* unsupported password type: be secure */
-+      return 1;
-+    }
-+}
-+
-+/* Print which sector is read when loading a file.  */
-+static void
-+disk_read_print_func (int sector, int offset, int length)
-+{
-+  grub_printf ("[%d,%d,%d]", sector, offset, length);
-+}
-+
-+\f
-+/* blocklist */
-+static int
-+blocklist_func (char *arg, int flags)
-+{
-+  char *dummy = (char *) RAW_ADDR (0x100000);
-+  int start_sector;
-+  int num_sectors = 0;
-+  int num_entries = 0;
-+  int last_length = 0;
-+
-+  auto void disk_read_blocklist_func (int sector, int offset, int length);
-+  
-+  /* Collect contiguous blocks into one entry as many as possible,
-+     and print the blocklist notation on the screen.  */
-+  auto void disk_read_blocklist_func (int sector, int offset, int length)
-+    {
-+      if (num_sectors > 0)
-+      {
-+        if (start_sector + num_sectors == sector
-+            && offset == 0 && last_length == SECTOR_SIZE)
-+          {
-+            num_sectors++;
-+            last_length = length;
-+            return;
-+          }
-+        else
-+          {
-+            if (last_length == SECTOR_SIZE)
-+              grub_printf ("%s%d+%d", num_entries ? "," : "",
-+                           start_sector - part_start, num_sectors);
-+            else if (num_sectors > 1)
-+              grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "",
-+                           start_sector - part_start, num_sectors-1,
-+                           start_sector + num_sectors-1 - part_start, 
-+                           last_length);
-+            else
-+              grub_printf ("%s%d[0-%d]", num_entries ? "," : "",
-+                           start_sector - part_start, last_length);
-+            num_entries++;
-+            num_sectors = 0;
-+          }
-+      }
-+
-+      if (offset > 0)
-+      {
-+        grub_printf("%s%d[%d-%d]", num_entries ? "," : "",
-+                    sector-part_start, offset, offset+length);
-+        num_entries++;
-+      }
-+      else
-+      {
-+        start_sector = sector;
-+        num_sectors = 1;
-+        last_length = length;
-+      }
-+    }
-+
-+  /* Open the file.  */
-+  if (! grub_open (arg))
-+    return 1;
-+
-+  /* Print the device name.  */
-+  grub_printf ("(%cd%d",
-+             (current_drive & 0x80) ? 'h' : 'f',
-+             current_drive & ~0x80);
-+  
-+  if ((current_partition & 0xFF0000) != 0xFF0000)
-+    grub_printf (",%d", (current_partition >> 16) & 0xFF);
-+  
-+  if ((current_partition & 0x00FF00) != 0x00FF00)
-+    grub_printf (",%c", 'a' + ((current_partition >> 8) & 0xFF));
-+  
-+  grub_printf (")");
-+
-+  /* Read in the whole file to DUMMY.  */
-+  disk_read_hook = disk_read_blocklist_func;
-+  if (! grub_read (dummy, -1))
-+    goto fail;
-+
-+  /* The last entry may not be printed yet.  Don't check if it is a
-+   * full sector, since it doesn't matter if we read too much. */
-+  if (num_sectors > 0)
-+    grub_printf ("%s%d+%d", num_entries ? "," : "",
-+               start_sector - part_start, num_sectors);
-+
-+  grub_printf ("\n");
-+  
-+ fail:
-+  disk_read_hook = 0;
-+  grub_close ();
-+  return errnum;
-+}
-+
-+static struct builtin builtin_blocklist =
-+{
-+  "blocklist",
-+  blocklist_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "blocklist FILE",
-+  "Print the blocklist notation of the file FILE."
-+};
-+
-+/* boot */
-+static int
-+boot_func (char *arg, int flags)
-+{
-+  /* Clear the int15 handler if we can boot the kernel successfully.
-+     This assumes that the boot code never fails only if KERNEL_TYPE is
-+     not KERNEL_TYPE_NONE. Is this assumption is bad?  */
-+  if (kernel_type != KERNEL_TYPE_NONE)
-+    unset_int15_handler ();
-+
-+#ifdef SUPPORT_NETBOOT
-+  /* Shut down the networking.  */
-+  cleanup_net ();
-+#endif
-+  
-+  switch (kernel_type)
-+    {
-+    case KERNEL_TYPE_FREEBSD:
-+    case KERNEL_TYPE_NETBSD:
-+      /* *BSD */
-+      bsd_boot (kernel_type, bootdev, (char *) mbi.cmdline);
-+      break;
-+
-+    case KERNEL_TYPE_LINUX:
-+      /* Linux */
-+      linux_boot ();
-+      break;
-+
-+    case KERNEL_TYPE_BIG_LINUX:
-+      /* Big Linux */
-+      big_linux_boot ();
-+      break;
-+
-+    case KERNEL_TYPE_CHAINLOADER:
-+      /* Chainloader */
-+      
-+      /* Check if we should set the int13 handler.  */
-+      if (bios_drive_map[0] != 0)
-+      {
-+        int i;
-+        
-+        /* Search for SAVED_DRIVE.  */
-+        for (i = 0; i < DRIVE_MAP_SIZE; i++)
-+          {
-+            if (! bios_drive_map[i])
-+              break;
-+            else if ((bios_drive_map[i] & 0xFF) == saved_drive)
-+              {
-+                /* Exchage SAVED_DRIVE with the mapped drive.  */
-+                saved_drive = (bios_drive_map[i] >> 8) & 0xFF;
-+                break;
-+              }
-+          }
-+        
-+        /* Set the handler. This is somewhat dangerous.  */
-+        set_int13_handler (bios_drive_map);
-+      }
-+      
-+      gateA20 (0);
-+      boot_drive = saved_drive;
-+      chain_stage1 (0, BOOTSEC_LOCATION, boot_part_addr);
-+      break;
-+
-+    case KERNEL_TYPE_MULTIBOOT:
-+      /* Multiboot */
-+      multi_boot ((int) entry_addr, (int) &mbi);
-+      break;
-+
-+    default:
-+      errnum = ERR_BOOT_COMMAND;
-+      return 1;
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_boot =
-+{
-+  "boot",
-+  boot_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "boot",
-+  "Boot the OS/chain-loader which has been loaded."
-+};
-+
-+\f
-+#ifdef SUPPORT_NETBOOT
-+/* bootp */
-+static int
-+bootp_func (char *arg, int flags)
-+{
-+  int with_configfile = 0;
-+
-+  if (grub_memcmp (arg, "--with-configfile", sizeof ("--with-configfile") - 1)
-+      == 0)
-+    {
-+      with_configfile = 1;
-+      arg = skip_to (0, arg);
-+    }
-+  
-+  if (! bootp ())
-+    {
-+      if (errnum == ERR_NONE)
-+      errnum = ERR_DEV_VALUES;
-+
-+      return 1;
-+    }
-+
-+  /* Notify the configuration.  */
-+  print_network_configuration ();
-+
-+  /* XXX: this can cause an endless loop, but there is no easy way to
-+     detect such a loop unfortunately.  */
-+  if (with_configfile)
-+    configfile_func (config_file, flags);
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_bootp =
-+{
-+  "bootp",
-+  bootp_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "bootp [--with-configfile]",
-+  "Initialize a network device via BOOTP. If the option `--with-configfile'"
-+  " is given, try to load a configuration file specified by the 150 vendor"
-+  " tag."
-+};
-+#endif /* SUPPORT_NETBOOT */
-+
-+\f
-+/* cat */
-+static int
-+cat_func (char *arg, int flags)
-+{
-+  char c;
-+
-+  if (! grub_open (arg))
-+    return 1;
-+
-+  while (grub_read (&c, 1))
-+    {
-+      /* Because running "cat" with a binary file can confuse the terminal,
-+       print only some characters as they are.  */
-+      if (grub_isspace (c) || (c >= ' ' && c <= '~'))
-+      grub_putchar (c);
-+      else
-+      grub_putchar ('?');
-+    }
-+  
-+  grub_close ();
-+  return 0;
-+}
-+
-+static struct builtin builtin_cat =
-+{
-+  "cat",
-+  cat_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "cat FILE",
-+  "Print the contents of the file FILE."
-+};
-+
-+\f
-+/* chainloader */
-+static int
-+chainloader_func (char *arg, int flags)
-+{
-+  int force = 0;
-+  char *file = arg;
-+
-+  /* If the option `--force' is specified?  */
-+  if (substring ("--force", arg) <= 0)
-+    {
-+      force = 1;
-+      file = skip_to (0, arg);
-+    }
-+
-+  /* Open the file.  */
-+  if (! grub_open (file))
-+    {
-+      kernel_type = KERNEL_TYPE_NONE;
-+      return 1;
-+    }
-+
-+  /* Read the first block.  */
-+  if (grub_read ((char *) BOOTSEC_LOCATION, SECTOR_SIZE) != SECTOR_SIZE)
-+    {
-+      grub_close ();
-+      kernel_type = KERNEL_TYPE_NONE;
-+
-+      /* This below happens, if a file whose size is less than 512 bytes
-+       is loaded.  */
-+      if (errnum == ERR_NONE)
-+      errnum = ERR_EXEC_FORMAT;
-+      
-+      return 1;
-+    }
-+
-+  /* If not loading it forcibly, check for the signature.  */
-+  if (! force
-+      && (*((unsigned short *) (BOOTSEC_LOCATION + BOOTSEC_SIG_OFFSET))
-+        != BOOTSEC_SIGNATURE))
-+    {
-+      grub_close ();
-+      errnum = ERR_EXEC_FORMAT;
-+      kernel_type = KERNEL_TYPE_NONE;
-+      return 1;
-+    }
-+
-+  grub_close ();
-+  kernel_type = KERNEL_TYPE_CHAINLOADER;
-+
-+  /* XXX: Windows evil hack. For now, only the first five letters are
-+     checked.  */
-+  if (IS_PC_SLICE_TYPE_FAT (current_slice)
-+      && ! grub_memcmp ((char *) BOOTSEC_LOCATION + BOOTSEC_BPB_SYSTEM_ID,
-+                      "MSWIN", 5))
-+    *((unsigned long *) (BOOTSEC_LOCATION + BOOTSEC_BPB_HIDDEN_SECTORS))
-+      = part_start;
-+
-+  errnum = ERR_NONE;
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_chainloader =
-+{
-+  "chainloader",
-+  chainloader_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "chainloader [--force] FILE",
-+  "Load the chain-loader FILE. If --force is specified, then load it"
-+  " forcibly, whether the boot loader signature is present or not."
-+};
-+
-+\f
-+/* This function could be used to debug new filesystem code. Put a file
-+   in the new filesystem and the same file in a well-tested filesystem.
-+   Then, run "cmp" with the files. If no output is obtained, probably
-+   the code is good, otherwise investigate what's wrong...  */
-+/* cmp FILE1 FILE2 */
-+static int
-+cmp_func (char *arg, int flags)
-+{
-+  /* The filenames.  */
-+  char *file1, *file2;
-+  /* The addresses.  */
-+  char *addr1, *addr2;
-+  int i;
-+  /* The size of the file.  */
-+  int size;
-+
-+  /* Get the filenames from ARG.  */
-+  file1 = arg;
-+  file2 = skip_to (0, arg);
-+  if (! *file1 || ! *file2)
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  /* Terminate the filenames for convenience.  */
-+  nul_terminate (file1);
-+  nul_terminate (file2);
-+
-+  /* Read the whole data from FILE1.  */
-+  addr1 = (char *) RAW_ADDR (0x100000);
-+  if (! grub_open (file1))
-+    return 1;
-+  
-+  /* Get the size.  */
-+  size = filemax;
-+  if (grub_read (addr1, -1) != size)
-+    {
-+      grub_close ();
-+      return 1;
-+    }
-+  
-+  grub_close ();
-+
-+  /* Read the whole data from FILE2.  */
-+  addr2 = addr1 + size;
-+  if (! grub_open (file2))
-+    return 1;
-+
-+  /* Check if the size of FILE2 is equal to the one of FILE2.  */
-+  if (size != filemax)
-+    {
-+      grub_printf ("Differ in size: 0x%x [%s], 0x%x [%s]\n",
-+                 size, file1, filemax, file2);
-+      grub_close ();
-+      return 0;
-+    }
-+  
-+  if (! grub_read (addr2, -1))
-+    {
-+      grub_close ();
-+      return 1;
-+    }
-+  
-+  grub_close ();
-+
-+  /* Now compare ADDR1 with ADDR2.  */
-+  for (i = 0; i < size; i++)
-+    {
-+      if (addr1[i] != addr2[i])
-+      grub_printf ("Differ at the offset %d: 0x%x [%s], 0x%x [%s]\n",
-+                   i, (unsigned) addr1[i], file1,
-+                   (unsigned) addr2[i], file2);
-+    }
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_cmp =
-+{
-+  "cmp",
-+  cmp_func,
-+  BUILTIN_CMDLINE,
-+  "cmp FILE1 FILE2",
-+  "Compare the file FILE1 with the FILE2 and inform the different values"
-+  " if any."
-+};
-+
-+\f
-+/* color */
-+/* Set new colors used for the menu interface. Support two methods to
-+   specify a color name: a direct integer representation and a symbolic
-+   color name. An example of the latter is "blink-light-gray/blue".  */
-+static int
-+color_func (char *arg, int flags)
-+{
-+  char *normal;
-+  char *highlight;
-+  int new_normal_color;
-+  int new_highlight_color;
-+  static char *color_list[16] =
-+  {
-+    "black",
-+    "blue",
-+    "green",
-+    "cyan",
-+    "red",
-+    "magenta",
-+    "brown",
-+    "light-gray",
-+    "dark-gray",
-+    "light-blue",
-+    "light-green",
-+    "light-cyan",
-+    "light-red",
-+    "light-magenta",
-+    "yellow",
-+    "white"
-+  };
-+
-+  auto int color_number (char *str);
-+  
-+  /* Convert the color name STR into the magical number.  */
-+  auto int color_number (char *str)
-+    {
-+      char *ptr;
-+      int i;
-+      int color = 0;
-+      
-+      /* Find the separator.  */
-+      for (ptr = str; *ptr && *ptr != '/'; ptr++)
-+      ;
-+
-+      /* If not found, return -1.  */
-+      if (! *ptr)
-+      return -1;
-+
-+      /* Terminate the string STR.  */
-+      *ptr++ = 0;
-+
-+      /* If STR contains the prefix "blink-", then set the `blink' bit
-+       in COLOR.  */
-+      if (substring ("blink-", str) <= 0)
-+      {
-+        color = 0x80;
-+        str += 6;
-+      }
-+      
-+      /* Search for the color name.  */
-+      for (i = 0; i < 16; i++)
-+      if (grub_strcmp (color_list[i], str) == 0)
-+        {
-+          color |= i;
-+          break;
-+        }
-+
-+      if (i == 16)
-+      return -1;
-+
-+      str = ptr;
-+      nul_terminate (str);
-+
-+      /* Search for the color name.  */      
-+      for (i = 0; i < 8; i++)
-+      if (grub_strcmp (color_list[i], str) == 0)
-+        {
-+          color |= i << 4;
-+          break;
-+        }
-+
-+      if (i == 8)
-+      return -1;
-+
-+      return color;
-+    }
-+      
-+  normal = arg;
-+  highlight = skip_to (0, arg);
-+
-+  new_normal_color = color_number (normal);
-+  if (new_normal_color < 0 && ! safe_parse_maxint (&normal, &new_normal_color))
-+    return 1;
-+  
-+  /* The second argument is optional, so set highlight_color
-+     to inverted NORMAL_COLOR.  */
-+  if (! *highlight)
-+    new_highlight_color = ((new_normal_color >> 4)
-+                         | ((new_normal_color & 0xf) << 4));
-+  else
-+    {
-+      new_highlight_color = color_number (highlight);
-+      if (new_highlight_color < 0
-+        && ! safe_parse_maxint (&highlight, &new_highlight_color))
-+      return 1;
-+    }
-+
-+  if (current_term->setcolor)
-+    current_term->setcolor (new_normal_color, new_highlight_color);
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_color =
-+{
-+  "color",
-+  color_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "color NORMAL [HIGHLIGHT]",
-+  "Change the menu colors. The color NORMAL is used for most"
-+  " lines in the menu, and the color HIGHLIGHT is used to highlight the"
-+  " line where the cursor points. If you omit HIGHLIGHT, then the"
-+  " inverted color of NORMAL is used for the highlighted line."
-+  " The format of a color is \"FG/BG\". FG and BG are symbolic color names."
-+  " A symbolic color name must be one of these: black, blue, green,"
-+  " cyan, red, magenta, brown, light-gray, dark-gray, light-blue,"
-+  " light-green, light-cyan, light-red, light-magenta, yellow and white."
-+  " But only the first eight names can be used for BG. You can prefix"
-+  " \"blink-\" to FG if you want a blinking foreground color."
-+};
-+
-+\f
-+/* configfile */
-+static int
-+configfile_func (char *arg, int flags)
-+{
-+  char *new_config = config_file;
-+
-+  /* Check if the file ARG is present.  */
-+  if (! grub_open (arg))
-+    return 1;
-+
-+  grub_close ();
-+  
-+  /* Copy ARG to CONFIG_FILE.  */
-+  while ((*new_config++ = *arg++) != 0)
-+    ;
-+
-+#ifdef GRUB_UTIL
-+  /* Force to load the configuration file.  */
-+  use_config_file = 1;
-+#endif
-+
-+  /* Make sure that the user will not be authoritative.  */
-+  auth = 0;
-+  
-+  /* Restart cmain.  */
-+  grub_longjmp (restart_env, 0);
-+
-+  /* Never reach here.  */
-+  return 0;
-+}
-+
-+static struct builtin builtin_configfile =
-+{
-+  "configfile",
-+  configfile_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "configfile FILE",
-+  "Load FILE as the configuration file."
-+};
-+
-+\f
-+/* debug */
-+static int
-+debug_func (char *arg, int flags)
-+{
-+  if (debug)
-+    {
-+      debug = 0;
-+      grub_printf (" Debug mode is turned off\n");
-+    }
-+  else
-+    {
-+      debug = 1;
-+      grub_printf (" Debug mode is turned on\n");
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_debug =
-+{
-+  "debug",
-+  debug_func,
-+  BUILTIN_CMDLINE,
-+  "debug",
-+  "Turn on/off the debug mode."
-+};
-+
-+\f
-+/* default */
-+static int
-+default_func (char *arg, int flags)
-+{
-+#ifndef SUPPORT_DISKLESS
-+  if (grub_strcmp (arg, "saved") == 0)
-+    {
-+      default_entry = saved_entryno;
-+      return 0;
-+    }
-+#endif /* SUPPORT_DISKLESS */
-+  
-+  if (! safe_parse_maxint (&arg, &default_entry))
-+    return 1;
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_default =
-+{
-+  "default",
-+  default_func,
-+  BUILTIN_MENU,
-+#if 0
-+  "default [NUM | `saved']",
-+  "Set the default entry to entry number NUM (if not specified, it is"
-+  " 0, the first entry) or the entry number saved by savedefault."
-+#endif
-+};
-+
-+\f
-+#ifdef GRUB_UTIL
-+/* device */
-+static int
-+device_func (char *arg, int flags)
-+{
-+  char *drive = arg;
-+  char *device;
-+
-+  /* Get the drive number from DRIVE.  */
-+  if (! set_device (drive))
-+    return 1;
-+
-+  /* Get the device argument.  */
-+  device = skip_to (0, drive);
-+  
-+  /* Terminate DEVICE.  */
-+  nul_terminate (device);
-+
-+  if (! *device || ! check_device (device))
-+    {
-+      errnum = ERR_FILE_NOT_FOUND;
-+      return 1;
-+    }
-+
-+  assign_device_name (current_drive, device);
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_device =
-+{
-+  "device",
-+  device_func,
-+  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "device DRIVE DEVICE",
-+  "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command"
-+  " can be used only in the grub shell."
-+};
-+#endif /* GRUB_UTIL */
-+
-+\f
-+#ifdef SUPPORT_NETBOOT
-+/* dhcp */
-+static int
-+dhcp_func (char *arg, int flags)
-+{
-+  /* For now, this is an alias for bootp.  */
-+  return bootp_func (arg, flags);
-+}
-+
-+static struct builtin builtin_dhcp =
-+{
-+  "dhcp",
-+  dhcp_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "dhcp",
-+  "Initialize a network device via DHCP."
-+};
-+#endif /* SUPPORT_NETBOOT */
-+
-+\f
-+/* displayapm */
-+static int
-+displayapm_func (char *arg, int flags)
-+{
-+  if (mbi.flags & MB_INFO_APM_TABLE)
-+    {
-+      grub_printf ("APM BIOS information:\n"
-+                 " Version:          0x%x\n"
-+                 " 32-bit CS:        0x%x\n"
-+                 " Offset:           0x%x\n"
-+                 " 16-bit CS:        0x%x\n"
-+                 " 16-bit DS:        0x%x\n"
-+                 " 32-bit CS length: 0x%x\n"
-+                 " 16-bit CS length: 0x%x\n"
-+                 " 16-bit DS length: 0x%x\n",
-+                 (unsigned) apm_bios_info.version,
-+                 (unsigned) apm_bios_info.cseg,
-+                 apm_bios_info.offset,
-+                 (unsigned) apm_bios_info.cseg_16,
-+                 (unsigned) apm_bios_info.dseg_16,
-+                 (unsigned) apm_bios_info.cseg_len,
-+                 (unsigned) apm_bios_info.cseg_16_len,
-+                 (unsigned) apm_bios_info.dseg_16_len);
-+    }
-+  else
-+    {
-+      grub_printf ("No APM BIOS found or probe failed\n");
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_displayapm =
-+{
-+  "displayapm",
-+  displayapm_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "displayapm",
-+  "Display APM BIOS information."
-+};
-+
-+\f
-+/* displaymem */
-+static int
-+displaymem_func (char *arg, int flags)
-+{
-+  if (get_eisamemsize () != -1)
-+    grub_printf (" EISA Memory BIOS Interface is present\n");
-+  if (get_mmap_entry ((void *) SCRATCHADDR, 0) != 0
-+      || *((int *) SCRATCHADDR) != 0)
-+    grub_printf (" Address Map BIOS Interface is present\n");
-+
-+  grub_printf (" Lower memory: %uK, "
-+             "Upper memory (to first chipset hole): %uK\n",
-+             mbi.mem_lower, mbi.mem_upper);
-+
-+  if (mbi.flags & MB_INFO_MEM_MAP)
-+    {
-+      struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr;
-+      int end_addr = mbi.mmap_addr + mbi.mmap_length;
-+
-+      grub_printf (" [Address Range Descriptor entries "
-+                 "immediately follow (values are 64-bit)]\n");
-+      while (end_addr > (int) map)
-+      {
-+        char *str;
-+
-+        if (map->Type == MB_ARD_MEMORY)
-+          str = "Usable RAM";
-+        else
-+          str = "Reserved";
-+        grub_printf ("   %s:  Base Address:  0x%x X 4GB + 0x%x,\n"
-+                     "      Length:   0x%x X 4GB + 0x%x bytes\n",
-+                     str,
-+                     (unsigned long) (map->BaseAddr >> 32),
-+                     (unsigned long) (map->BaseAddr & 0xFFFFFFFF),
-+                     (unsigned long) (map->Length >> 32),
-+                     (unsigned long) (map->Length & 0xFFFFFFFF));
-+
-+        map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size));
-+      }
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_displaymem =
-+{
-+  "displaymem",
-+  displaymem_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "displaymem",
-+  "Display what GRUB thinks the system address space map of the"
-+  " machine is, including all regions of physical RAM installed."
-+};
-+
-+\f
-+/* dump FROM TO */
-+#ifdef GRUB_UTIL
-+static int
-+dump_func (char *arg, int flags)
-+{
-+  char *from, *to;
-+  FILE *fp;
-+  char c;
-+  
-+  from = arg;
-+  to = skip_to (0, arg);
-+  if (! *from || ! *to)
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  nul_terminate (from);
-+  nul_terminate (to);
-+  
-+  if (! grub_open (from))
-+    return 1;
-+
-+  fp = fopen (to, "w");
-+  if (! fp)
-+    {
-+      errnum = ERR_WRITE;
-+      return 1;
-+    }
-+
-+  while (grub_read (&c, 1))
-+    if (fputc (c, fp) == EOF)
-+      {
-+      errnum = ERR_WRITE;
-+      fclose (fp);
-+      return 1;
-+      }
-+
-+  if (fclose (fp) == EOF)
-+    {
-+      errnum = ERR_WRITE;
-+      return 1;
-+    }
-+
-+  grub_close ();
-+  return 0;
-+}
-+
-+static struct builtin builtin_dump =
-+  {
-+    "dump",
-+    dump_func,
-+    BUILTIN_CMDLINE,
-+    "dump FROM TO",
-+    "Dump the contents of the file FROM to the file TO. FROM must be"
-+    " a GRUB file and TO must be an OS file."
-+  };
-+#endif /* GRUB_UTIL */
-+
-+\f
-+static char embed_info[32];
-+/* embed */
-+/* Embed a Stage 1.5 in the first cylinder after MBR or in the
-+   bootloader block in a FFS.  */
-+static int
-+embed_func (char *arg, int flags)
-+{
-+  char *stage1_5;
-+  char *device;
-+  char *stage1_5_buffer = (char *) RAW_ADDR (0x100000);
-+  int len, size;
-+  int sector;
-+  
-+  stage1_5 = arg;
-+  device = skip_to (0, stage1_5);
-+
-+  /* Open a Stage 1.5.  */
-+  if (! grub_open (stage1_5))
-+    return 1;
-+
-+  /* Read the whole of the Stage 1.5.  */
-+  len = grub_read (stage1_5_buffer, -1);
-+  grub_close ();
-+  
-+  if (errnum)
-+    return 1;
-+  
-+  size = (len + SECTOR_SIZE - 1) / SECTOR_SIZE;
-+  
-+  /* Get the device where the Stage 1.5 will be embedded.  */
-+  set_device (device);
-+  if (errnum)
-+    return 1;
-+
-+  if (current_partition == 0xFFFFFF)
-+    {
-+      /* Embed it after the MBR.  */
-+      
-+      char mbr[SECTOR_SIZE];
-+      char ezbios_check[2*SECTOR_SIZE];
-+      int i;
-+      
-+      /* Open the partition.  */
-+      if (! open_partition ())
-+      return 1;
-+
-+      /* No floppy has MBR.  */
-+      if (! (current_drive & 0x80))
-+      {
-+        errnum = ERR_DEV_VALUES;
-+        return 1;
-+      }
-+      
-+      /* Read the MBR of CURRENT_DRIVE.  */
-+      if (! rawread (current_drive, PC_MBR_SECTOR, 0, SECTOR_SIZE, mbr))
-+      return 1;
-+      
-+      /* Sanity check.  */
-+      if (! PC_MBR_CHECK_SIG (mbr))
-+      {
-+        errnum = ERR_BAD_PART_TABLE;
-+        return 1;
-+      }
-+
-+      /* Check if the disk can store the Stage 1.5.  */
-+      for (i = 0; i < 4; i++)
-+      if (PC_SLICE_TYPE (mbr, i) && PC_SLICE_START (mbr, i) - 1 < size)
-+        {
-+          errnum = ERR_NO_DISK_SPACE;
-+          return 1;
-+        }
-+      
-+      /* Check for EZ-BIOS signature. It should be in the third
-+       * sector, but due to remapping it can appear in the second, so
-+       * load and check both.  
-+       */
-+      if (! rawread (current_drive, 1, 0, 2 * SECTOR_SIZE, ezbios_check))
-+      return 1;
-+
-+      if (! memcmp (ezbios_check + 3, "AERMH", 5)
-+        || ! memcmp (ezbios_check + 512 + 3, "AERMH", 5))
-+      {
-+        /* The space after the MBR is used by EZ-BIOS which we must 
-+         * not overwrite.
-+         */
-+        errnum = ERR_NO_DISK_SPACE;
-+        return 1;
-+      }
-+
-+      sector = 1;
-+    }
-+  else
-+    {
-+      /* Embed it in the bootloader block in the filesystem.  */
-+      int start_sector;
-+      
-+      /* Open the partition.  */
-+      if (! open_device ())
-+      return 1;
-+
-+      /* Check if the current slice supports embedding.  */
-+      if (fsys_table[fsys_type].embed_func == 0
-+        || ! fsys_table[fsys_type].embed_func (&start_sector, size))
-+      {
-+        errnum = ERR_DEV_VALUES;
-+        return 1;
-+      }
-+
-+      sector = part_start + start_sector;
-+    }
-+
-+  /* Clear the cache.  */
-+  buf_track = -1;
-+
-+  /* Now perform the embedding.  */
-+  if (! devwrite (sector - part_start, size, stage1_5_buffer))
-+    return 1;
-+  
-+  grub_printf (" %d sectors are embedded.\n", size);
-+  grub_sprintf (embed_info, "%d+%d", sector - part_start, size);
-+  return 0;
-+}
-+
-+static struct builtin builtin_embed =
-+{
-+  "embed",
-+  embed_func,
-+  BUILTIN_CMDLINE,
-+  "embed STAGE1_5 DEVICE",
-+  "Embed the Stage 1.5 STAGE1_5 in the sectors after MBR if DEVICE"
-+  " is a drive, or in the \"bootloader\" area if DEVICE is a FFS partition."
-+  " Print the number of sectors which STAGE1_5 occupies if successful."
-+};
-+
-+\f
-+/* fallback */
-+static int
-+fallback_func (char *arg, int flags)
-+{
-+  int i = 0;
-+
-+  while (*arg)
-+    {
-+      int entry;
-+      int j;
-+      
-+      if (! safe_parse_maxint (&arg, &entry))
-+      return 1;
-+
-+      /* Remove duplications to prevent infinite looping.  */
-+      for (j = 0; j < i; j++)
-+      if (entry == fallback_entries[j])
-+        break;
-+      if (j != i)
-+      continue;
-+      
-+      fallback_entries[i++] = entry;
-+      if (i == MAX_FALLBACK_ENTRIES)
-+      break;
-+      
-+      arg = skip_to (0, arg);
-+    }
-+
-+  if (i < MAX_FALLBACK_ENTRIES)
-+    fallback_entries[i] = -1;
-+
-+  fallback_entryno = (i == 0) ? -1 : 0;
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_fallback =
-+{
-+  "fallback",
-+  fallback_func,
-+  BUILTIN_MENU,
-+#if 0
-+  "fallback NUM...",
-+  "Go into unattended boot mode: if the default boot entry has any"
-+  " errors, instead of waiting for the user to do anything, it"
-+  " immediately starts over using the NUM entry (same numbering as the"
-+  " `default' command). This obviously won't help if the machine"
-+  " was rebooted by a kernel that GRUB loaded."
-+#endif
-+};
-+
-+\f
-+/* find */
-+/* Search for the filename ARG in all of partitions.  */
-+static int
-+find_func (char *arg, int flags)
-+{
-+  char *filename = arg;
-+  unsigned long drive;
-+  unsigned long tmp_drive = saved_drive;
-+  unsigned long tmp_partition = saved_partition;
-+  int got_file = 0;
-+  
-+  /* Floppies.  */
-+  for (drive = 0; drive < 8; drive++)
-+    {
-+      current_drive = drive;
-+      current_partition = 0xFFFFFF;
-+      
-+      if (open_device ())
-+      {
-+        saved_drive = current_drive;
-+        saved_partition = current_partition;
-+        if (grub_open (filename))
-+          {
-+            grub_close ();
-+            grub_printf (" (fd%d)\n", drive);
-+            got_file = 1;
-+          }
-+      }
-+
-+      errnum = ERR_NONE;
-+    }
-+
-+  /* Hard disks.  */
-+  for (drive = 0x80; drive < 0x88; drive++)
-+    {
-+      unsigned long part = 0xFFFFFF;
-+      unsigned long start, len, offset, ext_offset;
-+      int type, entry;
-+      char buf[SECTOR_SIZE];
-+
-+      current_drive = drive;
-+      while (next_partition (drive, 0xFFFFFF, &part, &type,
-+                           &start, &len, &offset, &entry,
-+                           &ext_offset, buf))
-+      {
-+        if (type != PC_SLICE_TYPE_NONE
-+            && ! IS_PC_SLICE_TYPE_BSD (type)
-+            && ! IS_PC_SLICE_TYPE_EXTENDED (type))
-+          {
-+            current_partition = part;
-+            if (open_device ())
-+              {
-+                saved_drive = current_drive;
-+                saved_partition = current_partition;
-+                if (grub_open (filename))
-+                  {
-+                    int bsd_part = (part >> 8) & 0xFF;
-+                    int pc_slice = part >> 16;
-+                    
-+                    grub_close ();
-+                    
-+                    if (bsd_part == 0xFF)
-+                      grub_printf (" (hd%d,%d)\n",
-+                                   drive - 0x80, pc_slice);
-+                    else
-+                      grub_printf (" (hd%d,%d,%c)\n",
-+                                   drive - 0x80, pc_slice, bsd_part + 'a');
-+
-+                    got_file = 1;
-+                  }
-+              }
-+          }
-+
-+        /* We want to ignore any error here.  */
-+        errnum = ERR_NONE;
-+      }
-+
-+      /* next_partition always sets ERRNUM in the last call, so clear
-+       it.  */
-+      errnum = ERR_NONE;
-+    }
-+
-+  saved_drive = tmp_drive;
-+  saved_partition = tmp_partition;
-+
-+  if (got_file)
-+    {
-+      errnum = ERR_NONE;
-+      return 0;
-+    }
-+
-+  errnum = ERR_FILE_NOT_FOUND;
-+  return 1;
-+}
-+
-+static struct builtin builtin_find =
-+{
-+  "find",
-+  find_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "find FILENAME",
-+  "Search for the filename FILENAME in all of partitions and print the list of"
-+  " the devices which contain the file."
-+};
-+
-+\f
-+/* fstest */
-+static int
-+fstest_func (char *arg, int flags)
-+{
-+  if (disk_read_hook)
-+    {
-+      disk_read_hook = NULL;
-+      printf (" Filesystem tracing is now off\n");
-+    }
-+  else
-+    {
-+      disk_read_hook = disk_read_print_func;
-+      printf (" Filesystem tracing is now on\n");
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_fstest =
-+{
-+  "fstest",
-+  fstest_func,
-+  BUILTIN_CMDLINE,
-+  "fstest",
-+  "Toggle filesystem test mode."
-+};
-+
-+\f
-+/* geometry */
-+static int
-+geometry_func (char *arg, int flags)
-+{
-+  struct geometry geom;
-+  char *msg;
-+  char *device = arg;
-+#ifdef GRUB_UTIL
-+  char *ptr;
-+#endif
-+
-+  /* Get the device number.  */
-+  set_device (device);
-+  if (errnum)
-+    return 1;
-+
-+  /* Check for the geometry.  */
-+  if (get_diskinfo (current_drive, &geom))
-+    {
-+      errnum = ERR_NO_DISK;
-+      return 1;
-+    }
-+
-+  /* Attempt to read the first sector, because some BIOSes turns out not
-+     to support LBA even though they set the bit 0 in the support
-+     bitmap, only after reading something actually.  */
-+  if (biosdisk (BIOSDISK_READ, current_drive, &geom, 0, 1, SCRATCHSEG))
-+    {
-+      errnum = ERR_READ;
-+      return 1;
-+    }
-+
-+#ifdef GRUB_UTIL
-+  ptr = skip_to (0, device);
-+  if (*ptr)
-+    {
-+      char *cylinder, *head, *sector, *total_sector;
-+      int num_cylinder, num_head, num_sector, num_total_sector;
-+
-+      cylinder = ptr;
-+      head = skip_to (0, cylinder);
-+      sector = skip_to (0, head);
-+      total_sector = skip_to (0, sector);
-+      if (! safe_parse_maxint (&cylinder, &num_cylinder)
-+        || ! safe_parse_maxint (&head, &num_head)
-+        || ! safe_parse_maxint (&sector, &num_sector))
-+      return 1;
-+
-+      disks[current_drive].cylinders = num_cylinder;
-+      disks[current_drive].heads = num_head;
-+      disks[current_drive].sectors = num_sector;
-+
-+      if (safe_parse_maxint (&total_sector, &num_total_sector))
-+      disks[current_drive].total_sectors = num_total_sector;
-+      else
-+      disks[current_drive].total_sectors
-+        = num_cylinder * num_head * num_sector;
-+      errnum = 0;
-+
-+      geom = disks[current_drive];
-+      buf_drive = -1;
-+    }
-+#endif /* GRUB_UTIL */
-+
-+#ifdef GRUB_UTIL
-+  msg = device_map[current_drive];
-+#else
-+  if (geom.flags & BIOSDISK_FLAG_LBA_EXTENSION)
-+    msg = "LBA";
-+  else
-+    msg = "CHS";
-+#endif
-+
-+  grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, "
-+             "The number of sectors = %d, %s\n",
-+             current_drive,
-+             geom.cylinders, geom.heads, geom.sectors,
-+             geom.total_sectors, msg);
-+  real_open_partition (1);
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_geometry =
-+{
-+  "geometry",
-+  geometry_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]",
-+  "Print the information for a drive DRIVE. In the grub shell, you can"
-+  " set the geometry of the drive arbitrarily. The number of the cylinders,"
-+  " the one of the heads, the one of the sectors and the one of the total"
-+  " sectors are set to CYLINDER, HEAD, SECTOR and TOTAL_SECTOR,"
-+  " respectively. If you omit TOTAL_SECTOR, then it will be calculated based"
-+  " on the C/H/S values automatically."
-+};
-+
-+\f
-+/* halt */
-+static int
-+halt_func (char *arg, int flags)
-+{
-+  int no_apm;
-+
-+  no_apm = (grub_memcmp (arg, "--no-apm", 8) == 0);
-+  grub_halt (no_apm);
-+  
-+  /* Never reach here.  */
-+  return 1;
-+}
-+
-+static struct builtin builtin_halt =
-+{
-+  "halt",
-+  halt_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "halt [--no-apm]",
-+  "Halt your system. If APM is avaiable on it, turn off the power using"
-+  " the APM BIOS, unless you specify the option `--no-apm'."
-+};
-+
-+\f
-+/* help */
-+#define MAX_SHORT_DOC_LEN     39
-+#define MAX_LONG_DOC_LEN      66
-+
-+static int
-+help_func (char *arg, int flags)
-+{
-+  int all = 0;
-+  
-+  if (grub_memcmp (arg, "--all", sizeof ("--all") - 1) == 0)
-+    {
-+      all = 1;
-+      arg = skip_to (0, arg);
-+    }
-+  
-+  if (! *arg)
-+    {
-+      /* Invoked with no argument. Print the list of the short docs.  */
-+      struct builtin **builtin;
-+      int left = 1;
-+
-+      for (builtin = builtin_table; *builtin != 0; builtin++)
-+      {
-+        int len;
-+        int i;
-+
-+        /* If this cannot be used in the command-line interface,
-+           skip this.  */
-+        if (! ((*builtin)->flags & BUILTIN_CMDLINE))
-+          continue;
-+        
-+        /* If this doesn't need to be listed automatically and "--all"
-+           is not specified, skip this.  */
-+        if (! all && ! ((*builtin)->flags & BUILTIN_HELP_LIST))
-+          continue;
-+
-+        len = grub_strlen ((*builtin)->short_doc);
-+        /* If the length of SHORT_DOC is too long, truncate it.  */
-+        if (len > MAX_SHORT_DOC_LEN - 1)
-+          len = MAX_SHORT_DOC_LEN - 1;
-+
-+        for (i = 0; i < len; i++)
-+          grub_putchar ((*builtin)->short_doc[i]);
-+
-+        for (; i < MAX_SHORT_DOC_LEN; i++)
-+          grub_putchar (' ');
-+
-+        if (! left)
-+          grub_putchar ('\n');
-+
-+        left = ! left;
-+      }
-+
-+      /* If the last entry was at the left column, no newline was printed
-+       at the end.  */
-+      if (! left)
-+      grub_putchar ('\n');
-+    }
-+  else
-+    {
-+      /* Invoked with one or more patterns.  */
-+      do
-+      {
-+        struct builtin **builtin;
-+        char *next_arg;
-+
-+        /* Get the next argument.  */
-+        next_arg = skip_to (0, arg);
-+
-+        /* Terminate ARG.  */
-+        nul_terminate (arg);
-+
-+        for (builtin = builtin_table; *builtin; builtin++)
-+          {
-+            /* Skip this if this is only for the configuration file.  */
-+            if (! ((*builtin)->flags & BUILTIN_CMDLINE))
-+              continue;
-+
-+            if (substring (arg, (*builtin)->name) < 1)
-+              {
-+                char *doc = (*builtin)->long_doc;
-+
-+                /* At first, print the name and the short doc.  */
-+                grub_printf ("%s: %s\n",
-+                             (*builtin)->name, (*builtin)->short_doc);
-+
-+                /* Print the long doc.  */
-+                while (*doc)
-+                  {
-+                    int len = grub_strlen (doc);
-+                    int i;
-+
-+                    /* If LEN is too long, fold DOC.  */
-+                    if (len > MAX_LONG_DOC_LEN)
-+                      {
-+                        /* Fold this line at the position of a space.  */
-+                        for (len = MAX_LONG_DOC_LEN; len > 0; len--)
-+                          if (doc[len - 1] == ' ')
-+                            break;
-+                      }
-+
-+                    grub_printf ("    ");
-+                    for (i = 0; i < len; i++)
-+                      grub_putchar (*doc++);
-+                    grub_putchar ('\n');
-+                  }
-+              }
-+          }
-+
-+        arg = next_arg;
-+      }
-+      while (*arg);
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_help =
-+{
-+  "help",
-+  help_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "help [--all] [PATTERN ...]",
-+  "Display helpful information about builtin commands. Not all commands"
-+  " aren't shown without the option `--all'."
-+};
-+
-+\f
-+/* hiddenmenu */
-+static int
-+hiddenmenu_func (char *arg, int flags)
-+{
-+  show_menu = 0;
-+  return 0;
-+}
-+
-+static struct builtin builtin_hiddenmenu =
-+{
-+  "hiddenmenu",
-+  hiddenmenu_func,
-+  BUILTIN_MENU,
-+#if 0
-+  "hiddenmenu",
-+  "Hide the menu."
-+#endif
-+};
-+
-+\f
-+/* hide */
-+static int
-+hide_func (char *arg, int flags)
-+{
-+  if (! set_device (arg))
-+    return 1;
-+
-+  if (! set_partition_hidden_flag (1))
-+    return 1;
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_hide =
-+{
-+  "hide",
-+  hide_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "hide PARTITION",
-+  "Hide PARTITION by setting the \"hidden\" bit in"
-+  " its partition type code."
-+};
-+
-+\f
-+#ifdef SUPPORT_NETBOOT
-+/* ifconfig */
-+static int
-+ifconfig_func (char *arg, int flags)
-+{
-+  char *svr = 0, *ip = 0, *gw = 0, *sm = 0;
-+  
-+  if (! eth_probe ())
-+    {
-+      grub_printf ("No ethernet card found.\n");
-+      errnum = ERR_DEV_VALUES;
-+      return 1;
-+    }
-+  
-+  while (*arg) 
-+    {
-+      if (! grub_memcmp ("--server=", arg, sizeof ("--server=") - 1))
-+      svr = arg + sizeof("--server=") - 1;
-+      else if (! grub_memcmp ("--address=", arg, sizeof ("--address=") - 1))
-+      ip = arg + sizeof ("--address=") - 1;
-+      else if (! grub_memcmp ("--gateway=", arg, sizeof ("--gateway=") - 1))
-+      gw = arg + sizeof ("--gateway=") - 1;
-+      else if (! grub_memcmp ("--mask=", arg, sizeof("--mask=") - 1))
-+      sm = arg + sizeof ("--mask=") - 1;
-+      else
-+      {
-+        errnum = ERR_BAD_ARGUMENT;
-+        return 1;
-+      }
-+      
-+      arg = skip_to (0, arg);
-+    }
-+  
-+  if (! ifconfig (ip, sm, gw, svr))
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+  
-+  print_network_configuration ();
-+  return 0;
-+}
-+
-+static struct builtin builtin_ifconfig =
-+{
-+  "ifconfig",
-+  ifconfig_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "ifconfig [--address=IP] [--gateway=IP] [--mask=MASK] [--server=IP]",
-+  "Configure the IP address, the netmask, the gateway and the server"
-+  " address or print current network configuration."
-+};
-+#endif /* SUPPORT_NETBOOT */
-+
-+\f
-+/* impsprobe */
-+static int
-+impsprobe_func (char *arg, int flags)
-+{
-+#ifdef GRUB_UTIL
-+  /* In the grub shell, we cannot probe IMPS.  */
-+  errnum = ERR_UNRECOGNIZED;
-+  return 1;
-+#else /* ! GRUB_UTIL */
-+  if (!imps_probe ())
-+    printf (" No MPS information found or probe failed\n");
-+
-+  return 0;
-+#endif /* ! GRUB_UTIL */
-+}
-+
-+static struct builtin builtin_impsprobe =
-+{
-+  "impsprobe",
-+  impsprobe_func,
-+  BUILTIN_CMDLINE,
-+  "impsprobe",
-+  "Probe the Intel Multiprocessor Specification 1.1 or 1.4"
-+  " configuration table and boot the various CPUs which are found into"
-+  " a tight loop."
-+};
-+
-+\f
-+/* initrd */
-+static int
-+initrd_func (char *arg, int flags)
-+{
-+  switch (kernel_type)
-+    {
-+    case KERNEL_TYPE_LINUX:
-+    case KERNEL_TYPE_BIG_LINUX:
-+      if (! load_initrd (arg))
-+      return 1;
-+      break;
-+
-+    default:
-+      errnum = ERR_NEED_LX_KERNEL;
-+      return 1;
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_initrd =
-+{
-+  "initrd",
-+  initrd_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "initrd FILE [ARG ...]",
-+  "Load an initial ramdisk FILE for a Linux format boot image and set the"
-+  " appropriate parameters in the Linux setup area in memory."
-+};
-+
-+\f
-+/* install */
-+static int
-+install_func (char *arg, int flags)
-+{
-+  char *stage1_file, *dest_dev, *file, *addr;
-+  char *stage1_buffer = (char *) RAW_ADDR (0x100000);
-+  char *stage2_buffer = stage1_buffer + SECTOR_SIZE;
-+  char *old_sect = stage2_buffer + SECTOR_SIZE;
-+  char *stage2_first_buffer = old_sect + SECTOR_SIZE;
-+  char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE;
-+  /* XXX: Probably SECTOR_SIZE is reasonable.  */
-+  char *config_filename = stage2_second_buffer + SECTOR_SIZE;
-+  char *dummy = config_filename + SECTOR_SIZE;
-+  int new_drive = GRUB_INVALID_DRIVE;
-+  int dest_drive, dest_partition, dest_sector;
-+  int src_drive, src_partition, src_part_start;
-+  int i;
-+  struct geometry dest_geom, src_geom;
-+  int saved_sector;
-+  int stage2_first_sector, stage2_second_sector;
-+  char *ptr;
-+  int installaddr, installlist;
-+  /* Point to the location of the name of a configuration file in Stage 2.  */
-+  char *config_file_location;
-+  /* If FILE is a Stage 1.5?  */
-+  int is_stage1_5 = 0;
-+  /* Must call grub_close?  */
-+  int is_open = 0;
-+  /* If LBA is forced?  */
-+  int is_force_lba = 0;
-+  /* Was the last sector full? */
-+  int last_length = SECTOR_SIZE;
-+  
-+#ifdef GRUB_UTIL
-+  /* If the Stage 2 is in a partition mounted by an OS, this will store
-+     the filename under the OS.  */
-+  char *stage2_os_file = 0;
-+#endif /* GRUB_UTIL */
-+  
-+  auto void disk_read_savesect_func (int sector, int offset, int length);
-+  auto void disk_read_blocklist_func (int sector, int offset, int length);
-+  
-+  /* Save the first sector of Stage2 in STAGE2_SECT.  */
-+  auto void disk_read_savesect_func (int sector, int offset, int length)
-+    {
-+      if (debug)
-+      printf ("[%d]", sector);
-+
-+      /* ReiserFS has files which sometimes contain data not aligned
-+         on sector boundaries.  Returning an error is better than
-+         silently failing. */
-+      if (offset != 0 || length != SECTOR_SIZE)
-+      errnum = ERR_UNALIGNED;
-+
-+      saved_sector = sector;
-+    }
-+
-+  /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and
-+     INSTALLSECT.  */
-+  auto void disk_read_blocklist_func (int sector, int offset, int length)
-+    {
-+      if (debug)
-+      printf("[%d]", sector);
-+
-+      if (offset != 0 || last_length != SECTOR_SIZE)
-+      {
-+        /* We found a non-sector-aligned data block. */
-+        errnum = ERR_UNALIGNED;
-+        return;
-+      }
-+
-+      last_length = length;
-+
-+      if (*((unsigned long *) (installlist - 4))
-+        + *((unsigned short *) installlist) != sector
-+        || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4)
-+      {
-+        installlist -= 8;
-+
-+        if (*((unsigned long *) (installlist - 8)))
-+          errnum = ERR_WONT_FIT;
-+        else
-+          {
-+            *((unsigned short *) (installlist + 2)) = (installaddr >> 4);
-+            *((unsigned long *) (installlist - 4)) = sector;
-+          }
-+      }
-+
-+      *((unsigned short *) installlist) += 1;
-+      installaddr += 512;
-+    }
-+
-+  /* First, check the GNU-style long option.  */
-+  while (1)
-+    {
-+      if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0)
-+      {
-+        is_force_lba = 1;
-+        arg = skip_to (0, arg);
-+      }
-+#ifdef GRUB_UTIL
-+      else if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0)
-+      {
-+        stage2_os_file = arg + sizeof ("--stage2=") - 1;
-+        arg = skip_to (0, arg);
-+        nul_terminate (stage2_os_file);
-+      }
-+#endif /* GRUB_UTIL */
-+      else
-+      break;
-+    }
-+  
-+  stage1_file = arg;
-+  dest_dev = skip_to (0, stage1_file);
-+  if (*dest_dev == 'd')
-+    {
-+      new_drive = 0;
-+      dest_dev = skip_to (0, dest_dev);
-+    }
-+  file = skip_to (0, dest_dev);
-+  addr = skip_to (0, file);
-+
-+  /* Get the installation address.  */
-+  if (! safe_parse_maxint (&addr, &installaddr))
-+    {
-+      /* ADDR is not specified.  */
-+      installaddr = 0;
-+      ptr = addr;
-+      errnum = 0;
-+    }
-+  else
-+    ptr = skip_to (0, addr);
-+
-+#ifndef NO_DECOMPRESSION
-+  /* Do not decompress Stage 1 or Stage 2.  */
-+  no_decompression = 1;
-+#endif
-+
-+  /* Read Stage 1.  */
-+  is_open = grub_open (stage1_file);
-+  if (! is_open
-+      || ! grub_read (stage1_buffer, SECTOR_SIZE) == SECTOR_SIZE)
-+    goto fail;
-+
-+  /* Read the old sector from DEST_DEV.  */
-+  if (! set_device (dest_dev)
-+      || ! open_partition ()
-+      || ! devread (0, 0, SECTOR_SIZE, old_sect))
-+    goto fail;
-+
-+  /* Store the information for the destination device.  */
-+  dest_drive = current_drive;
-+  dest_partition = current_partition;
-+  dest_geom = buf_geom;
-+  dest_sector = part_start;
-+
-+  /* Copy the possible DOS BPB, 59 bytes at byte offset 3.  */
-+  grub_memmove (stage1_buffer + BOOTSEC_BPB_OFFSET,
-+              old_sect + BOOTSEC_BPB_OFFSET,
-+              BOOTSEC_BPB_LENGTH);
-+
-+  /* If for a hard disk, copy the possible MBR/extended part table.  */
-+  if (dest_drive & 0x80)
-+    grub_memmove (stage1_buffer + STAGE1_WINDOWS_NT_MAGIC,
-+                old_sect + STAGE1_WINDOWS_NT_MAGIC,
-+                STAGE1_PARTEND - STAGE1_WINDOWS_NT_MAGIC);
-+
-+  /* Check for the version and the signature of Stage 1.  */
-+  if (*((short *)(stage1_buffer + STAGE1_VER_MAJ_OFFS)) != COMPAT_VERSION
-+      || (*((unsigned short *) (stage1_buffer + BOOTSEC_SIG_OFFSET))
-+        != BOOTSEC_SIGNATURE))
-+    {
-+      errnum = ERR_BAD_VERSION;
-+      goto fail;
-+    }
-+
-+  /* This below is not true any longer. But should we leave this alone?  */
-+  
-+  /* If DEST_DRIVE is a floppy, Stage 2 must have the iteration probe
-+     routine.  */
-+  if (! (dest_drive & 0x80)
-+      && (*((unsigned char *) (stage1_buffer + BOOTSEC_PART_OFFSET)) == 0x80
-+        || stage1_buffer[BOOTSEC_PART_OFFSET] == 0))
-+    {
-+      errnum = ERR_BAD_VERSION;
-+      goto fail;
-+    }
-+
-+  grub_close ();
-+  
-+  /* Open Stage 2.  */
-+  is_open = grub_open (file);
-+  if (! is_open)
-+    goto fail;
-+
-+  src_drive = current_drive;
-+  src_partition = current_partition;
-+  src_part_start = part_start;
-+  src_geom = buf_geom;
-+  
-+  if (! new_drive)
-+    new_drive = src_drive;
-+  else if (src_drive != dest_drive)
-+    grub_printf ("Warning: the option `d' was not used, but the Stage 1 will"
-+               " be installed on a\ndifferent drive than the drive where"
-+               " the Stage 2 resides.\n");
-+
-+  /* Set the boot drive.  */
-+  *((unsigned char *) (stage1_buffer + STAGE1_BOOT_DRIVE)) = new_drive;
-+
-+  /* Set the "force LBA" flag.  */
-+  *((unsigned char *) (stage1_buffer + STAGE1_FORCE_LBA)) = is_force_lba;
-+
-+  /* If DEST_DRIVE is a hard disk, enable the workaround, which is
-+     for buggy BIOSes which don't pass boot drive correctly. Instead,
-+     they pass 0x00 or 0x01 even when booted from 0x80.  */
-+  if (dest_drive & BIOS_FLAG_FIXED_DISK)
-+    /* Replace the jmp (2 bytes) with double nop's.  */
-+    *((unsigned short *) (stage1_buffer + STAGE1_BOOT_DRIVE_CHECK))
-+      = 0x9090;
-+  
-+  /* Read the first sector of Stage 2.  */
-+  disk_read_hook = disk_read_savesect_func;
-+  if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-+    goto fail;
-+
-+  stage2_first_sector = saved_sector;
-+  
-+  /* Read the second sector of Stage 2.  */
-+  if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-+    goto fail;
-+
-+  stage2_second_sector = saved_sector;
-+  
-+  /* Check for the version of Stage 2.  */
-+  if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS))
-+      != COMPAT_VERSION)
-+    {
-+      errnum = ERR_BAD_VERSION;
-+      goto fail;
-+    }
-+
-+  /* Check for the Stage 2 id.  */
-+  if (stage2_second_buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2)
-+    is_stage1_5 = 1;
-+
-+  /* If INSTALLADDR is not specified explicitly in the command-line,
-+     determine it by the Stage 2 id.  */
-+  if (! installaddr)
-+    {
-+      if (! is_stage1_5)
-+      /* Stage 2.  */
-+      installaddr = 0x8000;
-+      else
-+      /* Stage 1.5.  */
-+      installaddr = 0x2000;
-+    }
-+
-+  *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR))
-+    = stage2_first_sector;
-+  *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS))
-+    = installaddr;
-+  *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT))
-+    = installaddr >> 4;
-+
-+  i = (int) stage2_first_buffer + SECTOR_SIZE - 4;
-+  while (*((unsigned long *) i))
-+    {
-+      if (i < (int) stage2_first_buffer
-+        || (*((int *) (i - 4)) & 0x80000000)
-+        || *((unsigned short *) i) >= 0xA00
-+        || *((short *) (i + 2)) == 0)
-+      {
-+        errnum = ERR_BAD_VERSION;
-+        goto fail;
-+      }
-+
-+      *((int *) i) = 0;
-+      *((int *) (i - 4)) = 0;
-+      i -= 8;
-+    }
-+
-+  installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4;
-+  installaddr += SECTOR_SIZE;
-+  
-+  /* Read the whole of Stage2 except for the first sector.  */
-+  grub_seek (SECTOR_SIZE);
-+
-+  disk_read_hook = disk_read_blocklist_func;
-+  if (! grub_read (dummy, -1))
-+    goto fail;
-+  
-+  disk_read_hook = 0;
-+  
-+  /* Find a string for the configuration filename.  */
-+  config_file_location = stage2_second_buffer + STAGE2_VER_STR_OFFS;
-+  while (*(config_file_location++))
-+    ;
-+
-+  /* Set the "force LBA" flag for Stage2.  */
-+  *((unsigned char *) (stage2_second_buffer + STAGE2_FORCE_LBA))
-+    = is_force_lba;
-+  
-+  if (*ptr == 'p')
-+    {
-+      *((long *) (stage2_second_buffer + STAGE2_INSTALLPART))
-+      = src_partition;
-+      if (is_stage1_5)
-+      {
-+        /* Reset the device information in FILE if it is a Stage 1.5.  */
-+        unsigned long device = 0xFFFFFFFF;
-+
-+        grub_memmove (config_file_location, (char *) &device,
-+                      sizeof (device));
-+      }
-+
-+      ptr = skip_to (0, ptr);
-+    }
-+
-+  if (*ptr)
-+    {
-+      grub_strcpy (config_filename, ptr);
-+      nul_terminate (config_filename);
-+      
-+      if (! is_stage1_5)
-+      /* If it is a Stage 2, just copy PTR to CONFIG_FILE_LOCATION.  */
-+      grub_strcpy (config_file_location, ptr);
-+      else
-+      {
-+        char *real_config;
-+        unsigned long device;
-+
-+        /* Translate the external device syntax to the internal device
-+           syntax.  */
-+        if (! (real_config = set_device (ptr)))
-+          {
-+            /* The Stage 2 PTR does not contain the device name, so
-+               use the root device instead.  */
-+            errnum = ERR_NONE;
-+            current_drive = saved_drive;
-+            current_partition = saved_partition;
-+            real_config = ptr;
-+          }
-+        
-+        if (current_drive == src_drive)
-+          {
-+            /* If the drive where the Stage 2 resides is the same as
-+               the one where the Stage 1.5 resides, do not embed the
-+               drive number.  */
-+            current_drive = GRUB_INVALID_DRIVE;
-+          }
-+
-+        device = (current_drive << 24) | current_partition;
-+        grub_memmove (config_file_location, (char *) &device,
-+                      sizeof (device));
-+        grub_strcpy (config_file_location + sizeof (device),
-+                     real_config);
-+      }
-+
-+      /* If a Stage 1.5 is used, then we need to modify the Stage2.  */
-+      if (is_stage1_5)
-+      {
-+        char *real_config_filename = skip_to (0, ptr);
-+        
-+        is_open = grub_open (config_filename);
-+        if (! is_open)
-+          goto fail;
-+
-+        /* Skip the first sector.  */
-+        grub_seek (SECTOR_SIZE);
-+        
-+        disk_read_hook = disk_read_savesect_func;
-+        if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-+          goto fail;
-+        
-+        disk_read_hook = 0;
-+        grub_close ();
-+        is_open = 0;
-+        
-+        /* Sanity check.  */
-+        if (*(stage2_buffer + STAGE2_STAGE2_ID) != STAGE2_ID_STAGE2)
-+          {
-+            errnum = ERR_BAD_VERSION;
-+            goto fail;
-+          }
-+
-+        /* Set the "force LBA" flag for Stage2.  */
-+        *(stage2_buffer + STAGE2_FORCE_LBA) = is_force_lba;
-+
-+        /* If REAL_CONFIG_FILENAME is specified, copy it to the Stage2.  */
-+        if (*real_config_filename)
-+          {
-+            /* Specified */
-+            char *location;
-+            
-+            /* Find a string for the configuration filename.  */
-+            location = stage2_buffer + STAGE2_VER_STR_OFFS;
-+            while (*(location++))
-+              ;
-+            
-+            /* Copy the name.  */
-+            grub_strcpy (location, real_config_filename);
-+          }
-+        
-+        /* Write it to the disk.  */
-+        buf_track = -1;
-+
-+#ifdef GRUB_UTIL
-+        /* In the grub shell, access the Stage 2 via the OS filesystem
-+           service, if possible.  */
-+        if (stage2_os_file)
-+          {
-+            FILE *fp;
-+
-+            fp = fopen (stage2_os_file, "r+");
-+            if (! fp)
-+              {
-+                errnum = ERR_FILE_NOT_FOUND;
-+                goto fail;
-+              }
-+
-+            if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0)
-+              {
-+                fclose (fp);
-+                errnum = ERR_BAD_VERSION;
-+                goto fail;
-+              }
-+
-+            if (fwrite (stage2_buffer, 1, SECTOR_SIZE, fp)
-+                != SECTOR_SIZE)
-+              {
-+                fclose (fp);
-+                errnum = ERR_WRITE;
-+                goto fail;
-+              }
-+
-+            fclose (fp);
-+          }
-+        else
-+#endif /* GRUB_UTIL */
-+          {
-+            if (! devwrite (saved_sector - part_start, 1, stage2_buffer))
-+              goto fail;
-+          }
-+      }
-+    }
-+
-+  /* Clear the cache.  */
-+  buf_track = -1;
-+
-+  /* Write the modified sectors of Stage2 to the disk.  */
-+#ifdef GRUB_UTIL
-+  if (! is_stage1_5 && stage2_os_file)
-+    {
-+      FILE *fp;
-+
-+      fp = fopen (stage2_os_file, "r+");
-+      if (! fp)
-+      {
-+        errnum = ERR_FILE_NOT_FOUND;
-+        goto fail;
-+      }
-+
-+      if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
-+      {
-+        fclose (fp);
-+        errnum = ERR_WRITE;
-+        goto fail;
-+      }
-+
-+      if (fwrite (stage2_second_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
-+      {
-+        fclose (fp);
-+        errnum = ERR_WRITE;
-+        goto fail;
-+      }
-+
-+      fclose (fp);
-+    }
-+  else
-+#endif /* GRUB_UTIL */
-+    {
-+      /* The first.  */
-+      current_drive = src_drive;
-+      current_partition = src_partition;
-+
-+      if (! open_partition ())
-+      goto fail;
-+
-+      if (! devwrite (stage2_first_sector - src_part_start, 1,
-+                    stage2_first_buffer))
-+      goto fail;
-+
-+      if (! devwrite (stage2_second_sector - src_part_start, 1,
-+                    stage2_second_buffer))
-+      goto fail;
-+    }
-+  
-+  /* Write the modified sector of Stage 1 to the disk.  */
-+  current_drive = dest_drive;
-+  current_partition = dest_partition;
-+  if (! open_partition ())
-+    goto fail;
-+
-+  devwrite (0, 1, stage1_buffer);
-+
-+ fail:
-+  if (is_open)
-+    grub_close ();
-+  
-+  disk_read_hook = 0;
-+  
-+#ifndef NO_DECOMPRESSION
-+  no_decompression = 0;
-+#endif
-+
-+  return errnum;
-+}
-+
-+static struct builtin builtin_install =
-+{
-+  "install",
-+  install_func,
-+  BUILTIN_CMDLINE,
-+  "install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]",
-+  "Install STAGE1 on DEVICE, and install a blocklist for loading STAGE2"
-+  " as a Stage 2. If the option `d' is present, the Stage 1 will always"
-+  " look for the disk where STAGE2 was installed, rather than using"
-+  " the booting drive. The Stage 2 will be loaded at address ADDR, which"
-+  " will be determined automatically if you don't specify it. If"
-+  " the option `p' or CONFIG_FILE is present, then the first block"
-+  " of Stage 2 is patched with new values of the partition and name"
-+  " of the configuration file used by the true Stage 2 (for a Stage 1.5,"
-+  " this is the name of the true Stage 2) at boot time. If STAGE2 is a Stage"
-+  " 1.5 and REAL_CONFIG_FILE is present, then the Stage 2 CONFIG_FILE is"
-+  " patched with the configuration filename REAL_CONFIG_FILE."
-+  " If the option `--force-lba' is specified, disable some sanity checks"
-+  " for LBA mode. If the option `--stage2' is specified, rewrite the Stage"
-+  " 2 via your OS's filesystem instead of the raw device."
-+};
-+
-+\f
-+/* ioprobe */
-+static int
-+ioprobe_func (char *arg, int flags)
-+{
-+#ifdef GRUB_UTIL
-+  
-+  errnum = ERR_UNRECOGNIZED;
-+  return 1;
-+  
-+#else /* ! GRUB_UTIL */
-+  
-+  unsigned short *port;
-+  
-+  /* Get the drive number.  */
-+  set_device (arg);
-+  if (errnum)
-+    return 1;
-+
-+  /* Clean out IO_MAP.  */
-+  grub_memset ((char *) io_map, 0, IO_MAP_SIZE * sizeof (unsigned short));
-+
-+  /* Track the int13 handler.  */
-+  track_int13 (current_drive);
-+  
-+  /* Print out the result.  */
-+  for (port = io_map; *port != 0; port++)
-+    grub_printf (" 0x%x", (unsigned int) *port);
-+
-+  return 0;
-+  
-+#endif /* ! GRUB_UTIL */
-+}
-+
-+static struct builtin builtin_ioprobe =
-+{
-+  "ioprobe",
-+  ioprobe_func,
-+  BUILTIN_CMDLINE,
-+  "ioprobe DRIVE",
-+  "Probe I/O ports used for the drive DRIVE."
-+};
-+
-+\f
-+/* kernel */
-+static int
-+kernel_func (char *arg, int flags)
-+{
-+  int len;
-+  kernel_t suggested_type = KERNEL_TYPE_NONE;
-+  unsigned long load_flags = 0;
-+
-+#ifndef AUTO_LINUX_MEM_OPT
-+  load_flags |= KERNEL_LOAD_NO_MEM_OPTION;
-+#endif
-+
-+  /* Deal with GNU-style long options.  */
-+  while (1)
-+    {
-+      /* If the option `--type=TYPE' is specified, convert the string to
-+       a kernel type.  */
-+      if (grub_memcmp (arg, "--type=", 7) == 0)
-+      {
-+        arg += 7;
-+        
-+        if (grub_memcmp (arg, "netbsd", 6) == 0)
-+          suggested_type = KERNEL_TYPE_NETBSD;
-+        else if (grub_memcmp (arg, "freebsd", 7) == 0)
-+          suggested_type = KERNEL_TYPE_FREEBSD;
-+        else if (grub_memcmp (arg, "openbsd", 7) == 0)
-+          /* XXX: For now, OpenBSD is identical to NetBSD, from GRUB's
-+             point of view.  */
-+          suggested_type = KERNEL_TYPE_NETBSD;
-+        else if (grub_memcmp (arg, "linux", 5) == 0)
-+          suggested_type = KERNEL_TYPE_LINUX;
-+        else if (grub_memcmp (arg, "biglinux", 8) == 0)
-+          suggested_type = KERNEL_TYPE_BIG_LINUX;
-+        else if (grub_memcmp (arg, "multiboot", 9) == 0)
-+          suggested_type = KERNEL_TYPE_MULTIBOOT;
-+        else
-+          {
-+            errnum = ERR_BAD_ARGUMENT;
-+            return 1;
-+          }
-+      }
-+      /* If the `--no-mem-option' is specified, don't pass a Linux's mem
-+       option automatically. If the kernel is another type, this flag
-+       has no effect.  */
-+      else if (grub_memcmp (arg, "--no-mem-option", 15) == 0)
-+      load_flags |= KERNEL_LOAD_NO_MEM_OPTION;
-+      else
-+      break;
-+
-+      /* Try the next.  */
-+      arg = skip_to (0, arg);
-+    }
-+      
-+  len = grub_strlen (arg);
-+
-+  /* Reset MB_CMDLINE.  */
-+  mb_cmdline = (char *) MB_CMDLINE_BUF;
-+  if (len + 1 > MB_CMDLINE_BUFLEN)
-+    {
-+      errnum = ERR_WONT_FIT;
-+      return 1;
-+    }
-+
-+  /* Copy the command-line to MB_CMDLINE.  */
-+  grub_memmove (mb_cmdline, arg, len + 1);
-+  kernel_type = load_image (arg, mb_cmdline, suggested_type, load_flags);
-+  if (kernel_type == KERNEL_TYPE_NONE)
-+    return 1;
-+
-+  mb_cmdline += len + 1;
-+  return 0;
-+}
-+
-+static struct builtin builtin_kernel =
-+{
-+  "kernel",
-+  kernel_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]",
-+  "Attempt to load the primary boot image from FILE. The rest of the"
-+  " line is passed verbatim as the \"kernel command line\".  Any modules"
-+  " must be reloaded after using this command. The option --type is used"
-+  " to suggest what type of kernel to be loaded. TYPE must be either of"
-+  " \"netbsd\", \"freebsd\", \"openbsd\", \"linux\", \"biglinux\" and"
-+  " \"multiboot\". The option --no-mem-option tells GRUB not to pass a"
-+  " Linux's mem option automatically."
-+};
-+
-+\f
-+/* lock */
-+static int
-+lock_func (char *arg, int flags)
-+{
-+  if (! auth && password)
-+    {
-+      errnum = ERR_PRIVILEGED;
-+      return 1;
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_lock =
-+{
-+  "lock",
-+  lock_func,
-+  BUILTIN_CMDLINE,
-+  "lock",
-+  "Break a command execution unless the user is authenticated."
-+};
-+  
-+\f
-+/* makeactive */
-+static int
-+makeactive_func (char *arg, int flags)
-+{
-+  if (! make_saved_active ())
-+    return 1;
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_makeactive =
-+{
-+  "makeactive",
-+  makeactive_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "makeactive",
-+  "Set the active partition on the root disk to GRUB's root device."
-+  " This command is limited to _primary_ PC partitions on a hard disk."
-+};
-+
-+\f
-+/* map */
-+/* Map FROM_DRIVE to TO_DRIVE.  */
-+static int
-+map_func (char *arg, int flags)
-+{
-+  char *to_drive;
-+  char *from_drive;
-+  unsigned long to, from;
-+  int i;
-+  
-+  to_drive = arg;
-+  from_drive = skip_to (0, arg);
-+
-+  /* Get the drive number for TO_DRIVE.  */
-+  set_device (to_drive);
-+  if (errnum)
-+    return 1;
-+  to = current_drive;
-+
-+  /* Get the drive number for FROM_DRIVE.  */
-+  set_device (from_drive);
-+  if (errnum)
-+    return 1;
-+  from = current_drive;
-+
-+  /* Search for an empty slot in BIOS_DRIVE_MAP.  */
-+  for (i = 0; i < DRIVE_MAP_SIZE; i++)
-+    {
-+      /* Perhaps the user wants to override the map.  */
-+      if ((bios_drive_map[i] & 0xff) == from)
-+      break;
-+      
-+      if (! bios_drive_map[i])
-+      break;
-+    }
-+
-+  if (i == DRIVE_MAP_SIZE)
-+    {
-+      errnum = ERR_WONT_FIT;
-+      return 1;
-+    }
-+
-+  if (to == from)
-+    /* If TO is equal to FROM, delete the entry.  */
-+    grub_memmove ((char *) &bios_drive_map[i], (char *) &bios_drive_map[i + 1],
-+                sizeof (unsigned short) * (DRIVE_MAP_SIZE - i));
-+  else
-+    bios_drive_map[i] = from | (to << 8);
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_map =
-+{
-+  "map",
-+  map_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "map TO_DRIVE FROM_DRIVE",
-+  "Map the drive FROM_DRIVE to the drive TO_DRIVE. This is necessary"
-+  " when you chain-load some operating systems, such as DOS, if such an"
-+  " OS resides at a non-first drive."
-+};
-+
-+\f
-+#ifdef USE_MD5_PASSWORDS
-+/* md5crypt */
-+static int
-+md5crypt_func (char *arg, int flags)
-+{
-+  char crypted[36];
-+  char key[32];
-+  unsigned int seed;
-+  int i;
-+  const char *const seedchars =
-+    "./0123456789ABCDEFGHIJKLMNOPQRST"
-+    "UVWXYZabcdefghijklmnopqrstuvwxyz";
-+  
-+  /* First create a salt.  */
-+
-+  /* The magical prefix.  */
-+  grub_memset (crypted, 0, sizeof (crypted));
-+  grub_memmove (crypted, "$1$", 3);
-+
-+  /* Create the length of a salt.  */
-+  seed = currticks ();
-+
-+  /* Generate a salt.  */
-+  for (i = 0; i < 8 && seed; i++)
-+    {
-+      /* FIXME: This should be more random.  */
-+      crypted[3 + i] = seedchars[seed & 0x3f];
-+      seed >>= 6;
-+    }
-+
-+  /* A salt must be terminated with `$', if it is less than 8 chars.  */
-+  crypted[3 + i] = '$';
-+
-+#ifdef DEBUG_MD5CRYPT
-+  grub_printf ("salt = %s\n", crypted);
-+#endif
-+  
-+  /* Get a password.  */
-+  grub_memset (key, 0, sizeof (key));
-+  get_cmdline ("Password: ", key, sizeof (key) - 1, '*', 0);
-+
-+  /* Crypt the key.  */
-+  make_md5_password (key, crypted);
-+
-+  grub_printf ("Encrypted: %s\n", crypted);
-+  return 0;
-+}
-+
-+static struct builtin builtin_md5crypt =
-+{
-+  "md5crypt",
-+  md5crypt_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "md5crypt",
-+  "Generate a password in MD5 format."
-+};
-+#endif /* USE_MD5_PASSWORDS */
-+
-+\f
-+/* module */
-+static int
-+module_func (char *arg, int flags)
-+{
-+  int len = grub_strlen (arg);
-+
-+  switch (kernel_type)
-+    {
-+    case KERNEL_TYPE_MULTIBOOT:
-+      if (mb_cmdline + len + 1 > (char *) MB_CMDLINE_BUF + MB_CMDLINE_BUFLEN)
-+      {
-+        errnum = ERR_WONT_FIT;
-+        return 1;
-+      }
-+      grub_memmove (mb_cmdline, arg, len + 1);
-+      if (! load_module (arg, mb_cmdline))
-+      return 1;
-+      mb_cmdline += len + 1;
-+      break;
-+
-+    case KERNEL_TYPE_LINUX:
-+    case KERNEL_TYPE_BIG_LINUX:
-+      if (! load_initrd (arg))
-+      return 1;
-+      break;
-+
-+    default:
-+      errnum = ERR_NEED_MB_KERNEL;
-+      return 1;
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_module =
-+{
-+  "module",
-+  module_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "module FILE [ARG ...]",
-+  "Load a boot module FILE for a Multiboot format boot image (no"
-+  " interpretation of the file contents is made, so users of this"
-+  " command must know what the kernel in question expects). The"
-+  " rest of the line is passed as the \"module command line\", like"
-+  " the `kernel' command."
-+};
-+
-+\f
-+/* modulenounzip */
-+static int
-+modulenounzip_func (char *arg, int flags)
-+{
-+  int ret;
-+
-+#ifndef NO_DECOMPRESSION
-+  no_decompression = 1;
-+#endif
-+
-+  ret = module_func (arg, flags);
-+
-+#ifndef NO_DECOMPRESSION
-+  no_decompression = 0;
-+#endif
-+
-+  return ret;
-+}
-+
-+static struct builtin builtin_modulenounzip =
-+{
-+  "modulenounzip",
-+  modulenounzip_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "modulenounzip FILE [ARG ...]",
-+  "The same as `module', except that automatic decompression is"
-+  " disabled."
-+};
-+
-+\f
-+/* pager [on|off] */
-+static int
-+pager_func (char *arg, int flags)
-+{
-+  /* If ARG is empty, toggle the flag.  */
-+  if (! *arg)
-+    use_pager = ! use_pager;
-+  else if (grub_memcmp (arg, "on", 2) == 0)
-+    use_pager = 1;
-+  else if (grub_memcmp (arg, "off", 3) == 0)
-+    use_pager = 0;
-+  else
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  grub_printf (" Internal pager is now %s\n", use_pager ? "on" : "off");
-+  return 0;
-+}
-+
-+static struct builtin builtin_pager =
-+{
-+  "pager",
-+  pager_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "pager [FLAG]",
-+  "Toggle pager mode with no argument. If FLAG is given and its value"
-+  " is `on', turn on the mode. If FLAG is `off', turn off the mode."
-+};
-+
-+\f
-+/* partnew PART TYPE START LEN */
-+static int
-+partnew_func (char *arg, int flags)
-+{
-+  int new_type, new_start, new_len;
-+  int start_cl, start_ch, start_dh;
-+  int end_cl, end_ch, end_dh;
-+  int entry;
-+  char mbr[512];
-+
-+  /* Convert a LBA address to a CHS address in the INT 13 format.  */
-+  auto void lba_to_chs (int lba, int *cl, int *ch, int *dh);
-+  void lba_to_chs (int lba, int *cl, int *ch, int *dh)
-+    {
-+      int cylinder, head, sector;
-+
-+      sector = lba % buf_geom.sectors + 1;
-+      head = (lba / buf_geom.sectors) % buf_geom.heads;
-+      cylinder = lba / (buf_geom.sectors * buf_geom.heads);
-+
-+      if (cylinder >= buf_geom.cylinders)
-+      cylinder = buf_geom.cylinders - 1;
-+      
-+      *cl = sector | ((cylinder & 0x300) >> 2);
-+      *ch = cylinder & 0xFF;
-+      *dh = head;
-+    }
-+      
-+  /* Get the drive and the partition.  */
-+  if (! set_device (arg))
-+    return 1;
-+
-+  /* The drive must be a hard disk.  */
-+  if (! (current_drive & 0x80))
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  /* The partition must a primary partition.  */
-+  if ((current_partition >> 16) > 3
-+      || (current_partition & 0xFFFF) != 0xFFFF)
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  entry = current_partition >> 16;
-+  
-+  /* Get the new partition type.  */
-+  arg = skip_to (0, arg);
-+  if (! safe_parse_maxint (&arg, &new_type))
-+    return 1;
-+
-+  /* The partition type is unsigned char.  */
-+  if (new_type > 0xFF)
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  /* Get the new partition start.  */
-+  arg = skip_to (0, arg);
-+  if (! safe_parse_maxint (&arg, &new_start))
-+    return 1;
-+  
-+  /* Get the new partition length.  */
-+  arg = skip_to (0, arg);
-+  if (! safe_parse_maxint (&arg, &new_len))
-+    return 1;
-+
-+  /* Read the MBR.  */
-+  if (! rawread (current_drive, 0, 0, SECTOR_SIZE, mbr))
-+    return 1;
-+
-+  /* Check if the new partition will fit in the disk.  */
-+  if (new_start + new_len > buf_geom.total_sectors)
-+    {
-+      errnum = ERR_GEOM;
-+      return 1;
-+    }
-+
-+  /* Store the partition information in the MBR.  */
-+  lba_to_chs (new_start, &start_cl, &start_ch, &start_dh);
-+  lba_to_chs (new_start + new_len - 1, &end_cl, &end_ch, &end_dh);
-+
-+  PC_SLICE_FLAG (mbr, entry) = 0;
-+  PC_SLICE_HEAD (mbr, entry) = start_dh;
-+  PC_SLICE_SEC (mbr, entry) = start_cl;
-+  PC_SLICE_CYL (mbr, entry) = start_ch;
-+  PC_SLICE_TYPE (mbr, entry) = new_type;
-+  PC_SLICE_EHEAD (mbr, entry) = end_dh;
-+  PC_SLICE_ESEC (mbr, entry) = end_cl;
-+  PC_SLICE_ECYL (mbr, entry) = end_ch;
-+  PC_SLICE_START (mbr, entry) = new_start;
-+  PC_SLICE_LENGTH (mbr, entry) = new_len;
-+
-+  /* Make sure that the MBR has a valid signature.  */
-+  PC_MBR_SIG (mbr) = PC_MBR_SIGNATURE;
-+  
-+  /* Write back the MBR to the disk.  */
-+  buf_track = -1;
-+  if (! rawwrite (current_drive, 0, mbr))
-+    return 1;
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_partnew =
-+{
-+  "partnew",
-+  partnew_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "partnew PART TYPE START LEN",
-+  "Create a primary partition at the starting address START with the"
-+  " length LEN, with the type TYPE. START and LEN are in sector units."
-+};
-+
-+\f
-+/* parttype PART TYPE */
-+static int
-+parttype_func (char *arg, int flags)
-+{
-+  int new_type;
-+  unsigned long part = 0xFFFFFF;
-+  unsigned long start, len, offset, ext_offset;
-+  int entry, type;
-+  char mbr[512];
-+
-+  /* Get the drive and the partition.  */
-+  if (! set_device (arg))
-+    return 1;
-+
-+  /* The drive must be a hard disk.  */
-+  if (! (current_drive & 0x80))
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+  
-+  /* The partition must be a PC slice.  */
-+  if ((current_partition >> 16) == 0xFF
-+      || (current_partition & 0xFFFF) != 0xFFFF)
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  /* Get the new partition type.  */
-+  arg = skip_to (0, arg);
-+  if (! safe_parse_maxint (&arg, &new_type))
-+    return 1;
-+
-+  /* The partition type is unsigned char.  */
-+  if (new_type > 0xFF)
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  /* Look for the partition.  */
-+  while (next_partition (current_drive, 0xFFFFFF, &part, &type,
-+                       &start, &len, &offset, &entry,
-+                       &ext_offset, mbr))
-+    {
-+      if (part == current_partition)
-+      {
-+        /* Found.  */
-+
-+        /* Set the type to NEW_TYPE.  */
-+        PC_SLICE_TYPE (mbr, entry) = new_type;
-+        
-+        /* Write back the MBR to the disk.  */
-+        buf_track = -1;
-+        if (! rawwrite (current_drive, offset, mbr))
-+          return 1;
-+
-+        /* Succeed.  */
-+        return 0;
-+      }
-+    }
-+
-+  /* The partition was not found.  ERRNUM was set by next_partition.  */
-+  return 1;
-+}
-+
-+static struct builtin builtin_parttype =
-+{
-+  "parttype",
-+  parttype_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "parttype PART TYPE",
-+  "Change the type of the partition PART to TYPE."
-+};
-+
-+\f
-+/* password */
-+static int
-+password_func (char *arg, int flags)
-+{
-+  int len;
-+  password_t type = PASSWORD_PLAIN;
-+
-+#ifdef USE_MD5_PASSWORDS
-+  if (grub_memcmp (arg, "--md5", 5) == 0)
-+    {
-+      type = PASSWORD_MD5;
-+      arg = skip_to (0, arg);
-+    }
-+#endif
-+  if (grub_memcmp (arg, "--", 2) == 0)
-+    {
-+      type = PASSWORD_UNSUPPORTED;
-+      arg = skip_to (0, arg);
-+    }
-+
-+  if ((flags & (BUILTIN_CMDLINE | BUILTIN_SCRIPT)) != 0)
-+    {
-+      /* Do password check! */
-+      char entered[32];
-+      
-+      /* Wipe out any previously entered password */
-+      entered[0] = 0;
-+      get_cmdline ("Password: ", entered, 31, '*', 0);
-+
-+      nul_terminate (arg);
-+      if (check_password (entered, arg, type) != 0)
-+      {
-+        errnum = ERR_PRIVILEGED;
-+        return 1;
-+      }
-+    }
-+  else
-+    {
-+      len = grub_strlen (arg);
-+      
-+      /* PASSWORD NUL NUL ... */
-+      if (len + 2 > PASSWORD_BUFLEN)
-+      {
-+        errnum = ERR_WONT_FIT;
-+        return 1;
-+      }
-+      
-+      /* Copy the password and clear the rest of the buffer.  */
-+      password = (char *) PASSWORD_BUF;
-+      grub_memmove (password, arg, len);
-+      grub_memset (password + len, 0, PASSWORD_BUFLEN - len);
-+      password_type = type;
-+    }
-+  return 0;
-+}
-+
-+static struct builtin builtin_password =
-+{
-+  "password",
-+  password_func,
-+  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_NO_ECHO,
-+  "password [--md5] PASSWD [FILE]",
-+  "If used in the first section of a menu file, disable all"
-+  " interactive editing control (menu entry editor and"
-+  " command line). If the password PASSWD is entered, it loads the"
-+  " FILE as a new config file and restarts the GRUB Stage 2. If you"
-+  " omit the argument FILE, then GRUB just unlocks privileged"
-+  " instructions.  You can also use it in the script section, in"
-+  " which case it will ask for the password, before continueing."
-+  " The option --md5 tells GRUB that PASSWD is encrypted with"
-+  " md5crypt."
-+};
-+
-+\f
-+/* pause */
-+static int
-+pause_func (char *arg, int flags)
-+{
-+  printf("%s\n", arg);
-+
-+  /* If ESC is returned, then abort this entry.  */
-+  if (ASCII_CHAR (getkey ()) == 27)
-+    return 1;
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_pause =
-+{
-+  "pause",
-+  pause_func,
-+  BUILTIN_CMDLINE | BUILTIN_NO_ECHO,
-+  "pause [MESSAGE ...]",
-+  "Print MESSAGE, then wait until a key is pressed."
-+};
-+
-+\f
-+#ifdef GRUB_UTIL
-+/* quit */
-+static int
-+quit_func (char *arg, int flags)
-+{
-+  stop ();
-+  
-+  /* Never reach here.  */
-+  return 0;
-+}
-+
-+static struct builtin builtin_quit =
-+{
-+  "quit",
-+  quit_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "quit",
-+  "Exit from the GRUB shell."
-+};
-+#endif /* GRUB_UTIL */
-+
-+\f
-+#ifdef SUPPORT_NETBOOT
-+/* rarp */
-+static int
-+rarp_func (char *arg, int flags)
-+{
-+  if (! rarp ())
-+    {
-+      if (errnum == ERR_NONE)
-+      errnum = ERR_DEV_VALUES;
-+
-+      return 1;
-+    }
-+
-+  /* Notify the configuration.  */
-+  print_network_configuration ();
-+  return 0;
-+}
-+
-+static struct builtin builtin_rarp =
-+{
-+  "rarp",
-+  rarp_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "rarp",
-+  "Initialize a network device via RARP."
-+};
-+#endif /* SUPPORT_NETBOOT */
-+
-+\f
-+static int
-+read_func (char *arg, int flags)
-+{
-+  int addr;
-+
-+  if (! safe_parse_maxint (&arg, &addr))
-+    return 1;
-+
-+  grub_printf ("Address 0x%x: Value 0x%x\n",
-+             addr, *((unsigned *) RAW_ADDR (addr)));
-+  return 0;
-+}
-+
-+static struct builtin builtin_read =
-+{
-+  "read",
-+  read_func,
-+  BUILTIN_CMDLINE,
-+  "read ADDR",
-+  "Read a 32-bit value from memory at address ADDR and"
-+  " display it in hex format."
-+};
-+
-+\f
-+/* reboot */
-+static int
-+reboot_func (char *arg, int flags)
-+{
-+  grub_reboot ();
-+
-+  /* Never reach here.  */
-+  return 1;
-+}
-+
-+static struct builtin builtin_reboot =
-+{
-+  "reboot",
-+  reboot_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "reboot",
-+  "Reboot your system."
-+};
-+
-+\f
-+/* Print the root device information.  */
-+static void
-+print_root_device (void)
-+{
-+  if (saved_drive == NETWORK_DRIVE)
-+    {
-+      /* Network drive.  */
-+      grub_printf (" (nd):");
-+    }
-+  else if (saved_drive & 0x80)
-+    {
-+      /* Hard disk drive.  */
-+      grub_printf (" (hd%d", saved_drive - 0x80);
-+      
-+      if ((saved_partition & 0xFF0000) != 0xFF0000)
-+      grub_printf (",%d", saved_partition >> 16);
-+
-+      if ((saved_partition & 0x00FF00) != 0x00FF00)
-+      grub_printf (",%c", ((saved_partition >> 8) & 0xFF) + 'a');
-+
-+      grub_printf ("):");
-+    }
-+  else
-+    {
-+      /* Floppy disk drive.  */
-+      grub_printf (" (fd%d):", saved_drive);
-+    }
-+
-+  /* Print the filesystem information.  */
-+  current_partition = saved_partition;
-+  current_drive = saved_drive;
-+  print_fsys_type ();
-+}
-+
-+static int
-+real_root_func (char *arg, int attempt_mount)
-+{
-+  int hdbias = 0;
-+  char *biasptr;
-+  char *next;
-+
-+  /* If ARG is empty, just print the current root device.  */
-+  if (! *arg)
-+    {
-+      print_root_device ();
-+      return 0;
-+    }
-+  
-+  /* Call set_device to get the drive and the partition in ARG.  */
-+  next = set_device (arg);
-+  if (! next)
-+    return 1;
-+
-+  /* Ignore ERR_FSYS_MOUNT.  */
-+  if (attempt_mount)
-+    {
-+      if (! open_device () && errnum != ERR_FSYS_MOUNT)
-+      return 1;
-+    }
-+  else
-+    {
-+      /* This is necessary, because the location of a partition table
-+       must be set appropriately.  */
-+      if (open_partition ())
-+      {
-+        set_bootdev (0);
-+        if (errnum)
-+          return 1;
-+      }
-+    }
-+  
-+  /* Clear ERRNUM.  */
-+  errnum = 0;
-+  saved_partition = current_partition;
-+  saved_drive = current_drive;
-+
-+  if (attempt_mount)
-+    {
-+      /* BSD and chainloading evil hacks !!  */
-+      biasptr = skip_to (0, next);
-+      safe_parse_maxint (&biasptr, &hdbias);
-+      errnum = 0;
-+      bootdev = set_bootdev (hdbias);
-+      if (errnum)
-+      return 1;
-+      
-+      /* Print the type of the filesystem.  */
-+      print_fsys_type ();
-+    }
-+  
-+  return 0;
-+}
-+
-+static int
-+root_func (char *arg, int flags)
-+{
-+  return real_root_func (arg, 1);
-+}
-+
-+static struct builtin builtin_root =
-+{
-+  "root",
-+  root_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "root [DEVICE [HDBIAS]]",
-+  "Set the current \"root device\" to the device DEVICE, then"
-+  " attempt to mount it to get the partition size (for passing the"
-+  " partition descriptor in `ES:ESI', used by some chain-loaded"
-+  " bootloaders), the BSD drive-type (for booting BSD kernels using"
-+  " their native boot format), and correctly determine "
-+  " the PC partition where a BSD sub-partition is located. The"
-+  " optional HDBIAS parameter is a number to tell a BSD kernel"
-+  " how many BIOS drive numbers are on controllers before the current"
-+  " one. For example, if there is an IDE disk and a SCSI disk, and your"
-+  " FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS."
-+};
-+
-+\f
-+/* rootnoverify */
-+static int
-+rootnoverify_func (char *arg, int flags)
-+{
-+  return real_root_func (arg, 0);
-+}
-+
-+static struct builtin builtin_rootnoverify =
-+{
-+  "rootnoverify",
-+  rootnoverify_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "rootnoverify [DEVICE [HDBIAS]]",
-+  "Similar to `root', but don't attempt to mount the partition. This"
-+  " is useful for when an OS is outside of the area of the disk that"
-+  " GRUB can read, but setting the correct root device is still"
-+  " desired. Note that the items mentioned in `root' which"
-+  " derived from attempting the mount will NOT work correctly."
-+};
-+
-+\f
-+/* savedefault */
-+static int
-+savedefault_func (char *arg, int flags)
-+{
-+#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL)
-+  unsigned long tmp_drive = saved_drive;
-+  unsigned long tmp_partition = saved_partition;
-+  char *default_file = (char *) DEFAULT_FILE_BUF;
-+  char buf[10];
-+  char sect[SECTOR_SIZE];
-+  int entryno;
-+  int sector_count = 0;
-+  int saved_sectors[2];
-+  int saved_offsets[2];
-+  int saved_lengths[2];
-+
-+  /* Save sector information about at most two sectors.  */
-+  auto void disk_read_savesect_func (int sector, int offset, int length);
-+  void disk_read_savesect_func (int sector, int offset, int length)
-+    {
-+      if (sector_count < 2)
-+      {
-+        saved_sectors[sector_count] = sector;
-+        saved_offsets[sector_count] = offset;
-+        saved_lengths[sector_count] = length;
-+      }
-+      sector_count++;
-+    }
-+  
-+  /* This command is only useful when you boot an entry from the menu
-+     interface.  */
-+  if (! (flags & BUILTIN_SCRIPT))
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      return 1;
-+    }
-+
-+  /* Determine a saved entry number.  */
-+  if (*arg)
-+    {
-+      if (grub_memcmp (arg, "fallback", sizeof ("fallback") - 1) == 0)
-+      {
-+        int i;
-+        int index = 0;
-+        
-+        for (i = 0; i < MAX_FALLBACK_ENTRIES; i++)
-+          {
-+            if (fallback_entries[i] < 0)
-+              break;
-+            if (fallback_entries[i] == current_entryno)
-+              {
-+                index = i + 1;
-+                break;
-+              }
-+          }
-+        
-+        if (index >= MAX_FALLBACK_ENTRIES || fallback_entries[index] < 0)
-+          {
-+            /* This is the last.  */
-+            errnum = ERR_BAD_ARGUMENT;
-+            return 1;
-+          }
-+
-+        entryno = fallback_entries[index];
-+      }
-+      else if (! safe_parse_maxint (&arg, &entryno))
-+      return 1;
-+    }
-+  else
-+    entryno = current_entryno;
-+
-+  /* Open the default file.  */
-+  saved_drive = boot_drive;
-+  saved_partition = install_partition;
-+  if (grub_open (default_file))
-+    {
-+      int len;
-+      
-+      disk_read_hook = disk_read_savesect_func;
-+      len = grub_read (buf, sizeof (buf));
-+      disk_read_hook = 0;
-+      grub_close ();
-+      
-+      if (len != sizeof (buf))
-+      {
-+        /* This is too small. Do not modify the file manually, please!  */
-+        errnum = ERR_READ;
-+        goto fail;
-+      }
-+
-+      if (sector_count > 2)
-+      {
-+        /* Is this possible?! Too fragmented!  */
-+        errnum = ERR_FSYS_CORRUPT;
-+        goto fail;
-+      }
-+      
-+      /* Set up a string to be written.  */
-+      grub_memset (buf, '\n', sizeof (buf));
-+      grub_sprintf (buf, "%d", entryno);
-+      
-+      if (saved_lengths[0] < sizeof (buf))
-+      {
-+        /* The file is anchored to another file and the first few bytes
-+           are spanned in two sectors. Uggh...  */
-+        if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE,
-+                       sect))
-+          goto fail;
-+        grub_memmove (sect + saved_offsets[0], buf, saved_lengths[0]);
-+        if (! rawwrite (current_drive, saved_sectors[0], sect))
-+          goto fail;
-+
-+        if (! rawread (current_drive, saved_sectors[1], 0, SECTOR_SIZE,
-+                       sect))
-+          goto fail;
-+        grub_memmove (sect + saved_offsets[1],
-+                      buf + saved_lengths[0],
-+                      sizeof (buf) - saved_lengths[0]);
-+        if (! rawwrite (current_drive, saved_sectors[1], sect))
-+          goto fail;
-+      }
-+      else
-+      {
-+        /* This is a simple case. It fits into a single sector.  */
-+        if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE,
-+                       sect))
-+          goto fail;
-+        grub_memmove (sect + saved_offsets[0], buf, sizeof (buf));
-+        if (! rawwrite (current_drive, saved_sectors[0], sect))
-+          goto fail;
-+      }
-+
-+      /* Clear the cache.  */
-+      buf_track = -1;
-+    }
-+
-+ fail:
-+  saved_drive = tmp_drive;
-+  saved_partition = tmp_partition;
-+  return errnum;
-+#else /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */
-+  errnum = ERR_UNRECOGNIZED;
-+  return 1;
-+#endif /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */
-+}
-+
-+static struct builtin builtin_savedefault =
-+{
-+  "savedefault",
-+  savedefault_func,
-+  BUILTIN_CMDLINE,
-+  "savedefault [NUM | `fallback']",
-+  "Save the current entry as the default boot entry if no argument is"
-+  " specified. If a number is specified, this number is saved. If"
-+  " `fallback' is used, next fallback entry is saved."
-+};
-+
-+\f
-+#ifdef SUPPORT_SERIAL
-+/* serial */
-+static int
-+serial_func (char *arg, int flags)
-+{
-+  unsigned short port = serial_hw_get_port (0);
-+  unsigned int speed = 9600;
-+  int word_len = UART_8BITS_WORD;
-+  int parity = UART_NO_PARITY;
-+  int stop_bit_len = UART_1_STOP_BIT;
-+
-+  /* Process GNU-style long options.
-+     FIXME: We should implement a getopt-like function, to avoid
-+     duplications.  */
-+  while (1)
-+    {
-+      if (grub_memcmp (arg, "--unit=", sizeof ("--unit=") - 1) == 0)
-+      {
-+        char *p = arg + sizeof ("--unit=") - 1;
-+        int unit;
-+        
-+        if (! safe_parse_maxint (&p, &unit))
-+          return 1;
-+        
-+        if (unit < 0 || unit > 3)
-+          {
-+            errnum = ERR_DEV_VALUES;
-+            return 1;
-+          }
-+
-+        port = serial_hw_get_port (unit);
-+      }
-+      else if (grub_memcmp (arg, "--speed=", sizeof ("--speed=") - 1) == 0)
-+      {
-+        char *p = arg + sizeof ("--speed=") - 1;
-+        int num;
-+        
-+        if (! safe_parse_maxint (&p, &num))
-+          return 1;
-+
-+        speed = (unsigned int) num;
-+      }
-+      else if (grub_memcmp (arg, "--port=", sizeof ("--port=") - 1) == 0)
-+      {
-+        char *p = arg + sizeof ("--port=") - 1;
-+        int num;
-+        
-+        if (! safe_parse_maxint (&p, &num))
-+          return 1;
-+
-+        port = (unsigned short) num;
-+      }
-+      else if (grub_memcmp (arg, "--word=", sizeof ("--word=") - 1) == 0)
-+      {
-+        char *p = arg + sizeof ("--word=") - 1;
-+        int len;
-+        
-+        if (! safe_parse_maxint (&p, &len))
-+          return 1;
-+
-+        switch (len)
-+          {
-+          case 5: word_len = UART_5BITS_WORD; break;
-+          case 6: word_len = UART_6BITS_WORD; break;
-+          case 7: word_len = UART_7BITS_WORD; break;
-+          case 8: word_len = UART_8BITS_WORD; break;
-+          default:
-+            errnum = ERR_BAD_ARGUMENT;
-+            return 1;
-+          }
-+      }
-+      else if (grub_memcmp (arg, "--stop=", sizeof ("--stop=") - 1) == 0)
-+      {
-+        char *p = arg + sizeof ("--stop=") - 1;
-+        int len;
-+        
-+        if (! safe_parse_maxint (&p, &len))
-+          return 1;
-+
-+        switch (len)
-+          {
-+          case 1: stop_bit_len = UART_1_STOP_BIT; break;
-+          case 2: stop_bit_len = UART_2_STOP_BITS; break;
-+          default:
-+            errnum = ERR_BAD_ARGUMENT;
-+            return 1;
-+          }
-+      }
-+      else if (grub_memcmp (arg, "--parity=", sizeof ("--parity=") - 1) == 0)
-+      {
-+        char *p = arg + sizeof ("--parity=") - 1;
-+
-+        if (grub_memcmp (p, "no", sizeof ("no") - 1) == 0)
-+          parity = UART_NO_PARITY;
-+        else if (grub_memcmp (p, "odd", sizeof ("odd") - 1) == 0)
-+          parity = UART_ODD_PARITY;
-+        else if (grub_memcmp (p, "even", sizeof ("even") - 1) == 0)
-+          parity = UART_EVEN_PARITY;
-+        else
-+          {
-+            errnum = ERR_BAD_ARGUMENT;
-+            return 1;
-+          }
-+      }
-+# ifdef GRUB_UTIL
-+      /* In the grub shell, don't use any port number but open a tty
-+       device instead.  */
-+      else if (grub_memcmp (arg, "--device=", sizeof ("--device=") - 1) == 0)
-+      {
-+        char *p = arg + sizeof ("--device=") - 1;
-+        char dev[256];        /* XXX */
-+        char *q = dev;
-+        
-+        while (*p && ! grub_isspace (*p))
-+          *q++ = *p++;
-+        
-+        *q = 0;
-+        serial_set_device (dev);
-+      }
-+# endif /* GRUB_UTIL */
-+      else
-+      break;
-+
-+      arg = skip_to (0, arg);
-+    }
-+
-+  /* Initialize the serial unit.  */
-+  if (! serial_hw_init (port, speed, word_len, parity, stop_bit_len))
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_serial =
-+{
-+  "serial",
-+  serial_func,
-+  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] [--parity=PARITY] [--stop=STOP] [--device=DEV]",
-+  "Initialize a serial device. UNIT is a digit that specifies which serial"
-+  " device is used (e.g. 0 == COM1). If you need to specify the port number,"
-+  " set it by --port. SPEED is the DTE-DTE speed. WORD is the word length,"
-+  " PARITY is the type of parity, which is one of `no', `odd' and `even'."
-+  " STOP is the length of stop bit(s). The option --device can be used only"
-+  " in the grub shell, which specifies the file name of a tty device. The"
-+  " default values are COM1, 9600, 8N1."
-+};
-+#endif /* SUPPORT_SERIAL */
-+
-+\f
-+/* setkey */
-+struct keysym
-+{
-+  char *unshifted_name;                       /* the name in unshifted state */
-+  char *shifted_name;                 /* the name in shifted state */
-+  unsigned char unshifted_ascii;      /* the ascii code in unshifted state */
-+  unsigned char shifted_ascii;                /* the ascii code in shifted state */
-+  unsigned char keycode;              /* keyboard scancode */
-+};
-+
-+/* The table for key symbols. If the "shifted" member of an entry is
-+   NULL, the entry does not have shifted state.  */
-+static struct keysym keysym_table[] =
-+{
-+  {"escape",          0,              0x1b,   0,      0x01},
-+  {"1",                       "exclam",       '1',    '!',    0x02},
-+  {"2",                       "at",           '2',    '@',    0x03},
-+  {"3",                       "numbersign",   '3',    '#',    0x04},
-+  {"4",                       "dollar",       '4',    '$',    0x05},
-+  {"5",                       "percent",      '5',    '%',    0x06},
-+  {"6",                       "caret",        '6',    '^',    0x07},
-+  {"7",                       "ampersand",    '7',    '&',    0x08},
-+  {"8",                       "asterisk",     '8',    '*',    0x09},
-+  {"9",                       "parenleft",    '9',    '(',    0x0a},
-+  {"0",                       "parenright",   '0',    ')',    0x0b},
-+  {"minus",           "underscore",   '-',    '_',    0x0c},
-+  {"equal",           "plus",         '=',    '+',    0x0d},
-+  {"backspace",               0,              '\b',   0,      0x0e},
-+  {"tab",             0,              '\t',   0,      0x0f},
-+  {"q",                       "Q",            'q',    'Q',    0x10},
-+  {"w",                       "W",            'w',    'W',    0x11},
-+  {"e",                       "E",            'e',    'E',    0x12},
-+  {"r",                       "R",            'r',    'R',    0x13},
-+  {"t",                       "T",            't',    'T',    0x14},
-+  {"y",                       "Y",            'y',    'Y',    0x15},
-+  {"u",                       "U",            'u',    'U',    0x16},
-+  {"i",                       "I",            'i',    'I',    0x17},
-+  {"o",                       "O",            'o',    'O',    0x18},
-+  {"p",                       "P",            'p',    'P',    0x19},
-+  {"bracketleft",     "braceleft",    '[',    '{',    0x1a},
-+  {"bracketright",    "braceright",   ']',    '}',    0x1b},
-+  {"enter",           0,              '\n',   0,      0x1c},
-+  {"control",         0,              0,      0,      0x1d},
-+  {"a",                       "A",            'a',    'A',    0x1e},
-+  {"s",                       "S",            's',    'S',    0x1f},
-+  {"d",                       "D",            'd',    'D',    0x20},
-+  {"f",                       "F",            'f',    'F',    0x21},
-+  {"g",                       "G",            'g',    'G',    0x22},
-+  {"h",                       "H",            'h',    'H',    0x23},
-+  {"j",                       "J",            'j',    'J',    0x24},
-+  {"k",                       "K",            'k',    'K',    0x25},
-+  {"l",                       "L",            'l',    'L',    0x26},
-+  {"semicolon",               "colon",        ';',    ':',    0x27},
-+  {"quote",           "doublequote",  '\'',   '"',    0x28},
-+  {"backquote",               "tilde",        '`',    '~',    0x29},
-+  {"shift",           0,              0,      0,      0x2a},
-+  {"backslash",               "bar",          '\\',   '|',    0x2b},
-+  {"z",                       "Z",            'z',    'Z',    0x2c},
-+  {"x",                       "X",            'x',    'X',    0x2d},
-+  {"c",                       "C",            'c',    'C',    0x2e},
-+  {"v",                       "V",            'v',    'V',    0x2f},
-+  {"b",                       "B",            'b',    'B',    0x30},
-+  {"n",                       "N",            'n',    'N',    0x31},
-+  {"m",                       "M",            'm',    'M',    0x32},
-+  {"comma",           "less",         ',',    '<',    0x33},
-+  {"period",          "greater",      '.',    '>',    0x34},
-+  {"slash",           "question",     '/',    '?',    0x35},
-+  {"alt",             0,              0,      0,      0x38},
-+  {"space",           0,              ' ',    0,      0x39},
-+  {"capslock",                0,              0,      0,      0x3a},
-+  {"F1",              0,              0,      0,      0x3b},
-+  {"F2",              0,              0,      0,      0x3c},
-+  {"F3",              0,              0,      0,      0x3d},
-+  {"F4",              0,              0,      0,      0x3e},
-+  {"F5",              0,              0,      0,      0x3f},
-+  {"F6",              0,              0,      0,      0x40},
-+  {"F7",              0,              0,      0,      0x41},
-+  {"F8",              0,              0,      0,      0x42},
-+  {"F9",              0,              0,      0,      0x43},
-+  {"F10",             0,              0,      0,      0x44},
-+  /* Caution: do not add NumLock here! we cannot deal with it properly.  */
-+  {"delete",          0,              0x7f,   0,      0x53}
-+};
-+
-+static int
-+setkey_func (char *arg, int flags)
-+{
-+  char *to_key, *from_key;
-+  int to_code, from_code;
-+  int map_in_interrupt = 0;
-+  
-+  auto int find_key_code (char *key);
-+  auto int find_ascii_code (char *key);
-+  
-+  auto int find_key_code (char *key)
-+    {
-+      int i;
-+
-+      for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
-+      {
-+        if (keysym_table[i].unshifted_name &&
-+            grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
-+          return keysym_table[i].keycode;
-+        else if (keysym_table[i].shifted_name &&
-+                 grub_strcmp (key, keysym_table[i].shifted_name) == 0)
-+          return keysym_table[i].keycode;
-+      }
-+      
-+      return 0;
-+    }
-+  
-+  auto int find_ascii_code (char *key)
-+    {
-+      int i;
-+      
-+      for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
-+      {
-+        if (keysym_table[i].unshifted_name &&
-+            grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
-+          return keysym_table[i].unshifted_ascii;
-+        else if (keysym_table[i].shifted_name &&
-+                 grub_strcmp (key, keysym_table[i].shifted_name) == 0)
-+          return keysym_table[i].shifted_ascii;
-+      }
-+      
-+      return 0;
-+    }
-+  
-+  to_key = arg;
-+  from_key = skip_to (0, to_key);
-+
-+  if (! *to_key)
-+    {
-+      /* If the user specifies no argument, reset the key mappings.  */
-+      grub_memset (bios_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short));
-+      grub_memset (ascii_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short));
-+
-+      return 0;
-+    }
-+  else if (! *from_key)
-+    {
-+      /* The user must specify two arguments or zero argument.  */
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+  
-+  nul_terminate (to_key);
-+  nul_terminate (from_key);
-+  
-+  to_code = find_ascii_code (to_key);
-+  from_code = find_ascii_code (from_key);
-+  if (! to_code || ! from_code)
-+    {
-+      map_in_interrupt = 1;
-+      to_code = find_key_code (to_key);
-+      from_code = find_key_code (from_key);
-+      if (! to_code || ! from_code)
-+      {
-+        errnum = ERR_BAD_ARGUMENT;
-+        return 1;
-+      }
-+    }
-+  
-+  if (map_in_interrupt)
-+    {
-+      int i;
-+      
-+      /* Find an empty slot.  */
-+      for (i = 0; i < KEY_MAP_SIZE; i++)
-+      {
-+        if ((bios_key_map[i] & 0xff) == from_code)
-+          /* Perhaps the user wants to overwrite the map.  */
-+          break;
-+        
-+        if (! bios_key_map[i])
-+          break;
-+      }
-+      
-+      if (i == KEY_MAP_SIZE)
-+      {
-+        errnum = ERR_WONT_FIT;
-+        return 1;
-+      }
-+      
-+      if (to_code == from_code)
-+      /* If TO is equal to FROM, delete the entry.  */
-+      grub_memmove ((char *) &bios_key_map[i],
-+                    (char *) &bios_key_map[i + 1],
-+                    sizeof (unsigned short) * (KEY_MAP_SIZE - i));
-+      else
-+      bios_key_map[i] = (to_code << 8) | from_code;
-+      
-+      /* Ugly but should work.  */
-+      unset_int15_handler ();
-+      set_int15_handler ();
-+    }
-+  else
-+    {
-+      int i;
-+      
-+      /* Find an empty slot.  */
-+      for (i = 0; i < KEY_MAP_SIZE; i++)
-+      {
-+        if ((ascii_key_map[i] & 0xff) == from_code)
-+          /* Perhaps the user wants to overwrite the map.  */
-+          break;
-+        
-+        if (! ascii_key_map[i])
-+          break;
-+      }
-+      
-+      if (i == KEY_MAP_SIZE)
-+      {
-+        errnum = ERR_WONT_FIT;
-+        return 1;
-+      }
-+      
-+      if (to_code == from_code)
-+      /* If TO is equal to FROM, delete the entry.  */
-+      grub_memmove ((char *) &ascii_key_map[i],
-+                    (char *) &ascii_key_map[i + 1],
-+                    sizeof (unsigned short) * (KEY_MAP_SIZE - i));
-+      else
-+      ascii_key_map[i] = (to_code << 8) | from_code;
-+    }
-+      
-+  return 0;
-+}
-+
-+static struct builtin builtin_setkey =
-+{
-+  "setkey",
-+  setkey_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "setkey [TO_KEY FROM_KEY]",
-+  "Change the keyboard map. The key FROM_KEY is mapped to the key TO_KEY."
-+  " A key must be an alphabet, a digit, or one of these: escape, exclam,"
-+  " at, numbersign, dollar, percent, caret, ampersand, asterisk, parenleft,"
-+  " parenright, minus, underscore, equal, plus, backspace, tab, bracketleft,"
-+  " braceleft, bracketright, braceright, enter, control, semicolon, colon,"
-+  " quote, doublequote, backquote, tilde, shift, backslash, bar, comma,"
-+  " less, period, greater, slash, question, alt, space, capslock, FX (X"
-+  " is a digit), and delete. If no argument is specified, reset key"
-+  " mappings."
-+};
-+
-+\f
-+/* setup */
-+static int
-+setup_func (char *arg, int flags)
-+{
-+  /* Point to the string of the installed drive/partition.  */
-+  char *install_ptr;
-+  /* Point to the string of the drive/parition where the GRUB images
-+     reside.  */
-+  char *image_ptr;
-+  unsigned long installed_drive, installed_partition;
-+  unsigned long image_drive, image_partition;
-+  unsigned long tmp_drive, tmp_partition;
-+  char stage1[64];
-+  char stage2[64];
-+  char config_filename[64];
-+  char real_config_filename[64];
-+  char cmd_arg[256];
-+  char device[16];
-+  char *buffer = (char *) RAW_ADDR (0x100000);
-+  int is_force_lba = 0;
-+  char *stage2_arg = 0;
-+  char *prefix = 0;
-+
-+  auto int check_file (char *file);
-+  auto void sprint_device (int drive, int partition);
-+  auto int embed_stage1_5 (char * stage1_5, int drive, int partition);
-+  
-+  /* Check if the file FILE exists like Autoconf.  */
-+  int check_file (char *file)
-+    {
-+      int ret;
-+      
-+      grub_printf (" Checking if \"%s\" exists... ", file);
-+      ret = grub_open (file);
-+      if (ret)
-+      {
-+        grub_close ();
-+        grub_printf ("yes\n");
-+      }
-+      else
-+      grub_printf ("no\n");
-+
-+      return ret;
-+    }
-+  
-+  /* Construct a device name in DEVICE.  */
-+  void sprint_device (int drive, int partition)
-+    {
-+      grub_sprintf (device, "(%cd%d",
-+                  (drive & 0x80) ? 'h' : 'f',
-+                  drive & ~0x80);
-+      if ((partition & 0xFF0000) != 0xFF0000)
-+      {
-+        char tmp[16];
-+        grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF);
-+        grub_strncat (device, tmp, 256);
-+      }
-+      if ((partition & 0x00FF00) != 0x00FF00)
-+      {
-+        char tmp[16];
-+        grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF));
-+        grub_strncat (device, tmp, 256);
-+      }
-+      grub_strncat (device, ")", 256);
-+    }
-+  
-+  int embed_stage1_5 (char *stage1_5, int drive, int partition)
-+    {
-+      /* We install GRUB into the MBR, so try to embed the
-+       Stage 1.5 in the sectors right after the MBR.  */
-+      sprint_device (drive, partition);
-+      grub_sprintf (cmd_arg, "%s %s", stage1_5, device);
-+            
-+      /* Notify what will be run.  */
-+      grub_printf (" Running \"embed %s\"... ", cmd_arg);
-+      
-+      embed_func (cmd_arg, flags);
-+      if (! errnum)
-+      {
-+        /* Construct the blocklist representation.  */
-+        grub_sprintf (buffer, "%s%s", device, embed_info);
-+        grub_printf ("succeeded\n");
-+        return 1;
-+      }
-+      else
-+      {
-+        grub_printf ("failed (this is not fatal)\n");
-+        return 0;
-+      }
-+    }
-+        
-+  struct stage1_5_map {
-+    char *fsys;
-+    char *name;
-+  };
-+  struct stage1_5_map stage1_5_map[] =
-+  {
-+    {"ext2fs",   "/e2fs_stage1_5"},
-+    {"fat",      "/fat_stage1_5"},
-+    {"ufs2",     "/ufs2_stage1_5"},
-+    {"ffs",      "/ffs_stage1_5"},
-+    {"iso9660",  "/iso9660_stage1_5"},
-+    {"jfs",      "/jfs_stage1_5"},
-+    {"minix",    "/minix_stage1_5"},
-+    {"reiserfs", "/reiserfs_stage1_5"},
-+    {"vstafs",   "/vstafs_stage1_5"},
-+    {"xfs",      "/xfs_stage1_5"}
-+  };
-+
-+  tmp_drive = saved_drive;
-+  tmp_partition = saved_partition;
-+
-+  /* Check if the user specifies --force-lba.  */
-+  while (1)
-+    {
-+      if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0)
-+      {
-+        is_force_lba = 1;
-+        arg = skip_to (0, arg);
-+      }
-+      else if (grub_memcmp ("--prefix=", arg, sizeof ("--prefix=") - 1) == 0)
-+      {
-+        prefix = arg + sizeof ("--prefix=") - 1;
-+        arg = skip_to (0, arg);
-+        nul_terminate (prefix);
-+      }
-+#ifdef GRUB_UTIL
-+      else if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0)
-+      {
-+        stage2_arg = arg;
-+        arg = skip_to (0, arg);
-+        nul_terminate (stage2_arg);
-+      }
-+#endif /* GRUB_UTIL */
-+      else
-+      break;
-+    }
-+  
-+  install_ptr = arg;
-+  image_ptr = skip_to (0, install_ptr);
-+
-+  /* Make sure that INSTALL_PTR is valid.  */
-+  set_device (install_ptr);
-+  if (errnum)
-+    return 1;
-+
-+  installed_drive = current_drive;
-+  installed_partition = current_partition;
-+  
-+  /* Mount the drive pointed by IMAGE_PTR.  */
-+  if (*image_ptr)
-+    {
-+      /* If the drive/partition where the images reside is specified,
-+       get the drive and the partition.  */
-+      set_device (image_ptr);
-+      if (errnum)
-+      return 1;
-+    }
-+  else
-+    {
-+      /* If omitted, use SAVED_PARTITION and SAVED_DRIVE.  */
-+      current_drive = saved_drive;
-+      current_partition = saved_partition;
-+    }
-+
-+  image_drive = saved_drive = current_drive;
-+  image_partition = saved_partition = current_partition;
-+
-+  /* Open it.  */
-+  if (! open_device ())
-+    goto fail;
-+
-+  /* Check if stage1 exists. If the user doesn't specify the option
-+     `--prefix', attempt /boot/grub and /grub.  */
-+  /* NOTE: It is dangerous to run this command without `--prefix' in the
-+     grub shell, since that affects `--stage2'.  */
-+  if (! prefix)
-+    {
-+      prefix = "/boot/grub";
-+      grub_sprintf (stage1, "%s%s", prefix, "/stage1");
-+      if (! check_file (stage1))
-+      {
-+        errnum = ERR_NONE;
-+        prefix = "/grub";
-+        grub_sprintf (stage1, "%s%s", prefix, "/stage1");
-+        if (! check_file (stage1))
-+          goto fail;
-+      }
-+    }
-+  else
-+    {
-+      grub_sprintf (stage1, "%s%s", prefix, "/stage1");
-+      if (! check_file (stage1))
-+      goto fail;
-+    }
-+
-+  /* The prefix was determined.  */
-+  grub_sprintf (stage2, "%s%s", prefix, "/stage2");
-+  grub_sprintf (config_filename, "%s%s", prefix, "/menu.lst");
-+  *real_config_filename = 0;
-+
-+  /* Check if stage2 exists.  */
-+  if (! check_file (stage2))
-+    goto fail;
-+
-+  {
-+    char *fsys = fsys_table[fsys_type].name;
-+    int i;
-+    int size = sizeof (stage1_5_map) / sizeof (stage1_5_map[0]);
-+    
-+    /* Iterate finding the same filesystem name as FSYS.  */
-+    for (i = 0; i < size; i++)
-+      if (grub_strcmp (fsys, stage1_5_map[i].fsys) == 0)
-+      {
-+        /* OK, check if the Stage 1.5 exists.  */
-+        char stage1_5[64];
-+        
-+        grub_sprintf (stage1_5, "%s%s", prefix, stage1_5_map[i].name);
-+        if (check_file (stage1_5))
-+          {
-+            if (embed_stage1_5 (stage1_5, 
-+                                  installed_drive, installed_partition)
-+                || embed_stage1_5 (stage1_5, 
-+                                   image_drive, image_partition))
-+              {
-+                grub_strcpy (real_config_filename, config_filename);
-+                sprint_device (image_drive, image_partition);
-+                grub_sprintf (config_filename, "%s%s", device, stage2);
-+                grub_strcpy (stage2, buffer);
-+              }
-+          }
-+        errnum = 0;
-+        break;
-+      }
-+  }
-+
-+  /* Construct a string that is used by the command "install" as its
-+     arguments.  */
-+  sprint_device (installed_drive, installed_partition);
-+  
-+#if 1
-+  /* Don't embed a drive number unnecessarily.  */
-+  grub_sprintf (cmd_arg, "%s%s%s%s %s%s %s p %s %s",
-+              is_force_lba? "--force-lba " : "",
-+              stage2_arg? stage2_arg : "",
-+              stage2_arg? " " : "",
-+              stage1,
-+              (installed_drive != image_drive) ? "d " : "",
-+              device,
-+              stage2,
-+              config_filename,
-+              real_config_filename);
-+#else /* NOT USED */
-+  /* This code was used, because we belived some BIOSes had a problem
-+     that they didn't pass a booting drive correctly. It turned out,
-+     however, stage1 could trash a booting drive when checking LBA support,
-+     because some BIOSes modified the register %dx in INT 13H, AH=48H.
-+     So it becamed unclear whether GRUB should use a pre-defined booting
-+     drive or not. If the problem still exists, it would be necessary to
-+     switch back to this code.  */
-+  grub_sprintf (cmd_arg, "%s%s%s%s d %s %s p %s %s",
-+              is_force_lba? "--force-lba " : "",
-+              stage2_arg? stage2_arg : "",
-+              stage2_arg? " " : "",
-+              stage1,
-+              device,
-+              stage2,
-+              config_filename,
-+              real_config_filename);
-+#endif /* NOT USED */
-+  
-+  /* Notify what will be run.  */
-+  grub_printf (" Running \"install %s\"... ", cmd_arg);
-+
-+  /* Make sure that SAVED_DRIVE and SAVED_PARTITION are identical
-+     with IMAGE_DRIVE and IMAGE_PARTITION, respectively.  */
-+  saved_drive = image_drive;
-+  saved_partition = image_partition;
-+  
-+  /* Run the command.  */
-+  if (! install_func (cmd_arg, flags))
-+    grub_printf ("succeeded\nDone.\n");
-+  else
-+    grub_printf ("failed\n");
-+
-+ fail:
-+  saved_drive = tmp_drive;
-+  saved_partition = tmp_partition;
-+  return errnum;
-+}
-+
-+static struct builtin builtin_setup =
-+{
-+  "setup",
-+  setup_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]",
-+  "Set up the installation of GRUB automatically. This command uses"
-+  " the more flexible command \"install\" in the backend and installs"
-+  " GRUB into the device INSTALL_DEVICE. If IMAGE_DEVICE is specified,"
-+  " then find the GRUB images in the device IMAGE_DEVICE, otherwise"
-+  " use the current \"root device\", which can be set by the command"
-+  " \"root\". If you know that your BIOS should support LBA but GRUB"
-+  " doesn't work in LBA mode, specify the option `--force-lba'."
-+  " If you install GRUB under the grub shell and you cannot unmount the"
-+  " partition where GRUB images reside, specify the option `--stage2'"
-+  " to tell GRUB the file name under your OS."
-+};
-+
-+\f
-+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
-+/* terminal */
-+static int
-+terminal_func (char *arg, int flags)
-+{
-+  /* The index of the default terminal in TERM_TABLE.  */
-+  int default_term = -1;
-+  struct term_entry *prev_term = current_term;
-+  int to = -1;
-+  int lines = 0;
-+  int no_message = 0;
-+  unsigned long term_flags = 0;
-+  /* XXX: Assume less than 32 terminals.  */
-+  unsigned long term_bitmap = 0;
-+
-+  /* Get GNU-style long options.  */
-+  while (1)
-+    {
-+      if (grub_memcmp (arg, "--dumb", sizeof ("--dumb") - 1) == 0)
-+      term_flags |= TERM_DUMB;
-+      else if (grub_memcmp (arg, "--no-echo", sizeof ("--no-echo") - 1) == 0)
-+      /* ``--no-echo'' implies ``--no-edit''.  */
-+      term_flags |= (TERM_NO_ECHO | TERM_NO_EDIT);
-+      else if (grub_memcmp (arg, "--no-edit", sizeof ("--no-edit") - 1) == 0)
-+      term_flags |= TERM_NO_EDIT;
-+      else if (grub_memcmp (arg, "--timeout=", sizeof ("--timeout=") - 1) == 0)
-+      {
-+        char *val = arg + sizeof ("--timeout=") - 1;
-+        
-+        if (! safe_parse_maxint (&val, &to))
-+          return 1;
-+      }
-+      else if (grub_memcmp (arg, "--lines=", sizeof ("--lines=") - 1) == 0)
-+      {
-+        char *val = arg + sizeof ("--lines=") - 1;
-+
-+        if (! safe_parse_maxint (&val, &lines))
-+          return 1;
-+
-+        /* Probably less than four is meaningless....  */
-+        if (lines < 4)
-+          {
-+            errnum = ERR_BAD_ARGUMENT;
-+            return 1;
-+          }
-+      }
-+      else if (grub_memcmp (arg, "--silent", sizeof ("--silent") - 1) == 0)
-+      no_message = 1;
-+      else
-+      break;
-+
-+      arg = skip_to (0, arg);
-+    }
-+  
-+  /* If no argument is specified, show current setting.  */
-+  if (! *arg)
-+    {
-+      grub_printf ("%s%s%s%s\n",
-+                 current_term->name,
-+                 current_term->flags & TERM_DUMB ? " (dumb)" : "",
-+                 current_term->flags & TERM_NO_EDIT ? " (no edit)" : "",
-+                 current_term->flags & TERM_NO_ECHO ? " (no echo)" : "");
-+      return 0;
-+    }
-+
-+  while (*arg)
-+    {
-+      int i;
-+      char *next = skip_to (0, arg);
-+      
-+      nul_terminate (arg);
-+
-+      for (i = 0; term_table[i].name; i++)
-+      {
-+        if (grub_strcmp (arg, term_table[i].name) == 0)
-+          {
-+            if (term_table[i].flags & TERM_NEED_INIT)
-+              {
-+                errnum = ERR_DEV_NEED_INIT;
-+                return 1;
-+              }
-+            
-+            if (default_term < 0)
-+              default_term = i;
-+
-+            term_bitmap |= (1 << i);
-+            break;
-+          }
-+      }
-+
-+      if (! term_table[i].name)
-+      {
-+        errnum = ERR_BAD_ARGUMENT;
-+        return 1;
-+      }
-+
-+      arg = next;
-+    }
-+
-+  /* If multiple terminals are specified, wait until the user pushes any
-+     key on one of the terminals.  */
-+  if (term_bitmap & ~(1 << default_term))
-+    {
-+      int time1, time2 = -1;
-+
-+      /* XXX: Disable the pager.  */
-+      count_lines = -1;
-+      
-+      /* Get current time.  */
-+      while ((time1 = getrtsecs ()) == 0xFF)
-+      ;
-+
-+      /* Wait for a key input.  */
-+      while (to)
-+      {
-+        int i;
-+
-+        for (i = 0; term_table[i].name; i++)
-+          {
-+            if (term_bitmap & (1 << i))
-+              {
-+                if (term_table[i].checkkey () >= 0)
-+                  {
-+                    (void) term_table[i].getkey ();
-+                    default_term = i;
-+                    
-+                    goto end;
-+                  }
-+              }
-+          }
-+        
-+        /* Prompt the user, once per sec.  */
-+        if ((time1 = getrtsecs ()) != time2 && time1 != 0xFF)
-+          {
-+            if (! no_message)
-+              {
-+                /* Need to set CURRENT_TERM to each of selected
-+                   terminals.  */
-+                for (i = 0; term_table[i].name; i++)
-+                  if (term_bitmap & (1 << i))
-+                    {
-+                      current_term = term_table + i;
-+                      grub_printf ("\rPress any key to continue.\n");
-+                    }
-+                
-+                /* Restore CURRENT_TERM.  */
-+                current_term = prev_term;
-+              }
-+            
-+            time2 = time1;
-+            if (to > 0)
-+              to--;
-+          }
-+      }
-+    }
-+
-+ end:
-+  current_term = term_table + default_term;
-+  current_term->flags = term_flags;
-+  
-+  if (lines)
-+    max_lines = lines;
-+  else
-+    /* 24 would be a good default value.  */
-+    max_lines = 24;
-+  
-+  /* If the interface is currently the command-line,
-+     restart it to repaint the screen.  */
-+  if (current_term != prev_term && (flags & BUILTIN_CMDLINE))
-+    grub_longjmp (restart_cmdline_env, 0);
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_terminal =
-+{
-+  "terminal",
-+  terminal_func,
-+  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]",
-+  "Select a terminal. When multiple terminals are specified, wait until"
-+  " you push any key to continue. If both console and serial are specified,"
-+  " the terminal to which you input a key first will be selected. If no"
-+  " argument is specified, print current setting. The option --dumb"
-+  " specifies that your terminal is dumb, otherwise, vt100-compatibility"
-+  " is assumed. If you specify --no-echo, input characters won't be echoed."
-+  " If you specify --no-edit, the BASH-like editing feature will be disabled."
-+  " If --timeout is present, this command will wait at most for SECS"
-+  " seconds. The option --lines specifies the maximum number of lines."
-+  " The option --silent is used to suppress messages."
-+};
-+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
-+
-+\f
-+#ifdef SUPPORT_SERIAL
-+static int
-+terminfo_func (char *arg, int flags)
-+{
-+  struct terminfo term;
-+
-+  if (*arg)
-+    {
-+      struct
-+      {
-+      const char *name;
-+      char *var;
-+      }
-+      options[] =
-+      {
-+        {"--name=", term.name},
-+        {"--cursor-address=", term.cursor_address},
-+        {"--clear-screen=", term.clear_screen},
-+        {"--enter-standout-mode=", term.enter_standout_mode},
-+        {"--exit-standout-mode=", term.exit_standout_mode}
-+      };
-+
-+      grub_memset (&term, 0, sizeof (term));
-+      
-+      while (*arg)
-+      {
-+        int i;
-+        char *next = skip_to (0, arg);
-+            
-+        nul_terminate (arg);
-+        
-+        for (i = 0; i < sizeof (options) / sizeof (options[0]); i++)
-+          {
-+            const char *name = options[i].name;
-+            int len = grub_strlen (name);
-+            
-+            if (! grub_memcmp (arg, name, len))
-+              {
-+                grub_strcpy (options[i].var, ti_unescape_string (arg + len));
-+                break;
-+              }
-+          }
-+
-+        if (i == sizeof (options) / sizeof (options[0]))
-+          {
-+            errnum = ERR_BAD_ARGUMENT;
-+            return errnum;
-+          }
-+
-+        arg = next;
-+      }
-+
-+      if (term.name[0] == 0 || term.cursor_address[0] == 0)
-+      {
-+        errnum = ERR_BAD_ARGUMENT;
-+        return errnum;
-+      }
-+
-+      ti_set_term (&term);
-+    }
-+  else
-+    {
-+      /* No option specifies printing out current settings.  */
-+      ti_get_term (&term);
-+
-+      grub_printf ("name=%s\n",
-+                 ti_escape_string (term.name));
-+      grub_printf ("cursor_address=%s\n",
-+                 ti_escape_string (term.cursor_address));
-+      grub_printf ("clear_screen=%s\n",
-+                 ti_escape_string (term.clear_screen));
-+      grub_printf ("enter_standout_mode=%s\n",
-+                 ti_escape_string (term.enter_standout_mode));
-+      grub_printf ("exit_standout_mode=%s\n",
-+                 ti_escape_string (term.exit_standout_mode));
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_terminfo =
-+{
-+  "terminfo",
-+  terminfo_func,
-+  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ]"
-+  " [--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]",
-+  
-+  "Define the capabilities of your terminal. Use this command to"
-+  " define escape sequences, if it is not vt100-compatible."
-+  " You may use \\e for ESC and ^X for a control character."
-+  " If no option is specified, the current settings are printed."
-+};
-+#endif /* SUPPORT_SERIAL */
-+        
-+\f
-+/* testload */
-+static int
-+testload_func (char *arg, int flags)
-+{
-+  int i;
-+
-+  kernel_type = KERNEL_TYPE_NONE;
-+
-+  if (! grub_open (arg))
-+    return 1;
-+
-+  disk_read_hook = disk_read_print_func;
-+
-+  /* Perform filesystem test on the specified file.  */
-+  /* Read whole file first. */
-+  grub_printf ("Whole file: ");
-+
-+  grub_read ((char *) RAW_ADDR (0x100000), -1);
-+
-+  /* Now compare two sections of the file read differently.  */
-+
-+  for (i = 0; i < 0x10ac0; i++)
-+    {
-+      *((unsigned char *) RAW_ADDR (0x200000 + i)) = 0;
-+      *((unsigned char *) RAW_ADDR (0x300000 + i)) = 1;
-+    }
-+
-+  /* First partial read.  */
-+  grub_printf ("\nPartial read 1: ");
-+
-+  grub_seek (0);
-+  grub_read ((char *) RAW_ADDR (0x200000), 0x7);
-+  grub_read ((char *) RAW_ADDR (0x200007), 0x100);
-+  grub_read ((char *) RAW_ADDR (0x200107), 0x10);
-+  grub_read ((char *) RAW_ADDR (0x200117), 0x999);
-+  grub_read ((char *) RAW_ADDR (0x200ab0), 0x10);
-+  grub_read ((char *) RAW_ADDR (0x200ac0), 0x10000);
-+
-+  /* Second partial read.  */
-+  grub_printf ("\nPartial read 2: ");
-+
-+  grub_seek (0);
-+  grub_read ((char *) RAW_ADDR (0x300000), 0x10000);
-+  grub_read ((char *) RAW_ADDR (0x310000), 0x10);
-+  grub_read ((char *) RAW_ADDR (0x310010), 0x7);
-+  grub_read ((char *) RAW_ADDR (0x310017), 0x10);
-+  grub_read ((char *) RAW_ADDR (0x310027), 0x999);
-+  grub_read ((char *) RAW_ADDR (0x3109c0), 0x100);
-+
-+  grub_printf ("\nHeader1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
-+             *((int *) RAW_ADDR (0x200000)),
-+             *((int *) RAW_ADDR (0x200004)),
-+             *((int *) RAW_ADDR (0x200008)),
-+             *((int *) RAW_ADDR (0x20000c)));
-+
-+  grub_printf ("Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
-+             *((int *) RAW_ADDR (0x300000)),
-+             *((int *) RAW_ADDR (0x300004)),
-+             *((int *) RAW_ADDR (0x300008)),
-+             *((int *) RAW_ADDR (0x30000c)));
-+
-+  for (i = 0; i < 0x10ac0; i++)
-+    if (*((unsigned char *) RAW_ADDR (0x200000 + i))
-+      != *((unsigned char *) RAW_ADDR (0x300000 + i)))
-+      break;
-+
-+  grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos);
-+  disk_read_hook = 0;
-+  grub_close ();
-+  return 0;
-+}
-+
-+static struct builtin builtin_testload =
-+{
-+  "testload",
-+  testload_func,
-+  BUILTIN_CMDLINE,
-+  "testload FILE",
-+  "Read the entire contents of FILE in several different ways and"
-+  " compares them, to test the filesystem code. The output is somewhat"
-+  " cryptic, but if no errors are reported and the final `i=X,"
-+  " filepos=Y' reading has X and Y equal, then it is definitely"
-+  " consistent, and very likely works correctly subject to a"
-+  " consistent offset error. If this test succeeds, then a good next"
-+  " step is to try loading a kernel."
-+};
-+
-+\f
-+/* testvbe MODE */
-+static int
-+testvbe_func (char *arg, int flags)
-+{
-+  int mode_number;
-+  struct vbe_controller controller;
-+  struct vbe_mode mode;
-+  
-+  if (! *arg)
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  if (! safe_parse_maxint (&arg, &mode_number))
-+    return 1;
-+
-+  /* Preset `VBE2'.  */
-+  grub_memmove (controller.signature, "VBE2", 4);
-+
-+  /* Detect VBE BIOS.  */
-+  if (get_vbe_controller_info (&controller) != 0x004F)
-+    {
-+      grub_printf (" VBE BIOS is not present.\n");
-+      return 0;
-+    }
-+  
-+  if (controller.version < 0x0200)
-+    {
-+      grub_printf (" VBE version %d.%d is not supported.\n",
-+                 (int) (controller.version >> 8),
-+                 (int) (controller.version & 0xFF));
-+      return 0;
-+    }
-+
-+  if (get_vbe_mode_info (mode_number, &mode) != 0x004F
-+      || (mode.mode_attributes & 0x0091) != 0x0091)
-+    {
-+      grub_printf (" Mode 0x%x is not supported.\n", mode_number);
-+      return 0;
-+    }
-+
-+  /* Now trip to the graphics mode.  */
-+  if (set_vbe_mode (mode_number | (1 << 14)) != 0x004F)
-+    {
-+      grub_printf (" Switching to Mode 0x%x failed.\n", mode_number);
-+      return 0;
-+    }
-+
-+  /* Draw something on the screen...  */
-+  {
-+    unsigned char *base_buf = (unsigned char *) mode.phys_base;
-+    int scanline = controller.version >= 0x0300
-+      ? mode.linear_bytes_per_scanline : mode.bytes_per_scanline;
-+    /* FIXME: this assumes that any depth is a modulo of 8.  */
-+    int bpp = mode.bits_per_pixel / 8;
-+    int width = mode.x_resolution;
-+    int height = mode.y_resolution;
-+    int x, y;
-+    unsigned color = 0;
-+
-+    /* Iterate drawing on the screen, until the user hits any key.  */
-+    while (checkkey () == -1)
-+      {
-+      for (y = 0; y < height; y++)
-+        {
-+          unsigned char *line_buf = base_buf + scanline * y;
-+          
-+          for (x = 0; x < width; x++)
-+            {
-+              unsigned char *buf = line_buf + bpp * x;
-+              int i;
-+
-+              for (i = 0; i < bpp; i++, buf++)
-+                *buf = (color >> (i * 8)) & 0xff;
-+            }
-+
-+          color++;
-+        }
-+      }
-+
-+    /* Discard the input.  */
-+    getkey ();
-+  }
-+  
-+  /* Back to the default text mode.  */
-+  if (set_vbe_mode (0x03) != 0x004F)
-+    {
-+      /* Why?!  */
-+      grub_reboot ();
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_testvbe =
-+{
-+  "testvbe",
-+  testvbe_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "testvbe MODE",
-+  "Test the VBE mode MODE. Hit any key to return."
-+};
-+
-+\f
-+#ifdef SUPPORT_NETBOOT
-+/* tftpserver */
-+static int
-+tftpserver_func (char *arg, int flags)
-+{
-+  if (! *arg || ! ifconfig (0, 0, 0, arg))
-+    {
-+      errnum = ERR_BAD_ARGUMENT;
-+      return 1;
-+    }
-+
-+  print_network_configuration ();
-+  return 0;
-+}
-+
-+static struct builtin builtin_tftpserver =
-+{
-+  "tftpserver",
-+  tftpserver_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "tftpserver IPADDR",
-+  "Override the TFTP server address."
-+};
-+#endif /* SUPPORT_NETBOOT */
-+
-+\f
-+/* timeout */
-+static int
-+timeout_func (char *arg, int flags)
-+{
-+  if (! safe_parse_maxint (&arg, &grub_timeout))
-+    return 1;
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_timeout =
-+{
-+  "timeout",
-+  timeout_func,
-+  BUILTIN_MENU,
-+#if 0
-+  "timeout SEC",
-+  "Set a timeout, in SEC seconds, before automatically booting the"
-+  " default entry (normally the first entry defined)."
-+#endif
-+};
-+
-+\f
-+/* title */
-+static int
-+title_func (char *arg, int flags)
-+{
-+  /* This function is not actually used at least currently.  */
-+  return 0;
-+}
-+
-+static struct builtin builtin_title =
-+{
-+  "title",
-+  title_func,
-+  BUILTIN_TITLE,
-+#if 0
-+  "title [NAME ...]",
-+  "Start a new boot entry, and set its name to the contents of the"
-+  " rest of the line, starting with the first non-space character."
-+#endif
-+};
-+
-+\f
-+/* unhide */
-+static int
-+unhide_func (char *arg, int flags)
-+{
-+  if (! set_device (arg))
-+    return 1;
-+
-+  if (! set_partition_hidden_flag (0))
-+    return 1;
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_unhide =
-+{
-+  "unhide",
-+  unhide_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "unhide PARTITION",
-+  "Unhide PARTITION by clearing the \"hidden\" bit in its"
-+  " partition type code."
-+};
-+
-+\f
-+/* uppermem */
-+static int
-+uppermem_func (char *arg, int flags)
-+{
-+  if (! safe_parse_maxint (&arg, (int *) &mbi.mem_upper))
-+    return 1;
-+
-+  mbi.flags &= ~MB_INFO_MEM_MAP;
-+  return 0;
-+}
-+
-+static struct builtin builtin_uppermem =
-+{
-+  "uppermem",
-+  uppermem_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "uppermem KBYTES",
-+  "Force GRUB to assume that only KBYTES kilobytes of upper memory are"
-+  " installed.  Any system address range maps are discarded."
-+};
-+
-+\f
-+/* vbeprobe */
-+static int
-+vbeprobe_func (char *arg, int flags)
-+{
-+  struct vbe_controller controller;
-+  unsigned short *mode_list;
-+  int mode_number = -1;
-+  
-+  auto unsigned long vbe_far_ptr_to_linear (unsigned long);
-+  
-+  unsigned long vbe_far_ptr_to_linear (unsigned long ptr)
-+    {
-+      unsigned short seg = (ptr >> 16);
-+      unsigned short off = (ptr & 0xFFFF);
-+
-+      return (seg << 4) + off;
-+    }
-+  
-+  if (*arg)
-+    {
-+      if (! safe_parse_maxint (&arg, &mode_number))
-+      return 1;
-+    }
-+  
-+  /* Set the signature to `VBE2', to obtain VBE 3.0 information.  */
-+  grub_memmove (controller.signature, "VBE2", 4);
-+  
-+  if (get_vbe_controller_info (&controller) != 0x004F)
-+    {
-+      grub_printf (" VBE BIOS is not present.\n");
-+      return 0;
-+    }
-+
-+  /* Check the version.  */
-+  if (controller.version < 0x0200)
-+    {
-+      grub_printf (" VBE version %d.%d is not supported.\n",
-+                 (int) (controller.version >> 8),
-+                 (int) (controller.version & 0xFF));
-+      return 0;
-+    }
-+
-+  /* Print some information.  */
-+  grub_printf (" VBE version %d.%d\n",
-+             (int) (controller.version >> 8),
-+             (int) (controller.version & 0xFF));
-+
-+  /* Iterate probing modes.  */
-+  for (mode_list
-+       = (unsigned short *) vbe_far_ptr_to_linear (controller.video_mode);
-+       *mode_list != 0xFFFF;
-+       mode_list++)
-+    {
-+      struct vbe_mode mode;
-+      
-+      if (get_vbe_mode_info (*mode_list, &mode) != 0x004F)
-+      continue;
-+
-+      /* Skip this, if this is not supported or linear frame buffer
-+       mode is not support.  */
-+      if ((mode.mode_attributes & 0x0081) != 0x0081)
-+      continue;
-+
-+      if (mode_number == -1 || mode_number == *mode_list)
-+      {
-+        char *model;
-+        switch (mode.memory_model)
-+          {
-+          case 0x00: model = "Text"; break;
-+          case 0x01: model = "CGA graphics"; break;
-+          case 0x02: model = "Hercules graphics"; break;
-+          case 0x03: model = "Planar"; break;
-+          case 0x04: model = "Packed pixel"; break;
-+          case 0x05: model = "Non-chain 4, 256 color"; break;
-+          case 0x06: model = "Direct Color"; break;
-+          case 0x07: model = "YUV"; break;
-+          default: model = "Unknown"; break;
-+          }
-+        
-+        grub_printf ("  0x%x: %s, %ux%ux%u\n",
-+                     (unsigned) *mode_list,
-+                     model,
-+                     (unsigned) mode.x_resolution,
-+                     (unsigned) mode.y_resolution,
-+                     (unsigned) mode.bits_per_pixel);
-+        
-+        if (mode_number != -1)
-+          break;
-+      }
-+    }
-+
-+  if (mode_number != -1 && mode_number != *mode_list)
-+    grub_printf ("  Mode 0x%x is not found or supported.\n", mode_number);
-+  
-+  return 0;
-+}
-+
-+static struct builtin builtin_vbeprobe =
-+{
-+  "vbeprobe",
-+  vbeprobe_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "vbeprobe [MODE]",
-+  "Probe VBE information. If the mode number MODE is specified, show only"
-+  " the information about only the mode."
-+};
-+  
-+\f
-+/* The table of builtin commands. Sorted in dictionary order.  */
-+struct builtin *builtin_table[] =
-+{
-+  &builtin_blocklist,
-+  &builtin_boot,
-+#ifdef SUPPORT_NETBOOT
-+  &builtin_bootp,
-+#endif /* SUPPORT_NETBOOT */
-+  &builtin_cat,
-+  &builtin_chainloader,
-+  &builtin_cmp,
-+  &builtin_color,
-+  &builtin_configfile,
-+  &builtin_debug,
-+  &builtin_default,
-+#ifdef GRUB_UTIL
-+  &builtin_device,
-+#endif /* GRUB_UTIL */
-+#ifdef SUPPORT_NETBOOT
-+  &builtin_dhcp,
-+#endif /* SUPPORT_NETBOOT */
-+  &builtin_displayapm,
-+  &builtin_displaymem,
-+#ifdef GRUB_UTIL
-+  &builtin_dump,
-+#endif /* GRUB_UTIL */
-+  &builtin_embed,
-+  &builtin_fallback,
-+  &builtin_find,
-+  &builtin_fstest,
-+  &builtin_geometry,
-+  &builtin_halt,
-+  &builtin_help,
-+  &builtin_hiddenmenu,
-+  &builtin_hide,
-+#ifdef SUPPORT_NETBOOT
-+  &builtin_ifconfig,
-+#endif /* SUPPORT_NETBOOT */
-+  &builtin_impsprobe,
-+  &builtin_initrd,
-+  &builtin_install,
-+  &builtin_ioprobe,
-+  &builtin_kernel,
-+  &builtin_lock,
-+  &builtin_makeactive,
-+  &builtin_map,
-+#ifdef USE_MD5_PASSWORDS
-+  &builtin_md5crypt,
-+#endif /* USE_MD5_PASSWORDS */
-+  &builtin_module,
-+  &builtin_modulenounzip,
-+  &builtin_pager,
-+  &builtin_partnew,
-+  &builtin_parttype,
-+  &builtin_password,
-+  &builtin_pause,
-+#ifdef GRUB_UTIL
-+  &builtin_quit,
-+#endif /* GRUB_UTIL */
-+#ifdef SUPPORT_NETBOOT
-+  &builtin_rarp,
-+#endif /* SUPPORT_NETBOOT */
-+  &builtin_read,
-+  &builtin_reboot,
-+  &builtin_root,
-+  &builtin_rootnoverify,
-+  &builtin_savedefault,
-+#ifdef SUPPORT_SERIAL
-+  &builtin_serial,
-+#endif /* SUPPORT_SERIAL */
-+  &builtin_setkey,
-+  &builtin_setup,
-+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
-+  &builtin_terminal,
-+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
-+#ifdef SUPPORT_SERIAL
-+  &builtin_terminfo,
-+#endif /* SUPPORT_SERIAL */
-+  &builtin_testload,
-+  &builtin_testvbe,
-+#ifdef SUPPORT_NETBOOT
-+  &builtin_tftpserver,
-+#endif /* SUPPORT_NETBOOT */
-+  &builtin_timeout,
-+  &builtin_title,
-+  &builtin_unhide,
-+  &builtin_uppermem,
-+  &builtin_vbeprobe,
-+  0
-+};
-diff -Nur grub-0.97/stage2/char_io.c grub-0.97-patched/stage2/char_io.c
---- grub-0.97/stage2/char_io.c 2005-02-01 21:51:23.000000000 +0100
-+++ grub-0.97-patched/stage2/char_io.c 2012-11-11 17:06:52.556085241 +0100
-@@ -35,6 +35,7 @@
-     {
-       "console",
-       0,
-+      24,
-       console_putchar,
-       console_checkkey,
-       console_getkey,
-@@ -43,13 +44,16 @@
-       console_cls,
-       console_setcolorstate,
-       console_setcolor,
--      console_setcursor
-+      console_setcursor,
-+      0, 
-+      0
-     },
- #ifdef SUPPORT_SERIAL
-     {
-       "serial",
-       /* A serial device must be initialized.  */
-       TERM_NEED_INIT,
-+      24,
-       serial_putchar,
-       serial_checkkey,
-       serial_getkey,
-@@ -58,6 +62,8 @@
-       serial_cls,
-       serial_setcolorstate,
-       0,
-+      0,
-+      0, 
-       0
-     },
- #endif /* SUPPORT_SERIAL */
-@@ -65,6 +71,7 @@
-     {
-       "hercules",
-       0,
-+      24,
-       hercules_putchar,
-       console_checkkey,
-       console_getkey,
-@@ -73,9 +80,28 @@
-       hercules_cls,
-       hercules_setcolorstate,
-       hercules_setcolor,
--      hercules_setcursor
-+      hercules_setcursor,
-+      0,
-+      0
-     },      
- #endif /* SUPPORT_HERCULES */
-+#ifdef SUPPORT_GRAPHICS
-+    { "graphics",
-+      TERM_NEED_INIT, /* flags */
-+      30, /* number of lines */
-+      graphics_putchar, /* putchar */
-+      console_checkkey, /* checkkey */
-+      console_getkey, /* getkey */
-+      graphics_getxy, /* getxy */
-+      graphics_gotoxy, /* gotoxy */
-+      graphics_cls, /* cls */
-+      graphics_setcolorstate, /* setcolorstate */
-+      graphics_setcolor, /* setcolor */
-+      graphics_setcursor, /* nocursor */
-+      graphics_init, /* initialize */
-+      graphics_end /* shutdown */
-+    },
-+#endif /* SUPPORT_GRAPHICS */
-     /* This must be the last entry.  */
-     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
-   };
-@@ -1046,13 +1072,15 @@
-                the following grub_printf call will print newlines.  */
-             count_lines = -1;
-+            grub_printf("\n");
-             if (current_term->setcolorstate)
-               current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
-             
--            grub_printf ("\n[Hit return to continue]");
-+            grub_printf ("[Hit return to continue]");
-             if (current_term->setcolorstate)
-               current_term->setcolorstate (COLOR_STATE_NORMAL);
-+              
-             
-             do
-               {
-@@ -1090,7 +1118,7 @@
- cls (void)
- {
-   /* If the terminal is dumb, there is no way to clean the terminal.  */
--  if (current_term->flags & TERM_DUMB)
-+  if (current_term->flags & TERM_DUMB) 
-     grub_putchar ('\n');
-   else
-     current_term->cls ();
-@@ -1174,37 +1202,62 @@
- }
- #endif /* ! STAGE1_5 */
-+#ifdef GRUB_UTIL
-+# ifdef __PIC__
-+#  if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL)
-+      extern char start[];
-+      extern char end[];
-+#  elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL)
-+      extern char _start[];
-+      extern char _end[];
-+#  endif
-+# endif
-+#endif
- int
--memcheck (int addr, int len)
-+memcheck (unsigned long addr, unsigned long len)
- {
- #ifdef GRUB_UTIL
--  auto int start_addr (void);
--  auto int end_addr (void);
-+# ifdef __PIC__
-+#  if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL)
-+  if (start <= addr && end > addr + len)
-+    return ! errnum;
-+#  elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL)
-+  if (_start <= addr && _end > addr + len)
-+    return ! errnum;
-+#  endif
-+# else /* __PIC__ */
-+  auto unsigned long start_addr (void);
-+  auto unsigned long end_addr (void);
-   
--  auto int start_addr (void)
-+  auto unsigned long start_addr (void)
-     {
--      int ret;
--# if defined(HAVE_START_SYMBOL)
-+      unsigned long ret;
-+#  if defined(HAVE_START_SYMBOL)
-       asm volatile ("movl     $start, %0" : "=a" (ret));
--# elif defined(HAVE_USCORE_START_SYMBOL)
-+#  elif defined(HAVE_USCORE_START_SYMBOL)
-       asm volatile ("movl     $_start, %0" : "=a" (ret));
--# endif
-+#  else
-+      erk! /* function would return undefined data in this case - barf */
-+#  endif
-       return ret;
-     }
--  auto int end_addr (void)
-+  auto unsigned long end_addr (void)
-     {
--      int ret;
--# if defined(HAVE_END_SYMBOL)
-+      unsigned long ret;
-+#  if defined(HAVE_END_SYMBOL)
-       asm volatile ("movl     $end, %0" : "=a" (ret));
--# elif defined(HAVE_USCORE_END_SYMBOL)
-+#  elif defined(HAVE_USCORE_END_SYMBOL)
-       asm volatile ("movl     $_end, %0" : "=a" (ret));
--# endif
-+#  else
-+      erk! /* function would return undefined data in this case - barf */
-+#  endif
-       return ret;
-     }
-   if (start_addr () <= addr && end_addr () > addr + len)
-     return ! errnum;
-+# endif /* __PIC__ */
- #endif /* GRUB_UTIL */
-   if ((addr < RAW_ADDR (0x1000))
-@@ -1217,10 +1270,20 @@
-   return ! errnum;
- }
-+void
-+grub_memcpy(void *dest, const void *src, int len)
-+{
-+  int i;
-+  register char *d = (char*)dest, *s = (char*)src;
-+
-+  for (i = 0; i < len; i++)
-+    d[i] = s[i];
-+}
-+
- void *
- grub_memmove (void *to, const void *from, int len)
- {
--   if (memcheck ((int) to, len))
-+   if (memcheck ((unsigned long) to, len))
-      {
-        /* This assembly code is stolen from
-         linux-2.2.2/include/asm-i386/string.h. This is not very fast
-@@ -1258,7 +1321,7 @@
- {
-   char *p = start;
--  if (memcheck ((int) start, len))
-+  if (memcheck ((unsigned long) start, len))
-     {
-       while (len -- > 0)
-       *p ++ = c;
-diff -Nur grub-0.97/stage2/char_io.c.orig grub-0.97-patched/stage2/char_io.c.orig
---- grub-0.97/stage2/char_io.c.orig    1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/stage2/char_io.c.orig    2005-02-01 21:51:23.000000000 +0100
-@@ -0,0 +1,1283 @@
-+/* char_io.c - basic console input and output */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 1999,2000,2001,2002,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 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.
-+ */
-+
-+#include <shared.h>
-+#include <term.h>
-+
-+#ifdef SUPPORT_HERCULES
-+# include <hercules.h>
-+#endif
-+
-+#ifdef SUPPORT_SERIAL
-+# include <serial.h>
-+#endif
-+
-+#ifndef STAGE1_5
-+struct term_entry term_table[] =
-+  {
-+    {
-+      "console",
-+      0,
-+      console_putchar,
-+      console_checkkey,
-+      console_getkey,
-+      console_getxy,
-+      console_gotoxy,
-+      console_cls,
-+      console_setcolorstate,
-+      console_setcolor,
-+      console_setcursor
-+    },
-+#ifdef SUPPORT_SERIAL
-+    {
-+      "serial",
-+      /* A serial device must be initialized.  */
-+      TERM_NEED_INIT,
-+      serial_putchar,
-+      serial_checkkey,
-+      serial_getkey,
-+      serial_getxy,
-+      serial_gotoxy,
-+      serial_cls,
-+      serial_setcolorstate,
-+      0,
-+      0
-+    },
-+#endif /* SUPPORT_SERIAL */
-+#ifdef SUPPORT_HERCULES
-+    {
-+      "hercules",
-+      0,
-+      hercules_putchar,
-+      console_checkkey,
-+      console_getkey,
-+      hercules_getxy,
-+      hercules_gotoxy,
-+      hercules_cls,
-+      hercules_setcolorstate,
-+      hercules_setcolor,
-+      hercules_setcursor
-+    },      
-+#endif /* SUPPORT_HERCULES */
-+    /* This must be the last entry.  */
-+    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
-+  };
-+
-+/* This must be console.  */
-+struct term_entry *current_term = term_table;
-+
-+int max_lines = 24;
-+int count_lines = -1;
-+int use_pager = 1;
-+#endif
-+
-+void
-+print_error (void)
-+{
-+  if (errnum > ERR_NONE && errnum < MAX_ERR_NUM)
-+#ifndef STAGE1_5
-+    /* printf("\7\n %s\n", err_list[errnum]); */
-+    printf ("\nError %u: %s\n", errnum, err_list[errnum]);
-+#else /* STAGE1_5 */
-+    printf ("Error %u\n", errnum);
-+#endif /* STAGE1_5 */
-+}
-+
-+char *
-+convert_to_ascii (char *buf, int c,...)
-+{
-+  unsigned long num = *((&c) + 1), mult = 10;
-+  char *ptr = buf;
-+
-+#ifndef STAGE1_5
-+  if (c == 'x' || c == 'X')
-+    mult = 16;
-+
-+  if ((num & 0x80000000uL) && c == 'd')
-+    {
-+      num = (~num) + 1;
-+      *(ptr++) = '-';
-+      buf++;
-+    }
-+#endif
-+
-+  do
-+    {
-+      int dig = num % mult;
-+      *(ptr++) = ((dig > 9) ? dig + 'a' - 10 : '0' + dig);
-+    }
-+  while (num /= mult);
-+
-+  /* reorder to correct direction!! */
-+  {
-+    char *ptr1 = ptr - 1;
-+    char *ptr2 = buf;
-+    while (ptr1 > ptr2)
-+      {
-+      int tmp = *ptr1;
-+      *ptr1 = *ptr2;
-+      *ptr2 = tmp;
-+      ptr1--;
-+      ptr2++;
-+      }
-+  }
-+
-+  return ptr;
-+}
-+
-+void
-+grub_putstr (const char *str)
-+{
-+  while (*str)
-+    grub_putchar (*str++);
-+}
-+
-+void
-+grub_printf (const char *format,...)
-+{
-+  int *dataptr = (int *) &format;
-+  char c, str[16];
-+  
-+  dataptr++;
-+
-+  while ((c = *(format++)) != 0)
-+    {
-+      if (c != '%')
-+      grub_putchar (c);
-+      else
-+      switch (c = *(format++))
-+        {
-+#ifndef STAGE1_5
-+        case 'd':
-+        case 'x':
-+        case 'X':
-+#endif
-+        case 'u':
-+          *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0;
-+          grub_putstr (str);
-+          break;
-+
-+#ifndef STAGE1_5
-+        case 'c':
-+          grub_putchar ((*(dataptr++)) & 0xff);
-+          break;
-+
-+        case 's':
-+          grub_putstr ((char *) *(dataptr++));
-+          break;
-+#endif
-+        }
-+    }
-+}
-+
-+#ifndef STAGE1_5
-+int
-+grub_sprintf (char *buffer, const char *format, ...)
-+{
-+  /* XXX hohmuth
-+     ugly hack -- should unify with printf() */
-+  int *dataptr = (int *) &format;
-+  char c, *ptr, str[16];
-+  char *bp = buffer;
-+
-+  dataptr++;
-+
-+  while ((c = *format++) != 0)
-+    {
-+      if (c != '%')
-+      *bp++ = c; /* putchar(c); */
-+      else
-+      switch (c = *(format++))
-+        {
-+        case 'd': case 'u': case 'x':
-+          *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0;
-+
-+          ptr = str;
-+
-+          while (*ptr)
-+            *bp++ = *(ptr++); /* putchar(*(ptr++)); */
-+          break;
-+
-+        case 'c': *bp++ = (*(dataptr++))&0xff;
-+          /* putchar((*(dataptr++))&0xff); */
-+          break;
-+
-+        case 's':
-+          ptr = (char *) (*(dataptr++));
-+
-+          while ((c = *ptr++) != 0)
-+            *bp++ = c; /* putchar(c); */
-+          break;
-+        }
-+    }
-+
-+  *bp = 0;
-+  return bp - buffer;
-+}
-+
-+
-+void
-+init_page (void)
-+{
-+  cls ();
-+
-+  grub_printf ("\n    GNU GRUB  version %s  (%dK lower / %dK upper memory)\n\n",
-+        version_string, mbi.mem_lower, mbi.mem_upper);
-+}
-+
-+/* The number of the history entries.  */
-+static int num_history = 0;
-+
-+/* Get the NOth history. If NO is less than zero or greater than or
-+   equal to NUM_HISTORY, return NULL. Otherwise return a valid string.  */
-+static char *
-+get_history (int no)
-+{
-+  if (no < 0 || no >= num_history)
-+    return 0;
-+
-+  return (char *) HISTORY_BUF + MAX_CMDLINE * no;
-+}
-+
-+/* Add CMDLINE to the history buffer.  */
-+static void
-+add_history (const char *cmdline, int no)
-+{
-+  grub_memmove ((char *) HISTORY_BUF + MAX_CMDLINE * (no + 1),
-+              (char *) HISTORY_BUF + MAX_CMDLINE * no,
-+              MAX_CMDLINE * (num_history - no));
-+  grub_strcpy ((char *) HISTORY_BUF + MAX_CMDLINE * no, cmdline);
-+  if (num_history < HISTORY_SIZE)
-+    num_history++;
-+}
-+
-+static int
-+real_get_cmdline (char *prompt, char *cmdline, int maxlen,
-+                int echo_char, int readline)
-+{
-+  /* This is a rather complicated function. So explain the concept.
-+     
-+     A command-line consists of ``section''s. A section is a part of the
-+     line which may be displayed on the screen, but a section is never
-+     displayed with another section simultaneously.
-+
-+     Each section is basically 77 or less characters, but the exception
-+     is the first section, which is 78 or less characters, because the
-+     starting point is special. See below.
-+
-+     The first section contains a prompt and a command-line (or the
-+     first part of a command-line when it is too long to be fit in the
-+     screen). So, in the first section, the number of command-line
-+     characters displayed is 78 minus the length of the prompt (or
-+     less). If the command-line has more characters, `>' is put at the
-+     position 78 (zero-origin), to inform the user of the hidden
-+     characters.
-+
-+     Other sections always have `<' at the first position, since there
-+     is absolutely a section before each section. If there is a section
-+     after another section, this section consists of 77 characters and
-+     `>' at the last position. The last section has 77 or less
-+     characters and doesn't have `>'.
-+
-+     Each section other than the last shares some characters with the
-+     previous section. This region is called ``margin''. If the cursor
-+     is put at the magin which is shared by the first section and the
-+     second, the first section is displayed. Otherwise, a displayed
-+     section is switched to another section, only if the cursor is put
-+     outside that section.  */
-+
-+  /* XXX: These should be defined in shared.h, but I leave these here,
-+     until this code is freezed.  */
-+#define CMDLINE_WIDTH 78
-+#define CMDLINE_MARGIN        10
-+  
-+  int xpos, lpos, c, section;
-+  /* The length of PROMPT.  */
-+  int plen;
-+  /* The length of the command-line.  */
-+  int llen;
-+  /* The index for the history.  */
-+  int history = -1;
-+  /* The working buffer for the command-line.  */
-+  char *buf = (char *) CMDLINE_BUF;
-+  /* The kill buffer.  */
-+  char *kill_buf = (char *) KILL_BUF;
-+  
-+  /* Nested function definitions for code simplicity.  */
-+
-+  /* The forward declarations of nested functions are prefixed
-+     with `auto'.  */
-+  auto void cl_refresh (int full, int len);
-+  auto void cl_backward (int count);
-+  auto void cl_forward (int count);
-+  auto void cl_insert (const char *str);
-+  auto void cl_delete (int count);
-+  auto void cl_init (void);
-+  
-+  /* Move the cursor backward.  */
-+  void cl_backward (int count)
-+    {
-+      lpos -= count;
-+      
-+      /* If the cursor is in the first section, display the first section
-+       instead of the second.  */
-+      if (section == 1 && plen + lpos < CMDLINE_WIDTH)
-+      cl_refresh (1, 0);
-+      else if (xpos - count < 1)
-+      cl_refresh (1, 0);
-+      else
-+      {
-+        xpos -= count;
-+
-+        if (current_term->flags & TERM_DUMB)
-+          {
-+            int i;
-+            
-+            for (i = 0; i < count; i++)
-+              grub_putchar ('\b');
-+          }
-+        else
-+          gotoxy (xpos, getxy () & 0xFF);
-+      }
-+    }
-+
-+  /* Move the cursor forward.  */
-+  void cl_forward (int count)
-+    {
-+      lpos += count;
-+
-+      /* If the cursor goes outside, scroll the screen to the right.  */
-+      if (xpos + count >= CMDLINE_WIDTH)
-+      cl_refresh (1, 0);
-+      else
-+      {
-+        xpos += count;
-+
-+        if (current_term->flags & TERM_DUMB)
-+          {
-+            int i;
-+            
-+            for (i = lpos - count; i < lpos; i++)
-+              {
-+                if (! echo_char)
-+                  grub_putchar (buf[i]);
-+                else
-+                  grub_putchar (echo_char);
-+              }
-+          }
-+        else
-+          gotoxy (xpos, getxy () & 0xFF);
-+      }
-+    }
-+
-+  /* Refresh the screen. If FULL is true, redraw the full line, otherwise,
-+     only LEN characters from LPOS.  */
-+  void cl_refresh (int full, int len)
-+    {
-+      int i;
-+      int start;
-+      int pos = xpos;
-+      
-+      if (full)
-+      {
-+        /* Recompute the section number.  */
-+        if (lpos + plen < CMDLINE_WIDTH)
-+          section = 0;
-+        else
-+          section = ((lpos + plen - CMDLINE_WIDTH)
-+                     / (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN) + 1);
-+
-+        /* From the start to the end.  */
-+        len = CMDLINE_WIDTH;
-+        pos = 0;
-+        grub_putchar ('\r');
-+
-+        /* If SECTION is the first section, print the prompt, otherwise,
-+           print `<'.  */
-+        if (section == 0)
-+          {
-+            grub_printf ("%s", prompt);
-+            len -= plen;
-+            pos += plen;
-+          }
-+        else
-+          {
-+            grub_putchar ('<');
-+            len--;
-+            pos++;
-+          }
-+      }
-+
-+      /* Compute the index to start writing BUF and the resulting position
-+       on the screen.  */
-+      if (section == 0)
-+      {
-+        int offset = 0;
-+        
-+        if (! full)
-+          offset = xpos - plen;
-+        
-+        start = 0;
-+        xpos = lpos + plen;
-+        start += offset;
-+      }
-+      else
-+      {
-+        int offset = 0;
-+        
-+        if (! full)
-+          offset = xpos - 1;
-+        
-+        start = ((section - 1) * (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN)
-+                 + CMDLINE_WIDTH - plen - CMDLINE_MARGIN);
-+        xpos = lpos + 1 - start;
-+        start += offset;
-+      }
-+
-+      /* Print BUF. If ECHO_CHAR is not zero, put it instead.  */
-+      for (i = start; i < start + len && i < llen; i++)
-+      {
-+        if (! echo_char)
-+          grub_putchar (buf[i]);
-+        else
-+          grub_putchar (echo_char);
-+
-+        pos++;
-+      }
-+      
-+      /* Fill up the rest of the line with spaces.  */
-+      for (; i < start + len; i++)
-+      {
-+        grub_putchar (' ');
-+        pos++;
-+      }
-+      
-+      /* If the cursor is at the last position, put `>' or a space,
-+       depending on if there are more characters in BUF.  */
-+      if (pos == CMDLINE_WIDTH)
-+      {
-+        if (start + len < llen)
-+          grub_putchar ('>');
-+        else
-+          grub_putchar (' ');
-+        
-+        pos++;
-+      }
-+      
-+      /* Back to XPOS.  */
-+      if (current_term->flags & TERM_DUMB)
-+      {
-+        for (i = 0; i < pos - xpos; i++)
-+          grub_putchar ('\b');
-+      }
-+      else
-+      gotoxy (xpos, getxy () & 0xFF);
-+    }
-+
-+  /* Initialize the command-line.  */
-+  void cl_init (void)
-+    {
-+      /* Distinguish us from other lines and error messages!  */
-+      grub_putchar ('\n');
-+
-+      /* Print full line and set position here.  */
-+      cl_refresh (1, 0);
-+    }
-+
-+  /* Insert STR to BUF.  */
-+  void cl_insert (const char *str)
-+    {
-+      int l = grub_strlen (str);
-+
-+      if (llen + l < maxlen)
-+      {
-+        if (lpos == llen)
-+          grub_memmove (buf + lpos, str, l + 1);
-+        else
-+          {
-+            grub_memmove (buf + lpos + l, buf + lpos, llen - lpos + 1);
-+            grub_memmove (buf + lpos, str, l);
-+          }
-+        
-+        llen += l;
-+        lpos += l;
-+        if (xpos + l >= CMDLINE_WIDTH)
-+          cl_refresh (1, 0);
-+        else if (xpos + l + llen - lpos > CMDLINE_WIDTH)
-+          cl_refresh (0, CMDLINE_WIDTH - xpos);
-+        else
-+          cl_refresh (0, l + llen - lpos);
-+      }
-+    }
-+
-+  /* Delete COUNT characters in BUF.  */
-+  void cl_delete (int count)
-+    {
-+      grub_memmove (buf + lpos, buf + lpos + count, llen - count + 1);
-+      llen -= count;
-+      
-+      if (xpos + llen + count - lpos > CMDLINE_WIDTH)
-+      cl_refresh (0, CMDLINE_WIDTH - xpos);
-+      else
-+      cl_refresh (0, llen + count - lpos);
-+    }
-+
-+  plen = grub_strlen (prompt);
-+  llen = grub_strlen (cmdline);
-+
-+  if (maxlen > MAX_CMDLINE)
-+    {
-+      maxlen = MAX_CMDLINE;
-+      if (llen >= MAX_CMDLINE)
-+      {
-+        llen = MAX_CMDLINE - 1;
-+        cmdline[MAX_CMDLINE] = 0;
-+      }
-+    }
-+  lpos = llen;
-+  grub_strcpy (buf, cmdline);
-+
-+  cl_init ();
-+
-+  while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r')
-+    {
-+      /* If READLINE is non-zero, handle readline-like key bindings.  */
-+      if (readline)
-+      {
-+        switch (c)
-+          {
-+          case 9:             /* TAB lists completions */
-+            {
-+              int i;
-+              /* POS points to the first space after a command.  */
-+              int pos = 0;
-+              int ret;
-+              char *completion_buffer = (char *) COMPLETION_BUF;
-+              int equal_pos = -1;
-+              int is_filename;
-+
-+              /* Find the first word.  */
-+              while (buf[pos] == ' ')
-+                pos++;
-+              while (buf[pos] && buf[pos] != '=' && buf[pos] != ' ')
-+                pos++;
-+
-+              is_filename = (lpos > pos);
-+
-+              /* Find the position of the equal character after a
-+                 command, and replace it with a space.  */
-+              for (i = pos; buf[i] && buf[i] != ' '; i++)
-+                if (buf[i] == '=')
-+                  {
-+                    equal_pos = i;
-+                    buf[i] = ' ';
-+                    break;
-+                  }
-+
-+              /* Find the position of the first character in this
-+                 word.  */
-+              for (i = lpos; i > 0 && buf[i - 1] != ' '; i--)
-+                ;
-+
-+              /* Invalidate the cache, because the user may exchange
-+                 removable disks.  */
-+              buf_drive = -1;
-+
-+              /* Copy this word to COMPLETION_BUFFER and do the
-+                 completion.  */
-+              grub_memmove (completion_buffer, buf + i, lpos - i);
-+              completion_buffer[lpos - i] = 0;
-+              ret = print_completions (is_filename, 1);
-+              errnum = ERR_NONE;
-+
-+              if (ret >= 0)
-+                {
-+                  /* Found, so insert COMPLETION_BUFFER.  */
-+                  cl_insert (completion_buffer + lpos - i);
-+
-+                  if (ret > 0)
-+                    {
-+                      /* There are more than one candidates, so print
-+                         the list.  */
-+                      grub_putchar ('\n');
-+                      print_completions (is_filename, 0);
-+                      errnum = ERR_NONE;
-+                    }
-+                }
-+
-+              /* Restore the command-line.  */
-+              if (equal_pos >= 0)
-+                buf[equal_pos] = '=';
-+
-+              if (ret)
-+                cl_init ();
-+            }
-+            break;
-+          case 1:             /* C-a go to beginning of line */
-+            cl_backward (lpos);
-+            break;
-+          case 5:             /* C-e go to end of line */
-+            cl_forward (llen - lpos);
-+            break;
-+          case 6:             /* C-f forward one character */
-+            if (lpos < llen)
-+              cl_forward (1);
-+            break;
-+          case 2:             /* C-b backward one character */
-+            if (lpos > 0)
-+              cl_backward (1);
-+            break;
-+          case 21:            /* C-u kill to beginning of line */
-+            if (lpos == 0)
-+              break;
-+            /* Copy the string being deleted to KILL_BUF.  */
-+            grub_memmove (kill_buf, buf, lpos);
-+            kill_buf[lpos] = 0;
-+            {
-+              /* XXX: Not very clever.  */
-+              
-+              int count = lpos;
-+              
-+              cl_backward (lpos);
-+              cl_delete (count);
-+            }
-+            break;
-+          case 11:            /* C-k kill to end of line */
-+            if (lpos == llen)
-+              break;
-+            /* Copy the string being deleted to KILL_BUF.  */
-+            grub_memmove (kill_buf, buf + lpos, llen - lpos + 1);
-+            cl_delete (llen - lpos);
-+            break;
-+          case 25:            /* C-y yank the kill buffer */
-+            cl_insert (kill_buf);
-+            break;
-+          case 16:            /* C-p fetch the previous command */
-+            {
-+              char *p;
-+
-+              if (history < 0)
-+                /* Save the working buffer.  */
-+                grub_strcpy (cmdline, buf);
-+              else if (grub_strcmp (get_history (history), buf) != 0)
-+                /* If BUF is modified, add it into the history list.  */
-+                add_history (buf, history);
-+
-+              history++;
-+              p = get_history (history);
-+              if (! p)
-+                {
-+                  history--;
-+                  break;
-+                }
-+
-+              grub_strcpy (buf, p);
-+              llen = grub_strlen (buf);
-+              lpos = llen;
-+              cl_refresh (1, 0);
-+            }
-+            break;
-+          case 14:            /* C-n fetch the next command */
-+            {
-+              char *p;
-+
-+              if (history < 0)
-+                {
-+                  break;
-+                }
-+              else if (grub_strcmp (get_history (history), buf) != 0)
-+                /* If BUF is modified, add it into the history list.  */
-+                add_history (buf, history);
-+
-+              history--;
-+              p = get_history (history);
-+              if (! p)
-+                p = cmdline;
-+
-+              grub_strcpy (buf, p);
-+              llen = grub_strlen (buf);
-+              lpos = llen;
-+              cl_refresh (1, 0);
-+            }
-+            break;
-+          }
-+      }
-+
-+      /* ESC, C-d and C-h are always handled. Actually C-d is not
-+       functional if READLINE is zero, as the cursor cannot go
-+       backward, but that's ok.  */
-+      switch (c)
-+      {
-+      case 27:        /* ESC immediately return 1 */
-+        return 1;
-+      case 4:         /* C-d delete character under cursor */
-+        if (lpos == llen)
-+          break;
-+        cl_delete (1);
-+        break;
-+      case 8:         /* C-h backspace */
-+# ifdef GRUB_UTIL
-+      case 127:       /* also backspace */
-+# endif
-+        if (lpos > 0)
-+          {
-+            cl_backward (1);
-+            cl_delete (1);
-+          }
-+        break;
-+      default:                /* insert printable character into line */
-+        if (c >= ' ' && c <= '~')
-+          {
-+            char str[2];
-+
-+            str[0] = c;
-+            str[1] = 0;
-+            cl_insert (str);
-+          }
-+      }
-+    }
-+
-+  grub_putchar ('\n');
-+
-+  /* If ECHO_CHAR is NUL, remove the leading spaces.  */
-+  lpos = 0;
-+  if (! echo_char)
-+    while (buf[lpos] == ' ')
-+      lpos++;
-+
-+  /* Copy the working buffer to CMDLINE.  */
-+  grub_memmove (cmdline, buf + lpos, llen - lpos + 1);
-+
-+  /* If the readline-like feature is turned on and CMDLINE is not
-+     empty, add it into the history list.  */
-+  if (readline && lpos < llen)
-+    add_history (cmdline, 0);
-+
-+  return 0;
-+}
-+
-+/* Don't use this with a MAXLEN greater than 1600 or so!  The problem
-+   is that GET_CMDLINE depends on the everything fitting on the screen
-+   at once.  So, the whole screen is about 2000 characters, minus the
-+   PROMPT, and space for error and status lines, etc.  MAXLEN must be
-+   at least 1, and PROMPT and CMDLINE must be valid strings (not NULL
-+   or zero-length).
-+
-+   If ECHO_CHAR is nonzero, echo it instead of the typed character. */
-+int
-+get_cmdline (char *prompt, char *cmdline, int maxlen,
-+           int echo_char, int readline)
-+{
-+  int old_cursor;
-+  int ret;
-+
-+  old_cursor = setcursor (1);
-+  
-+  /* Because it is hard to deal with different conditions simultaneously,
-+     less functional cases are handled here. Assume that TERM_NO_ECHO
-+     implies TERM_NO_EDIT.  */
-+  if (current_term->flags & (TERM_NO_ECHO | TERM_NO_EDIT))
-+    {
-+      char *p = cmdline;
-+      int c;
-+      
-+      /* Make sure that MAXLEN is not too large.  */
-+      if (maxlen > MAX_CMDLINE)
-+      maxlen = MAX_CMDLINE;
-+
-+      /* Print only the prompt. The contents of CMDLINE is simply discarded,
-+       even if it is not empty.  */
-+      grub_printf ("%s", prompt);
-+
-+      /* Gather characters until a newline is gotten.  */
-+      while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r')
-+      {
-+        /* Return immediately if ESC is pressed.  */
-+        if (c == 27)
-+          {
-+            setcursor (old_cursor);
-+            return 1;
-+          }
-+
-+        /* Printable characters are added into CMDLINE.  */
-+        if (c >= ' ' && c <= '~')
-+          {
-+            if (! (current_term->flags & TERM_NO_ECHO))
-+              grub_putchar (c);
-+
-+            /* Preceding space characters must be ignored.  */
-+            if (c != ' ' || p != cmdline)
-+              *p++ = c;
-+          }
-+      }
-+
-+      *p = 0;
-+
-+      if (! (current_term->flags & TERM_NO_ECHO))
-+      grub_putchar ('\n');
-+
-+      setcursor (old_cursor);
-+      return 0;
-+    }
-+
-+  /* Complicated features are left to real_get_cmdline.  */
-+  ret = real_get_cmdline (prompt, cmdline, maxlen, echo_char, readline);
-+  setcursor (old_cursor);
-+  return ret;
-+}
-+
-+int
-+safe_parse_maxint (char **str_ptr, int *myint_ptr)
-+{
-+  char *ptr = *str_ptr;
-+  int myint = 0;
-+  int mult = 10, found = 0;
-+
-+  /*
-+   *  Is this a hex number?
-+   */
-+  if (*ptr == '0' && tolower (*(ptr + 1)) == 'x')
-+    {
-+      ptr += 2;
-+      mult = 16;
-+    }
-+
-+  while (1)
-+    {
-+      /* A bit tricky. This below makes use of the equivalence:
-+       (A >= B && A <= C) <=> ((A - B) <= (C - B))
-+       when C > B and A is unsigned.  */
-+      unsigned int digit;
-+
-+      digit = tolower (*ptr) - '0';
-+      if (digit > 9)
-+      {
-+        digit -= 'a' - '0';
-+        if (mult == 10 || digit > 5)
-+          break;
-+        digit += 10;
-+      }
-+
-+      found = 1;
-+      if (myint > ((MAXINT - digit) / mult))
-+      {
-+        errnum = ERR_NUMBER_OVERFLOW;
-+        return 0;
-+      }
-+      myint = (myint * mult) + digit;
-+      ptr++;
-+    }
-+
-+  if (!found)
-+    {
-+      errnum = ERR_NUMBER_PARSING;
-+      return 0;
-+    }
-+
-+  *str_ptr = ptr;
-+  *myint_ptr = myint;
-+
-+  return 1;
-+}
-+#endif /* STAGE1_5 */
-+
-+#if !defined(STAGE1_5) || defined(FSYS_FAT)
-+int
-+grub_tolower (int c)
-+{
-+  if (c >= 'A' && c <= 'Z')
-+    return (c + ('a' - 'A'));
-+
-+  return c;
-+}
-+#endif /* ! STAGE1_5 || FSYS_FAT */
-+
-+int
-+grub_isspace (int c)
-+{
-+  switch (c)
-+    {
-+    case ' ':
-+    case '\t':
-+    case '\r':
-+    case '\n':
-+      return 1;
-+    default:
-+      break;
-+    }
-+
-+  return 0;
-+}
-+
-+#if !defined(STAGE1_5) || defined(FSYS_ISO9660)
-+int
-+grub_memcmp (const char *s1, const char *s2, int n)
-+{
-+  while (n)
-+    {
-+      if (*s1 < *s2)
-+      return -1;
-+      else if (*s1 > *s2)
-+      return 1;
-+      s1++;
-+      s2++;
-+      n--;
-+    }
-+
-+  return 0;
-+}
-+#endif /* ! STAGE1_5 || FSYS_ISO9660 */
-+
-+#ifndef STAGE1_5
-+int
-+grub_strncat (char *s1, const char *s2, int n)
-+{
-+  int i = -1;
-+
-+  while (++i < n && s1[i] != 0);
-+
-+  while (i < n && (s1[i++] = *(s2++)) != 0);
-+
-+  s1[n - 1] = 0;
-+
-+  if (i >= n)
-+    return 0;
-+
-+  s1[i] = 0;
-+
-+  return 1;
-+}
-+#endif /* ! STAGE1_5 */
-+
-+/* XXX: This below is an evil hack. Certainly, we should change the
-+   strategy to determine what should be defined and what shouldn't be
-+   defined for each image. For example, it would be better to create
-+   a static library supporting minimal standard C functions and link
-+   each image with the library. Complicated things should be left to
-+   computer, definitely. -okuji  */
-+#if !defined(STAGE1_5) || defined(FSYS_VSTAFS)
-+int
-+grub_strcmp (const char *s1, const char *s2)
-+{
-+  while (*s1 || *s2)
-+    {
-+      if (*s1 < *s2)
-+      return -1;
-+      else if (*s1 > *s2)
-+      return 1;
-+      s1 ++;
-+      s2 ++;
-+    }
-+
-+  return 0;
-+}
-+#endif /* ! STAGE1_5 || FSYS_VSTAFS */
-+
-+#ifndef STAGE1_5
-+/* Wait for a keypress and return its code.  */
-+int
-+getkey (void)
-+{
-+  return current_term->getkey ();
-+}
-+
-+/* Check if a key code is available.  */
-+int
-+checkkey (void)
-+{
-+  return current_term->checkkey ();
-+}
-+#endif /* ! STAGE1_5 */
-+
-+/* Display an ASCII character.  */
-+void
-+grub_putchar (int c)
-+{
-+  if (c == '\n')
-+    grub_putchar ('\r');
-+#ifndef STAGE1_5
-+  else if (c == '\t' && current_term->getxy)
-+    {
-+      int n;
-+      
-+      n = 8 - ((current_term->getxy () >> 8) & 3);
-+      while (n--)
-+      grub_putchar (' ');
-+      
-+      return;
-+    }
-+#endif /* ! STAGE1_5 */
-+  
-+#ifdef STAGE1_5
-+  
-+  /* In Stage 1.5, only the normal console is supported.  */
-+  console_putchar (c);
-+  
-+#else /* ! STAGE1_5 */
-+
-+  if (c == '\n')
-+    {
-+      /* Internal `more'-like feature.  */
-+      if (count_lines >= 0)
-+      {
-+        count_lines++;
-+        if (count_lines >= max_lines - 2)
-+          {
-+            int tmp;
-+            
-+            /* It's important to disable the feature temporarily, because
-+               the following grub_printf call will print newlines.  */
-+            count_lines = -1;
-+
-+            if (current_term->setcolorstate)
-+              current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
-+            
-+            grub_printf ("\n[Hit return to continue]");
-+
-+            if (current_term->setcolorstate)
-+              current_term->setcolorstate (COLOR_STATE_NORMAL);
-+            
-+            do
-+              {
-+                tmp = ASCII_CHAR (getkey ());
-+              }
-+            while (tmp != '\n' && tmp != '\r');
-+            grub_printf ("\r                        \r");
-+            
-+            /* Restart to count lines.  */
-+            count_lines = 0;
-+            return;
-+          }
-+      }
-+    }
-+
-+  current_term->putchar (c);
-+  
-+#endif /* ! STAGE1_5 */
-+}
-+
-+#ifndef STAGE1_5
-+void
-+gotoxy (int x, int y)
-+{
-+  current_term->gotoxy (x, y);
-+}
-+
-+int
-+getxy (void)
-+{
-+  return current_term->getxy ();
-+}
-+
-+void
-+cls (void)
-+{
-+  /* If the terminal is dumb, there is no way to clean the terminal.  */
-+  if (current_term->flags & TERM_DUMB)
-+    grub_putchar ('\n');
-+  else
-+    current_term->cls ();
-+}
-+
-+int
-+setcursor (int on)
-+{
-+  if (current_term->setcursor)
-+    return current_term->setcursor (on);
-+
-+  return 1;
-+}
-+#endif /* ! STAGE1_5 */
-+
-+int
-+substring (const char *s1, const char *s2)
-+{
-+  while (*s1 == *s2)
-+    {
-+      /* The strings match exactly. */
-+      if (! *(s1++))
-+      return 0;
-+      s2 ++;
-+    }
-+
-+  /* S1 is a substring of S2. */
-+  if (*s1 == 0)
-+    return -1;
-+
-+  /* S1 isn't a substring. */
-+  return 1;
-+}
-+
-+#ifndef STAGE1_5
-+/* Terminate the string STR with NUL.  */
-+int
-+nul_terminate (char *str)
-+{
-+  int ch;
-+  
-+  while (*str && ! grub_isspace (*str))
-+    str++;
-+
-+  ch = *str;
-+  *str = 0;
-+  return ch;
-+}
-+
-+char *
-+grub_strstr (const char *s1, const char *s2)
-+{
-+  while (*s1)
-+    {
-+      const char *ptr, *tmp;
-+
-+      ptr = s1;
-+      tmp = s2;
-+
-+      while (*tmp && *ptr == *tmp)
-+      ptr++, tmp++;
-+      
-+      if (tmp > s2 && ! *tmp)
-+      return (char *) s1;
-+
-+      s1++;
-+    }
-+
-+  return 0;
-+}
-+
-+int
-+grub_strlen (const char *str)
-+{
-+  int len = 0;
-+
-+  while (*str++)
-+    len++;
-+
-+  return len;
-+}
-+#endif /* ! STAGE1_5 */
-+
-+int
-+memcheck (int addr, int len)
-+{
-+#ifdef GRUB_UTIL
-+  auto int start_addr (void);
-+  auto int end_addr (void);
-+  
-+  auto int start_addr (void)
-+    {
-+      int ret;
-+# if defined(HAVE_START_SYMBOL)
-+      asm volatile ("movl     $start, %0" : "=a" (ret));
-+# elif defined(HAVE_USCORE_START_SYMBOL)
-+      asm volatile ("movl     $_start, %0" : "=a" (ret));
-+# endif
-+      return ret;
-+    }
-+
-+  auto int end_addr (void)
-+    {
-+      int ret;
-+# if defined(HAVE_END_SYMBOL)
-+      asm volatile ("movl     $end, %0" : "=a" (ret));
-+# elif defined(HAVE_USCORE_END_SYMBOL)
-+      asm volatile ("movl     $_end, %0" : "=a" (ret));
-+# endif
-+      return ret;
-+    }
-+
-+  if (start_addr () <= addr && end_addr () > addr + len)
-+    return ! errnum;
-+#endif /* GRUB_UTIL */
-+
-+  if ((addr < RAW_ADDR (0x1000))
-+      || (addr < RAW_ADDR (0x100000)
-+        && RAW_ADDR (mbi.mem_lower * 1024) < (addr + len))
-+      || (addr >= RAW_ADDR (0x100000)
-+        && RAW_ADDR (mbi.mem_upper * 1024) < ((addr - 0x100000) + len)))
-+    errnum = ERR_WONT_FIT;
-+
-+  return ! errnum;
-+}
-+
-+void *
-+grub_memmove (void *to, const void *from, int len)
-+{
-+   if (memcheck ((int) to, len))
-+     {
-+       /* This assembly code is stolen from
-+        linux-2.2.2/include/asm-i386/string.h. This is not very fast
-+        but compact.  */
-+       int d0, d1, d2;
-+
-+       if (to < from)
-+       {
-+         asm volatile ("cld\n\t"
-+                       "rep\n\t"
-+                       "movsb"
-+                       : "=&c" (d0), "=&S" (d1), "=&D" (d2)
-+                       : "0" (len),"1" (from),"2" (to)
-+                       : "memory");
-+       }
-+       else
-+       {
-+         asm volatile ("std\n\t"
-+                       "rep\n\t"
-+                       "movsb\n\t"
-+                       "cld"
-+                       : "=&c" (d0), "=&S" (d1), "=&D" (d2)
-+                       : "0" (len),
-+                       "1" (len - 1 + (const char *) from),
-+                       "2" (len - 1 + (char *) to)
-+                       : "memory");
-+       }
-+     }
-+
-+   return errnum ? NULL : to;
-+}
-+
-+void *
-+grub_memset (void *start, int c, int len)
-+{
-+  char *p = start;
-+
-+  if (memcheck ((int) start, len))
-+    {
-+      while (len -- > 0)
-+      *p ++ = c;
-+    }
-+
-+  return errnum ? NULL : start;
-+}
-+
-+#ifndef STAGE1_5
-+char *
-+grub_strcpy (char *dest, const char *src)
-+{
-+  grub_memmove (dest, src, grub_strlen (src) + 1);
-+  return dest;
-+}
-+#endif /* ! STAGE1_5 */
-+
-+#ifndef GRUB_UTIL
-+# undef memcpy
-+/* GCC emits references to memcpy() for struct copies etc.  */
-+void *memcpy (void *dest, const void *src, int n)  __attribute__ ((alias ("grub_memmove")));
-+#endif
-diff -Nur grub-0.97/stage2/common.c grub-0.97-patched/stage2/common.c
---- grub-0.97/stage2/common.c  2004-03-27 17:25:44.000000000 +0100
-+++ grub-0.97-patched/stage2/common.c  2012-11-11 17:06:52.558085305 +0100
-@@ -142,7 +142,8 @@
- init_bios_info (void)
- {
- #ifndef STAGE1_5
--  unsigned long cont, memtmp, addr;
-+  unsigned long memtmp, addr;
-+  volatile unsigned long cont;
-   int drive;
- #endif
-diff -Nur grub-0.97/stage2/disk_io.c grub-0.97-patched/stage2/disk_io.c
---- grub-0.97/stage2/disk_io.c 2004-05-23 18:35:24.000000000 +0200
-+++ grub-0.97-patched/stage2/disk_io.c 2012-11-11 17:07:12.740730013 +0100
-@@ -21,6 +21,7 @@
- #include <shared.h>
- #include <filesys.h>
-+#include <gpt.h>
- #ifdef SUPPORT_NETBOOT
- # define GRUB 1
-@@ -137,7 +138,7 @@
- }
- int
--rawread (int drive, int sector, int byte_offset, int byte_len, char *buf)
-+rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf)
- {
-   int slen, sectors_per_vtrack;
-   int sector_size_bits = log2 (buf_geom.sector_size);
-@@ -261,7 +262,7 @@
-        */
-       if (disk_read_func)
-       {
--        int sector_num = sector;
-+        unsigned int sector_num = sector;
-         int length = buf_geom.sector_size - byte_offset;
-         if (length > size)
-           length = size;
-@@ -291,7 +292,7 @@
- int
--devread (int sector, int byte_offset, int byte_len, char *buf)
-+devread (unsigned int sector, int byte_offset, int byte_len, char *buf)
- {
-   /*
-    *  Check partition boundaries
-@@ -330,7 +331,7 @@
- #ifndef STAGE1_5
- int
--rawwrite (int drive, int sector, char *buf)
-+rawwrite (int drive, unsigned int sector, char *buf)
- {
-   if (sector == 0)
-     {
-@@ -363,7 +364,7 @@
- }
- int
--devwrite (int sector, int sector_count, char *buf)
-+devwrite (unsigned int sector, int sector_count, char *buf)
- {
- #if defined(GRUB_UTIL) && defined(__linux__)
-   if (current_partition != 0xFFFFFF
-@@ -502,8 +503,8 @@
- set_partition_hidden_flag (int hidden)
- {
-   unsigned long part = 0xFFFFFF;
--  unsigned long start, len, offset, ext_offset;
--  int entry, type;
-+  unsigned long start, len, offset, ext_offset, gpt_offset;
-+  int entry, type, gpt_count, gpt_size;
-   char mbr[512];
-   
-   /* The drive must be a hard disk.  */
-@@ -524,8 +525,15 @@
-   /* Look for the partition.  */
-   while (next_partition (current_drive, 0xFFFFFF, &part, &type,           
-                        &start, &len, &offset, &entry,
--                       &ext_offset, mbr))
-+                       &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
-     {                                                                       
-+        /* The partition may not be a GPT partition.  */
-+        if (gpt_offset != 0)
-+          {
-+              errnum = ERR_BAD_ARGUMENT;
-+              return 1;
-+          }
-+
-       if (part == current_partition)
-       {
-         /* Found.  */
-@@ -577,11 +585,14 @@
-               unsigned long *partition, int *type,
-               unsigned long *start, unsigned long *len,
-               unsigned long *offset, int *entry,
--              unsigned long *ext_offset, char *buf)
-+               unsigned long *ext_offset,
-+               unsigned long *gpt_offset, int *gpt_count,
-+               int *gpt_size, char *buf)
- {
-   /* Forward declarations.  */
-   auto int next_bsd_partition (void);
-   auto int next_pc_slice (void);
-+  auto int next_gpt_slice(void);
-   /* Get next BSD partition in current PC slice.  */
-   int next_bsd_partition (void)
-@@ -666,6 +677,40 @@
-         return 0;
-       }
-+      /* If this is a GPT partition table, read it as such.  */
-+      if (*entry == -1 && *offset == 0 && PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT)
-+       {
-+         struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf;
-+
-+         /* Read in the GPT Partition table header.  */
-+         if (! rawread (drive, 1, 0, SECTOR_SIZE, buf))
-+           return 0;
-+
-+         if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000)
-+           {
-+             /* Let gpt_offset point to the first entry in the GPT
-+                partition table.  This can also be used by callers of
-+                next_partition to determine if a entry comes from a
-+                GPT partition table or not.  */
-+             *gpt_offset = hdr->partitions;
-+             *gpt_count = hdr->maxpart;
-+             *gpt_size =  hdr->partentry_size;
-+             
-+             return next_gpt_slice();
-+           }
-+         else
-+           {
-+             /* This is not a valid header for a GPT partition table.
-+                Re-read the MBR or the boot sector of the extended
-+                partition.  */
-+             if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf))
-+               return 0;
-+           }
-+       }
-+
-+      /* Not a GPT partition.  */
-+      *gpt_offset = 0;
-+
-       /* Increase the entry number.  */
-       (*entry)++;
-@@ -710,6 +755,43 @@
-       return 1;
-     }
-+  /* Get the next GPT slice.  */
-+  int next_gpt_slice (void)
-+    {
-+      struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf;
-+      /* Make GPT partitions show up as PC slices.  */
-+      int pc_slice_no = (*partition & 0xFF0000) >> 16;
-+
-+      /* If this is the first time...  */
-+      if (pc_slice_no == 0xFF)
-+       {
-+         pc_slice_no = -1;
-+         *entry = -1;
-+       }
-+
-+      do {
-+       (*entry)++;
-+
-+       if (*entry >= *gpt_count)
-+         {
-+           errnum = ERR_NO_PART;
-+           return 0;
-+         }
-+       /* Read in the GPT Partition table entry.  */
-+       if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (*gpt_size, *entry), GPT_ENTRY_INDEX (*gpt_size, *entry), *gpt_size, buf))
-+         return 0;
-+      } while (! (gptentry->type1 && gptentry->type2));
-+
-+      pc_slice_no++;
-+      *start = gptentry->start;
-+      *len = gptentry->end - gptentry->start + 1;
-+      *type = PC_SLICE_TYPE_EXT2FS;
-+      *entry = pc_slice_no;
-+      *partition = (*entry << 16) | 0xFFFF;
-+
-+      return 1;
-+    }
-+
-   /* Start the body of this function.  */
-   
- #ifndef STAGE1_5
-@@ -717,6 +799,9 @@
-     return 0;
- #endif
-+  if (*partition != 0xFFFFFF && *gpt_offset != 0)
-+    return next_gpt_slice ();
-+
-   /* If previous partition is a BSD partition or a PC slice which
-      contains BSD partitions...  */
-   if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff))
-@@ -746,6 +831,8 @@
- #ifndef STAGE1_5
- static unsigned long cur_part_offset;
- static unsigned long cur_part_addr;
-+static unsigned long cur_part_start;
-+static int cur_part_entry;
- #endif
- /* Open a partition.  */
-@@ -755,6 +842,9 @@
-   unsigned long dest_partition = current_partition;
-   unsigned long part_offset;
-   unsigned long ext_offset;
-+  unsigned long gpt_offset;
-+  int gpt_count;
-+  int gpt_size;
-   int entry;
-   char buf[SECTOR_SIZE];
-   int bsd_part, pc_slice;
-@@ -766,7 +856,8 @@
-       int ret = next_partition (current_drive, dest_partition,
-                               &current_partition, &current_slice,
-                               &part_start, &part_length,
--                              &part_offset, &entry, &ext_offset, buf);
-+                               &part_offset, &entry, &ext_offset,
-+                               &gpt_offset, &gpt_count, &gpt_size, buf);
-       bsd_part = (current_partition >> 8) & 0xFF;
-       pc_slice = current_partition >> 16;
-       return ret;
-@@ -800,7 +891,12 @@
-   /* If this is the whole disk, return here.  */
-   if (! flags && current_partition == 0xFFFFFF)
--    return 1;
-+    {
-+#ifndef STAGE1_5
-+      cur_part_offset = 0;
-+#endif /* ! STAGE1_5 */
-+      return 1;
-+    }
-   if (flags)
-     dest_partition = 0xFFFFFF;
-@@ -815,6 +911,8 @@
-       
-       cur_part_offset = part_offset;
-       cur_part_addr = BOOT_PART_TABLE + (entry << 4);
-+      cur_part_start = part_start;
-+      cur_part_entry = entry;
- #endif /* ! STAGE1_5 */
-       /* If this is a valid partition...  */
-@@ -1142,6 +1240,7 @@
-         src = (char *) SCRATCHADDR + BOOTSEC_PART_OFFSET;
-         while (dst < (char *) BOOT_PART_TABLE + BOOTSEC_PART_LENGTH)
-           *dst++ = *src++;
-+        PC_SLICE_START (BOOT_PART_TABLE - PC_SLICE_OFFSET, cur_part_entry) = cur_part_start;
-         
-         /* Set the active flag of the booted partition.  */
-         for (i = 0; i < 4; i++)
-diff -Nur grub-0.97/stage2/fsys_ext2fs.c grub-0.97-patched/stage2/fsys_ext2fs.c
---- grub-0.97/stage2/fsys_ext2fs.c     2004-08-08 20:19:18.000000000 +0200
-+++ grub-0.97-patched/stage2/fsys_ext2fs.c     2012-11-11 17:07:12.750730331 +0100
-@@ -41,6 +41,7 @@
- typedef unsigned short __u16;
- typedef __signed__ int __s32;
- typedef unsigned int __u32;
-+typedef unsigned long long __u64;
- /*
-  * Constants relative to the data blocks, from ext2_fs.h
-@@ -61,9 +62,9 @@
-     __u32 s_free_inodes_count;        /* Free inodes count */
-     __u32 s_first_data_block; /* First Data Block */
-     __u32 s_log_block_size;   /* Block size */
--    __s32 s_log_frag_size;    /* Fragment size */
-+    __s32 s_obso_log_frag_size;       /* Obsoleted Fragment size */
-     __u32 s_blocks_per_group; /* # Blocks per group */
--    __u32 s_frags_per_group;  /* # Fragments per group */
-+    __u32 s_obso_frags_per_group;     /* Obsoleted Fragments per group */
-     __u32 s_inodes_per_group; /* # Inodes per group */
-     __u32 s_mtime;            /* Mount time */
-     __u32 s_wtime;            /* Write time */
-@@ -72,17 +73,62 @@
-     __u16 s_magic;            /* Magic signature */
-     __u16 s_state;            /* File system state */
-     __u16 s_errors;           /* Behaviour when detecting errors */
--    __u16 s_pad;
-+    __u16 s_minor_rev_level;  /* minor revision level */
-     __u32 s_lastcheck;                /* time of last check */
-     __u32 s_checkinterval;    /* max. time between checks */
-     __u32 s_creator_os;               /* OS */
-     __u32 s_rev_level;                /* Revision level */
-     __u16 s_def_resuid;               /* Default uid for reserved blocks */
-     __u16 s_def_resgid;               /* Default gid for reserved blocks */
--    __u32 s_reserved[235];    /* Padding to the end of the block */
-+    /*
-+     * These fields are for EXT2_DYNAMIC_REV superblocks only.
-+     *
-+     * Note: the difference between the compatible feature set and
-+     * the incompatible feature set is that if there is a bit set
-+     * in the incompatible feature set that the kernel doesn't
-+     * know about, it should refuse to mount the filesystem.
-+     *
-+     * e2fsck's requirements are more strict; if it doesn't know
-+     * about a feature in either the compatible or incompatible
-+     * feature set, it must abort and not try to meddle with
-+     * things it doesn't understand...
-+     */
-+    __u32 s_first_ino;                /* First non-reserved inode */
-+    __u16 s_inode_size;               /* size of inode structure */
-+    __u16 s_block_group_nr;   /* block group # of this superblock */
-+    __u32 s_feature_compat;   /* compatible feature set */
-+    __u32 s_feature_incompat; /* incompatible feature set */
-+    __u32 s_feature_ro_compat;        /* readonly-compatible feature set */
-+    __u8  s_uuid[16];         /* 128-bit uuid for volume */
-+    char  s_volume_name[16];  /* volume name */
-+    char  s_last_mounted[64]; /* directory where last mounted */
-+    __u32 s_algorithm_usage_bitmap; /* For compression */
-+    /*
-+     * Performance hints.  Directory preallocation should only
-+     * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
-+     */
-+    __u8  s_prealloc_blocks;  /* Nr of blocks to try to preallocate*/
-+    __u8  s_prealloc_dir_blocks;      /* Nr to preallocate for dirs */
-+    __u16 s_reserved_gdt_blocks;/* Per group table for online growth */
-+    /*
-+     * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
-+     */
-+    __u8 s_journal_uuid[16];  /* uuid of journal superblock */
-+    __u32 s_journal_inum;     /* inode number of journal file */
-+    __u32 s_journal_dev;      /* device number of journal file */
-+    __u32 s_last_orphan;      /* start of list of inodes to delete */
-+    __u32 s_hash_seed[4];     /* HTREE hash seed */
-+    __u8  s_def_hash_version; /* Default hash version to use */
-+    __u8  s_jnl_backup_type;  /* Default type of journal backup */
-+    __u16 s_desc_size;                /* size of group descriptor */
-+    __u32 s_default_mount_opts;
-+    __u32 s_first_meta_bg;    /* First metablock group */
-+    __u32 s_mkfs_time;                /* When the filesystem was created */
-+    __u32 s_jnl_blocks[17];   /* Backup of the journal inode */
-+    __u32 s_reserved[172];    /* Padding to the end of the block */
-   };
--struct ext2_group_desc
-+struct ext4_group_desc
-   {
-     __u32 bg_block_bitmap;    /* Blocks bitmap block */
-     __u32 bg_inode_bitmap;    /* Inodes bitmap block */
-@@ -90,8 +136,18 @@
-     __u16 bg_free_blocks_count;       /* Free blocks count */
-     __u16 bg_free_inodes_count;       /* Free inodes count */
-     __u16 bg_used_dirs_count; /* Directories count */
--    __u16 bg_pad;
--    __u32 bg_reserved[3];
-+    __u16 bg_flags;           /* EXT4_BG_flags (INODE_UNINIT, etc) */
-+    __u32 bg_reserved[2];             /* Likely block/inode bitmap checksum */
-+    __u16 bg_itable_unused;   /* Unused inodes count */
-+    __u16 bg_checksum;                /* crc16(sb_uuid+group+desc) */
-+    __u32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */
-+    __u32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */
-+    __u32 bg_inode_table_hi;  /* Inodes table block MSB */
-+    __u16 bg_free_blocks_count_hi;/* Free blocks count MSB */
-+    __u16 bg_free_inodes_count_hi;/* Free inodes count MSB */
-+    __u16 bg_used_dirs_count_hi;      /* Directories count MSB */
-+    __u16 bg_itable_unused_hi;        /* Unused inodes count MSB */
-+    __u32 bg_reserved2[3];
-   };
- struct ext2_inode
-@@ -129,22 +185,22 @@
-     __u32 i_block[EXT2_N_BLOCKS];     /* 40: Pointers to blocks */
-     __u32 i_version;          /* File version (for NFS) */
-     __u32 i_file_acl;         /* File ACL */
--    __u32 i_dir_acl;          /* Directory ACL */
--    __u32 i_faddr;            /* Fragment address */
-+    __u32 i_size_high;
-+    __u32 i_obso_faddr;               /* Obsoleted fragment address */
-     union
-       {
-       struct
-         {
--          __u8 l_i_frag;      /* Fragment number */
--          __u8 l_i_fsize;     /* Fragment size */
--          __u16 i_pad1;
--          __u32 l_i_reserved2[2];
-+              __u16   l_i_blocks_high; /* were l_i_reserved1 */
-+              __u16   l_i_file_acl_high;
-+              __u16   l_i_uid_high;   /* these 2 fields */
-+              __u16   l_i_gid_high;   /* were reserved2[0] */
-+              __u32   l_i_reserved2;
-         }
-       linux2;
-       struct
-         {
--          __u8 h_i_frag;      /* Fragment number */
--          __u8 h_i_fsize;     /* Fragment size */
-+              __u16   h_i_reserved1;  /* Obsoleted fragment number/size which are removed in ext4 */
-           __u16 h_i_mode_high;
-           __u16 h_i_uid_high;
-           __u16 h_i_gid_high;
-@@ -153,16 +209,36 @@
-       hurd2;
-       struct
-         {
--          __u8 m_i_frag;      /* Fragment number */
--          __u8 m_i_fsize;     /* Fragment size */
--          __u16 m_pad1;
-+              __u16   h_i_reserved1;  /* Obsoleted fragment number/size which are removed in ext4 */
-+              __u16   m_i_file_acl_high;
-           __u32 m_i_reserved2[2];
-         }
-       masix2;
-       }
-     osd2;                     /* OS dependent 2 */
-+      __u16   i_extra_isize;
-+      __u16   i_pad1;
-+      __u32  i_ctime_extra;  /* extra Change time      (nsec << 2 | epoch) */
-+      __u32  i_mtime_extra;  /* extra Modification time(nsec << 2 | epoch) */
-+      __u32  i_atime_extra;  /* extra Access time      (nsec << 2 | epoch) */
-+      __u32  i_crtime;       /* File Creation time */
-+      __u32  i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */
-+      __u32  i_version_hi;    /* high 32 bits for 64-bit version */
-   };
-+#define EXT4_FEATURE_INCOMPAT_EXTENTS         0x0040 /* extents support */
-+#define EXT4_FEATURE_INCOMPAT_64BIT                   0x0080 /* grub not supported*/
-+#define EXT4_FEATURE_INCOMPAT_MMP           0x0100
-+#define EXT4_FEATURE_INCOMPAT_FLEX_BG         0x0200
-+
-+#define EXT4_HAS_INCOMPAT_FEATURE(sb,mask)                    \
-+      ( sb->s_feature_incompat & mask )
-+
-+#define EXT4_EXTENTS_FL               0x00080000 /* Inode uses extents */
-+#define EXT4_HUGE_FILE_FL     0x00040000 /* Set to each huge file */
-+
-+#define EXT4_MIN_DESC_SIZE                    32
-+
- /* linux/limits.h */
- #define NAME_MAX         255  /* # chars in a file name */
-@@ -180,6 +256,57 @@
-     char name[EXT2_NAME_LEN]; /* File name */
-   };
-+/* linux/ext4_fs_extents.h */ 
-+/* This is the extent on-disk structure.
-+ * It's used at the bottom of the tree.
-+ */
-+struct ext4_extent 
-+  {
-+      __u32  ee_block;   /* first logical block extent covers */
-+      __u16  ee_len;     /* number of blocks covered by extent */
-+      __u16  ee_start_hi;    /* high 16 bits of physical block */
-+      __u32  ee_start_lo;    /* low 32 bits of physical block */
-+  };
-+
-+/*
-+ * This is index on-disk structure.
-+ * It's used at all the levels except the bottom.
-+ */
-+struct ext4_extent_idx 
-+  {
-+    __u32  ei_block;   /* index covers logical blocks from 'block' */
-+    __u32  ei_leaf_lo; /* pointer to the physical block of the next *
-+                           * level. leaf or next index could be there */
-+    __u16  ei_leaf_hi; /* high 16 bits of physical block */
-+    __u16  ei_unused;
-+  };
-+
-+/*
-+ * Each block (leaves and indexes), even inode-stored has header.
-+ */
-+struct ext4_extent_header 
-+  {
-+    __u16  eh_magic;   /* probably will support different formats */
-+    __u16  eh_entries; /* number of valid entries */
-+    __u16  eh_max;     /* capacity of store in entries */
-+    __u16  eh_depth;   /* has tree real underlying blocks? */
-+    __u32  eh_generation;  /* generation of the tree */
-+  };
-+
-+#define EXT4_EXT_MAGIC      (0xf30a)
-+#define EXT_FIRST_EXTENT(__hdr__) \
-+    ((struct ext4_extent *) (((char *) (__hdr__)) +     \
-+                 sizeof(struct ext4_extent_header)))
-+#define EXT_FIRST_INDEX(__hdr__) \
-+    ((struct ext4_extent_idx *) (((char *) (__hdr__)) + \
-+                 sizeof(struct ext4_extent_header)))
-+#define EXT_LAST_EXTENT(__hdr__) \
-+    (EXT_FIRST_EXTENT((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1)
-+#define EXT_LAST_INDEX(__hdr__) \
-+    (EXT_FIRST_INDEX((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1)
-+
-+
-+
- /* linux/ext2fs.h */
- /*
-  * EXT2_DIR_PAD defines the directory entries boundaries
-@@ -218,13 +345,30 @@
- #define EXT2_ADDR_PER_BLOCK(s)          (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
- #define EXT2_ADDR_PER_BLOCK_BITS(s)           (log2(EXT2_ADDR_PER_BLOCK(s)))
-+#define EXT2_GOOD_OLD_REV     0       /* The good old (original) format */
-+#define EXT2_DYNAMIC_REV      1       /* V2 format w/ dynamic inode sizes */
-+#define EXT2_GOOD_OLD_INODE_SIZE 128
-+#define EXT2_INODE_SIZE(s)    (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
-+                              EXT2_GOOD_OLD_INODE_SIZE : \
-+                              (s)->s_inode_size)
-+#define EXT2_INODES_PER_BLOCK(s)      (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
-+
- /* linux/ext2_fs.h */
- #define EXT2_BLOCK_SIZE_BITS(s)        ((s)->s_log_block_size + 10)
- /* kind of from ext2/super.c */
- #define EXT2_BLOCK_SIZE(s)    (1 << EXT2_BLOCK_SIZE_BITS(s))
- /* linux/ext2fs.h */
-+/* sizeof(struct ext2_group_desc) is changed in ext4 
-+ * in kernel code, ext2/3 uses sizeof(struct ext2_group_desc) to calculate 
-+ * number of desc per block, while ext4 uses superblock->s_desc_size in stead
-+ * superblock->s_desc_size is not available in ext2/3
-+ * */
-+#define EXT2_DESC_SIZE(s) \
-+      (EXT4_HAS_INCOMPAT_FEATURE(s,EXT4_FEATURE_INCOMPAT_64BIT)? \
-+      s->s_desc_size : EXT4_MIN_DESC_SIZE)
- #define EXT2_DESC_PER_BLOCK(s) \
--     (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
-+      (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s))
-+
- /* linux/stat.h */
- #define S_IFMT  00170000
- #define S_IFLNK  0120000
-@@ -386,6 +530,122 @@
-     [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
- }
-+/* extent binary search index
-+ * find closest index in the current level extent tree
-+ * kind of from ext4_ext_binsearch_idx in ext4/extents.c
-+ */
-+static struct ext4_extent_idx*
-+ext4_ext_binsearch_idx(struct ext4_extent_header* eh, int logical_block)
-+{
-+  struct ext4_extent_idx *r, *l, *m;
-+  l = EXT_FIRST_INDEX(eh) + 1;
-+  r = EXT_LAST_INDEX(eh);
-+  while (l <= r) 
-+    {
-+        m = l + (r - l) / 2;
-+        if (logical_block < m->ei_block)
-+                r = m - 1;
-+        else
-+                l = m + 1;
-+      }
-+  return (struct ext4_extent_idx*)(l - 1);
-+}
-+
-+/* extent binary search 
-+ * find closest extent in the leaf level 
-+ * kind of from ext4_ext_binsearch in ext4/extents.c
-+ */
-+static struct ext4_extent*
-+ext4_ext_binsearch(struct ext4_extent_header* eh, int logical_block)
-+{
-+  struct ext4_extent *r, *l, *m;
-+  l = EXT_FIRST_EXTENT(eh) + 1;
-+  r = EXT_LAST_EXTENT(eh);
-+  while (l <= r) 
-+    {
-+        m = l + (r - l) / 2;
-+        if (logical_block < m->ee_block)
-+                r = m - 1;
-+        else
-+                l = m + 1;
-+      }
-+  return (struct ext4_extent*)(l - 1);
-+}
-+
-+/* Maps extents enabled logical block into physical block via an inode. 
-+ * EXT4_HUGE_FILE_FL should be checked before calling this.
-+ */
-+static int
-+ext4fs_block_map (int logical_block)
-+{
-+  struct ext4_extent_header *eh;
-+  struct ext4_extent *ex, *extent;
-+  struct ext4_extent_idx *ei, *index;
-+  int depth;
-+  int i;
-+
-+#ifdef E2DEBUG
-+  unsigned char *i;
-+  for (i = (unsigned char *) INODE;
-+       i < ((unsigned char *) INODE + sizeof (struct ext2_inode));
-+       i++)
-+    {
-+      printf ("%c", "0123456789abcdef"[*i >> 4]);
-+      printf ("%c", "0123456789abcdef"[*i % 16]);
-+      if (!((i + 1 - (unsigned char *) INODE) % 16))
-+      {
-+        printf ("\n");
-+      }
-+      else
-+      {
-+        printf (" ");
-+      }
-+    }
-+  printf ("logical block %d\n", logical_block);
-+#endif /* E2DEBUG */
-+  eh = (struct ext4_extent_header*)INODE->i_block;
-+  if (eh->eh_magic != EXT4_EXT_MAGIC)
-+  {
-+          errnum = ERR_FSYS_CORRUPT;
-+          return -1;
-+  }
-+  while((depth = eh->eh_depth) != 0)
-+      { /* extent index */
-+        if (eh->eh_magic != EXT4_EXT_MAGIC)
-+        {
-+                errnum = ERR_FSYS_CORRUPT;
-+                return -1;
-+        }
-+        ei = ext4_ext_binsearch_idx(eh, logical_block);
-+        if (ei->ei_leaf_hi)
-+      {/* 64bit physical block number not supported */
-+        errnum = ERR_FILELENGTH;
-+        return -1;
-+      }
-+        if (!ext2_rdfsb(ei->ei_leaf_lo, DATABLOCK1))
-+      {
-+        errnum = ERR_FSYS_CORRUPT;
-+        return -1;
-+      }
-+        eh = (struct ext4_extent_header*)DATABLOCK1;
-+      }
-+
-+  /* depth==0, we come to the leaf */
-+  ex = ext4_ext_binsearch(eh, logical_block);
-+  if (ex->ee_start_hi) 
-+      {/* 64bit physical block number not supported */
-+        errnum = ERR_FILELENGTH;
-+        return -1;
-+      }
-+  if ((ex->ee_block + ex->ee_len) < logical_block)
-+      {
-+        errnum = ERR_FSYS_CORRUPT;
-+        return -1;
-+      }
-+  return ex->ee_start_lo + logical_block - ex->ee_block;
-+
-+}
-+
- /* preconditions: all preconds of ext2fs_block_map */
- int
- ext2fs_read (char *buf, int len)
-@@ -420,6 +680,11 @@
-       /* find the (logical) block component of our location */
-       logical_block = filepos >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK);
-       offset = filepos & (EXT2_BLOCK_SIZE (SUPERBLOCK) - 1);
-+      /* map extents enabled logical block number to physical fs on-dick block number */
-+      if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) 
-+                    && INODE->i_flags & EXT4_EXTENTS_FL)
-+          map = ext4fs_block_map (logical_block);
-+      else
-       map = ext2fs_block_map (logical_block);
- #ifdef E2DEBUG
-       printf ("map=%d\n", map);
-@@ -504,7 +769,7 @@
-   int desc;                   /* index within that group */
-   int ino_blk;                        /* fs pointer of the inode's information */
-   int str_chk = 0;            /* used to hold the results of a string compare */
--  struct ext2_group_desc *gdp;
-+  struct ext4_group_desc *ext4_gdp;
-   struct ext2_inode *raw_inode;       /* inode info corresponding to current_ino */
-   char linkbuf[PATH_MAX];     /* buffer for following symbolic links */
-@@ -550,10 +815,17 @@
-       {
-         return 0;
-       }
--      gdp = GROUP_DESC;
--      ino_blk = gdp[desc].bg_inode_table +
-+        ext4_gdp = (struct ext4_group_desc *)( (__u8*)GROUP_DESC + 
-+                                      desc * EXT2_DESC_SIZE(SUPERBLOCK));
-+        if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK, EXT4_FEATURE_INCOMPAT_64BIT)
-+              && (! ext4_gdp->bg_inode_table_hi))
-+      {/* 64bit itable not supported */
-+        errnum = ERR_FILELENGTH;
-+        return -1;
-+      }
-+      ino_blk = ext4_gdp->bg_inode_table + 
-       (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group))
--       >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)));
-+       >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK)));
- #ifdef E2DEBUG
-       printf ("inode table fsblock=%d\n", ino_blk);
- #endif /* E2DEBUG */
-@@ -565,13 +837,12 @@
-       /* reset indirect blocks! */
-       mapblock2 = mapblock1 = -1;
--      raw_inode = INODE +
--      ((current_ino - 1)
--       & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1));
-+      raw_inode = (struct ext2_inode *)((char *)INODE +
-+      ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) *
-+      EXT2_INODE_SIZE (SUPERBLOCK));
- #ifdef E2DEBUG
-       printf ("ipb=%d, sizeof(inode)=%d\n",
--            (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)),
--            sizeof (struct ext2_inode));
-+            EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK));
-       printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode);
-       printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE);
-       for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode;
-@@ -629,7 +900,10 @@
-           }
-         linkbuf[filemax + len] = '\0';
--        /* Read the symlink data. */
-+        /* Read the symlink data. 
-+         * Slow symlink is extents enabled
-+         * But since grub_read invokes ext2fs_read, nothing to change here
-+         * */
-         if (! ext2_is_fast_symlink ())
-           {
-             /* Read the necessary blocks, and reset the file pointer. */
-@@ -640,7 +914,9 @@
-           }
-         else
-           {
--            /* Copy the data directly from the inode. */
-+            /* Copy the data directly from the inode. 
-+                 * Fast symlink is not extents enabled
-+                 * */
-             len = filemax;
-             memmove (linkbuf, (char *) INODE->i_block, len);
-           }
-@@ -674,6 +950,13 @@
-             errnum = ERR_BAD_FILETYPE;
-             return 0;
-           }
-+        /* if file is too large, just stop and report an error*/
-+        if ( (INODE->i_flags & EXT4_HUGE_FILE_FL) && !(INODE->i_size_high))
-+          {
-+                /* file too large, stop reading */
-+                errnum = ERR_FILELENGTH;
-+                return 0;
-+          }
-         filemax = (INODE->i_size);
-         return 1;
-@@ -728,17 +1011,28 @@
-           }
-         /* else, find the (logical) block component of our location */
-+        /* ext4 logical block number the same as ext2/3 */
-         blk = loc >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK);
-         /* we know which logical block of the directory entry we are looking
-            for, now we have to translate that to the physical (fs) block on
-            the disk */
-+        /* map extents enabled logical block number to physical fs on-dick block number */
-+        if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) 
-+                        && INODE->i_flags & EXT4_EXTENTS_FL)
-+              map = ext4fs_block_map (blk);
-+        else
-         map = ext2fs_block_map (blk);
- #ifdef E2DEBUG
-         printf ("fs block=%d\n", map);
- #endif /* E2DEBUG */
-         mapblock2 = -1;
--        if ((map < 0) || !ext2_rdfsb (map, DATABLOCK2))
-+        if (map < 0) 
-+        {
-+            *rest = ch;
-+            return 0;
-+        }
-+          if (!ext2_rdfsb (map, DATABLOCK2))
-           {
-             errnum = ERR_FSYS_CORRUPT;
-             *rest = ch;
-diff -Nur grub-0.97/stage2/gpt.h grub-0.97-patched/stage2/gpt.h
---- grub-0.97/stage2/gpt.h     1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/stage2/gpt.h     2012-11-11 17:07:12.697728638 +0100
-@@ -0,0 +1,68 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002,2005,2006   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 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 _GPT_H
-+#define _GPT_H
-+
-+typedef signed char grub_int8_t;
-+typedef signed short grub_int16_t;
-+typedef signed int grub_int32_t;
-+typedef signed long long int grub_int64_t;
-+typedef unsigned char grub_uint8_t;
-+typedef unsigned short grub_uint16_t;
-+typedef unsigned int grub_uint32_t;
-+typedef unsigned long long int grub_uint64_t;
-+
-+struct grub_gpt_header
-+{
-+  grub_uint64_t magic;
-+  grub_uint32_t version;
-+  grub_uint32_t headersize;
-+  grub_uint32_t crc32;
-+  grub_uint32_t unused1;
-+  grub_uint64_t primary;
-+  grub_uint64_t backup;
-+  grub_uint64_t start;
-+  grub_uint64_t end;
-+  grub_uint8_t guid[16];
-+  grub_uint64_t partitions;
-+  grub_uint32_t maxpart;
-+  grub_uint32_t partentry_size;
-+  grub_uint32_t partentry_crc32;
-+} __attribute__ ((packed));
-+
-+struct grub_gpt_partentry
-+{
-+  grub_uint64_t type1;
-+  grub_uint64_t type2;
-+  grub_uint8_t guid[16];
-+  grub_uint64_t start;
-+  grub_uint64_t end;
-+  grub_uint8_t attrib;
-+  char name[72];
-+} __attribute__ ((packed));
-+
-+#define GPT_HEADER_MAGIC       0x5452415020494645UL
-+
-+#define        GPT_ENTRY_SECTOR(size,entry)                                    \
-+       ((((entry) * (size) + 1) & ~(SECTOR_SIZE - 1)) >> SECTOR_BITS)
-+#define        GPT_ENTRY_INDEX(size,entry)                                     \
-+       ((((entry) * (size) + 1) & (SECTOR_SIZE - 1)) - 1)
-+
-+#endif /* _GPT_H */
-diff -Nur grub-0.97/stage2/graphics.c grub-0.97-patched/stage2/graphics.c
---- grub-0.97/stage2/graphics.c        1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/stage2/graphics.c        2012-11-11 17:06:33.320470847 +0100
-@@ -0,0 +1,563 @@
-+/* graphics.c - graphics mode support for GRUB */
-+/* Implemented as a terminal type by Jeremy Katz <katzj@redhat.com> based
-+ * on a patch by Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
-+ */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2001,2002  Red Hat, Inc.
-+ *  Portions copyright (C) 2000  Conectiva, 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 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.
-+ */
-+
-+
-+
-+#ifdef SUPPORT_GRAPHICS
-+
-+#include <term.h>
-+#include <shared.h>
-+#include <graphics.h>
-+
-+int saved_videomode;
-+unsigned char *font8x16;
-+
-+int graphics_inited = 0;
-+static char splashimage[64];
-+
-+#define VSHADOW VSHADOW1
-+unsigned char VSHADOW1[38400];
-+unsigned char VSHADOW2[38400];
-+unsigned char VSHADOW4[38400];
-+unsigned char VSHADOW8[38400];
-+
-+/* constants to define the viewable area */
-+const int x0 = 0;
-+const int x1 = 80;
-+const int y0 = 0;
-+const int y1 = 30;
-+
-+/* text buffer has to be kept around so that we can write things as we
-+ * scroll and the like */
-+unsigned short text[80 * 30];
-+
-+/* why do these have to be kept here? */
-+int foreground = (63 << 16) | (63 << 8) | (63), background = 0, border = 0;
-+
-+/* current position */
-+static int fontx = 0;
-+static int fonty = 0;
-+
-+/* global state so that we don't try to recursively scroll or cursor */
-+static int no_scroll = 0;
-+
-+/* color state */
-+static int graphics_standard_color = A_NORMAL;
-+static int graphics_normal_color = A_NORMAL;
-+static int graphics_highlight_color = A_REVERSE;
-+static int graphics_current_color = A_NORMAL;
-+static color_state graphics_color_state = COLOR_STATE_STANDARD;
-+
-+
-+/* graphics local functions */
-+static void graphics_setxy(int col, int row);
-+static void graphics_scroll();
-+
-+/* FIXME: where do these really belong? */
-+static inline void outb(unsigned short port, unsigned char val)
-+{
-+    __asm __volatile ("outb %0,%1"::"a" (val), "d" (port));
-+}
-+
-+static void MapMask(int value) {
-+    outb(0x3c4, 2);
-+    outb(0x3c5, value);
-+}
-+
-+/* bit mask register */
-+static void BitMask(int value) {
-+    outb(0x3ce, 8);
-+    outb(0x3cf, value);
-+}
-+
-+
-+
-+/* Set the splash image */
-+void graphics_set_splash(char *splashfile) {
-+    grub_strcpy(splashimage, splashfile);
-+}
-+
-+/* Get the current splash image */
-+char *graphics_get_splash(void) {
-+    return splashimage;
-+}
-+
-+/* Initialize a vga16 graphics display with the palette based off of
-+ * the image in splashimage.  If the image doesn't exist, leave graphics
-+ * mode.  */
-+int graphics_init()
-+{
-+    if(!grub_file_exists(splashimage)) {
-+        return 0;
-+    }
-+
-+    if (!graphics_inited) {
-+        saved_videomode = set_videomode(0x12);
-+    }
-+
-+    if (!read_image(splashimage)) {
-+        set_videomode(saved_videomode);
-+        grub_printf("failed to read image\n");
-+        return 0;
-+    }
-+
-+    font8x16 = (unsigned char*)graphics_get_font();
-+
-+    graphics_inited = 1;
-+
-+    /* make sure that the highlight color is set correctly */
-+    graphics_highlight_color = ((graphics_normal_color >> 4) | 
-+                              ((graphics_normal_color & 0xf) << 4));
-+
-+    return 1;
-+}
-+
-+/* Leave graphics mode */
-+void graphics_end(void)
-+{
-+    if (graphics_inited) {
-+        set_videomode(saved_videomode);
-+        graphics_inited = 0;
-+    }
-+}
-+
-+/* Print ch on the screen.  Handle any needed scrolling or the like */
-+void graphics_putchar(int ch) {
-+    ch &= 0xff;
-+
-+    graphics_cursor(0);
-+
-+    if (ch == '\n') {
-+        if (fonty + 1 < y1)
-+            graphics_setxy(fontx, fonty + 1);
-+        else
-+            graphics_scroll();
-+        graphics_cursor(1);
-+        return;
-+    } else if (ch == '\r') {
-+        graphics_setxy(x0, fonty);
-+        graphics_cursor(1);
-+        return;
-+    }
-+
-+    graphics_cursor(0);
-+
-+    text[fonty * 80 + fontx] = ch;
-+    text[fonty * 80 + fontx] &= 0x00ff;
-+    if (graphics_current_color & 0xf0)
-+        text[fonty * 80 + fontx] |= 0x100;
-+
-+    graphics_cursor(0);
-+
-+    if ((fontx + 1) >= x1) {
-+        graphics_setxy(x0, fonty);
-+        if (fonty + 1 < y1)
-+            graphics_setxy(x0, fonty + 1);
-+        else
-+            graphics_scroll();
-+    } else {
-+        graphics_setxy(fontx + 1, fonty);
-+    }
-+
-+    graphics_cursor(1);
-+}
-+
-+/* get the current location of the cursor */
-+int graphics_getxy(void) {
-+    return (fontx << 8) | fonty;
-+}
-+
-+void graphics_gotoxy(int x, int y) {
-+    graphics_cursor(0);
-+
-+    graphics_setxy(x, y);
-+
-+    graphics_cursor(1);
-+}
-+
-+void graphics_cls(void) {
-+    int i;
-+    unsigned char *mem, *s1, *s2, *s4, *s8;
-+
-+    graphics_cursor(0);
-+    graphics_gotoxy(x0, y0);
-+
-+    mem = (unsigned char*)VIDEOMEM;
-+    s1 = (unsigned char*)VSHADOW1;
-+    s2 = (unsigned char*)VSHADOW2;
-+    s4 = (unsigned char*)VSHADOW4;
-+    s8 = (unsigned char*)VSHADOW8;
-+
-+    for (i = 0; i < 80 * 30; i++)
-+        text[i] = ' ';
-+    graphics_cursor(1);
-+
-+    BitMask(0xff);
-+
-+    /* plano 1 */
-+    MapMask(1);
-+    grub_memcpy(mem, s1, 38400);
-+
-+    /* plano 2 */
-+    MapMask(2);
-+    grub_memcpy(mem, s2, 38400);
-+
-+    /* plano 3 */
-+    MapMask(4);
-+    grub_memcpy(mem, s4, 38400);
-+
-+    /* plano 4 */
-+    MapMask(8);
-+    grub_memcpy(mem, s8, 38400);
-+
-+    MapMask(15);
-+ 
-+}
-+
-+void graphics_setcolorstate (color_state state) {
-+    switch (state) {
-+    case COLOR_STATE_STANDARD:
-+        graphics_current_color = graphics_standard_color;
-+        break;
-+    case COLOR_STATE_NORMAL:
-+        graphics_current_color = graphics_normal_color;
-+        break;
-+    case COLOR_STATE_HIGHLIGHT:
-+        graphics_current_color = graphics_highlight_color;
-+        break;
-+    default:
-+        graphics_current_color = graphics_standard_color;
-+        break;
-+    }
-+
-+    graphics_color_state = state;
-+}
-+
-+void graphics_setcolor (int normal_color, int highlight_color) {
-+    graphics_normal_color = normal_color;
-+    graphics_highlight_color = highlight_color;
-+
-+    graphics_setcolorstate (graphics_color_state);
-+}
-+
-+void graphics_setcursor (int on) {
-+    /* FIXME: we don't have a cursor in graphics */
-+    return;
-+}
-+
-+/* Read in the splashscreen image and set the palette up appropriately.
-+ * Format of splashscreen is an xpm (can be gzipped) with 16 colors and
-+ * 640x480. */
-+int read_image(char *s)
-+{
-+    char buf[32], pal[16];
-+    unsigned char c, base, mask, *s1, *s2, *s4, *s8;
-+    unsigned i, len, idx, colors, x, y, width, height;
-+
-+    if (!grub_open(s))
-+        return 0;
-+
-+    /* read header */
-+    if (!grub_read((char*)&buf, 10) || grub_memcmp(buf, "/* XPM */\n", 10)) {
-+        grub_close();
-+        return 0;
-+    }
-+    
-+    /* parse info */
-+    while (grub_read(&c, 1)) {
-+        if (c == '"')
-+            break;
-+    }
-+
-+    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
-+        ;
-+
-+    i = 0;
-+    width = c - '0';
-+    while (grub_read(&c, 1)) {
-+        if (c >= '0' && c <= '9')
-+            width = width * 10 + c - '0';
-+        else
-+            break;
-+    }
-+    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
-+        ;
-+
-+    height = c - '0';
-+    while (grub_read(&c, 1)) {
-+        if (c >= '0' && c <= '9')
-+            height = height * 10 + c - '0';
-+        else
-+            break;
-+    }
-+    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
-+        ;
-+
-+    colors = c - '0';
-+    while (grub_read(&c, 1)) {
-+        if (c >= '0' && c <= '9')
-+            colors = colors * 10 + c - '0';
-+        else
-+            break;
-+    }
-+
-+    base = 0;
-+    while (grub_read(&c, 1) && c != '"')
-+        ;
-+
-+    /* palette */
-+    for (i = 0, idx = 1; i < colors; i++) {
-+        len = 0;
-+
-+        while (grub_read(&c, 1) && c != '"')
-+            ;
-+        grub_read(&c, 1);       /* char */
-+        base = c;
-+        grub_read(buf, 4);      /* \t c # */
-+
-+        while (grub_read(&c, 1) && c != '"') {
-+            if (len < sizeof(buf))
-+                buf[len++] = c;
-+        }
-+
-+        if (len == 6 && idx < 15) {
-+            int r = ((hex(buf[0]) << 4) | hex(buf[1])) >> 2;
-+            int g = ((hex(buf[2]) << 4) | hex(buf[3])) >> 2;
-+            int b = ((hex(buf[4]) << 4) | hex(buf[5])) >> 2;
-+
-+            pal[idx] = base;
-+            graphics_set_palette(idx, r, g, b);
-+            ++idx;
-+        }
-+    }
-+
-+    x = y = len = 0;
-+
-+    s1 = (unsigned char*)VSHADOW1;
-+    s2 = (unsigned char*)VSHADOW2;
-+    s4 = (unsigned char*)VSHADOW4;
-+    s8 = (unsigned char*)VSHADOW8;
-+
-+    for (i = 0; i < 38400; i++)
-+        s1[i] = s2[i] = s4[i] = s8[i] = 0;
-+
-+    /* parse xpm data */
-+    while (y < height) {
-+        while (1) {
-+            if (!grub_read(&c, 1)) {
-+                grub_close();
-+                return 0;
-+            }
-+            if (c == '"')
-+                break;
-+        }
-+
-+        while (grub_read(&c, 1) && c != '"') {
-+            for (i = 1; i < 15; i++)
-+                if (pal[i] == c) {
-+                    c = i;
-+                    break;
-+                }
-+
-+            mask = 0x80 >> (x & 7);
-+            if (c & 1)
-+                s1[len + (x >> 3)] |= mask;
-+            if (c & 2)
-+                s2[len + (x >> 3)] |= mask;
-+            if (c & 4)
-+                s4[len + (x >> 3)] |= mask;
-+            if (c & 8)
-+                s8[len + (x >> 3)] |= mask;
-+
-+            if (++x >= 640) {
-+                x = 0;
-+
-+                if (y < 480)
-+                    len += 80;
-+                ++y;
-+            }
-+        }
-+    }
-+
-+    grub_close();
-+
-+    graphics_set_palette(0, (background >> 16), (background >> 8) & 63, 
-+                background & 63);
-+    graphics_set_palette(15, (foreground >> 16), (foreground >> 8) & 63, 
-+                foreground & 63);
-+    graphics_set_palette(0x11, (border >> 16), (border >> 8) & 63, 
-+                         border & 63);
-+
-+    return 1;
-+}
-+
-+
-+/* Convert a character which is a hex digit to the appropriate integer */
-+int hex(int v)
-+{
-+    if (v >= 'A' && v <= 'F')
-+        return (v - 'A' + 10);
-+    if (v >= 'a' && v <= 'f')
-+        return (v - 'a' + 10);
-+    return (v - '0');
-+}
-+
-+
-+/* move the graphics cursor location to col, row */
-+static void graphics_setxy(int col, int row) {
-+    if (col >= x0 && col < x1) {
-+        fontx = col;
-+        cursorX = col << 3;
-+    }
-+    if (row >= y0 && row < y1) {
-+        fonty = row;
-+        cursorY = row << 4;
-+    }
-+}
-+
-+/* scroll the screen */
-+static void graphics_scroll() {
-+    int i, j;
-+
-+    /* we don't want to scroll recursively... that would be bad */
-+    if (no_scroll)
-+        return;
-+    no_scroll = 1;
-+
-+    /* move everything up a line */
-+    for (j = y0 + 1; j < y1; j++) {
-+        graphics_gotoxy(x0, j - 1);
-+        for (i = x0; i < x1; i++) {
-+            graphics_putchar(text[j * 80 + i]);
-+        }
-+    }
-+
-+    /* last line should be blank */
-+    graphics_gotoxy(x0, y1 - 1);
-+    for (i = x0; i < x1; i++)
-+        graphics_putchar(' ');
-+    graphics_setxy(x0, y1 - 1);
-+
-+    no_scroll = 0;
-+}
-+
-+
-+void graphics_cursor(int set) {
-+    unsigned char *pat, *mem, *ptr, chr[16 << 2];
-+    int i, ch, invert, offset;
-+
-+    if (set && no_scroll)
-+        return;
-+
-+    offset = cursorY * 80 + fontx;
-+    ch = text[fonty * 80 + fontx] & 0xff;
-+    invert = (text[fonty * 80 + fontx] & 0xff00) != 0;
-+    pat = font8x16 + (ch << 4);
-+
-+    mem = (unsigned char*)VIDEOMEM + offset;
-+
-+    if (!set) {
-+        for (i = 0; i < 16; i++) {
-+            unsigned char mask = pat[i];
-+
-+            if (!invert) {
-+                chr[i     ] = ((unsigned char*)VSHADOW1)[offset];
-+                chr[16 + i] = ((unsigned char*)VSHADOW2)[offset];
-+                chr[32 + i] = ((unsigned char*)VSHADOW4)[offset];
-+                chr[48 + i] = ((unsigned char*)VSHADOW8)[offset];
-+
-+                /* FIXME: if (shade) */
-+                if (1) {
-+                    if (ch == DISP_VERT || ch == DISP_LL ||
-+                        ch == DISP_UR || ch == DISP_LR) {
-+                        unsigned char pmask = ~(pat[i] >> 1);
-+
-+                        chr[i     ] &= pmask;
-+                        chr[16 + i] &= pmask;
-+                        chr[32 + i] &= pmask;
-+                        chr[48 + i] &= pmask;
-+                    }
-+                    if (i > 0 && ch != DISP_VERT) {
-+                        unsigned char pmask = ~(pat[i - 1] >> 1);
-+
-+                        chr[i     ] &= pmask;
-+                        chr[16 + i] &= pmask;
-+                        chr[32 + i] &= pmask;
-+                        chr[48 + i] &= pmask;
-+                        if (ch == DISP_HORIZ || ch == DISP_UR || ch == DISP_LR) {
-+                            pmask = ~pat[i - 1];
-+
-+                            chr[i     ] &= pmask;
-+                            chr[16 + i] &= pmask;
-+                            chr[32 + i] &= pmask;
-+                            chr[48 + i] &= pmask;
-+                        }
-+                    }
-+                }
-+                chr[i     ] |= mask;
-+                chr[16 + i] |= mask;
-+                chr[32 + i] |= mask;
-+                chr[48 + i] |= mask;
-+
-+                offset += 80;
-+            }
-+            else {
-+                chr[i     ] = mask;
-+                chr[16 + i] = mask;
-+                chr[32 + i] = mask;
-+                chr[48 + i] = mask;
-+            }
-+        }
-+    }
-+    else {
-+        MapMask(15);
-+        ptr = mem;
-+        for (i = 0; i < 16; i++, ptr += 80) {
-+            cursorBuf[i] = pat[i];
-+            *ptr = ~pat[i];
-+        }
-+        return;
-+    }
-+
-+    offset = 0;
-+    for (i = 1; i < 16; i <<= 1, offset += 16) {
-+        int j;
-+
-+        MapMask(i);
-+        ptr = mem;
-+        for (j = 0; j < 16; j++, ptr += 80)
-+            *ptr = chr[j + offset];
-+    }
-+
-+    MapMask(15);
-+}
-+
-+int grub_file_exists(char *s) {
-+    if (!grub_open(s))
-+        return 0;
-+    grub_close();
-+    return 1;
-+}
-+
-+#endif /* SUPPORT_GRAPHICS */
-diff -Nur grub-0.97/stage2/graphics.h grub-0.97-patched/stage2/graphics.h
---- grub-0.97/stage2/graphics.h        1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/stage2/graphics.h        2012-11-11 17:06:33.321470879 +0100
-@@ -0,0 +1,45 @@
-+/* graphics.h - graphics console interface */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002  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 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 GRAPHICS_H
-+#define GRAPHICS_H
-+
-+/* magic constant */
-+#define VIDEOMEM 0xA0000
-+
-+/* function prototypes */
-+char *graphics_get_splash(void);
-+
-+int read_image(char *s);
-+void graphics_cursor(int set);
-+
-+/* function prototypes for asm functions */
-+void * graphics_get_font();
-+void graphics_set_palette(int idx, int red, int green, int blue);
-+void set_int1c_handler();
-+void unset_int1c_handler();
-+
-+/* Only to check for safe opening before we start */
-+int grub_file_exists(char *s);
-+
-+extern short cursorX, cursorY;
-+extern char cursorBuf[16];
-+
-+#endif /* GRAPHICS_H */
-diff -Nur grub-0.97/stage2/iso9660.h grub-0.97-patched/stage2/iso9660.h
---- grub-0.97/stage2/iso9660.h 2004-03-27 17:02:38.000000000 +0100
-+++ grub-0.97-patched/stage2/iso9660.h 2012-11-11 17:07:12.740730013 +0100
-@@ -73,11 +73,11 @@
- typedef       struct __iso_16bit {
-   u_int16_t l, b;
--} iso_16bit_t __attribute__ ((packed));
-+} iso_16bit_t;
- typedef       struct __iso_32bit {
-   u_int32_t l, b;
--} iso_32bit_t __attribute__ ((packed));
-+} iso_32bit_t;
- typedef u_int8_t              iso_date_t[7];
-diff -Nur grub-0.97/stage2/Makefile.am grub-0.97-patched/stage2/Makefile.am
---- grub-0.97/stage2/Makefile.am       2005-02-02 21:37:35.000000000 +0100
-+++ grub-0.97-patched/stage2/Makefile.am       2012-11-11 17:07:12.747730236 +0100
-@@ -7,7 +7,7 @@
-         fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \
-       imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \
-       nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \
--      terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h
-+      terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h
- EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
- # For <stage1.h>.
-@@ -19,20 +19,20 @@
-       disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \
-       fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \
-       fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \
--      terminfo.c tparm.c
--libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
-+      terminfo.c tparm.c graphics.c
-+libgrub_a_CFLAGS = $(GRUB_CFLAGS) -fno-stack-protector -I$(top_srcdir)/lib \
-       -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
-       -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
-       -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \
-       -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1
- # Stage 2 and Stage 1.5's.
--pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
-+stagedir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
- EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec
- if DISKLESS_SUPPORT
--pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-+stage_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-       ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
-       reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \
-       nbgrub pxegrub
-@@ -43,7 +43,7 @@
-       reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \
-       xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec
- else
--pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-+stage_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-       ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
-       reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5
- noinst_DATA = pre_stage2 start start_eltorito
-@@ -79,8 +79,14 @@
- HERCULES_FLAGS =
- endif
--STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--      $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS)
-+if GRAPHICS_SUPPORT
-+GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1
-+else
-+GRAPHICS_FLAGS =
-+endif
-+
-+STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-reorder-functions -fno-builtin -nostdinc \
-+      $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS)
- STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
- STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
-@@ -90,7 +96,8 @@
-       cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \
-       fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
-       fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \
--      hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c
-+      hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c \
-+      graphics.c
- pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
- pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
- pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
-@@ -105,7 +112,7 @@
- BUILT_SOURCES = stage2_size.h
- endif
--CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES)
-+CLEANFILES = $(stage_DATA) $(noinst_DATA) $(BUILT_SOURCES)
- stage2_size.h: pre_stage2
-       -rm -f stage2_size.h
-diff -Nur grub-0.97/stage2/Makefile.am.orig grub-0.97-patched/stage2/Makefile.am.orig
---- grub-0.97/stage2/Makefile.am.orig  1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/stage2/Makefile.am.orig  2005-02-02 21:37:35.000000000 +0100
-@@ -0,0 +1,272 @@
-+# For test target.
-+TESTS = size_test
-+noinst_SCRIPTS = $(TESTS)
-+
-+# For dist target.
-+noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \
-+        fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \
-+      imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \
-+      nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \
-+      terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h
-+EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
-+
-+# For <stage1.h>.
-+INCLUDES = -I$(top_srcdir)/stage1
-+
-+# The library for /sbin/grub.
-+noinst_LIBRARIES = libgrub.a
-+libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \
-+      disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \
-+      fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \
-+      fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \
-+      terminfo.c tparm.c
-+libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
-+      -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
-+      -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
-+      -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \
-+      -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1
-+
-+# Stage 2 and Stage 1.5's.
-+pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
-+
-+EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec
-+
-+if DISKLESS_SUPPORT
-+pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-+      ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
-+      reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \
-+      nbgrub pxegrub
-+noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless
-+noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
-+      e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \
-+      iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \
-+      reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \
-+      xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec
-+else
-+pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-+      ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
-+      reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5
-+noinst_DATA = pre_stage2 start start_eltorito
-+noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
-+      e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \
-+      iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \
-+      reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \
-+      xfs_stage1_5.exec
-+endif
-+MOSTLYCLEANFILES = $(noinst_PROGRAMS)
-+
-+PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200
-+START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000
-+NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0
-+PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
-+START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
-+
-+if NETBOOT_SUPPORT
-+NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1
-+else
-+NETBOOT_FLAGS =
-+endif
-+
-+if SERIAL_SUPPORT
-+SERIAL_FLAGS = -DSUPPORT_SERIAL=1
-+else
-+SERIAL_FLAGS =
-+endif
-+
-+if HERCULES_SUPPORT
-+HERCULES_FLAGS = -DSUPPORT_HERCULES=1
-+else
-+HERCULES_FLAGS =
-+endif
-+
-+STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
-+      $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS)
-+
-+STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
-+STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
-+
-+# For stage2 target.
-+pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \
-+      cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \
-+      fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
-+      fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \
-+      hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c
-+pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
-+pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
-+pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
-+
-+if NETBOOT_SUPPORT
-+pre_stage2_exec_LDADD = ../netboot/libdrivers.a
-+endif
-+
-+if DISKLESS_SUPPORT
-+BUILT_SOURCES = stage2_size.h diskless_size.h
-+else
-+BUILT_SOURCES = stage2_size.h
-+endif
-+
-+CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES)
-+
-+stage2_size.h: pre_stage2
-+      -rm -f stage2_size.h
-+      set dummy `ls -l pre_stage2`; \
-+      echo "#define STAGE2_SIZE $$6" > stage2_size.h
-+
-+start_exec_SOURCES = start.S
-+start_exec_CCASFLAGS = $(STAGE2_COMPILE)
-+start_exec_LDFLAGS = $(START_LINK)
-+
-+# XXX: automake doesn't provide a way to specify dependencies for object
-+# files explicitly, so we must write this by a general Makefile scheme.
-+# If automake change the naming scheme for per-executable objects, this
-+# will be broken.
-+start_exec-start.$(OBJEXT): stage2_size.h
-+
-+stage2: pre_stage2 start
-+      -rm -f stage2
-+      cat start pre_stage2 > stage2
-+
-+start_eltorito_exec_SOURCES = start_eltorito.S
-+start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE)
-+start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK)
-+
-+start_eltorito_exec-start.$(OBJEXT): stage2_size.h
-+
-+stage2_eltorito: pre_stage2 start_eltorito
-+      -rm -f stage2_eltorito
-+      cat start_eltorito pre_stage2 > stage2_eltorito
-+
-+# For e2fs_stage1_5 target.
-+e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
-+      stage1_5.c fsys_ext2fs.c bios.c
-+e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
-+      -DNO_BLOCK_FILES=1
-+e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
-+      -DNO_BLOCK_FILES=1
-+e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For fat_stage1_5 target.
-+fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
-+      stage1_5.c fsys_fat.c bios.c
-+fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
-+      -DNO_BLOCK_FILES=1
-+fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
-+      -DNO_BLOCK_FILES=1
-+fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For ffs_stage1_5 target.
-+ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
-+      stage1_5.c fsys_ffs.c bios.c
-+ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
-+      -DNO_BLOCK_FILES=1
-+ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
-+      -DNO_BLOCK_FILES=1
-+ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For ufs2_stage1_5 target.
-+ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
-+      stage1_5.c fsys_ufs2.c bios.c
-+ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
-+      -DNO_BLOCK_FILES=1
-+ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
-+      -DNO_BLOCK_FILES=1
-+ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For minix_stage1_5 target.
-+minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
-+      stage1_5.c fsys_minix.c bios.c
-+minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
-+      -DNO_BLOCK_FILES=1
-+minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
-+      -DNO_BLOCK_FILES=1
-+minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For reiserfs_stage1_5 target.
-+reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
-+      disk_io.c stage1_5.c fsys_reiserfs.c bios.c
-+reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
-+      -DNO_BLOCK_FILES=1
-+reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
-+      -DNO_BLOCK_FILES=1
-+reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For vstafs_stage1_5 target.
-+vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
-+      disk_io.c stage1_5.c fsys_vstafs.c bios.c
-+vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
-+      -DNO_BLOCK_FILES=1
-+vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
-+      -DNO_BLOCK_FILES=1
-+vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For jfs_stage1_5 target.
-+jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
-+      disk_io.c stage1_5.c fsys_jfs.c bios.c
-+jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
-+      -DNO_BLOCK_FILES=1
-+jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
-+      -DNO_BLOCK_FILES=1
-+jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For xfs_stage1_5 target.
-+xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
-+      disk_io.c stage1_5.c fsys_xfs.c bios.c
-+xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
-+      -DNO_BLOCK_FILES=1
-+xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
-+      -DNO_BLOCK_FILES=1
-+xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For iso9660_stage1_5 target.
-+iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \
-+      disk_io.c stage1_5.c fsys_iso9660.c bios.c
-+iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
-+      -DNO_BLOCK_FILES=1
-+iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
-+      -DNO_BLOCK_FILES=1
-+iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+
-+# For diskless target.
-+diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES)
-+diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
-+      -DSUPPORT_DISKLESS=1
-+diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
-+      -DSUPPORT_DISKLESS=1
-+diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK)
-+diskless_exec_LDADD = ../netboot/libdrivers.a
-+
-+diskless_size.h: diskless
-+      -rm -f $@
-+      set dummy `ls -l $^`; \
-+      echo "#define DISKLESS_SIZE $$6" > $@
-+
-+# For nbloader target.
-+nbloader_exec_SOURCES = nbloader.S
-+nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE)
-+nbloader_exec_LDFLAGS = $(NBLOADER_LINK)
-+
-+# XXX: See the comment for start_exec-start.o.
-+nbloader_exec-nbloader.$(OBJEXT): diskless_size.h
-+
-+# For nbgrub target.
-+nbgrub: nbloader diskless
-+      -rm -f $@
-+      cat $^ > $@
-+
-+# For pxeloader target.
-+pxeloader_exec_SOURCES = pxeloader.S
-+pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE)
-+pxeloader_exec_LDFLAGS = $(PXELOADER_LINK)
-+
-+# XXX: See the comment for start_exec-start.o.
-+pxeloader_exec-pxeloader.$(OBJEXT): diskless_size.h
-+
-+# For pxegrub target.
-+pxegrub: pxeloader diskless
-+      -rm -f $@
-+      cat $^ > $@
-+
-+# General rule for making a raw binary.
-+SUFFIXES = .exec
-+.exec:
-+      $(OBJCOPY) -O binary $< $@
-diff -Nur grub-0.97/stage2/pc_slice.h grub-0.97-patched/stage2/pc_slice.h
---- grub-0.97/stage2/pc_slice.h        2003-07-09 13:45:53.000000000 +0200
-+++ grub-0.97-patched/stage2/pc_slice.h        2012-11-11 17:07:12.698728671 +0100
-@@ -115,6 +115,7 @@
- #define PC_SLICE_TYPE_LINUX_EXTENDED  0x85
- #define PC_SLICE_TYPE_VSTAFS          0x9e
- #define PC_SLICE_TYPE_DELL_UTIL               0xde
-+#define PC_SLICE_TYPE_GPT              0xee
- #define PC_SLICE_TYPE_LINUX_RAID      0xfd
-diff -Nur grub-0.97/stage2/shared.h grub-0.97-patched/stage2/shared.h
---- grub-0.97/stage2/shared.h  2004-06-19 18:40:09.000000000 +0200
-+++ grub-0.97-patched/stage2/shared.h  2012-11-11 17:07:12.741730044 +0100
-@@ -36,8 +36,8 @@
- /* Maybe redirect memory requests through grub_scratch_mem. */
- #ifdef GRUB_UTIL
--extern char *grub_scratch_mem;
--# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem)
-+extern void *grub_scratch_mem;
-+# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem)
- # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4)
- #else
- # define RAW_ADDR(x) (x)
-@@ -161,7 +161,9 @@
- #define LINUX_CL_OFFSET                       0x9000
- #define LINUX_CL_END_OFFSET           0x90FF
--#define LINUX_SETUP_MOVE_SIZE         0x9100
-+#define LINUX_CL_0202_PRM_OFFSET      0x9500
-+#define LINUX_CL_0202_PRM_END_OFFSET  0x9FFF
-+#define LINUX_SETUP_MOVE_SIZE         0xA000
- #define LINUX_CL_MAGIC                        0xA33F
- /*
-@@ -499,7 +501,11 @@
-   unsigned char linear_reserved_field_position;
-   unsigned long max_pixel_clock;
--  unsigned char reserved3[189];
-+  /* Reserved field to make structure to be 256 bytes long, VESA BIOS 
-+     Extension 3.0 Specification says to reserve 189 bytes here but 
-+     that doesn't make structure to be 256 bytes.  So additional one is 
-+     added here.  */
-+  unsigned char reserved3[189 + 1];
- } __attribute__ ((packed));
-@@ -807,7 +813,7 @@
- /* Low-level disk I/O */
- int get_diskinfo (int drive, struct geometry *geometry);
- int biosdisk (int subfunc, int drive, struct geometry *geometry,
--            int sector, int nsec, int segment);
-+            unsigned int sector, int nsec, int segment);
- void stop_floppy (void);
- /* Command-line interface functions. */
-@@ -871,6 +877,7 @@
- int grub_tolower (int c);
- int grub_isspace (int c);
- int grub_strncat (char *s1, const char *s2, int n);
-+void grub_memcpy(void *dest, const void *src, int len);
- void *grub_memmove (void *to, const void *from, int len);
- void *grub_memset (void *start, int c, int len);
- int grub_strncat (char *s1, const char *s2, int n);
-@@ -911,7 +918,7 @@
- int nul_terminate (char *str);
- int get_based_digit (int c, int base);
- int safe_parse_maxint (char **str_ptr, int *myint_ptr);
--int memcheck (int start, int len);
-+int memcheck (unsigned long start, unsigned long len);
- void grub_putstr (const char *str);
- #ifndef NO_DECOMPRESSION
-@@ -920,10 +927,10 @@
- int gunzip_read (char *buf, int len);
- #endif /* NO_DECOMPRESSION */
--int rawread (int drive, int sector, int byte_offset, int byte_len, char *buf);
--int devread (int sector, int byte_offset, int byte_len, char *buf);
--int rawwrite (int drive, int sector, char *buf);
--int devwrite (int sector, int sector_len, char *buf);
-+int rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf);
-+int devread (unsigned int sector, int byte_offset, int byte_len, char *buf);
-+int rawwrite (int drive, unsigned int sector, char *buf);
-+int devwrite (unsigned int sector, int sector_len, char *buf);
- /* Parse a device string and initialize the global parameters. */
- char *set_device (char *device);
-@@ -934,7 +941,9 @@
-                   unsigned long *partition, int *type,
-                   unsigned long *start, unsigned long *len,
-                   unsigned long *offset, int *entry,
--                  unsigned long *ext_offset, char *buf);
-+                   unsigned long *ext_offset,
-+                   unsigned long *gpt_offset, int *gpt_count,
-+                   int *gpt_size, char *buf);
- /* Sets device to the one represented by the SAVED_* parameters. */
- int make_saved_active (void);
-diff -Nur grub-0.97/stage2/size_test grub-0.97-patched/stage2/size_test
---- grub-0.97/stage2/size_test 2004-05-14 21:30:52.000000000 +0200
-+++ grub-0.97-patched/stage2/size_test 2012-11-11 17:06:52.554085177 +0100
-@@ -36,9 +36,9 @@
- }
- # The bootloader area of a FFS partition is 14 sectors.
--check ffs_stage1_5 7168
--
--check ufs2_stage1_5 7168
-+#check ffs_stage1_5 7168
-+#
-+#check ufs2_stage1_5 7168
- # Stage 1.5 can be installed in the sectors immediately after MBR in the
- # first cylinder, so the size is (63 - 1) sectors.
-diff -Nur grub-0.97/stage2/stage2.c grub-0.97-patched/stage2/stage2.c
---- grub-0.97/stage2/stage2.c  2005-03-19 18:51:57.000000000 +0100
-+++ grub-0.97-patched/stage2/stage2.c  2012-11-11 17:07:12.742730076 +0100
-@@ -233,6 +233,7 @@
- {
-   int c, time1, time2 = -1, first_entry = 0;
-   char *cur_entry = 0;
-+  struct term_entry *prev_term = NULL;
-   /*
-    *  Main loop for menu UI.
-@@ -651,7 +652,10 @@
-                 *(new_heap++) = 0;
-                 if (config_entries)
--                  run_menu (heap, NULL, new_num_entries, new_heap, 0);
-+                  {
-+                    current_entryno = first_entry + entryno;
-+                    run_menu (heap, NULL, new_num_entries, new_heap, 0);
-+                  }
-                 else
-                   {
-                     cls ();
-@@ -714,6 +718,15 @@
-   
-   cls ();
-   setcursor (1);
-+  /* if our terminal needed initialization, we should shut it down
-+   * before booting the kernel, but we want to save what it was so
-+   * we can come back if needed */
-+  prev_term = current_term;
-+  if (current_term->shutdown) 
-+    {
-+      (*current_term->shutdown)();
-+      current_term = term_table; /* assumption: console is first */
-+    }
-   
-   while (1)
-     {
-@@ -727,7 +740,8 @@
-       cur_entry = get_entry (config_entries, first_entry + entryno, 1);
-       /* Set CURRENT_ENTRYNO for the command "savedefault".  */
--      current_entryno = first_entry + entryno;
-+      if (config_entries)
-+      current_entryno = first_entry + entryno;
-       
-       if (run_script (cur_entry, heap))
-       {
-@@ -748,6 +762,13 @@
-       break;
-     }
-+  /* if we get back here, we should go back to what our term was before */
-+  current_term = prev_term;
-+  if (current_term->startup)
-+      /* if our terminal fails to initialize, fall back to console since
-+       * it should always work */
-+      if ((*current_term->startup)() == 0)
-+          current_term = term_table; /* we know that console is first */
-   show_menu = 1;
-   goto restart;
- }
-@@ -1050,6 +1071,10 @@
-         while (is_preset);
-       }
-+      /* go ahead and make sure the terminal is setup */
-+      if (current_term->startup)
-+        (*current_term->startup)();
-+
-       if (! num_entries)
-       {
-         /* If no acceptable config file, goto command-line, starting
-diff -Nur grub-0.97/stage2/stage2.c.orig grub-0.97-patched/stage2/stage2.c.orig
---- grub-0.97/stage2/stage2.c.orig     1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/stage2/stage2.c.orig     2005-03-19 18:51:57.000000000 +0100
-@@ -0,0 +1,1067 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2000,2001,2002,2004,2005  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 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.
-+ */
-+
-+#include <shared.h>
-+#include <term.h>
-+
-+grub_jmp_buf restart_env;
-+
-+#if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS)
-+
-+# if defined(PRESET_MENU_STRING)
-+static const char *preset_menu = PRESET_MENU_STRING;
-+# elif defined(SUPPORT_DISKLESS)
-+/* Execute the command "bootp" automatically.  */
-+static const char *preset_menu = "bootp\n";
-+# endif /* SUPPORT_DISKLESS */
-+
-+static int preset_menu_offset;
-+
-+static int
-+open_preset_menu (void)
-+{
-+#ifdef GRUB_UTIL
-+  /* Unless the user explicitly requests to use the preset menu,
-+     always opening the preset menu fails in the grub shell.  */
-+  if (! use_preset_menu)
-+    return 0;
-+#endif /* GRUB_UTIL */
-+  
-+  preset_menu_offset = 0;
-+  return preset_menu != 0;
-+}
-+
-+static int
-+read_from_preset_menu (char *buf, int maxlen)
-+{
-+  int len = grub_strlen (preset_menu + preset_menu_offset);
-+
-+  if (len > maxlen)
-+    len = maxlen;
-+
-+  grub_memmove (buf, preset_menu + preset_menu_offset, len);
-+  preset_menu_offset += len;
-+
-+  return len;
-+}
-+
-+static void
-+close_preset_menu (void)
-+{
-+  /* Disable the preset menu.  */
-+  preset_menu = 0;
-+}
-+
-+#else /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */
-+
-+#define open_preset_menu()    0
-+#define read_from_preset_menu(buf, maxlen)    0
-+#define close_preset_menu()
-+
-+#endif /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */
-+
-+static char *
-+get_entry (char *list, int num, int nested)
-+{
-+  int i;
-+
-+  for (i = 0; i < num; i++)
-+    {
-+      do
-+      {
-+        while (*(list++));
-+      }
-+      while (nested && *(list++));
-+    }
-+
-+  return list;
-+}
-+
-+/* Print an entry in a line of the menu box.  */
-+static void
-+print_entry (int y, int highlight, char *entry)
-+{
-+  int x;
-+
-+  if (current_term->setcolorstate)
-+    current_term->setcolorstate (COLOR_STATE_NORMAL);
-+  
-+  if (highlight && current_term->setcolorstate)
-+    current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
-+
-+  gotoxy (2, y);
-+  grub_putchar (' ');
-+  for (x = 3; x < 75; x++)
-+    {
-+      if (*entry && x <= 72)
-+      {
-+        if (x == 72)
-+          grub_putchar (DISP_RIGHT);
-+        else
-+          grub_putchar (*entry++);
-+      }
-+      else
-+      grub_putchar (' ');
-+    }
-+  gotoxy (74, y);
-+
-+  if (current_term->setcolorstate)
-+    current_term->setcolorstate (COLOR_STATE_STANDARD);
-+}
-+
-+/* Print entries in the menu box.  */
-+static void
-+print_entries (int y, int size, int first, int entryno, char *menu_entries)
-+{
-+  int i;
-+  
-+  gotoxy (77, y + 1);
-+
-+  if (first)
-+    grub_putchar (DISP_UP);
-+  else
-+    grub_putchar (' ');
-+
-+  menu_entries = get_entry (menu_entries, first, 0);
-+
-+  for (i = 0; i < size; i++)
-+    {
-+      print_entry (y + i + 1, entryno == i, menu_entries);
-+
-+      while (*menu_entries)
-+      menu_entries++;
-+
-+      if (*(menu_entries - 1))
-+      menu_entries++;
-+    }
-+
-+  gotoxy (77, y + size);
-+
-+  if (*menu_entries)
-+    grub_putchar (DISP_DOWN);
-+  else
-+    grub_putchar (' ');
-+
-+  gotoxy (74, y + entryno + 1);
-+}
-+
-+static void
-+print_entries_raw (int size, int first, char *menu_entries)
-+{
-+  int i;
-+
-+#define LINE_LENGTH 67
-+
-+  for (i = 0; i < LINE_LENGTH; i++)
-+    grub_putchar ('-');
-+  grub_putchar ('\n');
-+
-+  for (i = first; i < size; i++)
-+    {
-+      /* grub's printf can't %02d so ... */
-+      if (i < 10)
-+      grub_putchar (' ');
-+      grub_printf ("%d: %s\n", i, get_entry (menu_entries, i, 0));
-+    }
-+
-+  for (i = 0; i < LINE_LENGTH; i++)
-+    grub_putchar ('-');
-+  grub_putchar ('\n');
-+
-+#undef LINE_LENGTH
-+}
-+
-+
-+static void
-+print_border (int y, int size)
-+{
-+  int i;
-+
-+  if (current_term->setcolorstate)
-+    current_term->setcolorstate (COLOR_STATE_NORMAL);
-+  
-+  gotoxy (1, y);
-+
-+  grub_putchar (DISP_UL);
-+  for (i = 0; i < 73; i++)
-+    grub_putchar (DISP_HORIZ);
-+  grub_putchar (DISP_UR);
-+
-+  i = 1;
-+  while (1)
-+    {
-+      gotoxy (1, y + i);
-+
-+      if (i > size)
-+      break;
-+      
-+      grub_putchar (DISP_VERT);
-+      gotoxy (75, y + i);
-+      grub_putchar (DISP_VERT);
-+
-+      i++;
-+    }
-+
-+  grub_putchar (DISP_LL);
-+  for (i = 0; i < 73; i++)
-+    grub_putchar (DISP_HORIZ);
-+  grub_putchar (DISP_LR);
-+
-+  if (current_term->setcolorstate)
-+    current_term->setcolorstate (COLOR_STATE_STANDARD);
-+}
-+
-+static void
-+run_menu (char *menu_entries, char *config_entries, int num_entries,
-+        char *heap, int entryno)
-+{
-+  int c, time1, time2 = -1, first_entry = 0;
-+  char *cur_entry = 0;
-+
-+  /*
-+   *  Main loop for menu UI.
-+   */
-+
-+restart:
-+  /* Dumb terminal always use all entries for display 
-+     invariant for TERM_DUMB: first_entry == 0  */
-+  if (! (current_term->flags & TERM_DUMB))
-+    {
-+      while (entryno > 11)
-+      {
-+        first_entry++;
-+        entryno--;
-+      }
-+    }
-+
-+  /* If the timeout was expired or wasn't set, force to show the menu
-+     interface. */
-+  if (grub_timeout < 0)
-+    show_menu = 1;
-+  
-+  /* If SHOW_MENU is false, don't display the menu until ESC is pressed.  */
-+  if (! show_menu)
-+    {
-+      /* Get current time.  */
-+      while ((time1 = getrtsecs ()) == 0xFF)
-+      ;
-+
-+      while (1)
-+      {
-+        /* Check if ESC is pressed.  */
-+        if (checkkey () != -1 && ASCII_CHAR (getkey ()) == '\e')
-+          {
-+            grub_timeout = -1;
-+            show_menu = 1;
-+            break;
-+          }
-+
-+        /* If GRUB_TIMEOUT is expired, boot the default entry.  */
-+        if (grub_timeout >=0
-+            && (time1 = getrtsecs ()) != time2
-+            && time1 != 0xFF)
-+          {
-+            if (grub_timeout <= 0)
-+              {
-+                grub_timeout = -1;
-+                goto boot_entry;
-+              }
-+            
-+            time2 = time1;
-+            grub_timeout--;
-+            
-+            /* Print a message.  */
-+            grub_printf ("\rPress `ESC' to enter the menu... %d   ",
-+                         grub_timeout);
-+          }
-+      }
-+    }
-+
-+  /* Only display the menu if the user wants to see it. */
-+  if (show_menu)
-+    {
-+      init_page ();
-+      setcursor (0);
-+
-+      if (current_term->flags & TERM_DUMB)
-+      print_entries_raw (num_entries, first_entry, menu_entries);
-+      else
-+      print_border (3, 12);
-+
-+      grub_printf ("\n\
-+      Use the %c and %c keys to select which entry is highlighted.\n",
-+                 DISP_UP, DISP_DOWN);
-+      
-+      if (! auth && password)
-+      {
-+        printf ("\
-+      Press enter to boot the selected OS or \'p\' to enter a\n\
-+      password to unlock the next set of features.");
-+      }
-+      else
-+      {
-+        if (config_entries)
-+          printf ("\
-+      Press enter to boot the selected OS, \'e\' to edit the\n\
-+      commands before booting, or \'c\' for a command-line.");
-+        else
-+          printf ("\
-+      Press \'b\' to boot, \'e\' to edit the selected command in the\n\
-+      boot sequence, \'c\' for a command-line, \'o\' to open a new line\n\
-+      after (\'O\' for before) the selected line, \'d\' to remove the\n\
-+      selected line, or escape to go back to the main menu.");
-+      }
-+
-+      if (current_term->flags & TERM_DUMB)
-+      grub_printf ("\n\nThe selected entry is %d ", entryno);
-+      else
-+      print_entries (3, 12, first_entry, entryno, menu_entries);
-+    }
-+
-+  /* XX using RT clock now, need to initialize value */
-+  while ((time1 = getrtsecs()) == 0xFF);
-+
-+  while (1)
-+    {
-+      /* Initialize to NULL just in case...  */
-+      cur_entry = NULL;
-+
-+      if (grub_timeout >= 0 && (time1 = getrtsecs()) != time2 && time1 != 0xFF)
-+      {
-+        if (grub_timeout <= 0)
-+          {
-+            grub_timeout = -1;
-+            break;
-+          }
-+
-+        /* else not booting yet! */
-+        time2 = time1;
-+
-+        if (current_term->flags & TERM_DUMB)
-+            grub_printf ("\r    Entry %d will be booted automatically in %d seconds.   ", 
-+                         entryno, grub_timeout);
-+        else
-+          {
-+            gotoxy (3, 22);
-+            grub_printf ("The highlighted entry will be booted automatically in %d seconds.    ",
-+                         grub_timeout);
-+            gotoxy (74, 4 + entryno);
-+        }
-+        
-+        grub_timeout--;
-+      }
-+
-+      /* Check for a keypress, however if TIMEOUT has been expired
-+       (GRUB_TIMEOUT == -1) relax in GETKEY even if no key has been
-+       pressed.  
-+       This avoids polling (relevant in the grub-shell and later on
-+       in grub if interrupt driven I/O is done).  */
-+      if (checkkey () >= 0 || grub_timeout < 0)
-+      {
-+        /* Key was pressed, show which entry is selected before GETKEY,
-+           since we're comming in here also on GRUB_TIMEOUT == -1 and
-+           hang in GETKEY */
-+        if (current_term->flags & TERM_DUMB)
-+          grub_printf ("\r    Highlighted entry is %d: ", entryno);
-+
-+        c = ASCII_CHAR (getkey ());
-+
-+        if (grub_timeout >= 0)
-+          {
-+            if (current_term->flags & TERM_DUMB)
-+              grub_putchar ('\r');
-+            else
-+              gotoxy (3, 22);
-+            printf ("                                                                    ");
-+            grub_timeout = -1;
-+            fallback_entryno = -1;
-+            if (! (current_term->flags & TERM_DUMB))
-+              gotoxy (74, 4 + entryno);
-+          }
-+
-+        /* We told them above (at least in SUPPORT_SERIAL) to use
-+           '^' or 'v' so accept these keys.  */
-+        if (c == 16 || c == '^')
-+          {
-+            if (current_term->flags & TERM_DUMB)
-+              {
-+                if (entryno > 0)
-+                  entryno--;
-+              }
-+            else
-+              {
-+                if (entryno > 0)
-+                  {
-+                    print_entry (4 + entryno, 0,
-+                                 get_entry (menu_entries,
-+                                            first_entry + entryno,
-+                                            0));
-+                    entryno--;
-+                    print_entry (4 + entryno, 1,
-+                                 get_entry (menu_entries,
-+                                            first_entry + entryno,
-+                                            0));
-+                  }
-+                else if (first_entry > 0)
-+                  {
-+                    first_entry--;
-+                    print_entries (3, 12, first_entry, entryno,
-+                                   menu_entries);
-+                  }
-+              }
-+          }
-+        else if ((c == 14 || c == 'v')
-+                 && first_entry + entryno + 1 < num_entries)
-+          {
-+            if (current_term->flags & TERM_DUMB)
-+              entryno++;
-+            else
-+              {
-+                if (entryno < 11)
-+                  {
-+                    print_entry (4 + entryno, 0,
-+                                 get_entry (menu_entries,
-+                                            first_entry + entryno,
-+                                            0));
-+                    entryno++;
-+                    print_entry (4 + entryno, 1,
-+                                 get_entry (menu_entries,
-+                                            first_entry + entryno,
-+                                            0));
-+                }
-+              else if (num_entries > 12 + first_entry)
-+                {
-+                  first_entry++;
-+                  print_entries (3, 12, first_entry, entryno, menu_entries);
-+                }
-+              }
-+          }
-+        else if (c == 7)
-+          {
-+            /* Page Up */
-+            first_entry -= 12;
-+            if (first_entry < 0)
-+              {
-+                entryno += first_entry;
-+                first_entry = 0;
-+                if (entryno < 0)
-+                  entryno = 0;
-+              }
-+            print_entries (3, 12, first_entry, entryno, menu_entries);
-+          }
-+        else if (c == 3)
-+          {
-+            /* Page Down */
-+            first_entry += 12;
-+            if (first_entry + entryno + 1 >= num_entries)
-+              {
-+                first_entry = num_entries - 12;
-+                if (first_entry < 0)
-+                  first_entry = 0;
-+                entryno = num_entries - first_entry - 1;
-+              }
-+            print_entries (3, 12, first_entry, entryno, menu_entries);
-+          }
-+
-+        if (config_entries)
-+          {
-+            if ((c == '\n') || (c == '\r') || (c == 6))
-+              break;
-+          }
-+        else
-+          {
-+            if ((c == 'd') || (c == 'o') || (c == 'O'))
-+              {
-+                if (! (current_term->flags & TERM_DUMB))
-+                  print_entry (4 + entryno, 0,
-+                               get_entry (menu_entries,
-+                                          first_entry + entryno,
-+                                          0));
-+
-+                /* insert after is almost exactly like insert before */
-+                if (c == 'o')
-+                  {
-+                    /* But `o' differs from `O', since it may causes
-+                       the menu screen to scroll up.  */
-+                    if (entryno < 11 || (current_term->flags & TERM_DUMB))
-+                      entryno++;
-+                    else
-+                      first_entry++;
-+                    
-+                    c = 'O';
-+                  }
-+
-+                cur_entry = get_entry (menu_entries,
-+                                       first_entry + entryno,
-+                                       0);
-+
-+                if (c == 'O')
-+                  {
-+                    grub_memmove (cur_entry + 2, cur_entry,
-+                                  ((int) heap) - ((int) cur_entry));
-+
-+                    cur_entry[0] = ' ';
-+                    cur_entry[1] = 0;
-+
-+                    heap += 2;
-+
-+                    num_entries++;
-+                  }
-+                else if (num_entries > 0)
-+                  {
-+                    char *ptr = get_entry(menu_entries,
-+                                          first_entry + entryno + 1,
-+                                          0);
-+
-+                    grub_memmove (cur_entry, ptr,
-+                                  ((int) heap) - ((int) ptr));
-+                    heap -= (((int) ptr) - ((int) cur_entry));
-+
-+                    num_entries--;
-+
-+                    if (entryno >= num_entries)
-+                      entryno--;
-+                    if (first_entry && num_entries < 12 + first_entry)
-+                      first_entry--;
-+                  }
-+
-+                if (current_term->flags & TERM_DUMB)
-+                  {
-+                    grub_printf ("\n\n");
-+                    print_entries_raw (num_entries, first_entry,
-+                                       menu_entries);
-+                    grub_printf ("\n");
-+                  }
-+                else
-+                  print_entries (3, 12, first_entry, entryno, menu_entries);
-+              }
-+
-+            cur_entry = menu_entries;
-+            if (c == 27)
-+              return;
-+            if (c == 'b')
-+              break;
-+          }
-+
-+        if (! auth && password)
-+          {
-+            if (c == 'p')
-+              {
-+                /* Do password check here! */
-+                char entered[32];
-+                char *pptr = password;
-+
-+                if (current_term->flags & TERM_DUMB)
-+                  grub_printf ("\r                                    ");
-+                else
-+                  gotoxy (1, 21);
-+
-+                /* Wipe out the previously entered password */
-+                grub_memset (entered, 0, sizeof (entered));
-+                get_cmdline (" Password: ", entered, 31, '*', 0);
-+
-+                while (! isspace (*pptr) && *pptr)
-+                  pptr++;
-+
-+                /* Make sure that PASSWORD is NUL-terminated.  */
-+                *pptr++ = 0;
-+
-+                if (! check_password (entered, password, password_type))
-+                  {
-+                    char *new_file = config_file;
-+                    while (isspace (*pptr))
-+                      pptr++;
-+
-+                    /* If *PPTR is NUL, then allow the user to use
-+                       privileged instructions, otherwise, load
-+                       another configuration file.  */
-+                    if (*pptr != 0)
-+                      {
-+                        while ((*(new_file++) = *(pptr++)) != 0)
-+                          ;
-+
-+                        /* Make sure that the user will not have
-+                           authority in the next configuration.  */
-+                        auth = 0;
-+                        return;
-+                      }
-+                    else
-+                      {
-+                        /* Now the user is superhuman.  */
-+                        auth = 1;
-+                        goto restart;
-+                      }
-+                  }
-+                else
-+                  {
-+                    grub_printf ("Failed!\n      Press any key to continue...");
-+                    getkey ();
-+                    goto restart;
-+                  }
-+              }
-+          }
-+        else
-+          {
-+            if (c == 'e')
-+              {
-+                int new_num_entries = 0, i = 0;
-+                char *new_heap;
-+
-+                if (config_entries)
-+                  {
-+                    new_heap = heap;
-+                    cur_entry = get_entry (config_entries,
-+                                           first_entry + entryno,
-+                                           1);
-+                  }
-+                else
-+                  {
-+                    /* safe area! */
-+                    new_heap = heap + NEW_HEAPSIZE + 1;
-+                    cur_entry = get_entry (menu_entries,
-+                                           first_entry + entryno,
-+                                           0);
-+                  }
-+
-+                do
-+                  {
-+                    while ((*(new_heap++) = cur_entry[i++]) != 0);
-+                    new_num_entries++;
-+                  }
-+                while (config_entries && cur_entry[i]);
-+
-+                /* this only needs to be done if config_entries is non-NULL,
-+                   but it doesn't hurt to do it always */
-+                *(new_heap++) = 0;
-+
-+                if (config_entries)
-+                  run_menu (heap, NULL, new_num_entries, new_heap, 0);
-+                else
-+                  {
-+                    cls ();
-+                    print_cmdline_message (0);
-+
-+                    new_heap = heap + NEW_HEAPSIZE + 1;
-+
-+                    saved_drive = boot_drive;
-+                    saved_partition = install_partition;
-+                    current_drive = GRUB_INVALID_DRIVE;
-+
-+                    if (! get_cmdline (PACKAGE " edit> ", new_heap,
-+                                       NEW_HEAPSIZE + 1, 0, 1))
-+                      {
-+                        int j = 0;
-+
-+                        /* get length of new command */
-+                        while (new_heap[j++])
-+                          ;
-+
-+                        if (j < 2)
-+                          {
-+                            j = 2;
-+                            new_heap[0] = ' ';
-+                            new_heap[1] = 0;
-+                          }
-+
-+                        /* align rest of commands properly */
-+                        grub_memmove (cur_entry + j, cur_entry + i,
-+                                      (int) heap - ((int) cur_entry + i));
-+
-+                        /* copy command to correct area */
-+                        grub_memmove (cur_entry, new_heap, j);
-+
-+                        heap += (j - i);
-+                      }
-+                  }
-+
-+                goto restart;
-+              }
-+            if (c == 'c')
-+              {
-+                enter_cmdline (heap, 0);
-+                goto restart;
-+              }
-+#ifdef GRUB_UTIL
-+            if (c == 'q')
-+              {
-+                /* The same as ``quit''.  */
-+                stop ();
-+              }
-+#endif
-+          }
-+      }
-+    }
-+  
-+  /* Attempt to boot an entry.  */
-+  
-+ boot_entry:
-+  
-+  cls ();
-+  setcursor (1);
-+  
-+  while (1)
-+    {
-+      if (config_entries)
-+      printf ("  Booting \'%s\'\n\n",
-+              get_entry (menu_entries, first_entry + entryno, 0));
-+      else
-+      printf ("  Booting command-list\n\n");
-+
-+      if (! cur_entry)
-+      cur_entry = get_entry (config_entries, first_entry + entryno, 1);
-+
-+      /* Set CURRENT_ENTRYNO for the command "savedefault".  */
-+      current_entryno = first_entry + entryno;
-+      
-+      if (run_script (cur_entry, heap))
-+      {
-+        if (fallback_entryno >= 0)
-+          {
-+            cur_entry = NULL;
-+            first_entry = 0;
-+            entryno = fallback_entries[fallback_entryno];
-+            fallback_entryno++;
-+            if (fallback_entryno >= MAX_FALLBACK_ENTRIES
-+                || fallback_entries[fallback_entryno] < 0)
-+              fallback_entryno = -1;
-+          }
-+        else
-+          break;
-+      }
-+      else
-+      break;
-+    }
-+
-+  show_menu = 1;
-+  goto restart;
-+}
-+
-+
-+static int
-+get_line_from_config (char *cmdline, int maxlen, int read_from_file)
-+{
-+  int pos = 0, literal = 0, comment = 0;
-+  char c;  /* since we're loading it a byte at a time! */
-+  
-+  while (1)
-+    {
-+      if (read_from_file)
-+      {
-+        if (! grub_read (&c, 1))
-+          break;
-+      }
-+      else
-+      {
-+        if (! read_from_preset_menu (&c, 1))
-+          break;
-+      }
-+
-+      /* Skip all carriage returns.  */
-+      if (c == '\r')
-+      continue;
-+
-+      /* Replace tabs with spaces.  */
-+      if (c == '\t')
-+      c = ' ';
-+
-+      /* The previous is a backslash, then...  */
-+      if (literal)
-+      {
-+        /* If it is a newline, replace it with a space and continue.  */
-+        if (c == '\n')
-+          {
-+            c = ' ';
-+            
-+            /* Go back to overwrite a backslash.  */
-+            if (pos > 0)
-+              pos--;
-+          }
-+          
-+        literal = 0;
-+      }
-+        
-+      /* translate characters first! */
-+      if (c == '\\' && ! literal)
-+      literal = 1;
-+
-+      if (comment)
-+      {
-+        if (c == '\n')
-+          comment = 0;
-+      }
-+      else if (! pos)
-+      {
-+        if (c == '#')
-+          comment = 1;
-+        else if ((c != ' ') && (c != '\n'))
-+          cmdline[pos++] = c;
-+      }
-+      else
-+      {
-+        if (c == '\n')
-+          break;
-+
-+        if (pos < maxlen)
-+          cmdline[pos++] = c;
-+      }
-+    }
-+
-+  cmdline[pos] = 0;
-+
-+  return pos;
-+}
-+
-+
-+/* This is the starting function in C.  */
-+void
-+cmain (void)
-+{
-+  int config_len, menu_len, num_entries;
-+  char *config_entries, *menu_entries;
-+  char *kill_buf = (char *) KILL_BUF;
-+
-+  auto void reset (void);
-+  void reset (void)
-+    {
-+      count_lines = -1;
-+      config_len = 0;
-+      menu_len = 0;
-+      num_entries = 0;
-+      config_entries = (char *) mbi.drives_addr + mbi.drives_length;
-+      menu_entries = (char *) MENU_BUF;
-+      init_config ();
-+    }
-+  
-+  /* Initialize the environment for restarting Stage 2.  */
-+  grub_setjmp (restart_env);
-+  
-+  /* Initialize the kill buffer.  */
-+  *kill_buf = 0;
-+
-+  /* Never return.  */
-+  for (;;)
-+    {
-+      int is_opened, is_preset;
-+
-+      reset ();
-+      
-+      /* Here load the configuration file.  */
-+      
-+#ifdef GRUB_UTIL
-+      if (use_config_file)
-+#endif /* GRUB_UTIL */
-+      {
-+        char *default_file = (char *) DEFAULT_FILE_BUF;
-+        int i;
-+        
-+        /* Get a saved default entry if possible.  */
-+        saved_entryno = 0;
-+        *default_file = 0;
-+        grub_strncat (default_file, config_file, DEFAULT_FILE_BUFLEN);
-+        for (i = grub_strlen(default_file); i >= 0; i--)
-+          if (default_file[i] == '/')
-+            {
-+              i++;
-+              break;
-+            }
-+        default_file[i] = 0;
-+        grub_strncat (default_file + i, "default", DEFAULT_FILE_BUFLEN - i);
-+        if (grub_open (default_file))
-+          {
-+            char buf[10]; /* This is good enough.  */
-+            char *p = buf;
-+            int len;
-+            
-+            len = grub_read (buf, sizeof (buf));
-+            if (len > 0)
-+              {
-+                buf[sizeof (buf) - 1] = 0;
-+                safe_parse_maxint (&p, &saved_entryno);
-+              }
-+
-+            grub_close ();
-+          }
-+        errnum = ERR_NONE;
-+        
-+        do
-+          {
-+            /* STATE 0:  Before any title command.
-+               STATE 1:  In a title command.
-+               STATE >1: In a entry after a title command.  */
-+            int state = 0, prev_config_len = 0, prev_menu_len = 0;
-+            char *cmdline;
-+
-+            /* Try the preset menu first. This will succeed at most once,
-+               because close_preset_menu disables the preset menu.  */
-+            is_opened = is_preset = open_preset_menu ();
-+            if (! is_opened)
-+              {
-+                is_opened = grub_open (config_file);
-+                errnum = ERR_NONE;
-+              }
-+
-+            if (! is_opened)
-+              break;
-+
-+            /* This is necessary, because the menu must be overrided.  */
-+            reset ();
-+            
-+            cmdline = (char *) CMDLINE_BUF;
-+            while (get_line_from_config (cmdline, NEW_HEAPSIZE,
-+                                         ! is_preset))
-+              {
-+                struct builtin *builtin;
-+                
-+                /* Get the pointer to the builtin structure.  */
-+                builtin = find_command (cmdline);
-+                errnum = 0;
-+                if (! builtin)
-+                  /* Unknown command. Just skip now.  */
-+                  continue;
-+                
-+                if (builtin->flags & BUILTIN_TITLE)
-+                  {
-+                    char *ptr;
-+                    
-+                    /* the command "title" is specially treated.  */
-+                    if (state > 1)
-+                      {
-+                        /* The next title is found.  */
-+                        num_entries++;
-+                        config_entries[config_len++] = 0;
-+                        prev_menu_len = menu_len;
-+                        prev_config_len = config_len;
-+                      }
-+                    else
-+                      {
-+                        /* The first title is found.  */
-+                        menu_len = prev_menu_len;
-+                        config_len = prev_config_len;
-+                      }
-+                    
-+                    /* Reset the state.  */
-+                    state = 1;
-+                    
-+                    /* Copy title into menu area.  */
-+                    ptr = skip_to (1, cmdline);
-+                    while ((menu_entries[menu_len++] = *(ptr++)) != 0)
-+                      ;
-+                  }
-+                else if (! state)
-+                  {
-+                    /* Run a command found is possible.  */
-+                    if (builtin->flags & BUILTIN_MENU)
-+                      {
-+                        char *arg = skip_to (1, cmdline);
-+                        (builtin->func) (arg, BUILTIN_MENU);
-+                        errnum = 0;
-+                      }
-+                    else
-+                      /* Ignored.  */
-+                      continue;
-+                  }
-+                else
-+                  {
-+                    char *ptr = cmdline;
-+                    
-+                    state++;
-+                    /* Copy config file data to config area.  */
-+                    while ((config_entries[config_len++] = *ptr++) != 0)
-+                      ;
-+                  }
-+              }
-+            
-+            if (state > 1)
-+              {
-+                /* Finish the last entry.  */
-+                num_entries++;
-+                config_entries[config_len++] = 0;
-+              }
-+            else
-+              {
-+                menu_len = prev_menu_len;
-+                config_len = prev_config_len;
-+              }
-+            
-+            menu_entries[menu_len++] = 0;
-+            config_entries[config_len++] = 0;
-+            grub_memmove (config_entries + config_len, menu_entries,
-+                          menu_len);
-+            menu_entries = config_entries + config_len;
-+
-+            /* Make sure that all fallback entries are valid.  */
-+            if (fallback_entryno >= 0)
-+              {
-+                for (i = 0; i < MAX_FALLBACK_ENTRIES; i++)
-+                  {
-+                    if (fallback_entries[i] < 0)
-+                      break;
-+                    if (fallback_entries[i] >= num_entries)
-+                      {
-+                        grub_memmove (fallback_entries + i,
-+                                      fallback_entries + i + 1,
-+                                      ((MAX_FALLBACK_ENTRIES - i - 1)
-+                                       * sizeof (int)));
-+                        i--;
-+                      }
-+                  }
-+
-+                if (fallback_entries[0] < 0)
-+                  fallback_entryno = -1;
-+              }
-+            /* Check if the default entry is present. Otherwise reset
-+               it to fallback if fallback is valid, or to DEFAULT_ENTRY 
-+               if not.  */
-+            if (default_entry >= num_entries)
-+              {
-+                if (fallback_entryno >= 0)
-+                  {
-+                    default_entry = fallback_entries[0];
-+                    fallback_entryno++;
-+                    if (fallback_entryno >= MAX_FALLBACK_ENTRIES
-+                        || fallback_entries[fallback_entryno] < 0)
-+                      fallback_entryno = -1;
-+                  }
-+                else
-+                  default_entry = 0;
-+              }
-+            
-+            if (is_preset)
-+              close_preset_menu ();
-+            else
-+              grub_close ();
-+          }
-+        while (is_preset);
-+      }
-+
-+      if (! num_entries)
-+      {
-+        /* If no acceptable config file, goto command-line, starting
-+           heap from where the config entries would have been stored
-+           if there were any.  */
-+        enter_cmdline (config_entries, 1);
-+      }
-+      else
-+      {
-+        /* Run menu interface.  */
-+        run_menu (menu_entries, config_entries, num_entries,
-+                  menu_entries + menu_len, default_entry);
-+      }
-+    }
-+}
-diff -Nur grub-0.97/stage2/term.h grub-0.97-patched/stage2/term.h
---- grub-0.97/stage2/term.h    2003-07-09 13:45:53.000000000 +0200
-+++ grub-0.97-patched/stage2/term.h    2012-11-11 17:06:33.311470556 +0100
-@@ -60,6 +60,8 @@
-   const char *name;
-   /* The feature flags defined above.  */
-   unsigned long flags;
-+  /* Default for maximum number of lines if not specified */
-+  unsigned short max_lines;
-   /* Put a character.  */
-   void (*putchar) (int c);
-   /* Check if any input character is available.  */
-@@ -79,6 +81,11 @@
-   void (*setcolor) (int normal_color, int highlight_color);
-   /* Turn on/off the cursor.  */
-   int (*setcursor) (int on);
-+
-+  /* function to start a terminal */
-+  int (*startup) (void);
-+  /* function to use to shutdown a terminal */
-+  void (*shutdown) (void);
- };
- /* This lists up available terminals.  */
-@@ -124,4 +131,23 @@
- int hercules_setcursor (int on);
- #endif
-+#ifdef SUPPORT_GRAPHICS
-+extern int foreground, background, border, graphics_inited;
-+
-+void graphics_set_splash(char *splashfile);
-+int set_videomode (int mode);
-+void graphics_putchar (int c);
-+int graphics_getxy(void);
-+void graphics_gotoxy(int x, int y);
-+void graphics_cls(void);
-+void graphics_setcolorstate (color_state state);
-+void graphics_setcolor (int normal_color, int highlight_color);
-+void graphics_setcursor (int on);
-+int graphics_init(void);
-+void graphics_end(void);
-+
-+int hex(int v);
-+void graphics_set_palette(int idx, int red, int green, int blue);
-+#endif /* SUPPORT_GRAPHICS */
-+
- #endif /* ! GRUB_TERM_HEADER */
-diff -Nur grub-0.97/THANKS grub-0.97-patched/THANKS
---- grub-0.97/THANKS   2005-05-08 04:17:43.000000000 +0200
-+++ grub-0.97-patched/THANKS   2012-11-11 17:07:12.709729021 +0100
-@@ -121,3 +121,4 @@
- Yedidyah Bar-David <didi@post.tau.ac.il>
- Yury V. Umanets <umka@namesys.com>
- Yuri Zaporogets <yuriz@ukr.net>
-+Vitaly Fertman <vitaly@namesys.com>
-diff -Nur grub-0.97/util/grub-install.in grub-0.97-patched/util/grub-install.in
---- grub-0.97/util/grub-install.in     2004-07-24 20:57:31.000000000 +0200
-+++ grub-0.97-patched/util/grub-install.in     2012-11-11 17:07:12.748730268 +0100
-@@ -96,24 +96,27 @@
-     # Break the device name into the disk part and the partition part.
-     case "$host_os" in
-     linux*)
--      tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \
-+      tmp_disk=`echo "$1" | sed -e 's%\([shv]d[a-z]\)[0-9]*$%\1%' \
-                                 -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \
-                                 -e 's%\(fd[0-9]*\)$%\1%' \
-                                 -e 's%/part[0-9]*$%/disc%' \
--                                -e 's%\(c[0-7]d[0-9]*\).*$%\1%'`
--      tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \
-+                                -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \
-+                                -e 's%\(e[0-9]\.[0-9]*\).*$%\1%'`
-+      tmp_part=`echo "$1" | sed -e 's%.*/[shv]d[a-z]\([0-9]*\)$%\1%' \
-                                 -e 's%.*d[0-9]*p%%' \
-                                 -e 's%.*/fd[0-9]*$%%' \
-                                 -e 's%.*/floppy/[0-9]*$%%' \
-                                 -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \
--                                -e 's%.*c[0-7]d[0-9]*p%%'`
-+                                -e 's%.*c[0-7]d[0-9]*p*%%' \
-+                                -e 's%.*e[0-9]\.[0-9]*p%%' \
-+                                -e 's%.*e[0-9]\.[0-9]*\$%%'`
-       ;;
-     gnu*)
-       tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'`
-       tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;;
-     freebsd* | kfreebsd*-gnu)
--      tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%r\1%' \
--                          | sed 's%r\{0,1\}\(da[0-9]*\).*$%r\1%'`
-+      tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%\1%' \
-+                          | sed 's%r\{0,1\}\(da[0-9]*\).*$%\1%'`
-       tmp_part=`echo "$1" \
-           | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \
-                   | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"`
-@@ -131,7 +134,7 @@
-     # Get the drive name.
-     tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \
--      | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'`
-+      | sed 's%.*\(([hf]d[0-9][a-z0-9,]*)\).*%\1%'`
-     # If not found, print an error message and exit.
-     if test "x$tmp_drive" = x; then
-@@ -148,13 +151,13 @@
-       gnu*)
-           if echo $tmp_part | grep "^s" >/dev/null; then
-               tmp_pc_slice=`echo $tmp_part \
--                  | sed "s%s\([0-9]*\)[a-g]*$%\1%"`
-+                  | sed "s%s\([0-9]*\)[a-z]*$%\1%"`
-               tmp_drive=`echo "$tmp_drive" \
-                   | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`
-           fi
--          if echo $tmp_part | grep "[a-g]$" >/dev/null; then
-+          if echo $tmp_part | grep "[a-z]$" >/dev/null; then
-               tmp_bsd_partition=`echo "$tmp_part" \
--                  | sed "s%[^a-g]*\([a-g]\)$%\1%"`
-+                  | sed "s%[^a-z]*\([a-z]\)$%\1%"`
-               tmp_drive=`echo "$tmp_drive" \
-                   | sed "s%)%,$tmp_bsd_partition)%"`
-           fi
-@@ -336,6 +339,10 @@
-     # Create a safe temporary file.
-     test -n "$mklog" && log_file=`$mklog`
-+    # Before all invocations of the grub shell, call sync to make sure
-+    # the raw device is in sync with any bufferring in filesystems.
-+    sync
-+ 
-     $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
- quit
- EOF
-@@ -450,6 +457,10 @@
- # Create a safe temporary file.
- test -n "$mklog" && log_file=`$mklog`
-+# Before all invocations of the grub shell, call sync to make sure
-+# the raw device is in sync with any bufferring in filesystems.
-+sync
-+
- # Now perform the installation.
- $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
- root $root_drive
-diff -Nur grub-0.97/util/grub-install.in.orig grub-0.97-patched/util/grub-install.in.orig
---- grub-0.97/util/grub-install.in.orig        1970-01-01 01:00:00.000000000 +0100
-+++ grub-0.97-patched/util/grub-install.in.orig        2004-07-24 20:57:31.000000000 +0200
-@@ -0,0 +1,477 @@
-+#! /bin/sh
-+
-+# Install GRUB on your drive.
-+#   Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
-+#
-+# This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+
-+# Initialize some variables.
-+prefix=@prefix@
-+exec_prefix=@exec_prefix@
-+sbindir=@sbindir@
-+libdir=@libdir@
-+PACKAGE=@PACKAGE@
-+VERSION=@VERSION@
-+host_cpu=@host_cpu@
-+host_os=@host_os@
-+host_vendor=@host_vendor@
-+pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor}
-+
-+grub_shell=${sbindir}/grub
-+grub_set_default=${sbindir}/grub-set-default
-+log_file=/tmp/grub-install.log.$$
-+img_file=/tmp/grub-install.img.$$
-+rootdir=
-+grub_prefix=/boot/grub
-+
-+install_device=
-+no_floppy=
-+force_lba=
-+recheck=no
-+debug=no
-+
-+# look for secure tempfile creation wrappers on this platform
-+if test -x /bin/tempfile; then
-+    mklog="/bin/tempfile --prefix=grub"
-+    mkimg="/bin/tempfile --prefix=grub"
-+elif test -x /bin/mktemp; then
-+    mklog="/bin/mktemp /tmp/grub-install.log.XXXXXX"
-+    mkimg="/bin/mktemp /tmp/grub-install.img.XXXXXX"
-+else
-+    mklog=""
-+    mkimg=""
-+fi
-+
-+# Usage: usage
-+# Print the usage.
-+usage () {
-+    cat <<EOF
-+Usage: grub-install [OPTION] install_device
-+Install GRUB on your drive.
-+
-+  -h, --help              print this message and exit
-+  -v, --version           print the version information and exit
-+  --root-directory=DIR    install GRUB images under the directory DIR
-+                          instead of the root directory
-+  --grub-shell=FILE       use FILE as the grub shell
-+  --no-floppy             do not probe any floppy drive
-+  --force-lba             force GRUB to use LBA mode even for a buggy
-+                          BIOS
-+  --recheck               probe a device map even if it already exists
-+
-+INSTALL_DEVICE can be a GRUB device name or a system device filename.
-+
-+grub-install copies GRUB images into the DIR/boot directory specfied by
-+--root-directory, and uses the grub shell to install grub into the boot
-+sector.
-+
-+Report bugs to <bug-grub@gnu.org>.
-+EOF
-+}
-+
-+# Usage: convert os_device
-+# Convert an OS device to the corresponding GRUB drive.
-+# This part is OS-specific.
-+convert () {
-+    # First, check if the device file exists.
-+    if test -e "$1"; then
-+      :
-+    else
-+      echo "$1: Not found or not a block device." 1>&2
-+      exit 1
-+    fi
-+
-+    # Break the device name into the disk part and the partition part.
-+    case "$host_os" in
-+    linux*)
-+      tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \
-+                                -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \
-+                                -e 's%\(fd[0-9]*\)$%\1%' \
-+                                -e 's%/part[0-9]*$%/disc%' \
-+                                -e 's%\(c[0-7]d[0-9]*\).*$%\1%'`
-+      tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \
-+                                -e 's%.*d[0-9]*p%%' \
-+                                -e 's%.*/fd[0-9]*$%%' \
-+                                -e 's%.*/floppy/[0-9]*$%%' \
-+                                -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \
-+                                -e 's%.*c[0-7]d[0-9]*p%%'`
-+      ;;
-+    gnu*)
-+      tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'`
-+      tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;;
-+    freebsd* | kfreebsd*-gnu)
-+      tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%r\1%' \
-+                          | sed 's%r\{0,1\}\(da[0-9]*\).*$%r\1%'`
-+      tmp_part=`echo "$1" \
-+          | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \
-+                  | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"`
-+      ;;
-+    netbsd* | knetbsd*-gnu)
-+      tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([sw]d[0-9]*\).*$%r\1d%' \
-+          | sed 's%r\{0,1\}\(fd[0-9]*\).*$%r\1a%'`
-+      tmp_part=`echo "$1" \
-+          | sed "s%.*/r\{0,1\}[sw]d[0-9]\([abe-p]\)%\1%"`
-+      ;;
-+    *)
-+      echo "grub-install does not support your OS yet." 1>&2
-+      exit 1 ;;
-+    esac
-+
-+    # Get the drive name.
-+    tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \
-+      | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'`
-+
-+    # If not found, print an error message and exit.
-+    if test "x$tmp_drive" = x; then
-+      echo "$1 does not have any corresponding BIOS drive." 1>&2
-+      exit 1
-+    fi
-+
-+    if test "x$tmp_part" != x; then
-+      # If a partition is specified, we need to translate it into the
-+      # GRUB's syntax.
-+      case "$host_os" in
-+      linux*)
-+          echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%" ;;
-+      gnu*)
-+          if echo $tmp_part | grep "^s" >/dev/null; then
-+              tmp_pc_slice=`echo $tmp_part \
-+                  | sed "s%s\([0-9]*\)[a-g]*$%\1%"`
-+              tmp_drive=`echo "$tmp_drive" \
-+                  | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`
-+          fi
-+          if echo $tmp_part | grep "[a-g]$" >/dev/null; then
-+              tmp_bsd_partition=`echo "$tmp_part" \
-+                  | sed "s%[^a-g]*\([a-g]\)$%\1%"`
-+              tmp_drive=`echo "$tmp_drive" \
-+                  | sed "s%)%,$tmp_bsd_partition)%"`
-+          fi
-+          echo "$tmp_drive" ;;
-+      freebsd* | kfreebsd*-gnu)
-+          if echo $tmp_part | grep "^s" >/dev/null; then
-+              tmp_pc_slice=`echo $tmp_part \
-+                  | sed "s%s\([0-9]*\)[a-h]*$%\1%"`
-+              tmp_drive=`echo "$tmp_drive" \
-+                  | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`
-+          fi
-+          if echo $tmp_part | grep "[a-h]$" >/dev/null; then
-+              tmp_bsd_partition=`echo "$tmp_part" \
-+                  | sed "s%s\{0,1\}[0-9]*\([a-h]\)$%\1%"`
-+              tmp_drive=`echo "$tmp_drive" \
-+                  | sed "s%)%,$tmp_bsd_partition)%"`
-+          fi
-+          echo "$tmp_drive" ;;
-+      netbsd* | knetbsd*-gnu)
-+          if echo $tmp_part | grep "^[abe-p]$" >/dev/null; then
-+              tmp_bsd_partition=`echo "$tmp_part" \
-+                  | sed "s%\([a-p]\)$%\1%"`
-+              tmp_drive=`echo "$tmp_drive" \
-+                  | sed "s%)%,$tmp_bsd_partition)%"`
-+          fi
-+          echo "$tmp_drive" ;;
-+      esac
-+    else
-+      # If no partition is specified, just print the drive name.
-+      echo "$tmp_drive"
-+    fi
-+}
-+
-+# Usage: resolve_symlink file
-+# Find the real file/device that file points at
-+resolve_symlink () {
-+      tmp_fname=$1
-+      # Resolve symlinks
-+      while test -L $tmp_fname; do
-+              tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> \(.*\)%\1%p'`
-+              if test -z "$tmp_new_fname"; then
-+                      echo "Unrecognized ls output" 2>&1
-+                      exit 1
-+              fi
-+
-+              # Convert relative symlinks
-+              case $tmp_new_fname in
-+                      /*) tmp_fname="$tmp_new_fname"
-+                      ;;
-+                      *) tmp_fname="`echo $tmp_fname | sed 's%/[^/]*$%%'`/$tmp_new_fname"
-+                      ;;
-+              esac
-+      done
-+      echo "$tmp_fname"
-+}
-+
-+# Usage: find_device file
-+# Find block device on which the file resides.
-+find_device () {
-+    # For now, this uses the program `df' to get the device name, but is
-+    # this really portable?
-+    tmp_fname=`df $1/ | sed -n 's%.*\(/dev/[^         ]*\).*%\1%p'`
-+
-+    if test -z "$tmp_fname"; then
-+      echo "Could not find device for $1" 2>&1
-+      exit 1
-+    fi
-+
-+      tmp_fname=`resolve_symlink $tmp_fname`
-+
-+    echo "$tmp_fname"
-+}
-+
-+# Check the arguments.
-+for option in "$@"; do
-+    case "$option" in
-+    -h | --help)
-+      usage
-+      exit 0 ;;
-+    -v | --version)
-+      echo "grub-install (GNU GRUB ${VERSION})"
-+      exit 0 ;;
-+    --root-directory=*)
-+      rootdir=`echo "$option" | sed 's/--root-directory=//'` ;;
-+    --grub-shell=*)
-+      grub_shell=`echo "$option" | sed 's/--grub-shell=//'` ;;
-+    --no-floppy)
-+      no_floppy="--no-floppy" ;;
-+    --force-lba)
-+      force_lba="--force-lba" ;;
-+    --recheck)
-+      recheck=yes ;;
-+    # This is an undocumented feature...
-+    --debug)
-+      debug=yes ;;
-+    -*)
-+      echo "Unrecognized option \`$option'" 1>&2
-+      usage
-+      exit 1
-+      ;;
-+    *)
-+      if test "x$install_device" != x; then
-+          echo "More than one install_devices?" 1>&2
-+          usage
-+          exit 1
-+      fi
-+      install_device="${option}" ;;
-+    esac
-+done
-+
-+if test "x$install_device" = x; then
-+    echo "install_device not specified." 1>&2
-+    usage
-+    exit 1
-+fi
-+
-+# If the debugging feature is enabled, print commands.
-+if test $debug = yes; then
-+    set -x
-+fi
-+
-+# Initialize these directories here, since ROOTDIR was initialized.
-+case "$host_os" in
-+netbsd* | openbsd*)
-+    # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub
-+    # instead of /boot/grub.
-+    grub_prefix=/grub
-+    bootdir=${rootdir}
-+    ;;
-+*)
-+    # Use /boot/grub by default.
-+    bootdir=${rootdir}/boot
-+    ;;
-+esac
-+
-+grubdir=${bootdir}/grub
-+device_map=${grubdir}/device.map
-+
-+# Check if GRUB is installed.
-+# This is necessary, because the user can specify "grub --read-only".
-+set $grub_shell dummy
-+if test -f "$1"; then
-+    :
-+else
-+    echo "$1: Not found." 1>&2
-+    exit 1
-+fi
-+
-+if test -f "$pkglibdir/stage1"; then
-+    :
-+else
-+    echo "${pkglibdir}/stage1: Not found." 1>&2
-+    exit 1
-+fi
-+
-+if test -f "$pkglibdir/stage2"; then
-+    :
-+else
-+    echo "${pkglibdir}/stage2: Not found." 1>&2
-+    exit 1
-+fi
-+
-+# Don't check for *stage1_5, because it is not fatal even if any
-+# Stage 1.5 does not exist.
-+
-+# Create the GRUB directory if it is not present.
-+test -d "$bootdir" || mkdir "$bootdir" || exit 1
-+test -d "$grubdir" || mkdir "$grubdir" || exit 1
-+
-+# If --recheck is specified, remove the device map, if present.
-+if test $recheck = yes; then
-+    rm -f $device_map
-+fi
-+
-+# Create the device map file if it is not present.
-+if test -f "$device_map"; then
-+    :
-+else
-+    # Create a safe temporary file.
-+    test -n "$mklog" && log_file=`$mklog`
-+
-+    $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
-+quit
-+EOF
-+    if grep "Error [0-9]*: " $log_file >/dev/null; then
-+      cat $log_file 1>&2
-+      exit 1
-+    fi
-+
-+    rm -f $log_file
-+fi
-+
-+# Make sure that there is no duplicated entry.
-+tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \
-+    | sort | uniq -d | sed -n 1p`
-+if test -n "$tmp"; then
-+    echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2
-+    exit 1
-+fi
-+
-+# Check for INSTALL_DEVICE.
-+case "$install_device" in
-+/dev/*)
-+    install_device=`resolve_symlink "$install_device"`
-+    install_drive=`convert "$install_device"`
-+    # I don't know why, but some shells wouldn't die if exit is
-+    # called in a function.
-+    if test "x$install_drive" = x; then
-+      exit 1
-+    fi ;;
-+\([hf]d[0-9]*\))
-+    install_drive="$install_device" ;;
-+[hf]d[0-9]*)
-+    # The GRUB format with no parenthesis.
-+    install_drive="($install_device)" ;;
-+*)
-+    echo "Format of install_device not recognized." 1>&2
-+    usage
-+    exit 1 ;;
-+esac
-+
-+# Get the root drive.
-+root_device=`find_device ${rootdir}`
-+bootdir_device=`find_device ${bootdir}`
-+
-+# Check if the boot directory is in the same device as the root directory.
-+if test "x$root_device" != "x$bootdir_device"; then
-+    # Perhaps the user has a separate boot partition.
-+    root_device=$bootdir_device
-+    grub_prefix="/grub"
-+fi
-+
-+# Convert the root device to a GRUB drive.
-+root_drive=`convert "$root_device"`
-+if test "x$root_drive" = x; then
-+    exit 1
-+fi
-+
-+# Check if the root directory exists in the same device as the grub
-+# directory.
-+grubdir_device=`find_device ${grubdir}`
-+
-+if test "x$grubdir_device" != "x$root_device"; then
-+    # For now, cannot deal with this situation.
-+    cat <<EOF 1>&2
-+You must set the root directory by the option --root-directory, because
-+$grubdir does not exist in the root device $root_device.
-+EOF
-+    exit 1
-+fi
-+
-+# Copy the GRUB images to the GRUB directory.
-+for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do
-+    rm -f $file || exit 1
-+done
-+for file in \
-+    ${pkglibdir}/stage1 ${pkglibdir}/stage2 ${pkglibdir}/*stage1_5; do
-+    cp -f $file ${grubdir} || exit 1
-+done
-+
-+# Make a default file.
-+${grub_set_default} --root-directory=${rootdir} default
-+
-+# Make sure that GRUB reads the same images as the host OS.
-+test -n "$mkimg" && img_file=`$mkimg`
-+test -n "$mklog" && log_file=`$mklog`
-+
-+for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do
-+    count=5
-+    tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"`
-+    while test $count -gt 0; do
-+      $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
-+dump ${root_drive}${tmp} ${img_file}
-+quit
-+EOF
-+      if grep "Error [0-9]*: " $log_file >/dev/null; then
-+          :
-+      elif cmp $file $img_file >/dev/null; then
-+          break
-+      fi
-+      sleep 1
-+      count=`expr $count - 1`    
-+    done
-+    if test $count -eq 0; then
-+      echo "The file $file not read correctly." 1>&2
-+      exit 1
-+    fi
-+done
-+
-+rm -f $img_file
-+rm -f $log_file
-+
-+# Create a safe temporary file.
-+test -n "$mklog" && log_file=`$mklog`
-+
-+# Now perform the installation.
-+$grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
-+root $root_drive
-+setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive
-+quit
-+EOF
-+
-+if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then
-+    cat $log_file 1>&2
-+    exit 1
-+fi
-+
-+rm -f $log_file
-+
-+# Prompt the user to check if the device map is correct.
-+echo "Installation finished. No error reported."
-+echo "This is the contents of the device map $device_map."
-+echo "Check if this is correct or not. If any of the lines is incorrect,"
-+echo "fix it and re-run the script \`grub-install'."
-+echo
-+
-+cat $device_map
-+
-+# Bye.
-+exit 0
-diff -Nur grub-0.97/util/mkbimage grub-0.97-patched/util/mkbimage
---- grub-0.97/util/mkbimage    2004-07-24 20:57:31.000000000 +0200
-+++ grub-0.97-patched/util/mkbimage    2012-11-11 17:07:12.744730138 +0100
-@@ -1,7 +1,7 @@
- #!/bin/sh
- # MaKe a Bootable IMAGE --- 1.44, 2.88 and El Torito no-emulation mode
- # C) 2001,2002,2003 Thierry Laronde <tlaronde@polynum.org>
--# C) 2001,2002,2003 Robert Millan <robertmh@gnu.org>
-+# C) 2001,2002,2003 Robert Millan <rmh@aybabtu.com>
- # This program is free software; you can redistribute it and/or modify
-@@ -94,15 +94,13 @@
-           display Version information and exit
- Copyright (c) 2001,2002,2003 Thierry Laronde <tlaronde@polynum.org>. 
--Copyright (c) 2001,2002 Robert Millan <zeratul2@wanadoo.es>.
- GPLed."
- version="mkbimage $version_number
--Written by Thierry Laronde and Robert Millan.
-+Written by Thierry Laronde.
- Copyright (c) 2001,2002,2003 Thierry Laronde <tlaronde@polynum.org>.
--Copyright (c) 2001,2002,2003 Robert Millan <zeratul2@wanadoo.es>.
- This is free software under the GPL version 2 or later; see the source for 
- copying conditions.  There is NO warranty, not even for MERCHANTABILITY or 
diff --git a/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch b/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch
deleted file mode 100644 (file)
index d27ad54..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-From 2e908aeebd6804296e7d14a96de6be1e2de38e93 Mon Sep 17 00:00:00 2001
-From: Matthias Brugger <matthias.bgg@gmail.com>
-Date: Wed, 23 Jan 2013 19:50:38 +0100
-Subject: [PATCH 2/2] omap2: twl-common: Add default power configuration
-
-This patch adds a generic power script configuration.
-When rebooting an OMAP3530 at 125 MHz, the reboot hangs.
-With the generic power script, TWL4030 will be reset
-when a warm reset occures. This way the OMAP3530 does not
-hang on reboot.
-
-Signed-off-by: Matthias Brugger <matthias.bgg@gmail.com>
----
- arch/arm/mach-omap2/twl-common.c |   38 ++++++++++++++++++++++++++++++++++++++
- arch/arm/mach-omap2/twl-common.h |    1 +
- 2 files changed, 39 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c
-index e49b40b..f096beb 100644
---- a/arch/arm/mach-omap2/twl-common.c
-+++ b/arch/arm/mach-omap2/twl-common.c
-@@ -120,6 +120,41 @@ static struct twl4030_audio_data omap3_audio_pdata = {
-       .codec = &omap3_codec,
- };
-+static struct twl4030_ins wrst_seq[] __initdata = {
-+      {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_OFF), 2},
-+      {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_WRST), 15},
-+      {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_WRST), 15},
-+      {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_WRST), 0x60},
-+      {MSG_SINGULAR(DEV_GRP_P1, 0x19, RES_STATE_ACTIVE), 2},
-+      {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_ACTIVE), 2},
-+};
-+
-+static struct twl4030_script wrst_script __initdata = {
-+      .script = wrst_seq,
-+      .size   = ARRAY_SIZE(wrst_seq),
-+      .flags  = TWL4030_WRST_SCRIPT,
-+};
-+
-+static struct twl4030_script *omap3_power_scripts[] __initdata = {
-+      &wrst_script,
-+};
-+
-+static struct twl4030_resconfig omap3_rconfig[] = {
-+      { .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P3, .type = -1,
-+              .type2 = -1 },
-+      { .resource = RES_VDD1, .devgroup = DEV_GRP_P1, .type = -1,
-+              .type2 = -1 },
-+      { .resource = RES_VDD2, .devgroup = DEV_GRP_P1, .type = -1,
-+              .type2 = -1 },
-+      { 0, 0},
-+};
-+
-+static struct twl4030_power_data omap3_power_pdata = {
-+      .scripts        = omap3_power_scripts,
-+      .num            = ARRAY_SIZE(omap3_power_scripts),
-+      .resource_config = omap3_rconfig,
-+};
-+
- static struct regulator_consumer_supply omap3_vdda_dac_supplies[] = {
-       REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
- };
-@@ -224,6 +259,9 @@ void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data,
-       if (pdata_flags & TWL_COMMON_PDATA_AUDIO && !pmic_data->audio)
-               pmic_data->audio = &omap3_audio_pdata;
-+      if (pdata_flags & TWL_COMMON_PDATA_POWER && !pmic_data->power)
-+              pmic_data->power = &omap3_power_pdata;
-+
-       /* Common regulator configurations */
-       if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac)
-               pmic_data->vdac = &omap3_vdac_idata;
-diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h
-index dcfbad5..dbeb905 100644
---- a/arch/arm/mach-omap2/twl-common.h
-+++ b/arch/arm/mach-omap2/twl-common.h
-@@ -7,6 +7,7 @@
- #define TWL_COMMON_PDATA_BCI          (1 << 1)
- #define TWL_COMMON_PDATA_MADC         (1 << 2)
- #define TWL_COMMON_PDATA_AUDIO                (1 << 3)
-+#define TWL_COMMON_PDATA_POWER                (1 << 4)
- /* Common LDO regulators for TWL4030/TWL6030 */
- #define TWL_COMMON_REGULATOR_VDAC     (1 << 0)
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch b/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch
deleted file mode 100644 (file)
index a61d5b8..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-From 369b60c157f67a71a6f302ab9843ae2de1805a2a Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-Date: Mon, 22 Oct 2012 15:43:00 +0200
-Subject: [PATCH 1/6] omap3isp: Use the common clock framework
-
-Expose the two ISP external clocks XCLKA and XCLKB as common clocks for
-subdev drivers.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-Acked-by: Mike Turquette <mturquette@linaro.org>
----
- drivers/media/platform/omap3isp/isp.c |  277 ++++++++++++++++++++++++---------
- drivers/media/platform/omap3isp/isp.h |   22 ++-
- include/media/omap3isp.h              |   10 +-
- 3 files changed, 225 insertions(+), 84 deletions(-)
-
-diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
-index 6e5ad8e..1d7dbd5 100644
---- a/drivers/media/platform/omap3isp/isp.c
-+++ b/drivers/media/platform/omap3isp/isp.c
-@@ -55,6 +55,7 @@
- #include <asm/cacheflush.h>
- #include <linux/clk.h>
-+#include <linux/clkdev.h>
- #include <linux/delay.h>
- #include <linux/device.h>
- #include <linux/dma-mapping.h>
-@@ -148,6 +149,201 @@ void omap3isp_flush(struct isp_device *isp)
-       isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION);
- }
-+/* -----------------------------------------------------------------------------
-+ * XCLK
-+ */
-+
-+#define to_isp_xclk(_hw)      container_of(_hw, struct isp_xclk, hw)
-+
-+static void isp_xclk_update(struct isp_xclk *xclk, u32 divider)
-+{
-+      switch (xclk->id) {
-+      case ISP_XCLK_A:
-+              isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
-+                              ISPTCTRL_CTRL_DIVA_MASK,
-+                              divider << ISPTCTRL_CTRL_DIVA_SHIFT);
-+              break;
-+      case ISP_XCLK_B:
-+              isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
-+                              ISPTCTRL_CTRL_DIVB_MASK,
-+                              divider << ISPTCTRL_CTRL_DIVB_SHIFT);
-+              break;
-+      }
-+}
-+
-+static int isp_xclk_prepare(struct clk_hw *hw)
-+{
-+      struct isp_xclk *xclk = to_isp_xclk(hw);
-+
-+      omap3isp_get(xclk->isp);
-+
-+      return 0;
-+}
-+
-+static void isp_xclk_unprepare(struct clk_hw *hw)
-+{
-+      struct isp_xclk *xclk = to_isp_xclk(hw);
-+
-+      omap3isp_put(xclk->isp);
-+}
-+
-+static int isp_xclk_enable(struct clk_hw *hw)
-+{
-+      struct isp_xclk *xclk = to_isp_xclk(hw);
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&xclk->lock, flags);
-+      isp_xclk_update(xclk, xclk->divider);
-+      xclk->enabled = true;
-+      spin_unlock_irqrestore(&xclk->lock, flags);
-+
-+      return 0;
-+}
-+
-+static void isp_xclk_disable(struct clk_hw *hw)
-+{
-+      struct isp_xclk *xclk = to_isp_xclk(hw);
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&xclk->lock, flags);
-+      isp_xclk_update(xclk, 0);
-+      xclk->enabled = false;
-+      spin_unlock_irqrestore(&xclk->lock, flags);
-+}
-+
-+static unsigned long isp_xclk_recalc_rate(struct clk_hw *hw,
-+                                        unsigned long parent_rate)
-+{
-+      struct isp_xclk *xclk = to_isp_xclk(hw);
-+
-+      return parent_rate / xclk->divider;
-+}
-+
-+static u32 isp_xclk_calc_divider(unsigned long *rate, unsigned long parent_rate)
-+{
-+      u32 divider;
-+
-+      if (*rate >= parent_rate) {
-+              *rate = parent_rate;
-+              return ISPTCTRL_CTRL_DIV_BYPASS;
-+      }
-+
-+      divider = DIV_ROUND_CLOSEST(parent_rate, *rate);
-+      if (divider >= ISPTCTRL_CTRL_DIV_BYPASS)
-+              divider = ISPTCTRL_CTRL_DIV_BYPASS - 1;
-+
-+      *rate = parent_rate / divider;
-+      return divider;
-+}
-+
-+static long isp_xclk_round_rate(struct clk_hw *hw, unsigned long rate,
-+                              unsigned long *parent_rate)
-+{
-+      isp_xclk_calc_divider(&rate, *parent_rate);
-+      return rate;
-+}
-+
-+static int isp_xclk_set_rate(struct clk_hw *hw, unsigned long rate,
-+                           unsigned long parent_rate)
-+{
-+      struct isp_xclk *xclk = to_isp_xclk(hw);
-+      unsigned long flags;
-+      u32 divider;
-+
-+      divider = isp_xclk_calc_divider(&rate, parent_rate);
-+
-+      spin_lock_irqsave(&xclk->lock, flags);
-+
-+      xclk->divider = divider;
-+      if (xclk->enabled)
-+              isp_xclk_update(xclk, divider);
-+
-+      spin_unlock_irqrestore(&xclk->lock, flags);
-+
-+      dev_dbg(xclk->isp->dev, "%s: cam_xclk%c set to %lu Hz (div %u)\n",
-+              __func__, xclk->id == ISP_XCLK_A ? 'a' : 'b', rate, divider);
-+      return 0;
-+}
-+
-+static const struct clk_ops isp_xclk_ops = {
-+      .prepare = isp_xclk_prepare,
-+      .unprepare = isp_xclk_unprepare,
-+      .enable = isp_xclk_enable,
-+      .disable = isp_xclk_disable,
-+      .recalc_rate = isp_xclk_recalc_rate,
-+      .round_rate = isp_xclk_round_rate,
-+      .set_rate = isp_xclk_set_rate,
-+};
-+
-+static const char *isp_xclk_parent_name = "cam_mclk";
-+
-+static const struct clk_init_data isp_xclk_init_data = {
-+      .name = "cam_xclk",
-+      .ops = &isp_xclk_ops,
-+      .parent_names = &isp_xclk_parent_name,
-+      .num_parents = 1,
-+};
-+
-+static int isp_xclk_init(struct isp_device *isp)
-+{
-+      struct isp_platform_data *pdata = isp->pdata;
-+      struct clk_init_data init;
-+      unsigned int i;
-+
-+      for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) {
-+              struct isp_xclk *xclk = &isp->xclks[i];
-+              struct clk *clk;
-+
-+              xclk->isp = isp;
-+              xclk->id = i == 0 ? ISP_XCLK_A : ISP_XCLK_B;
-+              xclk->divider = 1;
-+              spin_lock_init(&xclk->lock);
-+
-+              init.name = i == 0 ? "cam_xclka" : "cam_xclkb";
-+              init.ops = &isp_xclk_ops;
-+              init.parent_names = &isp_xclk_parent_name;
-+              init.num_parents = 1;
-+
-+              xclk->hw.init = &init;
-+
-+              clk = devm_clk_register(isp->dev, &xclk->hw);
-+              if (IS_ERR(clk))
-+                      return PTR_ERR(clk);
-+
-+              if (pdata->xclks[i].con_id == NULL &&
-+                  pdata->xclks[i].dev_id == NULL)
-+                      continue;
-+
-+              xclk->lookup = kzalloc(sizeof(*xclk->lookup), GFP_KERNEL);
-+              if (xclk->lookup == NULL)
-+                      return -ENOMEM;
-+
-+              xclk->lookup->con_id = pdata->xclks[i].con_id;
-+              xclk->lookup->dev_id = pdata->xclks[i].dev_id;
-+              xclk->lookup->clk = clk;
-+
-+              clkdev_add(xclk->lookup);
-+      }
-+
-+      return 0;
-+}
-+
-+static void isp_xclk_cleanup(struct isp_device *isp)
-+{
-+      unsigned int i;
-+
-+      for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) {
-+              struct isp_xclk *xclk = &isp->xclks[i];
-+
-+              if (xclk->lookup)
-+                      clkdev_drop(xclk->lookup);
-+      }
-+}
-+
-+/* -----------------------------------------------------------------------------
-+ * Interrupts
-+ */
-+
- /*
-  * isp_enable_interrupts - Enable ISP interrupts.
-  * @isp: OMAP3 ISP device
-@@ -180,80 +376,6 @@ static void isp_disable_interrupts(struct isp_device *isp)
-       isp_reg_writel(isp, 0, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0ENABLE);
- }
--/**
-- * isp_set_xclk - Configures the specified cam_xclk to the desired frequency.
-- * @isp: OMAP3 ISP device
-- * @xclk: Desired frequency of the clock in Hz. 0 = stable low, 1 is stable high
-- * @xclksel: XCLK to configure (0 = A, 1 = B).
-- *
-- * Configures the specified MCLK divisor in the ISP timing control register
-- * (TCTRL_CTRL) to generate the desired xclk clock value.
-- *
-- * Divisor = cam_mclk_hz / xclk
-- *
-- * Returns the final frequency that is actually being generated
-- **/
--static u32 isp_set_xclk(struct isp_device *isp, u32 xclk, u8 xclksel)
--{
--      u32 divisor;
--      u32 currentxclk;
--      unsigned long mclk_hz;
--
--      if (!omap3isp_get(isp))
--              return 0;
--
--      mclk_hz = clk_get_rate(isp->clock[ISP_CLK_CAM_MCLK]);
--
--      if (xclk >= mclk_hz) {
--              divisor = ISPTCTRL_CTRL_DIV_BYPASS;
--              currentxclk = mclk_hz;
--      } else if (xclk >= 2) {
--              divisor = mclk_hz / xclk;
--              if (divisor >= ISPTCTRL_CTRL_DIV_BYPASS)
--                      divisor = ISPTCTRL_CTRL_DIV_BYPASS - 1;
--              currentxclk = mclk_hz / divisor;
--      } else {
--              divisor = xclk;
--              currentxclk = 0;
--      }
--
--      switch (xclksel) {
--      case ISP_XCLK_A:
--              isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
--                              ISPTCTRL_CTRL_DIVA_MASK,
--                              divisor << ISPTCTRL_CTRL_DIVA_SHIFT);
--              dev_dbg(isp->dev, "isp_set_xclk(): cam_xclka set to %d Hz\n",
--                      currentxclk);
--              break;
--      case ISP_XCLK_B:
--              isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL,
--                              ISPTCTRL_CTRL_DIVB_MASK,
--                              divisor << ISPTCTRL_CTRL_DIVB_SHIFT);
--              dev_dbg(isp->dev, "isp_set_xclk(): cam_xclkb set to %d Hz\n",
--                      currentxclk);
--              break;
--      case ISP_XCLK_NONE:
--      default:
--              omap3isp_put(isp);
--              dev_dbg(isp->dev, "ISP_ERR: isp_set_xclk(): Invalid requested "
--                      "xclk. Must be 0 (A) or 1 (B).\n");
--              return -EINVAL;
--      }
--
--      /* Do we go from stable whatever to clock? */
--      if (divisor >= 2 && isp->xclk_divisor[xclksel - 1] < 2)
--              omap3isp_get(isp);
--      /* Stopping the clock. */
--      else if (divisor < 2 && isp->xclk_divisor[xclksel - 1] >= 2)
--              omap3isp_put(isp);
--
--      isp->xclk_divisor[xclksel - 1] = divisor;
--
--      omap3isp_put(isp);
--
--      return currentxclk;
--}
--
- /*
-  * isp_core_init - ISP core settings
-  * @isp: OMAP3 ISP device
-@@ -1969,6 +2091,7 @@ static int isp_remove(struct platform_device *pdev)
-       isp_unregister_entities(isp);
-       isp_cleanup_modules(isp);
-+      isp_xclk_cleanup(isp);
-       __omap3isp_get(isp, false);
-       iommu_detach_device(isp->domain, &pdev->dev);
-@@ -2042,7 +2165,6 @@ static int isp_probe(struct platform_device *pdev)
-       }
-       isp->autoidle = autoidle;
--      isp->platform_cb.set_xclk = isp_set_xclk;
-       mutex_init(&isp->isp_mutex);
-       spin_lock_init(&isp->stat_lock);
-@@ -2093,6 +2215,10 @@ static int isp_probe(struct platform_device *pdev)
-       if (ret < 0)
-               goto error_isp;
-+      ret = isp_xclk_init(isp);
-+      if (ret < 0)
-+              goto error_isp;
-+
-       /* Memory resources */
-       for (m = 0; m < ARRAY_SIZE(isp_res_maps); m++)
-               if (isp->revision == isp_res_maps[m].isp_rev)
-@@ -2162,6 +2288,7 @@ detach_dev:
- free_domain:
-       iommu_domain_free(isp->domain);
- error_isp:
-+      isp_xclk_cleanup(isp);
-       omap3isp_put(isp);
- error:
-       platform_set_drvdata(pdev, NULL);
-diff --git a/drivers/media/platform/omap3isp/isp.h b/drivers/media/platform/omap3isp/isp.h
-index c77e1f2..cd3eff4 100644
---- a/drivers/media/platform/omap3isp/isp.h
-+++ b/drivers/media/platform/omap3isp/isp.h
-@@ -29,6 +29,7 @@
- #include <media/omap3isp.h>
- #include <media/v4l2-device.h>
-+#include <linux/clk-provider.h>
- #include <linux/device.h>
- #include <linux/io.h>
- #include <linux/iommu.h>
-@@ -125,8 +126,20 @@ struct isp_reg {
-       u32 val;
- };
--struct isp_platform_callback {
--      u32 (*set_xclk)(struct isp_device *isp, u32 xclk, u8 xclksel);
-+enum isp_xclk_id {
-+      ISP_XCLK_A,
-+      ISP_XCLK_B,
-+};
-+
-+struct isp_xclk {
-+      struct isp_device *isp;
-+      struct clk_hw hw;
-+      struct clk_lookup *lookup;
-+      enum isp_xclk_id id;
-+
-+      spinlock_t lock;        /* Protects enabled and divider */
-+      bool enabled;
-+      unsigned int divider;
- };
- /*
-@@ -149,6 +162,7 @@ struct isp_platform_callback {
-  * @cam_mclk: Pointer to camera functional clock structure.
-  * @csi2_fck: Pointer to camera CSI2 complexIO clock structure.
-  * @l3_ick: Pointer to OMAP3 L3 bus interface clock.
-+ * @xclks: External clocks provided by the ISP
-  * @irq: Currently attached ISP ISR callbacks information structure.
-  * @isp_af: Pointer to current settings for ISP AutoFocus SCM.
-  * @isp_hist: Pointer to current settings for ISP Histogram SCM.
-@@ -185,12 +199,12 @@ struct isp_device {
-       int has_context;
-       int ref_count;
-       unsigned int autoidle;
--      u32 xclk_divisor[2];    /* Two clocks, a and b. */
- #define ISP_CLK_CAM_ICK               0
- #define ISP_CLK_CAM_MCLK      1
- #define ISP_CLK_CSI2_FCK      2
- #define ISP_CLK_L3_ICK                3
-       struct clk *clock[4];
-+      struct isp_xclk xclks[2];
-       /* ISP modules */
-       struct ispstat isp_af;
-@@ -209,8 +223,6 @@ struct isp_device {
-       unsigned int subclk_resources;
-       struct iommu_domain *domain;
--
--      struct isp_platform_callback platform_cb;
- };
- #define v4l2_dev_to_isp_device(dev) \
-diff --git a/include/media/omap3isp.h b/include/media/omap3isp.h
-index 9584269..c9d06d9 100644
---- a/include/media/omap3isp.h
-+++ b/include/media/omap3isp.h
-@@ -29,10 +29,6 @@
- struct i2c_board_info;
- struct isp_device;
--#define ISP_XCLK_NONE                 0
--#define ISP_XCLK_A                    1
--#define ISP_XCLK_B                    2
--
- enum isp_interface_type {
-       ISP_INTERFACE_PARALLEL,
-       ISP_INTERFACE_CSI2A_PHY2,
-@@ -153,7 +149,13 @@ struct isp_v4l2_subdevs_group {
-       } bus; /* gcc < 4.6.0 chokes on anonymous union initializers */
- };
-+struct isp_platform_xclk {
-+      const char *dev_id;
-+      const char *con_id;
-+};
-+
- struct isp_platform_data {
-+      struct isp_platform_xclk xclks[2];
-       struct isp_v4l2_subdevs_group *subdevs;
-       void (*set_constraints)(struct isp_device *isp, bool enable);
- };
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch b/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch
deleted file mode 100644 (file)
index 9d2b19c..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-From 7c44c8a989ad01bd7cd02370d4ca4a742db218be Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-Date: Tue, 25 Sep 2012 15:46:34 +0200
-Subject: [PATCH 2/6] mt9m032: Fix PLL setup
-
-The MT9M032 PLL was assumed to be identical to the MT9P031 PLL but
-differs significantly. Update the registers definitions and PLL limits
-according to the datasheet.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
----
- drivers/media/i2c/mt9m032.c |   24 +++++++++++++-----------
- 1 file changed, 13 insertions(+), 11 deletions(-)
-
-diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c
-index f80c1d7e..30d755a 100644
---- a/drivers/media/i2c/mt9m032.c
-+++ b/drivers/media/i2c/mt9m032.c
-@@ -87,7 +87,7 @@
- #define MT9M032_RESTART                                       0x0b
- #define MT9M032_RESET                                 0x0d
- #define MT9M032_PLL_CONFIG1                           0x11
--#define               MT9M032_PLL_CONFIG1_OUTDIV_MASK         0x3f
-+#define               MT9M032_PLL_CONFIG1_PREDIV_MASK         0x3f
- #define               MT9M032_PLL_CONFIG1_MUL_SHIFT           8
- #define MT9M032_READ_MODE1                            0x1e
- #define MT9M032_READ_MODE2                            0x20
-@@ -106,6 +106,8 @@
- #define               MT9M032_GAIN_AMUL_SHIFT                 6
- #define               MT9M032_GAIN_ANALOG_MASK                0x3f
- #define MT9M032_FORMATTER1                            0x9e
-+#define               MT9M032_FORMATTER1_PLL_P1_6             (1 << 8)
-+#define               MT9M032_FORMATTER1_PARALLEL             (1 << 12)
- #define MT9M032_FORMATTER2                            0x9f
- #define               MT9M032_FORMATTER2_DOUT_EN              0x1000
- #define               MT9M032_FORMATTER2_PIXCLK_EN            0x2000
-@@ -121,8 +123,6 @@
- #define               MT9P031_PLL_CONTROL_PWROFF              0x0050
- #define               MT9P031_PLL_CONTROL_PWRON               0x0051
- #define               MT9P031_PLL_CONTROL_USEPLL              0x0052
--#define MT9P031_PLL_CONFIG2                           0x11
--#define               MT9P031_PLL_CONFIG2_P1_DIV_MASK         0x1f
- struct mt9m032 {
-       struct v4l2_subdev subdev;
-@@ -255,13 +255,14 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
-               .n_max = 64,
-               .m_min = 16,
-               .m_max = 255,
--              .p1_min = 1,
--              .p1_max = 128,
-+              .p1_min = 6,
-+              .p1_max = 7,
-       };
-       struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev);
-       struct mt9m032_platform_data *pdata = sensor->pdata;
-       struct aptina_pll pll;
-+      u16 reg_val;
-       int ret;
-       pll.ext_clock = pdata->ext_clock;
-@@ -274,18 +275,19 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
-       sensor->pix_clock = pdata->pix_clock;
-       ret = mt9m032_write(client, MT9M032_PLL_CONFIG1,
--                          (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT)
--                          | (pll.p1 - 1));
--      if (!ret)
--              ret = mt9m032_write(client, MT9P031_PLL_CONFIG2, pll.n - 1);
-+                          (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT) |
-+                          ((pll.n - 1) & MT9M032_PLL_CONFIG1_PREDIV_MASK));
-       if (!ret)
-               ret = mt9m032_write(client, MT9P031_PLL_CONTROL,
-                                   MT9P031_PLL_CONTROL_PWRON |
-                                   MT9P031_PLL_CONTROL_USEPLL);
-       if (!ret)               /* more reserved, Continuous, Master Mode */
-               ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006);
--      if (!ret)               /* Set 14-bit mode, select 7 divider */
--              ret = mt9m032_write(client, MT9M032_FORMATTER1, 0x111e);
-+      if (!ret) {
-+              reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0)
-+                      | MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */
-+              ret = mt9m032_write(client, MT9M032_FORMATTER1, reg_val);
-+      }
-       return ret;
- }
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch b/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch
deleted file mode 100644 (file)
index c80e876..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-From 1115becbb4875d62abb10f94a9510c81f376606f Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-Date: Wed, 26 Sep 2012 10:54:17 +0200
-Subject: [PATCH 3/6] mt9m032: Define MT9M032_READ_MODE1 bits
-
-Replace hardcoded values with #define's.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
----
- drivers/media/i2c/mt9m032.c |   22 +++++++++++++++++++++-
- 1 file changed, 21 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c
-index 30d755a..de150d3 100644
---- a/drivers/media/i2c/mt9m032.c
-+++ b/drivers/media/i2c/mt9m032.c
-@@ -90,6 +90,24 @@
- #define               MT9M032_PLL_CONFIG1_PREDIV_MASK         0x3f
- #define               MT9M032_PLL_CONFIG1_MUL_SHIFT           8
- #define MT9M032_READ_MODE1                            0x1e
-+#define               MT9M032_READ_MODE1_OUTPUT_BAD_FRAMES    (1 << 13)
-+#define               MT9M032_READ_MODE1_MAINTAIN_FRAME_RATE  (1 << 12)
-+#define               MT9M032_READ_MODE1_XOR_LINE_VALID       (1 << 11)
-+#define               MT9M032_READ_MODE1_CONT_LINE_VALID      (1 << 10)
-+#define               MT9M032_READ_MODE1_INVERT_TRIGGER       (1 << 9)
-+#define               MT9M032_READ_MODE1_SNAPSHOT             (1 << 8)
-+#define               MT9M032_READ_MODE1_GLOBAL_RESET         (1 << 7)
-+#define               MT9M032_READ_MODE1_BULB_EXPOSURE        (1 << 6)
-+#define               MT9M032_READ_MODE1_INVERT_STROBE        (1 << 5)
-+#define               MT9M032_READ_MODE1_STROBE_ENABLE        (1 << 4)
-+#define               MT9M032_READ_MODE1_STROBE_START_TRIG1   (0 << 2)
-+#define               MT9M032_READ_MODE1_STROBE_START_EXP     (1 << 2)
-+#define               MT9M032_READ_MODE1_STROBE_START_SHUTTER (2 << 2)
-+#define               MT9M032_READ_MODE1_STROBE_START_TRIG2   (3 << 2)
-+#define               MT9M032_READ_MODE1_STROBE_END_TRIG1     (0 << 0)
-+#define               MT9M032_READ_MODE1_STROBE_END_EXP       (1 << 0)
-+#define               MT9M032_READ_MODE1_STROBE_END_SHUTTER   (2 << 0)
-+#define               MT9M032_READ_MODE1_STROBE_END_TRIG2     (3 << 0)
- #define MT9M032_READ_MODE2                            0x20
- #define               MT9M032_READ_MODE2_VFLIP_SHIFT          15
- #define               MT9M032_READ_MODE2_HFLIP_SHIFT          14
-@@ -282,7 +300,9 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor)
-                                   MT9P031_PLL_CONTROL_PWRON |
-                                   MT9P031_PLL_CONTROL_USEPLL);
-       if (!ret)               /* more reserved, Continuous, Master Mode */
--              ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006);
-+              ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8000 |
-+                                  MT9M032_READ_MODE1_STROBE_START_EXP |
-+                                  MT9M032_READ_MODE1_STROBE_END_SHUTTER);
-       if (!ret) {
-               reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0)
-                       | MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch b/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch
deleted file mode 100644 (file)
index bcc4360..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-From d3f188f38eaa34acf6375d5d88fe27971aae1170 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-Date: Fri, 21 Dec 2012 20:34:06 +0100
-Subject: [PATCH 4/6] mt9p031: Use devm_* managed helpers
-
-Replace kzalloc and gpio_request_one by their managed equivalents.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
----
- drivers/media/i2c/mt9p031.c |   13 +++----------
- 1 file changed, 3 insertions(+), 10 deletions(-)
-
-diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
-index e328332..e0bad59 100644
---- a/drivers/media/i2c/mt9p031.c
-+++ b/drivers/media/i2c/mt9p031.c
-@@ -927,7 +927,7 @@ static int mt9p031_probe(struct i2c_client *client,
-               return -EIO;
-       }
--      mt9p031 = kzalloc(sizeof(*mt9p031), GFP_KERNEL);
-+      mt9p031 = devm_kzalloc(&client->dev, sizeof(*mt9p031), GFP_KERNEL);
-       if (mt9p031 == NULL)
-               return -ENOMEM;
-@@ -1001,8 +1001,8 @@ static int mt9p031_probe(struct i2c_client *client,
-       mt9p031->format.colorspace = V4L2_COLORSPACE_SRGB;
-       if (pdata->reset != -1) {
--              ret = gpio_request_one(pdata->reset, GPIOF_OUT_INIT_LOW,
--                                     "mt9p031_rst");
-+              ret = devm_gpio_request_one(&client->dev, pdata->reset,
-+                                          GPIOF_OUT_INIT_LOW, "mt9p031_rst");
-               if (ret < 0)
-                       goto done;
-@@ -1013,12 +1013,8 @@ static int mt9p031_probe(struct i2c_client *client,
- done:
-       if (ret < 0) {
--              if (mt9p031->reset != -1)
--                      gpio_free(mt9p031->reset);
--
-               v4l2_ctrl_handler_free(&mt9p031->ctrls);
-               media_entity_cleanup(&mt9p031->subdev.entity);
--              kfree(mt9p031);
-       }
-       return ret;
-@@ -1032,9 +1028,6 @@ static int mt9p031_remove(struct i2c_client *client)
-       v4l2_ctrl_handler_free(&mt9p031->ctrls);
-       v4l2_device_unregister_subdev(subdev);
-       media_entity_cleanup(&subdev->entity);
--      if (mt9p031->reset != -1)
--              gpio_free(mt9p031->reset);
--      kfree(mt9p031);
-       return 0;
- }
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch b/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch
deleted file mode 100644 (file)
index 57c80fd..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-From 9ff2bc0c9458f0eecde6d9b52a899fd2bb1dd3a3 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-Date: Tue, 8 May 2012 15:10:36 +0200
-Subject: [PATCH 5/6] mt9p031: Add support for regulators
-
-Enable the regulators when powering the sensor up, and disable them when
-powering it down.
-
-The regulators are mandatory. Boards that don't allow controlling the
-sensor power lines must provide fixed voltage regulators.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
----
- drivers/media/i2c/mt9p031.c |   24 ++++++++++++++++++++++++
- 1 file changed, 24 insertions(+)
-
-diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
-index e0bad59..ecf4492 100644
---- a/drivers/media/i2c/mt9p031.c
-+++ b/drivers/media/i2c/mt9p031.c
-@@ -19,6 +19,7 @@
- #include <linux/i2c.h>
- #include <linux/log2.h>
- #include <linux/pm.h>
-+#include <linux/regulator/consumer.h>
- #include <linux/slab.h>
- #include <linux/videodev2.h>
-@@ -121,6 +122,10 @@ struct mt9p031 {
-       struct mutex power_lock; /* lock to protect power_count */
-       int power_count;
-+      struct regulator *vaa;
-+      struct regulator *vdd;
-+      struct regulator *vdd_io;
-+
-       enum mt9p031_model model;
-       struct aptina_pll pll;
-       int reset;
-@@ -264,6 +269,11 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031)
-               usleep_range(1000, 2000);
-       }
-+      /* Bring up the supplies */
-+      regulator_enable(mt9p031->vdd);
-+      regulator_enable(mt9p031->vdd_io);
-+      regulator_enable(mt9p031->vaa);
-+
-       /* Emable clock */
-       if (mt9p031->pdata->set_xclk)
-               mt9p031->pdata->set_xclk(&mt9p031->subdev,
-@@ -285,6 +295,10 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031)
-               usleep_range(1000, 2000);
-       }
-+      regulator_disable(mt9p031->vaa);
-+      regulator_disable(mt9p031->vdd_io);
-+      regulator_disable(mt9p031->vdd);
-+
-       if (mt9p031->pdata->set_xclk)
-               mt9p031->pdata->set_xclk(&mt9p031->subdev, 0);
- }
-@@ -937,6 +951,16 @@ static int mt9p031_probe(struct i2c_client *client,
-       mt9p031->model = did->driver_data;
-       mt9p031->reset = -1;
-+      mt9p031->vaa = devm_regulator_get(&client->dev, "vaa");
-+      mt9p031->vdd = devm_regulator_get(&client->dev, "vdd");
-+      mt9p031->vdd_io = devm_regulator_get(&client->dev, "vdd_io");
-+
-+      if (IS_ERR(mt9p031->vaa) || IS_ERR(mt9p031->vdd) ||
-+          IS_ERR(mt9p031->vdd_io)) {
-+              dev_err(&client->dev, "Unable to get regulators\n");
-+              return -ENODEV;
-+      }
-+
-       v4l2_ctrl_handler_init(&mt9p031->ctrls, ARRAY_SIZE(mt9p031_ctrls) + 6);
-       v4l2_ctrl_new_std(&mt9p031->ctrls, &mt9p031_ctrl_ops,
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch b/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch
deleted file mode 100644 (file)
index fc8d583..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-From 6cd62f5ae305142c0490e80caa04f99f00029b68 Mon Sep 17 00:00:00 2001
-From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-Date: Fri, 21 Dec 2012 20:11:55 +0100
-Subject: [PATCH 6/6] mt9p031: Use the common clock framework
-
-Configure the device external clock using the common clock framework
-instead of a board code callback function.
-
-Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-Acked-by: Sakari Ailus <sakari.ailus@iki.fi>
----
- drivers/media/i2c/mt9p031.c |   21 ++++++++++++++-------
- include/media/mt9p031.h     |    2 --
- 2 files changed, 14 insertions(+), 9 deletions(-)
-
-diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c
-index ecf4492..28cf95b 100644
---- a/drivers/media/i2c/mt9p031.c
-+++ b/drivers/media/i2c/mt9p031.c
-@@ -12,6 +12,7 @@
-  * published by the Free Software Foundation.
-  */
-+#include <linux/clk.h>
- #include <linux/delay.h>
- #include <linux/device.h>
- #include <linux/gpio.h>
-@@ -122,6 +123,7 @@ struct mt9p031 {
-       struct mutex power_lock; /* lock to protect power_count */
-       int power_count;
-+      struct clk *clk;
-       struct regulator *vaa;
-       struct regulator *vdd;
-       struct regulator *vdd_io;
-@@ -200,7 +202,7 @@ static int mt9p031_reset(struct mt9p031 *mt9p031)
-                                         0);
- }
--static int mt9p031_pll_setup(struct mt9p031 *mt9p031)
-+static int mt9p031_clk_setup(struct mt9p031 *mt9p031)
- {
-       static const struct aptina_pll_limits limits = {
-               .ext_clock_min = 6000000,
-@@ -221,6 +223,12 @@ static int mt9p031_pll_setup(struct mt9p031 *mt9p031)
-       struct i2c_client *client = v4l2_get_subdevdata(&mt9p031->subdev);
-       struct mt9p031_platform_data *pdata = mt9p031->pdata;
-+      mt9p031->clk = devm_clk_get(&client->dev, NULL);
-+      if (IS_ERR(mt9p031->clk))
-+              return PTR_ERR(mt9p031->clk);
-+
-+      clk_set_rate(mt9p031->clk, pdata->ext_freq);
-+
-       mt9p031->pll.ext_clock = pdata->ext_freq;
-       mt9p031->pll.pix_clock = pdata->target_freq;
-@@ -275,9 +283,8 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031)
-       regulator_enable(mt9p031->vaa);
-       /* Emable clock */
--      if (mt9p031->pdata->set_xclk)
--              mt9p031->pdata->set_xclk(&mt9p031->subdev,
--                                       mt9p031->pdata->ext_freq);
-+      if (mt9p031->clk)
-+              clk_prepare_enable(mt9p031->clk);
-       /* Now RESET_BAR must be high */
-       if (mt9p031->reset != -1) {
-@@ -299,8 +306,8 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031)
-       regulator_disable(mt9p031->vdd_io);
-       regulator_disable(mt9p031->vdd);
--      if (mt9p031->pdata->set_xclk)
--              mt9p031->pdata->set_xclk(&mt9p031->subdev, 0);
-+      if (mt9p031->clk)
-+              clk_disable_unprepare(mt9p031->clk);
- }
- static int __mt9p031_set_power(struct mt9p031 *mt9p031, bool on)
-@@ -1033,7 +1040,7 @@ static int mt9p031_probe(struct i2c_client *client,
-               mt9p031->reset = pdata->reset;
-       }
--      ret = mt9p031_pll_setup(mt9p031);
-+      ret = mt9p031_clk_setup(mt9p031);
- done:
-       if (ret < 0) {
-diff --git a/include/media/mt9p031.h b/include/media/mt9p031.h
-index 0c97b19..b1e63f2 100644
---- a/include/media/mt9p031.h
-+++ b/include/media/mt9p031.h
-@@ -5,13 +5,11 @@ struct v4l2_subdev;
- /*
-  * struct mt9p031_platform_data - MT9P031 platform data
-- * @set_xclk: Clock frequency set callback
-  * @reset: Chip reset GPIO (set to -1 if not used)
-  * @ext_freq: Input clock frequency
-  * @target_freq: Pixel clock frequency
-  */
- struct mt9p031_platform_data {
--      int (*set_xclk)(struct v4l2_subdev *subdev, int hz);
-       int reset;
-       int ext_freq;
-       int target_freq;
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch b/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch
deleted file mode 100644 (file)
index 34d6034..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-From 6ac98647956cbff190954b4cac6bd71fdbb8647b Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Wed, 23 Mar 2011 08:37:54 -0500
-Subject: [PATCH 1/5] meego: modedb add Toshiba LTA070B220F 800x480 support
-
- from http://wiki.meego.com/ARM/Meego_on_Beagleboard_from_scratch
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- drivers/video/modedb.c |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
-index 5b686de..69ad1ec 100644
---- a/drivers/video/modedb.c
-+++ b/drivers/video/modedb.c
-@@ -293,6 +293,10 @@ static const struct fb_videomode modedb[] = {
-       /* 864x480 @ 60 Hz, 35.15 kHz hsync */
-       { NULL, 60, 864, 480, 27777, 1, 1, 1, 1, 0, 0,
-               0, FB_VMODE_NONINTERLACED },
-+
-+      /* 800x480 @ 60 Hz, Toshiba LTA070B220F 7 inch LCD */
-+      {  NULL, 60, 800, 480, 32787, 48, 80, 33, 31, 32, 2,
-+              FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED },
- };
- #ifdef CONFIG_FB_MODE_HELPERS
--- 
-1.7.7.6
-
diff --git a/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch b/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch
deleted file mode 100644 (file)
index ce4df82..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-From e989473bea15beef8d480b822a619e7b8fca860c Mon Sep 17 00:00:00 2001
-From: "Manjunathappa, Prakash" <prakash.pm@ti.com>
-Date: Mon, 1 Aug 2011 18:25:11 +0530
-Subject: [PATCH 2/5] backlight: Add TLC59108 backlight control driver
-
-This patch adds support for I2C configurable TLC59108 backlight
-control driver.
-
-Signed-off-by: Manjunathappa, Prakash <prakash.pm@ti.com>
-Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
----
- drivers/video/backlight/Kconfig    |    8 ++
- drivers/video/backlight/Makefile   |    1 +
- drivers/video/backlight/tlc59108.c |  160 ++++++++++++++++++++++++++++++++++++
- 3 files changed, 169 insertions(+)
- create mode 100644 drivers/video/backlight/tlc59108.c
-
-diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
-index db10d01..04a2275 100644
---- a/drivers/video/backlight/Kconfig
-+++ b/drivers/video/backlight/Kconfig
-@@ -418,6 +418,14 @@ config BACKLIGHT_AS3711
-         If you have an Austrian Microsystems AS3711 say Y to enable the
-         backlight driver.
-+config BACKLIGHT_TLC59108
-+      tristate "TLC59108 LCD Backlight Driver"
-+      depends on I2C && BACKLIGHT_CLASS_DEVICE
-+      default n
-+      help
-+        If you have an LCD Panel with backlight control via TLC59108,
-+        say Y to enable its LCD control driver.
-+
- endif # BACKLIGHT_CLASS_DEVICE
- endif # BACKLIGHT_LCD_SUPPORT
-diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
-index 96c4d62..3687852 100644
---- a/drivers/video/backlight/Makefile
-+++ b/drivers/video/backlight/Makefile
-@@ -41,6 +41,7 @@ obj-$(CONFIG_BACKLIGHT_LP855X)               += lp855x_bl.o
- obj-$(CONFIG_BACKLIGHT_LP8788)                += lp8788_bl.o
- obj-$(CONFIG_BACKLIGHT_MAX8925)               += max8925_bl.o
- obj-$(CONFIG_BACKLIGHT_OMAP1)         += omap1_bl.o
-+obj-$(CONFIG_BACKLIGHT_TLC59108)      += tlc59108.o
- obj-$(CONFIG_BACKLIGHT_OT200)         += ot200_bl.o
- obj-$(CONFIG_BACKLIGHT_PANDORA)               += pandora_bl.o
- obj-$(CONFIG_BACKLIGHT_PCF50633)      += pcf50633-backlight.o
-diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c
-new file mode 100644
-index 0000000..4f4ea34
---- /dev/null
-+++ b/drivers/video/backlight/tlc59108.c
-@@ -0,0 +1,160 @@
-+/*
-+ * ti81xxhdmi_tlc59108.c
-+ *
-+ * Copyright (C) 2011 Texas Instruments
-+ * Author: Senthil Natarajan
-+ *
-+ * tlc59108 HDMI Driver
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 as published by
-+ * the Free Software Foundation.
-+ *
-+ * 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, see <http://www.gnu.org/licenses/>.
-+ * History:
-+ *
-+ * Senthil Natarajan<senthil.n@ti.com> July 2011 I2C driver for tlc59108
-+ *                                             backlight control
-+ */
-+
-+#include <linux/i2c.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/backlight.h>
-+#include <linux/fb.h>
-+
-+#define tlc59108_MODULE_NAME  "tlc59108"
-+#define TLC59108_MODE1   0x00
-+#define TLC59108_PWM2    0x04
-+#define TLC59108_LEDOUT0 0x0c
-+#define TLC59108_LEDOUT1 0x0d
-+#define TLC59108_MAX_BRIGHTNESS 0xFF
-+
-+struct tlc59108_bl {
-+      struct i2c_client *client;
-+      struct backlight_device *bl;
-+};
-+
-+static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness)
-+{
-+      /* Set Mode1 Register */
-+      i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00);
-+
-+      /* Set LEDOUT0 Register */
-+      i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21);
-+
-+      /* Set Backlight Duty Cycle*/
-+      i2c_smbus_write_byte_data(data->client, TLC59108_PWM2,
-+                                brightness & 0xff);
-+}
-+
-+static int tlc59108_bl_get_brightness(struct backlight_device *dev)
-+{
-+      struct backlight_properties *props = &dev->props;
-+
-+      return props->brightness;
-+}
-+
-+static int tlc59108_bl_update_status(struct backlight_device *dev)
-+{
-+      struct backlight_properties *props = &dev->props;
-+      struct tlc59108_bl *data = dev_get_drvdata(&dev->dev);
-+      int brightness = props->brightness;
-+
-+      tlc59108_bl_set_backlight(data, brightness);
-+
-+      return 0;
-+}
-+
-+static const struct backlight_ops bl_ops = {
-+      .get_brightness         = tlc59108_bl_get_brightness,
-+      .update_status          = tlc59108_bl_update_status,
-+};
-+
-+static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
-+{
-+      struct backlight_properties props;
-+      struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl),
-+                                         GFP_KERNEL);
-+      int ret = 0;
-+
-+      if (!data)
-+              return -ENOMEM;
-+
-+      i2c_set_clientdata(c, data);
-+      data->client = c;
-+
-+      memset(&props, 0, sizeof(struct backlight_properties));
-+      props.max_brightness = TLC59108_MAX_BRIGHTNESS;
-+      props.type = BACKLIGHT_RAW;
-+      data->bl = backlight_device_register("tlc59108-bl", &c->dev, data,
-+                                           &bl_ops, &props);
-+      if (IS_ERR(data->bl)) {
-+              ret = PTR_ERR(data->bl);
-+              goto err_reg;
-+      }
-+
-+      data->bl->props.brightness = TLC59108_MAX_BRIGHTNESS;
-+
-+      backlight_update_status(data->bl);
-+
-+      return 0;
-+
-+err_reg:
-+      data->bl = NULL;
-+      kfree(data);
-+      return ret;
-+}
-+
-+static int tlc59108_remove(struct i2c_client *c)
-+{
-+      struct tlc59108_bl *data = i2c_get_clientdata(c);
-+
-+      backlight_device_unregister(data->bl);
-+      data->bl = NULL;
-+
-+      kfree(data);
-+
-+      return 0;
-+}
-+
-+/* I2C Device ID table */
-+static const struct i2c_device_id tlc59108_id[] = {
-+      { "tlc59108", 0 },
-+      { }
-+};
-+MODULE_DEVICE_TABLE(i2c, tlc59108_id);
-+
-+/* I2C driver data */
-+static struct i2c_driver tlc59108_driver = {
-+      .driver = {
-+              .owner = THIS_MODULE,
-+              .name = tlc59108_MODULE_NAME,
-+      },
-+      .probe = tlc59108_probe,
-+      .remove = tlc59108_remove,
-+      .id_table = tlc59108_id,
-+};
-+
-+static int __init tlc59108_init(void)
-+{
-+      return i2c_add_driver(&tlc59108_driver);
-+}
-+
-+static void __exit tlc59108_exit(void)
-+{
-+      i2c_del_driver(&tlc59108_driver);
-+}
-+
-+module_init(tlc59108_init);
-+module_exit(tlc59108_exit);
-+
-+MODULE_DESCRIPTION("LCD/Backlight control for TLC59108");
-+MODULE_AUTHOR("Senthil Natarajan <senthil.n@ti.com>");
-+MODULE_LICENSE("GPL v2");
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch b/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch
deleted file mode 100644 (file)
index 5c9659b..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-From 40cbddde06a9f0e1845810b904502f922fc3288f Mon Sep 17 00:00:00 2001
-From: Koen Kooi <koen@dominion.thruhere.net>
-Date: Fri, 27 Apr 2012 21:30:00 +0200
-Subject: [PATCH 3/5] tlc59108: adjust for beagleboard+uLCD7
-
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
----
- drivers/video/backlight/tlc59108.c |   46 ++++++++++++++++++++++++-----------
- 1 files changed, 31 insertions(+), 15 deletions(-)
-
-diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c
-index 4f4ea34..40a21e7 100644
---- a/drivers/video/backlight/tlc59108.c
-+++ b/drivers/video/backlight/tlc59108.c
-@@ -29,9 +29,16 @@
- #include <linux/backlight.h>
- #include <linux/fb.h>
--#define tlc59108_MODULE_NAME  "tlc59108"
- #define TLC59108_MODE1   0x00
--#define TLC59108_PWM2    0x04
-+#define TLC59108_MODE2   0x01
-+#define TLC59108_PWM0 0x02
-+#define TLC59108_PWM1 0x03
-+#define TLC59108_PWM2 0x04
-+#define TLC59108_PWM3 0x05
-+#define TLC59108_PWM4 0x06
-+#define TLC59108_PWM5 0x07
-+#define TLC59108_PWM6 0x08
-+#define TLC59108_PWM7 0x09
- #define TLC59108_LEDOUT0 0x0c
- #define TLC59108_LEDOUT1 0x0d
- #define TLC59108_MAX_BRIGHTNESS 0xFF
-@@ -43,15 +50,9 @@ struct tlc59108_bl {
- static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness)
- {
--      /* Set Mode1 Register */
--      i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00);
--
--      /* Set LEDOUT0 Register */
--      i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21);
--
-       /* Set Backlight Duty Cycle*/
-       i2c_smbus_write_byte_data(data->client, TLC59108_PWM2,
--                                brightness & 0xff);
-+                                0xff - brightness );
- }
- static int tlc59108_bl_get_brightness(struct backlight_device *dev)
-@@ -65,8 +66,18 @@ static int tlc59108_bl_update_status(struct backlight_device *dev)
- {
-       struct backlight_properties *props = &dev->props;
-       struct tlc59108_bl *data = dev_get_drvdata(&dev->dev);
-+
-       int brightness = props->brightness;
-+      if (dev->props.state & BL_CORE_FBBLANK) {
-+              brightness = 0;
-+              /* Set LEDOUT0 Register */
-+              i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x10);
-+      } else {
-+              /* Set LEDOUT0 Register */
-+              i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x30);
-+      }
-+
-       tlc59108_bl_set_backlight(data, brightness);
-       return 0;
-@@ -77,7 +88,7 @@ static const struct backlight_ops bl_ops = {
-       .update_status          = tlc59108_bl_update_status,
- };
--static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
-+static int __devinit tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
- {
-       struct backlight_properties props;
-       struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl),
-@@ -104,6 +115,11 @@ static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id)
-       backlight_update_status(data->bl);
-+      i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00);
-+      i2c_smbus_write_byte_data(data->client, TLC59108_PWM2, 0x80);
-+      i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x05);
-+      i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x15);
-+
-       return 0;
- err_reg:
-@@ -125,7 +141,7 @@ static int tlc59108_remove(struct i2c_client *c)
- }
- /* I2C Device ID table */
--static const struct i2c_device_id tlc59108_id[] = {
-+static struct i2c_device_id tlc59108_id[] = {
-       { "tlc59108", 0 },
-       { }
- };
-@@ -134,12 +150,12 @@ MODULE_DEVICE_TABLE(i2c, tlc59108_id);
- /* I2C driver data */
- static struct i2c_driver tlc59108_driver = {
-       .driver = {
--              .owner = THIS_MODULE,
--              .name = tlc59108_MODULE_NAME,
-+              .owner  = THIS_MODULE,
-+              .name   = "tlc59108"
-       },
-+      .id_table = tlc59108_id,
-       .probe = tlc59108_probe,
-       .remove = tlc59108_remove,
--      .id_table = tlc59108_id,
- };
- static int __init tlc59108_init(void)
-@@ -157,4 +173,4 @@ module_exit(tlc59108_exit);
- MODULE_DESCRIPTION("LCD/Backlight control for TLC59108");
- MODULE_AUTHOR("Senthil Natarajan <senthil.n@ti.com>");
--MODULE_LICENSE("GPL v2");
-+MODULE_LICENSE("GPL");
--- 
-1.7.7.6
-
diff --git a/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch b/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch
deleted file mode 100644 (file)
index d179420..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-From 81ff7627ad0d958a5c156cb7d880af8707e14f47 Mon Sep 17 00:00:00 2001
-From: Alexander Holler <holler@ahsoftware.de>
-Date: Wed, 4 Jul 2012 00:03:04 +0200
-Subject: [PATCH 4/5] zeroMAP: Open your eyes!
-
-Signed-off-by: Alexander Holler <holler@ahsoftware.de>
----
- kernel/printk.c |    7 +++++++
- 1 files changed, 7 insertions(+), 0 deletions(-)
-
-diff --git a/kernel/printk.c b/kernel/printk.c
-index 22e070f..3678740 100644
---- a/kernel/printk.c
-+++ b/kernel/printk.c
-@@ -1759,6 +1759,13 @@ static int __init console_setup(char *str)
-       char *s, *options, *brl_options = NULL;
-       int idx;
-+#ifdef CONFIG_SERIAL_OMAP
-+      if (!strncmp(str, "tty0", 4) && '0' <= str[4] && '9' >= str[4]) {
-+              str[3] = 'O';
-+              pr_warn("We are opening your eyes, assuming you want to use an OMAP based serial driver and not a zeroMAP based one! ;)\n");
-+              pr_warn("Which means 'tty0%s' was changed to 'ttyO%s' automagically for your pleasure.\n", str+4, str+4);
-+      }
-+#endif
- #ifdef CONFIG_A11Y_BRAILLE_CONSOLE
-       if (!memcmp(str, "brl,", 4)) {
-               brl_options = "";
--- 
-1.7.7.6
-
diff --git a/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch b/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch
deleted file mode 100644 (file)
index ffb5ffb..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-From f2ec859cb99e6137d78b457f8a6693e69e3b1f33 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Thu, 24 Jan 2013 09:43:51 -0600
-Subject: [PATCH 5/5] ARM: OMAP: Beagle: use TWL4030 generic reset script
-
-Enable TWL_COMMON_PDATA_POWER such that OMAP3530 revisions of the
-Beagle (Bx/Cx) will not hang on reboot when running at 125 Mhz.
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 5b57885..9a2c80b 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -831,7 +831,7 @@ static int __init omap3_beagle_i2c_init(void)
- {
-       omap3_pmic_get_config(&beagle_twldata,
-                       TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_MADC |
--                      TWL_COMMON_PDATA_AUDIO,
-+                      TWL_COMMON_PDATA_AUDIO | TWL_COMMON_PDATA_POWER,
-                       TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2);
-       beagle_twldata.vpll2->constraints.name = "VDVI";
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch b/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch
deleted file mode 100644 (file)
index 56879cb..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-From 40d889a09a05765138f3b737becadfe927c9b004 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 19 Mar 2013 13:40:50 -0500
-Subject: [PATCH 6/6] DSS2: use DSI PLL for DPI with OMAP3
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- drivers/video/omap2/dss/dpi.c |    4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
-index 757b57f..12ed14f 100644
---- a/drivers/video/omap2/dss/dpi.c
-+++ b/drivers/video/omap2/dss/dpi.c
-@@ -58,10 +58,6 @@ static struct platform_device *dpi_get_dsidev(enum omap_channel channel)
-        */
-       switch (omapdss_get_version()) {
-       case OMAPDSS_VER_OMAP24xx:
--      case OMAPDSS_VER_OMAP34xx_ES1:
--      case OMAPDSS_VER_OMAP34xx_ES3:
--      case OMAPDSS_VER_OMAP3630:
--      case OMAPDSS_VER_AM35xx:
-               return NULL;
-       case OMAPDSS_VER_OMAP4430_ES1:
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch b/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch
deleted file mode 100644 (file)
index 44a1ae3..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-From c070885eaf883884f89a77e2f71def5b447f914b Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 11 Dec 2012 06:25:27 -0600
-Subject: [PATCH 01/10] Beagle: expansion: add buddy param for expansionboard
- names
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   17 +++++++++++++++++
- 1 file changed, 17 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index c3558f9..29d549c 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -23,6 +23,7 @@
- #include <linux/pwm.h>
- #include <linux/leds_pwm.h>
- #include <linux/gpio.h>
-+#include <linux/irq.h>
- #include <linux/input.h>
- #include <linux/gpio_keys.h>
- #include <linux/opp.h>
-@@ -191,6 +192,8 @@ static void __init omap3_beagle_init_rev(void)
-       }
- }
-+char expansionboard_name[16];
-+
- static struct mtd_partition omap3beagle_nand_partitions[] = {
-       /* All the partition sizes are listed in terms of NAND block size */
-       {
-@@ -470,6 +473,18 @@ static struct omap_board_mux board_mux[] __initdata = {
- };
- #endif
-+static int __init expansionboard_setup(char *str)
-+{
-+      if (!machine_is_omap3_beagle())
-+              return 0;
-+
-+      if (!str)
-+              return -EINVAL;
-+      strncpy(expansionboard_name, str, 16);
-+      pr_info("Beagle expansionboard: %s\n", expansionboard_name);
-+      return 0;
-+}
-+
- static int __init beagle_opp_init(void)
- {
-       int r = 0;
-@@ -559,6 +574,8 @@ static void __init omap3_beagle_init(void)
-       pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup));
- }
-+early_param("buddy", expansionboard_setup);
-+
- MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
-       /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
-       .atag_offset    = 0x100,
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch b/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch
deleted file mode 100644 (file)
index fff6243..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-From e71075202707e044a28604bd929fd6f7a89adeae Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Mon, 21 Jan 2013 11:47:02 -0600
-Subject: [PATCH 02/10] Beagle: expansion: add zippy
-
-v2: add #include <linux/regulator/fixed.h>
-build fix from Pantelis Antoniou <panto@antoniou-consulting.com>
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |  164 +++++++++++++++++++++++++++++--
- 1 file changed, 158 insertions(+), 6 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 4e6e767..b3685ed 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -37,6 +37,7 @@
- #include <linux/usb/nop-usb-xceiv.h>
- #include <linux/regulator/machine.h>
-+#include <linux/regulator/fixed.h>
- #include <linux/i2c/twl.h>
- #include <asm/mach-types.h>
-@@ -195,6 +196,86 @@ static void __init omap3_beagle_init_rev(void)
- char expansionboard_name[16];
-+enum {
-+      EXPANSION_MMC_NONE = 0,
-+      EXPANSION_MMC_ZIPPY,
-+      EXPANSION_MMC_WIFI,
-+};
-+
-+enum {
-+      EXPANSION_I2C_NONE = 0,
-+      EXPANSION_I2C_ZIPPY,
-+};
-+
-+static struct {
-+      int mmc_settings;
-+      int i2c_settings;
-+} expansion_config = {
-+      .mmc_settings = EXPANSION_MMC_NONE,
-+      .i2c_settings = EXPANSION_I2C_NONE,
-+};
-+
-+//rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper..
-+static struct fixed_voltage_config beagle_vzippy = {
-+      .supply_name = "vzippy",
-+      .microvolts = 3300000,  /* 3.3V */
-+      .startup_delay = 70000, /* 70ms */
-+      .enable_high = 1,
-+      .enabled_at_boot = 0,
-+      .init_data = &beagle_vmmc2,
-+};
-+
-+static struct platform_device omap_zippy_device = {
-+      .name   = "reg-fixed-voltage",
-+      .id             = 1,
-+      .dev = {
-+              .platform_data = &beagle_vzippy,
-+      },
-+};
-+
-+#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP 141
-+#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD 162
-+
-+#if IS_ENABLED(CONFIG_ENC28J60)
-+#include <linux/platform_data/spi-omap2-mcspi.h>
-+#include <linux/spi/spi.h>
-+
-+#define OMAP3BEAGLE_GPIO_ENC28J60_IRQ 157
-+
-+static struct omap2_mcspi_device_config enc28j60_spi_chip_info = {
-+      .turbo_mode     = 0,
-+};
-+
-+static struct spi_board_info omap3beagle_zippy_spi_board_info[] __initdata = {
-+      {
-+              .modalias               = "enc28j60",
-+              .bus_num                = 4,
-+              .chip_select    = 0,
-+              .max_speed_hz   = 20000000,
-+              .controller_data        = &enc28j60_spi_chip_info,
-+      },
-+};
-+
-+static void __init omap3beagle_enc28j60_init(void)
-+{
-+      if ((gpio_request(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, "ENC28J60_IRQ") == 0) &&
-+          (gpio_direction_input(OMAP3BEAGLE_GPIO_ENC28J60_IRQ) == 0)) {
-+              gpio_export(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, 0);
-+              omap3beagle_zippy_spi_board_info[0].irq = gpio_to_irq(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
-+              irq_set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
-+      } else {
-+              pr_err("Beagle expansionboard: could not obtain gpio for ENC28J60_IRQ\n");
-+              return;
-+      }
-+
-+      spi_register_board_info(omap3beagle_zippy_spi_board_info,
-+                      ARRAY_SIZE(omap3beagle_zippy_spi_board_info));
-+}
-+
-+#else
-+static inline void __init omap3beagle_enc28j60_init(void) { return; }
-+#endif
-+
- static struct mtd_partition omap3beagle_nand_partitions[] = {
-       /* All the partition sizes are listed in terms of NAND block size */
-       {
-@@ -271,6 +352,23 @@ static struct omap2_hsmmc_info mmc[] = {
-       {}      /* Terminator */
- };
-+static struct omap2_hsmmc_info mmc_zippy[] = {
-+      {
-+              .mmc            = 1,
-+              .caps           = MMC_CAP_4_BIT_DATA,
-+              .gpio_wp        = -EINVAL,
-+              .deferred       = true,
-+      },
-+      {
-+              .mmc            = 2,
-+              .caps           = MMC_CAP_4_BIT_DATA,
-+              .gpio_wp        = OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP,
-+              .gpio_cd        = OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD,
-+              .transceiver    = true,
-+              .deferred       = true,
-+      },
-+      {}      /* Terminator */
-+};
- static struct regulator_consumer_supply beagle_vmmc1_supply[] = {
-       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
- };
-@@ -301,10 +399,21 @@ static int beagle_twl_gpio_setup(struct device *dev,
- {
-       int r;
--      mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
--      /* gpio + 0 is "mmc0_cd" (input/IRQ) */
--      mmc[0].gpio_cd = gpio + 0;
--      omap_hsmmc_late_init(mmc);
-+      switch (expansion_config.mmc_settings) {
-+      case EXPANSION_MMC_ZIPPY:
-+              mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp;
-+              /* gpio + 0 is "mmc0_cd" (input/IRQ) */
-+              mmc_zippy[0].gpio_cd = gpio + 0;
-+
-+              omap_hsmmc_late_init(mmc_zippy);
-+              break;
-+      default:
-+              mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
-+              /* gpio + 0 is "mmc0_cd" (input/IRQ) */
-+              mmc[0].gpio_cd = gpio + 0;
-+
-+              omap_hsmmc_late_init(mmc);
-+      }
-       /*
-        * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
-@@ -396,6 +505,14 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
-        },
- };
-+static struct i2c_board_info __initdata zippy_i2c2_rtc[] = {
-+#if defined(CONFIG_RTC_DRV_DS1307) || defined(CONFIG_RTC_DRV_DS1307_MODULE)
-+      {
-+              I2C_BOARD_INFO("ds1307", 0x68),
-+      },
-+#endif
-+};
-+
- static int __init omap3_beagle_i2c_init(void)
- {
-       omap3_pmic_get_config(&beagle_twldata,
-@@ -406,6 +523,15 @@ static int __init omap3_beagle_i2c_init(void)
-       beagle_twldata.vpll2->constraints.name = "VDVI";
-       omap3_pmic_init("twl4030", &beagle_twldata);
-+
-+      switch (expansion_config.i2c_settings) {
-+      case EXPANSION_I2C_ZIPPY:
-+              omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc));
-+              break;
-+      default:
-+              omap_register_i2c_bus(2, 400, NULL, 0);
-+      }
-+
-       /* Bus 3 is attached to the DVI port where devices like the pico DLP
-        * projector don't work reliably with 400kHz */
-       omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
-@@ -548,10 +674,30 @@ static void __init omap3_beagle_init(void)
-       omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
-       omap3_beagle_init_rev();
-+      if (!strcmp(expansionboard_name, "zippy"))
-+      {
-+              pr_info("Beagle expansionboard: initializing zippy mmc\n");
-+              platform_device_register(&omap_zippy_device);
-+
-+              expansion_config.i2c_settings = EXPANSION_I2C_ZIPPY;
-+              expansion_config.mmc_settings = EXPANSION_MMC_ZIPPY;
-+
-+              omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP, OMAP_PIN_INPUT);
-+              omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
-+      }
-+
-       if (gpio_is_valid(beagle_config.mmc1_gpio_wp))
-               omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
--      mmc[0].caps = beagle_config.mmc_caps;
--      omap_hsmmc_init(mmc);
-+
-+      switch (expansion_config.mmc_settings) {
-+      case EXPANSION_MMC_ZIPPY:
-+              mmc_zippy[0].caps = beagle_config.mmc_caps;
-+              omap_hsmmc_init(mmc_zippy);
-+              break;
-+      default:
-+              mmc[0].caps = beagle_config.mmc_caps;
-+              omap_hsmmc_init(mmc);
-+      }
-       omap3_beagle_i2c_init();
-@@ -566,6 +712,12 @@ static void __init omap3_beagle_init(void)
-       omap_sdrc_init(mt46h32m32lf6_sdrc_params,
-                                 mt46h32m32lf6_sdrc_params);
-+      if (!strcmp(expansionboard_name, "zippy"))
-+      {
-+              pr_info("Beagle expansionboard: initializing enc28j60\n");
-+              omap3beagle_enc28j60_init();
-+      }
-+
-       usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
-       usb_musb_init(NULL);
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch b/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch
deleted file mode 100644 (file)
index b569f92..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-From 45bed17e65e1a83f753896e250f3458654dcb229 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 11 Dec 2012 06:32:15 -0600
-Subject: [PATCH 03/10] Beagle: expansion: add zippy2
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   48 ++++++++++++++++++++++++++++++-
- 1 file changed, 47 insertions(+), 1 deletion(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index b3685ed..74da505 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -276,6 +276,46 @@ static void __init omap3beagle_enc28j60_init(void)
- static inline void __init omap3beagle_enc28j60_init(void) { return; }
- #endif
-+#if IS_ENABLED(CONFIG_KS8851)
-+#include <linux/platform_data/spi-omap2-mcspi.h>
-+#include <linux/spi/spi.h>
-+
-+#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157
-+
-+static struct omap2_mcspi_device_config ks8851_spi_chip_info = {
-+      .turbo_mode     = 0,
-+};
-+
-+static struct spi_board_info omap3beagle_zippy2_spi_board_info[] __initdata = {
-+      {
-+              .modalias               = "ks8851",
-+              .bus_num                = 4,
-+              .chip_select    = 0,
-+              .max_speed_hz   = 36000000,
-+              .controller_data        = &ks8851_spi_chip_info,
-+      },
-+};
-+
-+static void __init omap3beagle_ks8851_init(void)
-+{
-+      if ((gpio_request(OMAP3BEAGLE_GPIO_KS8851_IRQ, "KS8851_IRQ") == 0) &&
-+          (gpio_direction_input(OMAP3BEAGLE_GPIO_KS8851_IRQ) == 0)) {
-+              gpio_export(OMAP3BEAGLE_GPIO_KS8851_IRQ, 0);
-+              omap3beagle_zippy2_spi_board_info[0].irq = gpio_to_irq(OMAP3BEAGLE_GPIO_KS8851_IRQ);
-+              irq_set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
-+      } else {
-+              pr_err("Beagle expansionboard: could not obtain gpio for KS8851_IRQ\n");
-+              return;
-+      }
-+
-+      spi_register_board_info(omap3beagle_zippy2_spi_board_info,
-+                      ARRAY_SIZE(omap3beagle_zippy2_spi_board_info));
-+}
-+
-+#else
-+static inline void __init omap3beagle_ks8851_init(void) { return; }
-+#endif
-+
- static struct mtd_partition omap3beagle_nand_partitions[] = {
-       /* All the partition sizes are listed in terms of NAND block size */
-       {
-@@ -674,7 +714,7 @@ static void __init omap3_beagle_init(void)
-       omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
-       omap3_beagle_init_rev();
--      if (!strcmp(expansionboard_name, "zippy"))
-+      if ((!strcmp(expansionboard_name, "zippy")) || (!strcmp(expansionboard_name, "zippy2")))
-       {
-               pr_info("Beagle expansionboard: initializing zippy mmc\n");
-               platform_device_register(&omap_zippy_device);
-@@ -718,6 +758,12 @@ static void __init omap3_beagle_init(void)
-               omap3beagle_enc28j60_init();
-       }
-+      if (!strcmp(expansionboard_name, "zippy2"))
-+      {
-+              pr_info("Beagle expansionboard: initializing ks_8851\n");
-+              omap3beagle_ks8851_init();
-+      }
-+
-       usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
-       usb_musb_init(NULL);
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch b/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch
deleted file mode 100644 (file)
index 08ace67..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-From 4d9b4e5795e322ed3efed9b8402f604e2e53cc6f Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 11 Dec 2012 06:33:24 -0600
-Subject: [PATCH 04/10] Beagle: expansion: add trainer
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   31 +++++++++++++++++++++++++++++++
- 1 file changed, 31 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 74da505..b5ed547 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -764,6 +764,37 @@ static void __init omap3_beagle_init(void)
-               omap3beagle_ks8851_init();
-       }
-+      if (!strcmp(expansionboard_name, "trainer"))
-+      {
-+              pr_info("Beagle expansionboard: exporting GPIOs 130-141,162 to userspace\n");
-+              gpio_request(130, "sysfs");
-+              gpio_export(130, 1);
-+              gpio_request(131, "sysfs");
-+              gpio_export(131, 1);
-+              gpio_request(132, "sysfs");
-+              gpio_export(132, 1);
-+              gpio_request(133, "sysfs");
-+              gpio_export(133, 1);
-+              gpio_request(134, "sysfs");
-+              gpio_export(134, 1);
-+              gpio_request(135, "sysfs");
-+              gpio_export(135, 1);
-+              gpio_request(136, "sysfs");
-+              gpio_export(136, 1);
-+              gpio_request(137, "sysfs");
-+              gpio_export(137, 1);
-+              gpio_request(138, "sysfs");
-+              gpio_export(138, 1);
-+              gpio_request(139, "sysfs");
-+              gpio_export(139, 1);
-+              gpio_request(140, "sysfs");
-+              gpio_export(140, 1);
-+              gpio_request(141, "sysfs");
-+              gpio_export(141, 1);
-+              gpio_request(162, "sysfs");
-+              gpio_export(162, 1);
-+      }
-+
-       usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
-       usb_musb_init(NULL);
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch b/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch
deleted file mode 100644 (file)
index 8b716ee..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-From a53e7913a95faefde1ee87a7ea048c04b0850066 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 11 Dec 2012 06:42:03 -0600
-Subject: [PATCH 05/10] Beagle: expansion: add CircuitCo ulcd Support
-
-This of a cleanup, squashed both ulcd commits into one:
-
-======================================================================
-
-expansion: add ulcd
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
-
-======================================================================
-
-beagleboard: fix uLCD7 support
-Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
-
-======================================================================
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c          |  136 ++++++++++++++++++++++
- drivers/video/omap2/displays/panel-generic-dpi.c |   27 +++++
- 2 files changed, 163 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 0f9b253..b2807c2 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -118,12 +118,16 @@ static struct {
-       int dvi_pd_gpio;
-       int usr_button_gpio;
-       int mmc_caps;
-+      char *lcd_driver_name;
-+      int lcd_pwren;
- } beagle_config = {
-       .mmc1_gpio_wp = -EINVAL,
-       .usb_pwr_level = 0,
-       .dvi_pd_gpio = -EINVAL,
-       .usr_button_gpio = 4,
-       .mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
-+      .lcd_driver_name = "",
-+      .lcd_pwren = 156,
- };
- static struct gpio omap3_beagle_rev_gpios[] __initdata = {
-@@ -195,6 +199,7 @@ static void __init omap3_beagle_init_rev(void)
- }
- char expansionboard_name[16];
-+char expansionboard2_name[16];
- enum {
-       EXPANSION_MMC_NONE = 0,
-@@ -205,6 +210,7 @@ enum {
- enum {
-       EXPANSION_I2C_NONE = 0,
-       EXPANSION_I2C_ZIPPY,
-+      EXPANSION_I2C_7ULCD,
- };
- static struct {
-@@ -369,9 +375,53 @@ static struct omap_dss_device beagle_tv_device = {
-       .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
- };
-+static int beagle_enable_lcd(struct omap_dss_device *dssdev)
-+{
-+      if (gpio_is_valid(beagle_config.lcd_pwren)) {
-+              pr_info("%s: Enabling LCD\n", __FUNCTION__);
-+              gpio_set_value(beagle_config.lcd_pwren, 0);
-+      } else {
-+              pr_info("%s: Invalid LCD enable GPIO: %d\n",
-+                      __FUNCTION__, beagle_config.lcd_pwren);
-+      }
-+
-+      return 0;
-+}
-+
-+static void beagle_disable_lcd(struct omap_dss_device *dssdev)
-+{
-+      if (gpio_is_valid(beagle_config.lcd_pwren)) {
-+              pr_info("%s: Disabling LCD\n", __FUNCTION__);
-+              gpio_set_value(beagle_config.lcd_pwren, 1);
-+      } else {
-+              pr_info("%s: Invalid LCD enable GPIO: %d\n",
-+                      __FUNCTION__, beagle_config.lcd_pwren);
-+      }
-+
-+      return;
-+}
-+
-+static struct panel_generic_dpi_data lcd_panel = {
-+      .name = "tfc_s9700rtwv35tr-01b",
-+      .platform_enable = beagle_enable_lcd,
-+      .platform_disable = beagle_disable_lcd,
-+};
-+
-+static struct omap_dss_device beagle_lcd_device = {
-+      .type                   = OMAP_DISPLAY_TYPE_DPI,
-+      .name                   = "lcd",
-+      .driver_name            = "generic_dpi_panel",
-+      .phy.dpi.data_lines     = 24,
-+      .platform_enable        = beagle_enable_lcd,
-+      .platform_disable       = beagle_disable_lcd,
-+      .reset_gpio             = -EINVAL,
-+      .data                   = &lcd_panel,
-+};
-+
- static struct omap_dss_device *beagle_dss_devices[] = {
-       &beagle_dvi_device,
-       &beagle_tv_device,
-+      &beagle_lcd_device,
- };
- static struct omap_dss_board_info beagle_dss_data = {
-@@ -553,6 +603,53 @@ static struct i2c_board_info __initdata zippy_i2c2_rtc[] = {
- #endif
- };
-+#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
-+/* Touchscreen */
-+#include <linux/i2c/tsc2007.h>
-+
-+#define OMAP3BEAGLE_TSC2007_GPIO 157
-+
-+static int omap3beagle_tsc2007_get_pendown_state(void)
-+{
-+      return !gpio_get_value(OMAP3BEAGLE_TSC2007_GPIO);
-+}
-+
-+static struct tsc2007_platform_data tsc2007_info = {
-+      .model = 2007,
-+      .x_plate_ohms = 180,
-+      .get_pendown_state = omap3beagle_tsc2007_get_pendown_state,
-+};
-+
-+static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {
-+      {
-+              I2C_BOARD_INFO("tlc59108", 0x40),
-+      },
-+      {
-+              I2C_BOARD_INFO("tsc2007", 0x48),
-+              .platform_data = &tsc2007_info,
-+      },
-+};
-+
-+static void __init omap3beagle_tsc2007_init(void)
-+{
-+      int r;
-+
-+      omap_mux_init_gpio(OMAP3BEAGLE_TSC2007_GPIO, OMAP_PIN_INPUT_PULLUP);
-+
-+      r = gpio_request_one(OMAP3BEAGLE_TSC2007_GPIO, GPIOF_IN, "tsc2007_pen_down");
-+      if (r < 0) {
-+              pr_err("Beagle expansionboard: failed to request GPIO#%d for "
-+              "tsc2007 pen down IRQ\n", OMAP3BEAGLE_TSC2007_GPIO);
-+              return;
-+      }
-+
-+      beagle_i2c2_bbtoys_ulcd[0].irq = gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO);
-+      irq_set_irq_type(gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO), IRQ_TYPE_EDGE_FALLING);
-+}
-+#else
-+static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {};
-+#endif
-+
- static int __init omap3_beagle_i2c_init(void)
- {
-       omap3_pmic_get_config(&beagle_twldata,
-@@ -565,6 +662,10 @@ static int __init omap3_beagle_i2c_init(void)
-       omap3_pmic_init("twl4030", &beagle_twldata);
-       switch (expansion_config.i2c_settings) {
-+      case EXPANSION_I2C_7ULCD:
-+              omap_register_i2c_bus(2, 400,  beagle_i2c2_bbtoys_ulcd,
-+                                                      ARRAY_SIZE(beagle_i2c2_bbtoys_ulcd));
-+              break;
-       case EXPANSION_I2C_ZIPPY:
-               omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc));
-               break;
-@@ -661,6 +762,18 @@ static int __init expansionboard_setup(char *str)
-       return 0;
- }
-+static int __init expansionboard2_setup(char *str)
-+{
-+      if (!machine_is_omap3_beagle())
-+              return 0;
-+
-+      if (!str)
-+              return -EINVAL;
-+      strncpy(expansionboard2_name, str, 16);
-+      pr_info("Beagle expansionboard2: %s\n", expansionboard2_name);
-+      return 0;
-+}
-+
- static int __init beagle_opp_init(void)
- {
-       int r = 0;
-@@ -726,6 +839,20 @@ static void __init omap3_beagle_init(void)
-               omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
-       }
-+      if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
-+      {
-+              int r;
-+              expansion_config.i2c_settings = EXPANSION_I2C_7ULCD;
-+
-+              /* TODO: set lcd_driver_name by command line or device tree */
-+              beagle_config.lcd_driver_name = "tfc_s9700rtwv35tr-01b",
-+              lcd_panel.name = beagle_config.lcd_driver_name;
-+
-+              r = gpio_request_one(beagle_config.lcd_pwren, GPIOF_OUT_INIT_LOW, "LCD power");
-+              if (r < 0)
-+                      pr_err("Beagle expansionboard: Unable to get LCD power enable GPIO\n");
-+      }
-+
-       if (gpio_is_valid(beagle_config.mmc1_gpio_wp))
-               omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
-@@ -795,6 +922,14 @@ static void __init omap3_beagle_init(void)
-               gpio_export(162, 1);
-       }
-+      if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
-+      {
-+      #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
-+              pr_info("Beagle expansionboard: initializing touchscreen: tsc2007\n");
-+              omap3beagle_tsc2007_init();
-+      #endif
-+      }
-+
-       usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
-       usb_musb_init(NULL);
-@@ -816,6 +951,7 @@ static void __init omap3_beagle_init(void)
- }
- early_param("buddy", expansionboard_setup);
-+early_param("buddy2", expansionboard2_setup);
- MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
-       /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
-diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c
-index 97363f7..614031f 100644
---- a/drivers/video/omap2/displays/panel-generic-dpi.c
-+++ b/drivers/video/omap2/displays/panel-generic-dpi.c
-@@ -515,6 +515,33 @@ static struct panel_config generic_dpi_panels[] = {
-               },
-               .name                   = "primeview_pd104slf",
-       },
-+
-+      /* ThreeFiveCorp S9700RTWV35TR-01B */
-+      {
-+              {
-+                      .x_res          = 800,
-+                      .y_res          = 480,
-+
-+                      .pixel_clock    = 30000,
-+
-+                      .hsw            = 49,
-+                      .hfp            = 41,
-+                      .hbp            = 40,
-+
-+                      .vsw            = 4,
-+                      .vfp            = 14,
-+                      .vbp            = 29,
-+
-+                      .vsync_level    = OMAPDSS_SIG_ACTIVE_LOW,
-+                      .hsync_level    = OMAPDSS_SIG_ACTIVE_LOW,
-+                      .data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE,
-+                      .de_level       = OMAPDSS_SIG_ACTIVE_HIGH,
-+                      .sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES,
-+              },
-+              .power_on_delay         = 50,
-+              .power_off_delay        = 100,
-+              .name                   = "tfc_s9700rtwv35tr-01b",
-+      },
- };
- struct panel_drv_data {
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch b/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch
deleted file mode 100644 (file)
index 88d48af..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-From f78cd93d767cd75969c4661723cfce46071e5b1b Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 11 Dec 2012 06:48:52 -0600
-Subject: [PATCH 06/10] Beagle: expansion: add wifi
-
-build fixes from Pantelis Antoniou <panto@antoniou-consulting.com>
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |  119 +++++++++++++++++++++++++++++++
- 1 file changed, 119 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index a8de97e..2322d6c 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -221,6 +221,73 @@ static struct {
-       .i2c_settings = EXPANSION_I2C_NONE,
- };
-+#if IS_ENABLED(CONFIG_WL12XX)
-+#include <linux/regulator/fixed.h>
-+#include <linux/ti_wilink_st.h>
-+#include <linux/wl12xx.h>
-+
-+#define OMAP_BEAGLE_WLAN_EN_GPIO    (139)
-+#define OMAP_BEAGLE_BT_EN_GPIO      (138)
-+#define OMAP_BEAGLE_WLAN_IRQ_GPIO   (137)
-+#define OMAP_BEAGLE_FM_EN_BT_WU     (136)
-+
-+struct wl12xx_platform_data omap_beagle_wlan_data __initdata = {
-+      .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
-+};
-+
-+static struct ti_st_plat_data wilink_platform_data = {
-+      .nshutdown_gpio = OMAP_BEAGLE_BT_EN_GPIO,
-+      .dev_name               = "/dev/ttyO1",
-+      .flow_cntrl             = 1,
-+      .baud_rate              = 3000000,
-+      .chip_enable    = NULL,
-+      .suspend                = NULL,
-+      .resume                 = NULL,
-+};
-+
-+static struct platform_device wl12xx_device = {
-+              .name           = "kim",
-+              .id                     = -1,
-+              .dev.platform_data = &wilink_platform_data,
-+};
-+
-+static struct platform_device btwilink_device = {
-+      .name   = "btwilink",
-+      .id     = -1,
-+};
-+#endif
-+
-+static struct regulator_consumer_supply beagle_vmmc2_supply =
-+      REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
-+
-+static struct regulator_init_data beagle_vmmc2 = {
-+      .constraints = {
-+              .valid_ops_mask = REGULATOR_CHANGE_STATUS,
-+      },
-+      .num_consumer_supplies = 1,
-+      .consumer_supplies = &beagle_vmmc2_supply,
-+};
-+
-+#if IS_ENABLED(CONFIG_WL12XX)
-+static struct fixed_voltage_config beagle_vwlan = {
-+      .supply_name = "vwl1271",
-+      .microvolts = 1800000,  /* 1.8V */
-+      .gpio = OMAP_BEAGLE_WLAN_EN_GPIO,
-+      .startup_delay = 70000, /* 70ms */
-+      .enable_high = 1,
-+      .enabled_at_boot = 0,
-+      .init_data = &beagle_vmmc2,
-+};
-+
-+static struct platform_device omap_vwlan_device = {
-+      .name           = "reg-fixed-voltage",
-+      .id             = 1,
-+      .dev = {
-+              .platform_data = &beagle_vwlan,
-+      },
-+};
-+#endif
-+
- //rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper..
- static struct fixed_voltage_config beagle_vzippy = {
-       .supply_name = "vzippy",
-@@ -459,6 +526,26 @@ static struct omap2_hsmmc_info mmc_zippy[] = {
-       },
-       {}      /* Terminator */
- };
-+
-+static struct omap2_hsmmc_info mmcbbt[] = {
-+      {
-+              .mmc            = 1,
-+              .caps           = MMC_CAP_4_BIT_DATA,
-+              .gpio_wp        = -EINVAL,
-+              .deferred       = true,
-+      },
-+      {
-+              .name           = "wl1271",
-+              .mmc            = 2,
-+              .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
-+              .gpio_wp        = -EINVAL,
-+              .gpio_cd        = -EINVAL,
-+              .ocr_mask       = MMC_VDD_165_195,
-+              .nonremovable   = true,
-+      },
-+      {}      /* Terminator */
-+};
-+
- static struct regulator_consumer_supply beagle_vmmc1_supply[] = {
-       REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
- };
-@@ -490,6 +577,13 @@ static int beagle_twl_gpio_setup(struct device *dev,
-       int r;
-       switch (expansion_config.mmc_settings) {
-+      case EXPANSION_MMC_WIFI:
-+              mmcbbt[0].gpio_wp = beagle_config.mmc1_gpio_wp;
-+              /* gpio + 0 is "mmc0_cd" (input/IRQ) */
-+              mmcbbt[0].gpio_cd = gpio + 0;
-+
-+              omap_hsmmc_late_init(mmcbbt);
-+              break;
-       case EXPANSION_MMC_ZIPPY:
-               mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp;
-               /* gpio + 0 is "mmc0_cd" (input/IRQ) */
-@@ -839,6 +933,13 @@ static void __init omap3_beagle_init(void)
-               omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
-       }
-+      if (!strcmp(expansionboard_name, "bbtoys-wifi"))
-+      {
-+      #if IS_ENABLED(CONFIG_WL12XX)
-+              expansion_config.mmc_settings = EXPANSION_MMC_WIFI;
-+      #endif
-+      }
-+
-       if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
-       {
-               int r;
-@@ -857,6 +958,10 @@ static void __init omap3_beagle_init(void)
-               omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
-       switch (expansion_config.mmc_settings) {
-+      case EXPANSION_MMC_WIFI:
-+              mmcbbt[0].caps = beagle_config.mmc_caps;
-+              omap_hsmmc_init(mmcbbt);
-+              break;
-       case EXPANSION_MMC_ZIPPY:
-               mmc_zippy[0].caps = beagle_config.mmc_caps;
-               omap_hsmmc_init(mmc_zippy);
-@@ -922,6 +1027,20 @@ static void __init omap3_beagle_init(void)
-               gpio_export(162, 1);
-       }
-+      if (!strcmp(expansionboard_name, "bbtoys-wifi"))
-+      {
-+      #if IS_ENABLED(CONFIG_WL12XX)
-+              omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO);
-+              if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
-+                      pr_err("error setting wl12xx data\n");
-+              pr_info("Beagle expansionboard: registering wl12xx bt platform device\n");
-+              platform_device_register(&wl12xx_device);
-+              platform_device_register(&btwilink_device);
-+              pr_info("Beagle expansionboard: registering wl12xx wifi platform device\n");
-+              platform_device_register(&omap_vwlan_device);
-+      #endif
-+      }
-+
-       if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
-       {
-       #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch b/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch
deleted file mode 100644 (file)
index a006c7b..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-From 0c361e9db10f9ec3598bf062a605a451857ee06e Mon Sep 17 00:00:00 2001
-From: Bas van der Doorn <bas@doornvd.com>
-Date: Tue, 11 Dec 2012 06:52:22 -0600
-Subject: [PATCH 07/10] Beagle: expansion: add beaglefpga
-
-Added SPI dev and McBSP 3 mux when FPGA is detected
-
-Signed-off-by: Bas van der Doorn <bas@doornvd.com>
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   76 +++++++++++++++++++++++++++++++
- 1 file changed, 76 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 2322d6c..c257f3c 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -44,6 +44,7 @@
- #include <asm/mach/arch.h>
- #include <asm/mach/map.h>
- #include <asm/mach/flash.h>
-+#include <linux/spi/spi.h>
- #include <video/omapdss.h>
- #include <video/omap-panel-data.h>
-@@ -916,6 +917,68 @@ static int __init beagle_opp_init(void)
- }
- omap_device_initcall(beagle_opp_init);
-+static void __init omap3_beagle_config_mcspi3_mux(void)
-+{
-+      /* NOTE: Clock pins need to be in input mode */
-+      omap_mux_init_signal("sdmmc2_clk.mcspi3_clk", OMAP_PIN_INPUT);
-+      omap_mux_init_signal("sdmmc2_cmd.mcspi3_simo", OMAP_PIN_OUTPUT);
-+      omap_mux_init_signal("sdmmc2_dat0.mcspi3_somi", OMAP_PIN_INPUT_PULLUP);
-+      omap_mux_init_signal("sdmmc2_dat2.mcspi3_cs1", OMAP_PIN_OUTPUT);
-+      omap_mux_init_signal("sdmmc2_dat3.mcspi3_cs0", OMAP_PIN_OUTPUT);
-+}
-+
-+static void __init omap3_beagle_config_mcspi4_mux(void)
-+{
-+      /* NOTE: Clock pins need to be in input mode */
-+      omap_mux_init_signal("mcbsp1_clkr.mcspi4_clk", OMAP_PIN_INPUT);
-+      omap_mux_init_signal("mcbsp1_dx.mcspi4_simo", OMAP_PIN_OUTPUT);
-+      omap_mux_init_signal("mcbsp1_dr.mcspi4_somi", OMAP_PIN_INPUT_PULLUP);
-+      omap_mux_init_signal("mcbsp1_fsx.mcspi4_cs0", OMAP_PIN_OUTPUT);
-+}
-+
-+static void __init omap3_beagle_config_mcbsp3_mux(void)
-+{
-+      omap_mux_init_signal("mcbsp3_fsx.uart2_rx", OMAP_PIN_INPUT);
-+      omap_mux_init_signal("uart2_cts.mcbsp3_dx", OMAP_PIN_OUTPUT);
-+      omap_mux_init_signal("uart2_rts.mcbsp3_dr", OMAP_PIN_INPUT);
-+      /* NOTE: Clock pins need to be in input mode */
-+      omap_mux_init_signal("uart2_tx.mcbsp3_clkx", OMAP_PIN_INPUT);
-+}
-+
-+static void __init omap3_beagle_config_fpga_mux(void)
-+{
-+      omap3_beagle_config_mcbsp3_mux();
-+      omap3_beagle_config_mcspi3_mux();
-+      omap3_beagle_config_mcspi4_mux();
-+}
-+
-+static struct spi_board_info beagle_mcspi_board_info[] = {
-+      /* spi 3.0 */
-+      {
-+              .modalias       = "spidev",
-+              .max_speed_hz   = 48000000, //48 Mbps
-+              .bus_num        = 3,
-+              .chip_select    = 0,
-+              .mode = SPI_MODE_1,
-+      },
-+      /* spi 3.1 */
-+      {
-+              .modalias       = "spidev",
-+              .max_speed_hz   = 48000000, //48 Mbps
-+              .bus_num        = 3,
-+              .chip_select    = 1,
-+              .mode = SPI_MODE_1,
-+      },
-+      /* spi 4.0 */
-+      {
-+              .modalias       = "spidev",
-+              .max_speed_hz   = 48000000, //48 Mbps
-+              .bus_num        = 4,
-+              .chip_select    = 0,
-+              .mode = SPI_MODE_1,
-+      },
-+};
-+
- static void __init omap3_beagle_init(void)
- {
-       omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
-@@ -1041,6 +1104,19 @@ static void __init omap3_beagle_init(void)
-       #endif
-       }
-+      if (!strcmp(expansionboard_name, "beaglefpga"))
-+      {
-+      #if IS_ENABLED(CONFIG_SPI_SPIDEV)
-+              pr_info("Beagle expansionboard: enabling SPIdev for McSPI3/4 and pin muxing for McBSP3 slave mode\n");
-+
-+              /* FPGA pin settings configure McSPI 3, McSPI 4 and McBSP 3 */
-+              omap3_beagle_config_fpga_mux();
-+
-+              /* register McSPI 3 and McSPI 4 for FPGA programming and control */
-+              spi_register_board_info(beagle_mcspi_board_info, ARRAY_SIZE(beagle_mcspi_board_info));
-+      #endif
-+      }
-+
-       if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
-       {
-       #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch b/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch
deleted file mode 100644 (file)
index 23cc525..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-From 5258354e6e4d0b55334099868668a166d967c1d2 Mon Sep 17 00:00:00 2001
-From: Russell Hay <russell.hay@gmail.com>
-Date: Tue, 11 Dec 2012 06:53:58 -0600
-Subject: [PATCH 08/10] Beagle: expansion: add spidev
-
-Signed-off-by: Russell Hay <russell.hay@gmail.com>
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index c257f3c..3e0313ee 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -1117,6 +1117,16 @@ static void __init omap3_beagle_init(void)
-       #endif
-       }
-+      if (!strcmp(expansionboard_name, "spidev"))
-+      {
-+      #if IS_ENABLED(CONFIG_SPI_SPIDEV)
-+              pr_info("Beagle expansionboard: registering spidev\n");
-+              omap3_beagle_config_mcspi3_mux();
-+              omap3_beagle_config_mcspi4_mux();
-+              spi_register_board_info(beagle_mcspi_board_info, ARRAY_SIZE(beagle_mcspi_board_info));
-+      #endif
-+      }
-+
-       if (!strcmp(expansionboard2_name, "bbtoys-ulcd"))
-       {
-       #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007)
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch b/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch
deleted file mode 100644 (file)
index 28d2d4a..0000000
+++ /dev/null
@@ -1,217 +0,0 @@
-From cc6ced0a1cbaea65a507ec3fe543a5b98d760d23 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 11 Dec 2012 06:58:15 -0600
-Subject: [PATCH 09/10] Beagle: expansion: add Aptina li5m03 camera
-
-Based on:
-https://github.com/Aptina/BeagleBoard-xM/blob/master/tools/0266-Adding-MT9P031-Support-files.patch
-
-And on Max Galemin's patch
-https://github.com/MaxGalemin/buildroot/blob/master/board/beagleboard/xm/kernel-patches/linux-0003-Add-support-for-MT9P031-Aptina-image-sensor-driver.patch
-
-And Koen Kooi Previous work's
-https://github.com/beagleboard/kernel/blob/beagleboard-3.2/patches/camera/0003-beagleboard-fix-i2c2-init.patch
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |  142 +++++++++++++++++++++++++++++++
- 1 file changed, 142 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 3e0313ee..4fb5eae 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -201,6 +201,7 @@ static void __init omap3_beagle_init_rev(void)
- char expansionboard_name[16];
- char expansionboard2_name[16];
-+char camera_name[16];
- enum {
-       EXPANSION_MMC_NONE = 0,
-@@ -555,6 +556,14 @@ static struct regulator_consumer_supply beagle_vsim_supply[] = {
-       REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"),
- };
-+static struct regulator_consumer_supply beagle_vaux3_supply = {
-+      .supply         = "cam_1v8",
-+};
-+
-+static struct regulator_consumer_supply beagle_vaux4_supply = {
-+      .supply         = "cam_2v8",
-+};
-+
- static struct gpio_led gpio_leds[];
- /* PHY's VCC regulator might be added later, so flag that we need it */
-@@ -677,11 +686,43 @@ static struct regulator_init_data beagle_vsim = {
-       .consumer_supplies      = beagle_vsim_supply,
- };
-+/* VAUX3 for CAM_1V8 */
-+static struct regulator_init_data beagle_vaux3 = {
-+      .constraints = {
-+              .min_uV                 = 1800000,
-+              .max_uV                 = 1800000,
-+              .apply_uV               = true,
-+              .valid_modes_mask       = REGULATOR_MODE_NORMAL
-+                                      | REGULATOR_MODE_STANDBY,
-+              .valid_ops_mask         = REGULATOR_CHANGE_MODE
-+                                      | REGULATOR_CHANGE_STATUS,
-+      },
-+      .num_consumer_supplies  = 1,
-+      .consumer_supplies      = &beagle_vaux3_supply,
-+};
-+
-+/* VAUX4 for CAM_2V8 */
-+static struct regulator_init_data beagle_vaux4 = {
-+      .constraints = {
-+              .min_uV                 = 1800000,
-+              .max_uV                 = 1800000,
-+              .apply_uV               = true,
-+              .valid_modes_mask       = REGULATOR_MODE_NORMAL
-+                                      | REGULATOR_MODE_STANDBY,
-+              .valid_ops_mask         = REGULATOR_CHANGE_MODE
-+                                      | REGULATOR_CHANGE_STATUS,
-+      },
-+      .num_consumer_supplies  = 1,
-+      .consumer_supplies      = &beagle_vaux4_supply,
-+};
-+
- static struct twl4030_platform_data beagle_twldata = {
-       /* platform_data for children goes here */
-       .gpio           = &beagle_gpio_data,
-       .vmmc1          = &beagle_vmmc1,
-       .vsim           = &beagle_vsim,
-+      .vaux3          = &beagle_vaux3,
-+      .vaux4          = &beagle_vaux4,
- };
- static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
-@@ -745,6 +786,61 @@ static void __init omap3beagle_tsc2007_init(void)
- static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {};
- #endif
-+#if IS_ENABLED(CONFIG_VIDEO_MT9P031)
-+/* needed for: omap3_beagle_late_initcall */
-+#include "devices.h"
-+#include <media/omap3isp.h>
-+#include <media/mt9p031.h>
-+/* needed for: v4l2_dev_to_isp_device */
-+#include "../../../drivers/media/platform/omap3isp/isp.h"
-+
-+#define MT9P031_RESET_GPIO    98
-+#define MT9P031_EXT_FREQ      21000000
-+#define MT9P031_TARGET_FREQ   48000000
-+
-+#define MT9P031_I2C_ADDR      0x48
-+#define MT9P031_I2C_BUS               2
-+
-+static struct regulator *reg_1v8, *reg_2v8;
-+
-+static struct mt9p031_platform_data beagle_mt9p031_platform_data = {
-+      .reset          = MT9P031_RESET_GPIO,
-+      .ext_freq       = MT9P031_EXT_FREQ,
-+      .target_freq    = MT9P031_TARGET_FREQ,
-+};
-+
-+static struct i2c_board_info mt9p031_camera_i2c_device = {
-+      I2C_BOARD_INFO("mt9p031", MT9P031_I2C_ADDR),
-+      .platform_data = &beagle_mt9p031_platform_data,
-+};
-+
-+static struct isp_subdev_i2c_board_info mt9p031_camera_subdevs[] = {
-+      {
-+              .board_info = &mt9p031_camera_i2c_device,
-+              .i2c_adapter_id = MT9P031_I2C_BUS,
-+      },
-+      { NULL, 0, },
-+};
-+
-+static struct isp_v4l2_subdevs_group beagle_camera_subdevs[] = {
-+      {
-+              .subdevs = mt9p031_camera_subdevs,
-+              .interface = ISP_INTERFACE_PARALLEL,
-+              .bus = {
-+                      .parallel = {
-+                              .data_lane_shift = 0,
-+                              .clk_pol = 1,
-+                      }
-+              },
-+      },
-+      { },
-+};
-+
-+static struct isp_platform_data beagle_isp_platform_data = {
-+      .subdevs = beagle_camera_subdevs,
-+};
-+#endif
-+
- static int __init omap3_beagle_i2c_init(void)
- {
-       omap3_pmic_get_config(&beagle_twldata,
-@@ -869,6 +965,18 @@ static int __init expansionboard2_setup(char *str)
-       return 0;
- }
-+static int __init camera_setup(char *str)
-+{
-+      if (!machine_is_omap3_beagle())
-+              return 0;
-+
-+      if (!str)
-+              return -EINVAL;
-+      strncpy(camera_name, str, 16);
-+      pr_info("Beagle camera: %s\n", camera_name);
-+      return 0;
-+}
-+
- static int __init beagle_opp_init(void)
- {
-       int r = 0;
-@@ -1155,8 +1263,42 @@ static void __init omap3_beagle_init(void)
-       pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup));
- }
-+static int __init omap3_beagle_late_initcall(void)
-+{
-+      if (!machine_is_omap3_beagle())
-+              return 0;
-+
-+      if (!cpu_is_omap3630())
-+              return 0;
-+
-+#if IS_ENABLED(CONFIG_VIDEO_MT9P031)
-+      if ((!strcmp(camera_name, "lbcm5m1")) || (!strcmp(camera_name, "li5m03")))
-+      {
-+              pr_info("Beagle camera: MT9P031 init\n");
-+
-+              reg_1v8 = regulator_get(NULL, "cam_1v8");
-+              if (IS_ERR(reg_1v8))
-+                      pr_err("%s: cannot get cam_1v8 regulator\n", __func__);
-+              else
-+                      regulator_enable(reg_1v8);
-+
-+              reg_2v8 = regulator_get(NULL, "cam_2v8");
-+              if (IS_ERR(reg_2v8))
-+                      pr_err("%s: cannot get cam_2v8 regulator\n", __func__);
-+              else
-+                      regulator_enable(reg_2v8);
-+
-+              omap3_init_camera(&beagle_isp_platform_data);
-+      }
-+#endif
-+      return 0;
-+}
-+
- early_param("buddy", expansionboard_setup);
- early_param("buddy2", expansionboard2_setup);
-+early_param("camera", camera_setup);
-+
-+late_initcall(omap3_beagle_late_initcall);
- MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
-       /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch b/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch
deleted file mode 100644 (file)
index 04a3656..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-From f2e2294733d926e627dcda6425f58611b185c7fc Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 11 Dec 2012 07:02:40 -0600
-Subject: [PATCH 10/10] Beagle: expansion: add LSR COM6L Adapter Board
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   60 ++++++++++++++++++++++++++++---
- 1 file changed, 55 insertions(+), 5 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 0ac1b49..5a7e7b5 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -202,6 +202,7 @@ static void __init omap3_beagle_init_rev(void)
- char expansionboard_name[16];
- char expansionboard2_name[16];
- char camera_name[16];
-+char wl12xx_name[16];
- enum {
-       EXPANSION_MMC_NONE = 0,
-@@ -237,6 +238,10 @@ struct wl12xx_platform_data omap_beagle_wlan_data __initdata = {
-       .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
- };
-+struct wl12xx_platform_data omap_beagle_wlan_data_26mhz __initdata = {
-+      .board_ref_clock = WL12XX_REFCLOCK_26, /* 26 MHz */
-+};
-+
- static struct ti_st_plat_data wilink_platform_data = {
-       .nshutdown_gpio = OMAP_BEAGLE_BT_EN_GPIO,
-       .dev_name               = "/dev/ttyO1",
-@@ -987,6 +992,18 @@ static int __init camera_setup(char *str)
-       return 0;
- }
-+static int __init wl12xx_setup(char *str)
-+{
-+      if (!machine_is_omap3_beagle())
-+              return 0;
-+
-+      if (!str)
-+              return -EINVAL;
-+      strncpy(wl12xx_name, str, 16);
-+      pr_info("Beagle wl12xx clk: %s\n", wl12xx_name);
-+      return 0;
-+}
-+
- static int __init beagle_opp_init(void)
- {
-       int r = 0;
-@@ -1114,9 +1131,29 @@ static void __init omap3_beagle_init(void)
-               omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT);
-       }
--      if (!strcmp(expansionboard_name, "bbtoys-wifi"))
-+      if ((!strcmp(expansionboard_name, "bbtoys-wifi")) || (!strcmp(expansionboard_name, "lsr-com6l-adpt")))
-       {
-       #if IS_ENABLED(CONFIG_WL12XX)
-+              pr_info("Beagle expansion: wl12xx: setting up gpio pinmux\n");
-+
-+              omap_mux_init_gpio(OMAP_BEAGLE_FM_EN_BT_WU, OMAP_PIN_OUTPUT);
-+              omap_mux_init_gpio(OMAP_BEAGLE_BT_EN_GPIO, OMAP_PIN_OUTPUT);
-+              omap_mux_init_gpio(OMAP_BEAGLE_WLAN_EN_GPIO, OMAP_PIN_OUTPUT);
-+
-+              omap_mux_init_gpio(OMAP_BEAGLE_WLAN_IRQ_GPIO, OMAP_PIN_INPUT_PULLUP);
-+
-+              /* WLAN SDIO: MMC2 CLK */
-+              omap_mux_init_signal("sdmmc2_clk.sdmmc2_clk", OMAP_PIN_INPUT_PULLUP);
-+
-+              /* WLAN SDIO: MMC2 CMD */
-+              omap_mux_init_signal("sdmmc2_cmd.sdmmc2_cmd", OMAP_PIN_INPUT_PULLUP);
-+
-+              /* WLAN SDIO: MMC2 DAT[0-3] */
-+              omap_mux_init_signal("sdmmc2_dat0.sdmmc2_dat0", OMAP_PIN_INPUT_PULLUP);
-+              omap_mux_init_signal("sdmmc2_dat1.sdmmc2_dat1", OMAP_PIN_INPUT_PULLUP);
-+              omap_mux_init_signal("sdmmc2_dat2.sdmmc2_dat2", OMAP_PIN_INPUT_PULLUP);
-+              omap_mux_init_signal("sdmmc2_dat3.sdmmc2_dat3", OMAP_PIN_INPUT_PULLUP);
-+
-               expansion_config.mmc_settings = EXPANSION_MMC_WIFI;
-       #endif
-       }
-@@ -1208,12 +1245,24 @@ static void __init omap3_beagle_init(void)
-               gpio_export(162, 1);
-       }
--      if (!strcmp(expansionboard_name, "bbtoys-wifi"))
-+      if ((!strcmp(expansionboard_name, "bbtoys-wifi")) || (!strcmp(expansionboard_name, "lsr-com6l-adpt")))
-       {
-       #if IS_ENABLED(CONFIG_WL12XX)
--              omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO);
--              if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
--                      pr_err("error setting wl12xx data\n");
-+              pr_info("Beagle expansionboard: initializing wl12xx platform\n");
-+
-+              if (!strcmp(wl12xx_name, "wl12xx_26mhz")) {
-+                      pr_info("wl12xx: 26Mhz reference clock (TiWi5)\n");
-+                      omap_beagle_wlan_data_26mhz.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO);
-+                      if (wl12xx_set_platform_data(&omap_beagle_wlan_data_26mhz))
-+                              pr_err("error setting wl12xx data\n");
-+              } else {
-+                      pr_info("wl12xx: 38.4Mhz reference clock (TiWi2/TiWi-BLE)\n");
-+                      pr_info("wl12xx: for (TiWi5) support pass kernel [wl12xx_clk=wl12xx_26mhz]\n");
-+                      omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO);
-+                      if (wl12xx_set_platform_data(&omap_beagle_wlan_data))
-+                              pr_err("error setting wl12xx data\n");
-+              }
-+
-               pr_info("Beagle expansionboard: registering wl12xx bt platform device\n");
-               platform_device_register(&wl12xx_device);
-               platform_device_register(&btwilink_device);
-@@ -1307,6 +1356,7 @@ static int __init omap3_beagle_late_initcall(void)
- early_param("buddy", expansionboard_setup);
- early_param("buddy2", expansionboard2_setup);
- early_param("camera", camera_setup);
-+early_param("wl12xx_clk", wl12xx_setup);
- late_initcall(omap3_beagle_late_initcall);
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch b/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch
deleted file mode 100644 (file)
index a8edc77..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-From 89eb49ac0268518799984fa035ac3fea0ae758ec Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Mon, 21 Jan 2013 11:52:20 -0600
-Subject: [PATCH 11/11] Beagle: expansion: LSR COM6L Adapter Board also
- initialize the 24c256 eeprom
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 5a7e7b5..6797488 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -39,6 +39,7 @@
- #include <linux/regulator/machine.h>
- #include <linux/regulator/fixed.h>
- #include <linux/i2c/twl.h>
-+#include <linux/i2c/at24.h>
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -214,6 +215,7 @@ enum {
-       EXPANSION_I2C_NONE = 0,
-       EXPANSION_I2C_ZIPPY,
-       EXPANSION_I2C_7ULCD,
-+      EXPANSION_I2C_COM6L,
- };
- static struct {
-@@ -856,6 +858,20 @@ static struct isp_platform_data beagle_isp_platform_data = {
- };
- #endif
-+static struct at24_platform_data beagle_at24_eeprom_info = {
-+      .byte_len       = (256*1024) / 8,
-+      .page_size      = 64,
-+      .flags          = AT24_FLAG_ADDR16,
-+      .context        = (void *)NULL,
-+};
-+
-+static struct i2c_board_info __initdata com6l_adpt_eeprom[] = {
-+      {
-+              I2C_BOARD_INFO("24c256", 0x50),
-+              .platform_data  = &beagle_at24_eeprom_info,
-+      },
-+};
-+
- static int __init omap3_beagle_i2c_init(void)
- {
-       omap3_pmic_get_config(&beagle_twldata,
-@@ -875,6 +891,9 @@ static int __init omap3_beagle_i2c_init(void)
-       case EXPANSION_I2C_ZIPPY:
-               omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc));
-               break;
-+      case EXPANSION_I2C_COM6L:
-+              omap_register_i2c_bus(2, 400, com6l_adpt_eeprom, ARRAY_SIZE(com6l_adpt_eeprom));
-+              break;
-       default:
-               omap_register_i2c_bus(2, 400, NULL, 0);
-       }
-@@ -1155,6 +1174,7 @@ static void __init omap3_beagle_init(void)
-               omap_mux_init_signal("sdmmc2_dat3.sdmmc2_dat3", OMAP_PIN_INPUT_PULLUP);
-               expansion_config.mmc_settings = EXPANSION_MMC_WIFI;
-+              expansion_config.i2c_settings = EXPANSION_I2C_COM6L;
-       #endif
-       }
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/beagle/expansion/0011-WIP-Beagle-expansion-extend-spidev-to-uart2.patch b/src/patches/kernel/omap/beagle/expansion/0011-WIP-Beagle-expansion-extend-spidev-to-uart2.patch
deleted file mode 100644 (file)
index 2039e4a..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-From d78f1a01cc52ebad5d59edad772f2b403bfe67bd Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Wed, 12 Dec 2012 11:34:29 -0600
-Subject: [PATCH 11/11] WIP: Beagle: expansion: extend spidev to uart2
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap3beagle.c |   12 +++++++++++-
- 1 file changed, 11 insertions(+), 1 deletion(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
-index 4fa880a..e4cfd5f 100644
---- a/arch/arm/mach-omap2/board-omap3beagle.c
-+++ b/arch/arm/mach-omap2/board-omap3beagle.c
-@@ -1162,6 +1162,16 @@ static void __init omap3_beagle_init(void)
-       if (gpio_is_valid(beagle_config.dvi_pd_gpio))
-               omap_mux_init_gpio(beagle_config.dvi_pd_gpio, OMAP_PIN_OUTPUT);
-       omap_display_init(&beagle_dss_data);
-+
-+      if (!strcmp(expansionboard_name, "spidev"))
-+      {
-+              pr_info("Beagle expansion: spidev: enable uart2/ttyO1\n");
-+              omap_mux_init_signal("uart2_tx.uart2_tx", OMAP_PIN_OUTPUT);
-+              omap_mux_init_signal("uart2_rts.uart2_rts", OMAP_PIN_OUTPUT);
-+              omap_mux_init_signal("uart2_cts.uart2_cts", OMAP_PIN_INPUT);
-+              omap_mux_init_signal("mcbsp3_fsx.uart2_rx", OMAP_PIN_INPUT);
-+      }
-+
-       omap_serial_init();
-       omap_sdrc_init(mt46h32m32lf6_sdrc_params,
-                                 mt46h32m32lf6_sdrc_params);
-@@ -1248,7 +1258,7 @@ static void __init omap3_beagle_init(void)
-       if (!strcmp(expansionboard_name, "spidev"))
-       {
--              pr_info("Beagle expansionboard: registering spidev\n");
-+              pr_info("Beagle expansionboard: spidev: enabling spi3/spi4\n");
-               omap3_beagle_config_mcspi3_mux();
-               omap3_beagle_config_mcspi4_mux();
-               spi_register_board_info(beagle_mcspi_board_info, ARRAY_SIZE(beagle_mcspi_board_info));
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch b/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch
deleted file mode 100644 (file)
index de0e84b..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-From a3abd1593e381deb4b1f358a55069988996eeae4 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 2 Aug 2011 21:55:34 -0500
-Subject: [PATCH 1/2] panda: fix wl12xx regulator
-
-pulled from: http://elinux.org/Panda_How_to_kernel_3_0_rel
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/twl-common.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c
-index e49b40b..0fd1a70 100644
---- a/arch/arm/mach-omap2/twl-common.c
-+++ b/arch/arm/mach-omap2/twl-common.c
-@@ -360,6 +360,7 @@ static struct regulator_init_data omap4_vusb_idata = {
- static struct regulator_init_data omap4_clk32kg_idata = {
-       .constraints = {
-               .valid_ops_mask         = REGULATOR_CHANGE_STATUS,
-+              .always_on              = true,
-       },
- };
--- 
-1.7.7.6
-
diff --git a/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch b/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch
deleted file mode 100644 (file)
index 694bc36..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-From 8de5d11f076ee25182df805ab78e0823ce4dd2be Mon Sep 17 00:00:00 2001
-From: Ricardo Salveti de Araujo <ricardo.salveti@linaro.org>
-Date: Tue, 25 Oct 2011 10:06:39 +0200
-Subject: [PATCH 2/2] ti-st/st-kim: fixing firmware path
-
-Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@linaro.org>
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- drivers/misc/ti-st/st_kim.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
-index 9ff942a..f673464 100644
---- a/drivers/misc/ti-st/st_kim.c
-+++ b/drivers/misc/ti-st/st_kim.c
-@@ -244,7 +244,7 @@ static long read_local_version(struct kim_data_s *kim_gdata, char *bts_scr_name)
-       if (version & 0x8000)
-               maj_ver |= 0x0008;
--      sprintf(bts_scr_name, "TIInit_%d.%d.%d.bts", chip, maj_ver, min_ver);
-+      sprintf(bts_scr_name, "ti-connectivity/TIInit_%d.%d.%d.bts", chip, maj_ver, min_ver);
-       /* to be accessed later via sysfs entry */
-       kim_gdata->version.full = version;
-@@ -287,7 +287,7 @@ static long download_firmware(struct kim_data_s *kim_gdata)
-       long len = 0;
-       unsigned char *ptr = NULL;
-       unsigned char *action_ptr = NULL;
--      unsigned char bts_scr_name[30] = { 0 }; /* 30 char long bts scr name? */
-+      unsigned char bts_scr_name[50] = { 0 }; /* 50 char long bts scr name? */
-       int wr_room_space;
-       int cmd_size;
-       unsigned long timeout;
--- 
-1.7.7.6
-
diff --git a/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch b/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch
deleted file mode 100644 (file)
index 9369852..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-From 3304f2feba4999fc1013911f0cf0d9acc33a0117 Mon Sep 17 00:00:00 2001
-From: Adrien Ferre <ferre.adrien@gmail.com>
-Date: Mon, 25 Mar 2013 12:00:38 -0500
-Subject: [PATCH 3/3] Panda: expansion: add spidev
-
-I've made a patch to enable spidev on pandaboards using buddy=spidev just like for beagle.
-
-https://github.com/RobertCNelson/stable-kernel/issues/22
-
-Signed-off-by: Adrien Ferre <ferre.adrien@gmail.com>
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap4panda.c |   43 ++++++++++++++++++++++++++++++++
- 1 file changed, 43 insertions(+)
-
-diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
-index 1e2c75e..3563f86 100644
---- a/arch/arm/mach-omap2/board-omap4panda.c
-+++ b/arch/arm/mach-omap2/board-omap4panda.c
-@@ -22,6 +22,7 @@
- #include <linux/clk.h>
- #include <linux/io.h>
- #include <linux/leds.h>
-+#include <linux/irq.h>
- #include <linux/gpio.h>
- #include <linux/usb/otg.h>
- #include <linux/i2c/twl.h>
-@@ -35,6 +36,7 @@
- #include <linux/wl12xx.h>
- #include <linux/irqchip/arm-gic.h>
- #include <linux/platform_data/omap-abe-twl6040.h>
-+#include <linux/spi/spi.h>
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -54,6 +56,8 @@
- #define GPIO_WIFI_PMENA               43
- #define GPIO_WIFI_IRQ         53
-+char expboard_name[16];
-+
- /* wl127x BT, FM, GPS connectivity chip */
- static struct ti_st_plat_data wilink_platform_data = {
-       .nshutdown_gpio = 46,
-@@ -99,6 +103,25 @@ static struct platform_device leds_gpio = {
-       },
- };
-+static struct spi_board_info panda_mcspi_board_info[] = {
-+      /* spi 1.0 */
-+      {
-+              .modalias       = "spidev",
-+              .max_speed_hz   = 48000000, //48 Mbps
-+              .bus_num        = 1,
-+              .chip_select    = 0,
-+              .mode = SPI_MODE_1,
-+      },
-+      /* spi 1.1 */
-+      {
-+              .modalias       = "spidev",
-+              .max_speed_hz   = 48000000, //48 Mbps
-+              .bus_num        = 1,
-+              .chip_select    = 1,
-+              .mode = SPI_MODE_1,
-+      },
-+};
-+
- static struct omap_abe_twl6040_data panda_abe_audio_data = {
-       /* Audio out */
-       .has_hs         = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT,
-@@ -161,6 +184,18 @@ static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
-       .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
- };
-+static int __init expansionboard_setup(char *str)
-+{
-+      if (!machine_is_omap4_panda())
-+              return 0;
-+
-+      if (!str)
-+              return -EINVAL;
-+      strncpy(expboard_name, str, 16);
-+      pr_info("Panda expansionboard: %s\n", expboard_name);
-+      return 0;
-+}
-+
- static void __init omap4_ehci_init(void)
- {
-       int ret;
-@@ -435,11 +470,19 @@ static void __init omap4_panda_init(void)
-       omap_sdrc_init(NULL, NULL);
-       omap4_twl6030_hsmmc_init(mmc);
-       omap4_ehci_init();
-+      if (!strcmp(expboard_name, "spidev")) {
-+      #if IS_ENABLED(CONFIG_SPI_SPIDEV)
-+              pr_info("Panda expansionboard: spidev: enabling spi3/spi4\n");
-+              spi_register_board_info(panda_mcspi_board_info, ARRAY_SIZE(panda_mcspi_board_info));
-+      #endif
-+      }
-       usb_bind_phy("musb-hdrc.2.auto", 0, "omap-usb2.3.auto");
-       usb_musb_init(&musb_board_data);
-       omap4_panda_display_init();
- }
-+early_param("buddy", expansionboard_setup);
-+
- MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
-       /* Maintainer: David Anders - Texas Instruments Inc */
-       .atag_offset    = 0x100,
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch b/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch
deleted file mode 100644 (file)
index 12194e4..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-From 359104632fa556e3c5c78e4016c2585896225716 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Mon, 1 Apr 2013 12:17:50 -0500
-Subject: [PATCH 4/4] HACK: PandaES: disable cpufreq so board will boot
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- drivers/cpufreq/omap-cpufreq.c |    7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/drivers/cpufreq/omap-cpufreq.c b/drivers/cpufreq/omap-cpufreq.c
-index 0279d18..0a8ac09 100644
---- a/drivers/cpufreq/omap-cpufreq.c
-+++ b/drivers/cpufreq/omap-cpufreq.c
-@@ -31,6 +31,8 @@
- #include <asm/smp_plat.h>
- #include <asm/cpu.h>
-+#include "../../arch/arm/mach-omap2/soc.h"
-+
- /* OPP tolerance in percentage */
- #define       OPP_TOLERANCE   4
-@@ -246,6 +248,11 @@ static struct cpufreq_driver omap_driver = {
- static int omap_cpufreq_probe(struct platform_device *pdev)
- {
-+      if (cpu_is_omap446x()) {
-+              pr_err("%s: unsupported Silicon?\n", __func__);
-+              return -EINVAL;
-+      }
-+
-       mpu_dev = get_cpu_device(0);
-       if (!mpu_dev) {
-               pr_warning("%s: unable to get the mpu device\n", __func__);
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch b/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch
deleted file mode 100644 (file)
index fa64934..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-From 76c1d8cdfa0967b04ca8168a77bb101d4ea71150 Mon Sep 17 00:00:00 2001
-From: Santosh Shilimkar <santosh.shilimkar@ti.com>
-Date: Mon, 18 Mar 2013 06:51:30 +0000
-Subject: [PATCH 6/6] ARM: hw_breakpoint: Enable debug powerdown only if
- system supports 'has_ossr'
-
-On Friday 15 March 2013 10:30 AM, Will Deacon wrote:
-> On Thu, Mar 14, 2013 at 01:08:00PM +0530, Santosh Shilimkar wrote:
->> Will,
->
-> Hi guys,
->
-> I'm out of the office at the moment and have really terrible connectivity,
-> so I can't do too much until next week. However, I don't think adding the
-> has_ossr check is the right fix for this problem.
->
->> On Wednesday 13 March 2013 05:59 PM, Lokesh Vutla wrote:
->>> Hi Dietmar,
->>> On Wednesday 13 March 2013 05:35 PM, Dietmar Eggemann wrote:
->>>> On 13/03/13 06:52, Lokesh Vutla wrote:
->>>>> Commit {9a6eb31 ARM: hw_breakpoint: Debug powerdown support for
->>>>> self-hosted
->>>>> debug} introduces debug powerdown support for self-hosted debug.
->>>>> While merging the patch 'has_ossr' check was removed which
->>>>> was needed for hardwares which doesn't support self-hosted debug.
->>>>> Pandaboard (A9) is one such hardware and Dietmar's orginial
->>>>> patch did mention this issue.
->>>>> Without that check on Panda with CPUIDLE enabled, a flood of
->>>>> below messages thrown.
->>>>>
->>>>> [ 3.597930] hw-breakpoint: CPU 0 failed to disable vector catch
->>>>> [ 3.597991] hw-breakpoint: CPU 1 failed to disable vector catch
->
-> Ok, so this means that we've taken an undefined instruction exception while
-> trying to reset the debug registers on the PM_EXIT path. Now, the code there
-> deals with CPUs that don't have the save/restore registers just fine, so
-> that shouldn't have anything to do with this problem, particularly if the
-> bit that is tripping us up is related to clearing vector catch.
->
-Agree.
-
-> Furthermore, I was under the impression that hw_breakpoint did actually
-> work on panda, which implies that a cold boot *does* manage to reset the
-> registers (can you please confirm this by looking in your dmesg during
-> boot?). In that case, it seems as though a PM cycle is powering down a
-> bunch of debug logic that was powered up during boot, and then we trip over
-> because we can't access the register bank.
->
-Actually it seems to be without PM. Thanks to analysis from Lokesh, the issue
-can be seen even with just suspend or cpu hotplug. So cold boot as such is
-fine.
-
-> The proper solution to this problem requires us to establish exactly what is
-> turning off the debug registers, and then having an OMAP PM notifier to
-> enable it again. Assuming this has always been the case, I expect hardware
-> debug across PM fails silently with older kernels.
->
-This has been always the case it seems with CPU power cycle.
-After the CPU is power cycled, 'DBGAUTHSTATUS' reads '0xaa' rather
-than '0xaf' which means 'DBGEN = 0' and hence code fails to enable
-monitor mode. This happens on both secure and GP devices and it can not
-be patched since the secure code is ROM'ed. We didn't notice so far
-because hw_breakpoint support was not default enabled on OMAP till the
-multi-platform build.
-
->> I was also wondering whether we should just warn once rather
->> than continuous warnings in the notifier. Patch is end of the
->> email.
->
-> Could do, but I'd like to see a fix for the real issue before we simply hide
-> the warnings :)
->
-Agree here too. As evident above, the feature won't work on OMAP4
-devices with PM and hence some solution is needed.
-
-What you think of below ?
-
->From d74b4264f6a5967b0f7ada96aad77ab0ac30dbed Mon Sep 17 00:00:00 2001
-From: Santosh Shilimkar <santosh.shilimkar@ti.com>
-Date: Mon, 18 Mar 2013 11:59:04 +0530
-Subject: [PATCH] ARM: hw_breakpoints: Check for CPU debug availability before
- enabling it
-
-CPU debug features like hardware break, watchpoints can be used only when
-the debug mode is enabled and available for non-secure mode.
-
-Hence check 'DBGAUTHSTATUS.DBGEN' before proceeding to enable the
-features.
-
-Thanks to Will for pointers and Lokesh for the analysis of the issue on
-OMAP4 where after a CPU power cycle, debug mode gets disabled.
-
-Cc: Will Deacon <Will.Deacon@arm.com>
-
-Tested-by: Lokesh Vutla <lokeshvutla@ti.com>
-Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
----
- arch/arm/kernel/hw_breakpoint.c |    8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c
-index 96093b7..683a7cf 100644
---- a/arch/arm/kernel/hw_breakpoint.c
-+++ b/arch/arm/kernel/hw_breakpoint.c
-@@ -930,6 +930,14 @@ static void reset_ctrl_regs(void *unused)
-       int i, raw_num_brps, err = 0, cpu = smp_processor_id();
-       u32 val;
-+      /* Check if we have access to CPU debug features */
-+      ARM_DBG_READ(c7, c14, 6, val);
-+      if ((val & 0x1) == 0) {
-+              pr_warn_once("CPU %d debug is unavailable\n", cpu);
-+              cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu));
-+              return;
-+      }
-+
-       /*
-        * v7 debug contains save and restore registers so that debug state
-        * can be maintained across low-power modes without leaving the debug
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch b/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch
deleted file mode 100644 (file)
index 0799d83..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-From 42d8b74383b670412107c943efd2fec46aa04158 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Sat, 1 Jun 2013 16:32:46 -0500
-Subject: [PATCH 07/10] Revert "regulator: twl: Remove TWL6030_FIXED_RESOURCE"
-
-This reverts commit d1924519fe1dada0cfd9a228bf2ff1ea15840c84.
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- drivers/regulator/twl-regulator.c |   13 +++++++++++++
- 1 file changed, 13 insertions(+)
-
-diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
-index fb6e67d..7ce7edf 100644
---- a/drivers/regulator/twl-regulator.c
-+++ b/drivers/regulator/twl-regulator.c
-@@ -933,6 +933,19 @@ static const struct twlreg_info TWLFIXED_INFO_##label = { \
-               }, \
-       }
-+#define TWL6030_FIXED_RESOURCE(label, offset, turnon_delay) \
-+static struct twlreg_info TWLRES_INFO_##label = { \
-+      .base = offset, \
-+      .desc = { \
-+              .name = #label, \
-+              .id = TWL6030_REG_##label, \
-+              .ops = &twl6030_fixed_resource, \
-+              .type = REGULATOR_VOLTAGE, \
-+              .owner = THIS_MODULE, \
-+              .enable_time = turnon_delay, \
-+              }, \
-+      }
-+
- #define TWL6025_ADJUSTABLE_SMPS(label, offset) \
- static const struct twlreg_info TWLSMPS_INFO_##label = { \
-       .base = offset, \
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch b/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch
deleted file mode 100644 (file)
index 4abbd05..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-From 48e4598f1b8e9dd486d551b76c5f5021d0dc946d Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Sat, 1 Jun 2013 16:32:48 -0500
-Subject: [PATCH 08/10] Revert "regulator: twl: Remove another unused variable
- warning"
-
-This reverts commit 029dd3cefa46ecdd879f9b4e2df3bdf4371cc22c.
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- drivers/regulator/twl-regulator.c |    7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
-index 7ce7edf..124a2f2 100644
---- a/drivers/regulator/twl-regulator.c
-+++ b/drivers/regulator/twl-regulator.c
-@@ -633,6 +633,13 @@ static struct regulator_ops twl6030fixed_ops = {
-       .get_status     = twl6030reg_get_status,
- };
-+static struct regulator_ops twl6030_fixed_resource = {
-+      .enable         = twl6030reg_enable,
-+      .disable        = twl6030reg_disable,
-+      .is_enabled     = twl6030reg_is_enabled,
-+      .get_status     = twl6030reg_get_status,
-+};
-+
- /*
-  * SMPS status and control
-  */
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch b/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch
deleted file mode 100644 (file)
index 27bc6ea..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-From 76cc643690032d9789bbd17c9a3542cae4b0603e Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Sat, 1 Jun 2013 16:32:51 -0500
-Subject: [PATCH 09/10] Revert "regulator: twl: Remove references to the
- twl4030 regulator"
-
-This reverts commit e76ab829cc2d8b6350a3f01fffb208df4d7d8c1b.
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- drivers/regulator/twl-regulator.c |    1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
-index 124a2f2..5a18317 100644
---- a/drivers/regulator/twl-regulator.c
-+++ b/drivers/regulator/twl-regulator.c
-@@ -1021,6 +1021,7 @@ TWL6030_FIXED_LDO(VDAC, 0x64, 1800, 0);
- TWL6030_FIXED_LDO(VUSB, 0x70, 3300, 0);
- TWL6030_FIXED_LDO(V1V8, 0x16, 1800, 0);
- TWL6030_FIXED_LDO(V2V1, 0x1c, 2100, 0);
-+TWL6030_FIXED_RESOURCE(CLK32KG, 0x8C, 0);
- TWL6025_ADJUSTABLE_SMPS(SMPS3, 0x34);
- TWL6025_ADJUSTABLE_SMPS(SMPS4, 0x10);
- TWL6025_ADJUSTABLE_SMPS(VIO, 0x16);
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch b/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch
deleted file mode 100644 (file)
index ad18b29..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-From ffdb3fad79cf70dcc943764f075215d6525435be Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Sat, 1 Jun 2013 16:32:54 -0500
-Subject: [PATCH 10/10] Revert "regulator: twl: Remove references to 32kHz
- clock from DT bindings"
-
-This reverts commit 0e8e5c34cf1a8beaaf0a6a05c053592693bf8cb4.
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- Documentation/devicetree/bindings/regulator/twl-regulator.txt |    1 +
- drivers/regulator/twl-regulator.c                             |    2 ++
- 2 files changed, 3 insertions(+)
-
-diff --git a/Documentation/devicetree/bindings/regulator/twl-regulator.txt b/Documentation/devicetree/bindings/regulator/twl-regulator.txt
-index 658749b..0c3395d 100644
---- a/Documentation/devicetree/bindings/regulator/twl-regulator.txt
-+++ b/Documentation/devicetree/bindings/regulator/twl-regulator.txt
-@@ -15,6 +15,7 @@ For twl6030 regulators/LDOs
-   - "ti,twl6030-vusb" for VUSB LDO
-   - "ti,twl6030-v1v8" for V1V8 LDO
-   - "ti,twl6030-v2v1" for V2V1 LDO
-+  - "ti,twl6030-clk32kg" for CLK32KG RESOURCE
-   - "ti,twl6030-vdd1" for VDD1 SMPS
-   - "ti,twl6030-vdd2" for VDD2 SMPS
-   - "ti,twl6030-vdd3" for VDD3 SMPS
-diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
-index 5a18317..40f27bb 100644
---- a/drivers/regulator/twl-regulator.c
-+++ b/drivers/regulator/twl-regulator.c
-@@ -1054,6 +1054,7 @@ static u8 twl_get_smps_mult(void)
- #define TWL6030_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6030, label)
- #define TWL6025_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6025, label)
- #define TWLFIXED_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLFIXED, label)
-+#define TWLRES_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLRES, label)
- #define TWLSMPS_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLSMPS, label)
- static const struct of_device_id twl_of_match[] = {
-@@ -1101,6 +1102,7 @@ static const struct of_device_id twl_of_match[] = {
-       TWLFIXED_OF_MATCH("ti,twl6030-vusb", VUSB),
-       TWLFIXED_OF_MATCH("ti,twl6030-v1v8", V1V8),
-       TWLFIXED_OF_MATCH("ti,twl6030-v2v1", V2V1),
-+      TWLRES_OF_MATCH("ti,twl6030-clk32kg", CLK32KG),
-       TWLSMPS_OF_MATCH("ti,twl6025-smps3", SMPS3),
-       TWLSMPS_OF_MATCH("ti,twl6025-smps4", SMPS4),
-       TWLSMPS_OF_MATCH("ti,twl6025-vio", VIO),
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch b/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch
deleted file mode 100644 (file)
index da9fcda..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-From 9f5066a898b77f2fe2b1f0946bb6afebe3d08f6d Mon Sep 17 00:00:00 2001
-From: Yann <yann.wanwanscappel@free.fr>
-Date: Sat, 8 Jun 2013 13:06:37 -0500
-Subject: [PATCH 7/7] panda: spidev: setup pinmux
-
-It works fine on my board, I've been able to perform data transfers using the spidev_test program provided in kernel documentation
-(shortcut between SIMO and SOMI to perform an hardware loopback). I also checked that CS0 and CS1 and CLK are properly driven using my scope.
-
-The clock is strangely configured as input, but it is also the case for omap3 beagle board, so I guess this is fine.
-
-Signed-off-by: Yann <yann.wanwanscappel@free.fr>
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- arch/arm/mach-omap2/board-omap4panda.c |   13 ++++++++++++-
- 1 file changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
-index 3563f86..10bb576 100644
---- a/arch/arm/mach-omap2/board-omap4panda.c
-+++ b/arch/arm/mach-omap2/board-omap4panda.c
-@@ -103,6 +103,16 @@ static struct platform_device leds_gpio = {
-       },
- };
-+static void __init omap4_panda_config_mcspi1_mux(void)
-+{
-+      /* NOTE: Clock pins need to be in input mode */
-+      omap_mux_init_signal("mcspi1_clk", OMAP_PIN_INPUT);
-+      omap_mux_init_signal("mcspi1_simo", OMAP_PIN_OUTPUT);
-+      omap_mux_init_signal("mcspi1_somi", OMAP_PIN_INPUT_PULLUP);
-+      omap_mux_init_signal("mcspi1_cs0", OMAP_PIN_OUTPUT);
-+      omap_mux_init_signal("mcspi1_cs1", OMAP_PIN_OUTPUT);
-+}
-+
- static struct spi_board_info panda_mcspi_board_info[] = {
-       /* spi 1.0 */
-       {
-@@ -472,7 +482,8 @@ static void __init omap4_panda_init(void)
-       omap4_ehci_init();
-       if (!strcmp(expboard_name, "spidev")) {
-       #if IS_ENABLED(CONFIG_SPI_SPIDEV)
--              pr_info("Panda expansionboard: spidev: enabling spi3/spi4\n");
-+              pr_info("Panda expansionboard: spidev: enabling spi1.0 and spi1.1\n");
-+              omap4_panda_config_mcspi1_mux();
-               spi_register_board_info(panda_mcspi_board_info, ARRAY_SIZE(panda_mcspi_board_info));
-       #endif
-       }
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch b/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch
deleted file mode 100644 (file)
index 8e8a08e..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-From 6bce72b21600d9f52ae60d5bf80d00152eb75b50 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve@sakoman.com>
-Date: Tue, 19 Jan 2010 21:19:15 -0800
-Subject: [PATCH 1/2] OMAP: DSS2: add bootarg for selecting svideo
-
- OMAP: DSS2: add bootarg for selecting svideo or composite for tv output
- also add pal-16 and ntsc-16 omapfb.mode settings for 16bpp
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- drivers/video/omap2/dss/venc.c           |   22 ++++++++++++++++++++++
- drivers/video/omap2/omapfb/omapfb-main.c |   10 +++++++++-
- 2 files changed, 31 insertions(+), 1 deletions(-)
-
-diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
-index 56efa3b..d46f7f8 100644
---- a/drivers/video/omap2/dss/venc.c
-+++ b/drivers/video/omap2/dss/venc.c
-@@ -86,6 +86,11 @@
- #define VENC_OUTPUT_TEST                      0xC8
- #define VENC_DAC_B__DAC_C                     0xC8
-+static char *tv_connection;
-+
-+module_param_named(tvcable, tv_connection, charp, 0);
-+MODULE_PARM_DESC(tvcable, "TV connection type (svideo, composite)");
-+
- struct venc_config {
-       u32 f_control;
-       u32 vidout_ctrl;
-@@ -465,6 +470,23 @@ static int venc_power_on(struct omap_dss_device *dssdev)
-       if (r)
-               goto err2;
-+      /* Allow the TV output to be overriden */
-+      if (tv_connection) {
-+              if (strcmp(tv_connection, "svideo") == 0) {
-+                      printk(KERN_INFO
-+                              "omapdss: tv output is svideo.\n");
-+                      dssdev->phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO;
-+              } else if (strcmp(tv_connection, "composite") == 0) {
-+                      printk(KERN_INFO
-+                              "omapdss: tv output is composite.\n");
-+                      dssdev->phy.venc.type = OMAP_DSS_VENC_TYPE_COMPOSITE;
-+              } else {
-+                      printk(KERN_INFO
-+                              "omapdss: unsupported output type'%s'.\n",
-+                              tv_connection);
-+              }
-+      }
-+
-       return 0;
- err2:
-diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c
-index bc225e4..34d6679 100644
---- a/drivers/video/omap2/omapfb/omapfb-main.c
-+++ b/drivers/video/omap2/omapfb/omapfb-main.c
-@@ -2032,7 +2032,15 @@ static int omapfb_mode_to_timings(const char *mode_str,
-       int r;
- #ifdef CONFIG_OMAP2_DSS_VENC
--      if (strcmp(mode_str, "pal") == 0) {
-+      if (strcmp(mode_str, "pal-16") == 0) {
-+              *timings = omap_dss_pal_timings;
-+              *bpp = 16;
-+              return 0;
-+      } else if (strcmp(mode_str, "ntsc-16") == 0) {
-+              *timings = omap_dss_ntsc_timings;
-+              *bpp = 16;
-+              return 0;
-+      } else if (strcmp(mode_str, "pal") == 0) {
-               *timings = omap_dss_pal_timings;
-               *bpp = 24;
-               return 0;
--- 
-1.7.7.6
-
diff --git a/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch b/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch
deleted file mode 100644 (file)
index 1b936f5..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-From 747de06d5cc69b2407684ba0455fff5c1d6af797 Mon Sep 17 00:00:00 2001
-From: Steve Sakoman <steve@sakoman.com>
-Date: Sat, 19 Dec 2009 06:52:43 -0800
-Subject: [PATCH 2/2] video: add timings for hd720
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
- drivers/video/modedb.c |    4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c
-index a9a907c..5b686de 100644
---- a/drivers/video/modedb.c
-+++ b/drivers/video/modedb.c
-@@ -103,6 +103,10 @@ static const struct fb_videomode modedb[] = {
-       { NULL, 70, 1024, 768, 13333, 144, 24, 29, 3, 136, 6, 0,
-               FB_VMODE_NONINTERLACED },
-+      /* 1280x720 @ 60 Hz, 45 kHz hsync, CEA 681-E Format 4 */
-+      { "hd720", 60, 1280, 720, 13468, 220, 110, 20, 5, 40, 5, 0,
-+              FB_VMODE_NONINTERLACED },
-+
-       /* 1280x1024 @ 87 Hz interlaced, 51 kHz hsync */
-       { NULL, 87, 1280, 1024, 12500, 56, 16, 128, 1, 216, 12, 0,
-               FB_VMODE_INTERLACED },
--- 
-1.7.7.6
-
diff --git a/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch b/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch
deleted file mode 100644 (file)
index 1ca1e70..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-From 29885f2f3d700341d322274db6ad085e601c0994 Mon Sep 17 00:00:00 2001
-From: Pantelis Antoniou <panto@antoniou-consulting.com>
-Date: Fri, 4 Jan 2013 00:32:33 +0200
-Subject: [PATCH 3/3] arm: Export cache flush management symbols when
- !MULTI_CACHE
-
-When compiling a kernel without CONFIG_MULTI_CACHE enabled the
-dma access functions end up not being exported. Fix it.
-
-Signed-off-by: Pantelis Antoniou <panto@antoniou-consulting.com>
----
- arch/arm/kernel/setup.c |    9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
-index da1d1aa..dcb678c 100644
---- a/arch/arm/kernel/setup.c
-+++ b/arch/arm/kernel/setup.c
-@@ -923,3 +923,12 @@ const struct seq_operations cpuinfo_op = {
-       .stop   = c_stop,
-       .show   = c_show
- };
-+
-+/* export the cache management functions */
-+#ifndef MULTI_CACHE
-+
-+EXPORT_SYMBOL(__glue(_CACHE,_dma_map_area));
-+EXPORT_SYMBOL(__glue(_CACHE,_dma_unmap_area));
-+EXPORT_SYMBOL(__glue(_CACHE,_dma_flush_range));
-+
-+#endif
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/wandboard/dts/0001-imx6qdl-wandboard-dts-backport.patch b/src/patches/kernel/wandboard/dts/0001-imx6qdl-wandboard-dts-backport.patch
deleted file mode 100644 (file)
index e1c6bea..0000000
+++ /dev/null
@@ -1,6354 +0,0 @@
-commit a97d4c27dd2eef64af9e5d778d05a8915cba6822
-Author: Stefan Schantl <stefan.schantl@ipfire.org>
-Date:   Mon Nov 18 21:34:31 2013 +0100
-
-    Backport dts for imx6qdl.
-
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index f0895c5..a3d2869 100644
---- a/arch/arm/boot/dts/Makefile
-+++ b/arch/arm/boot/dts/Makefile
-@@ -120,7 +120,8 @@ dtb-$(CONFIG_ARCH_MXC) += \
-       imx6q-sabreauto.dtb \
-       imx6q-sabrelite.dtb \
-       imx6q-sabresd.dtb \
--      imx6q-sbc6x.dtb
-+      imx6q-sbc6x.dtb \
-+      imx6q-wandboard.dtb
- dtb-$(CONFIG_ARCH_MXS) += imx23-evk.dtb \
-       imx23-olinuxino.dtb \
-       imx23-stmp378x_devb.dtb \
-diff --git a/arch/arm/boot/dts/imx6dl-pinfunc.h b/arch/arm/boot/dts/imx6dl-pinfunc.h
-index 9aab950..b81a7a4 100644
---- a/arch/arm/boot/dts/imx6dl-pinfunc.h
-+++ b/arch/arm/boot/dts/imx6dl-pinfunc.h
-@@ -14,1072 +14,1076 @@
-  * The pin function ID is a tuple of
-  * <mux_reg conf_reg input_reg mux_mode input_val>
-  */
--#define MX6DL_PAD_CSI0_DAT10__IPU1_CSI0_DATA10     0x04c 0x360 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT10__AUD3_RXC             0x04c 0x360 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT10__ECSPI2_MISO          0x04c 0x360 0x7f8 0x2 0x0
--#define MX6DL_PAD_CSI0_DAT10__UART1_TX_DATA        0x04c 0x360 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT10__UART1_RX_DATA        0x04c 0x360 0x8fc 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT10__GPIO5_IO28           0x04c 0x360 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT10__ARM_TRACE07          0x04c 0x360 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT11__IPU1_CSI0_DATA11     0x050 0x364 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT11__AUD3_RXFS            0x050 0x364 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT11__ECSPI2_SS0           0x050 0x364 0x800 0x2 0x0
--#define MX6DL_PAD_CSI0_DAT11__UART1_RX_DATA        0x050 0x364 0x8fc 0x3 0x1
--#define MX6DL_PAD_CSI0_DAT11__UART1_TX_DATA        0x050 0x364 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT11__GPIO5_IO29           0x050 0x364 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT11__ARM_TRACE08          0x050 0x364 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12     0x054 0x368 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT12__EIM_DATA08           0x054 0x368 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT12__UART4_TX_DATA        0x054 0x368 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT12__UART4_RX_DATA        0x054 0x368 0x914 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT12__GPIO5_IO30           0x054 0x368 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT12__ARM_TRACE09          0x054 0x368 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13     0x058 0x36c 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT13__EIM_DATA09           0x058 0x36c 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT13__UART4_RX_DATA        0x058 0x36c 0x914 0x3 0x1
--#define MX6DL_PAD_CSI0_DAT13__UART4_TX_DATA        0x058 0x36c 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT13__GPIO5_IO31           0x058 0x36c 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT13__ARM_TRACE10          0x058 0x36c 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14     0x05c 0x370 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT14__EIM_DATA10           0x05c 0x370 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT14__UART5_TX_DATA        0x05c 0x370 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT14__UART5_RX_DATA        0x05c 0x370 0x91c 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT14__GPIO6_IO00           0x05c 0x370 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT14__ARM_TRACE11          0x05c 0x370 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15     0x060 0x374 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT15__EIM_DATA11           0x060 0x374 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT15__UART5_RX_DATA        0x060 0x374 0x91c 0x3 0x1
--#define MX6DL_PAD_CSI0_DAT15__UART5_TX_DATA        0x060 0x374 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT15__GPIO6_IO01           0x060 0x374 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT15__ARM_TRACE12          0x060 0x374 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16     0x064 0x378 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT16__EIM_DATA12           0x064 0x378 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT16__UART4_RTS_B          0x064 0x378 0x910 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT16__UART4_CTS_B          0x064 0x378 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT16__GPIO6_IO02           0x064 0x378 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT16__ARM_TRACE13          0x064 0x378 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17     0x068 0x37c 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT17__EIM_DATA13           0x068 0x37c 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT17__UART4_CTS_B          0x068 0x37c 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT17__UART4_RTS_B          0x068 0x37c 0x910 0x3 0x1
--#define MX6DL_PAD_CSI0_DAT17__GPIO6_IO03           0x068 0x37c 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT17__ARM_TRACE14          0x068 0x37c 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18     0x06c 0x380 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT18__EIM_DATA14           0x06c 0x380 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT18__UART5_RTS_B          0x06c 0x380 0x918 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT18__UART5_CTS_B          0x06c 0x380 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT18__GPIO6_IO04           0x06c 0x380 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT18__ARM_TRACE15          0x06c 0x380 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19     0x070 0x384 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT19__EIM_DATA15           0x070 0x384 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT19__UART5_CTS_B          0x070 0x384 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT19__UART5_RTS_B          0x070 0x384 0x918 0x3 0x1
--#define MX6DL_PAD_CSI0_DAT19__GPIO6_IO05           0x070 0x384 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT4__IPU1_CSI0_DATA04      0x074 0x388 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT4__EIM_DATA02            0x074 0x388 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT4__ECSPI1_SCLK           0x074 0x388 0x7d8 0x2 0x0
--#define MX6DL_PAD_CSI0_DAT4__KEY_COL5              0x074 0x388 0x8c0 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT4__AUD3_TXC              0x074 0x388 0x000 0x4 0x0
--#define MX6DL_PAD_CSI0_DAT4__GPIO5_IO22            0x074 0x388 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT4__ARM_TRACE01           0x074 0x388 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT5__IPU1_CSI0_DATA05      0x078 0x38c 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT5__EIM_DATA03            0x078 0x38c 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT5__ECSPI1_MOSI           0x078 0x38c 0x7e0 0x2 0x0
--#define MX6DL_PAD_CSI0_DAT5__KEY_ROW5              0x078 0x38c 0x8cc 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT5__AUD3_TXD              0x078 0x38c 0x000 0x4 0x0
--#define MX6DL_PAD_CSI0_DAT5__GPIO5_IO23            0x078 0x38c 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT5__ARM_TRACE02           0x078 0x38c 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT6__IPU1_CSI0_DATA06      0x07c 0x390 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT6__EIM_DATA04            0x07c 0x390 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT6__ECSPI1_MISO           0x07c 0x390 0x7dc 0x2 0x0
--#define MX6DL_PAD_CSI0_DAT6__KEY_COL6              0x07c 0x390 0x8c4 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT6__AUD3_TXFS             0x07c 0x390 0x000 0x4 0x0
--#define MX6DL_PAD_CSI0_DAT6__GPIO5_IO24            0x07c 0x390 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT6__ARM_TRACE03           0x07c 0x390 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT7__IPU1_CSI0_DATA07      0x080 0x394 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT7__EIM_DATA05            0x080 0x394 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT7__ECSPI1_SS0            0x080 0x394 0x7e4 0x2 0x0
--#define MX6DL_PAD_CSI0_DAT7__KEY_ROW6              0x080 0x394 0x8d0 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT7__AUD3_RXD              0x080 0x394 0x000 0x4 0x0
--#define MX6DL_PAD_CSI0_DAT7__GPIO5_IO25            0x080 0x394 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT7__ARM_TRACE04           0x080 0x394 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT8__IPU1_CSI0_DATA08      0x084 0x398 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT8__EIM_DATA06            0x084 0x398 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT8__ECSPI2_SCLK           0x084 0x398 0x7f4 0x2 0x0
--#define MX6DL_PAD_CSI0_DAT8__KEY_COL7              0x084 0x398 0x8c8 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT8__I2C1_SDA              0x084 0x398 0x86c 0x4 0x0
--#define MX6DL_PAD_CSI0_DAT8__GPIO5_IO26            0x084 0x398 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT8__ARM_TRACE05           0x084 0x398 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DAT9__IPU1_CSI0_DATA09      0x088 0x39c 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DAT9__EIM_DATA07            0x088 0x39c 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DAT9__ECSPI2_MOSI           0x088 0x39c 0x7fc 0x2 0x0
--#define MX6DL_PAD_CSI0_DAT9__KEY_ROW7              0x088 0x39c 0x8d4 0x3 0x0
--#define MX6DL_PAD_CSI0_DAT9__I2C1_SCL              0x088 0x39c 0x868 0x4 0x0
--#define MX6DL_PAD_CSI0_DAT9__GPIO5_IO27            0x088 0x39c 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DAT9__ARM_TRACE06           0x088 0x39c 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN  0x08c 0x3a0 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_DATA_EN__EIM_DATA00         0x08c 0x3a0 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_DATA_EN__GPIO5_IO20         0x08c 0x3a0 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_DATA_EN__ARM_TRACE_CLK      0x08c 0x3a0 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC       0x090 0x3a4 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_MCLK__CCM_CLKO1             0x090 0x3a4 0x000 0x3 0x0
--#define MX6DL_PAD_CSI0_MCLK__GPIO5_IO19            0x090 0x3a4 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_MCLK__ARM_TRACE_CTL         0x090 0x3a4 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK    0x094 0x3a8 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_PIXCLK__GPIO5_IO18          0x094 0x3a8 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_PIXCLK__ARM_EVENTO          0x094 0x3a8 0x000 0x7 0x0
--#define MX6DL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC      0x098 0x3ac 0x000 0x0 0x0
--#define MX6DL_PAD_CSI0_VSYNC__EIM_DATA01           0x098 0x3ac 0x000 0x1 0x0
--#define MX6DL_PAD_CSI0_VSYNC__GPIO5_IO21           0x098 0x3ac 0x000 0x5 0x0
--#define MX6DL_PAD_CSI0_VSYNC__ARM_TRACE00          0x098 0x3ac 0x000 0x7 0x0
--#define MX6DL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK  0x09c 0x3b0 0x000 0x0 0x0
--#define MX6DL_PAD_DI0_DISP_CLK__LCD_CLK            0x09c 0x3b0 0x000 0x1 0x0
--#define MX6DL_PAD_DI0_DISP_CLK__GPIO4_IO16         0x09c 0x3b0 0x000 0x5 0x0
--#define MX6DL_PAD_DI0_DISP_CLK__LCD_WR_RWN         0x09c 0x3b0 0x000 0x8 0x0
--#define MX6DL_PAD_DI0_PIN15__IPU1_DI0_PIN15        0x0a0 0x3b4 0x000 0x0 0x0
--#define MX6DL_PAD_DI0_PIN15__LCD_ENABLE            0x0a0 0x3b4 0x000 0x1 0x0
--#define MX6DL_PAD_DI0_PIN15__AUD6_TXC              0x0a0 0x3b4 0x000 0x2 0x0
--#define MX6DL_PAD_DI0_PIN15__GPIO4_IO17            0x0a0 0x3b4 0x000 0x5 0x0
--#define MX6DL_PAD_DI0_PIN15__LCD_RD_E              0x0a0 0x3b4 0x000 0x8 0x0
--#define MX6DL_PAD_DI0_PIN2__IPU1_DI0_PIN02         0x0a4 0x3b8 0x000 0x0 0x0
--#define MX6DL_PAD_DI0_PIN2__LCD_HSYNC              0x0a4 0x3b8 0x8d8 0x1 0x0
--#define MX6DL_PAD_DI0_PIN2__AUD6_TXD               0x0a4 0x3b8 0x000 0x2 0x0
--#define MX6DL_PAD_DI0_PIN2__GPIO4_IO18             0x0a4 0x3b8 0x000 0x5 0x0
--#define MX6DL_PAD_DI0_PIN2__LCD_RS                 0x0a4 0x3b8 0x000 0x8 0x0
--#define MX6DL_PAD_DI0_PIN3__IPU1_DI0_PIN03         0x0a8 0x3bc 0x000 0x0 0x0
--#define MX6DL_PAD_DI0_PIN3__LCD_VSYNC              0x0a8 0x3bc 0x000 0x1 0x0
--#define MX6DL_PAD_DI0_PIN3__AUD6_TXFS              0x0a8 0x3bc 0x000 0x2 0x0
--#define MX6DL_PAD_DI0_PIN3__GPIO4_IO19             0x0a8 0x3bc 0x000 0x5 0x0
--#define MX6DL_PAD_DI0_PIN3__LCD_CS                 0x0a8 0x3bc 0x000 0x8 0x0
--#define MX6DL_PAD_DI0_PIN4__IPU1_DI0_PIN04         0x0ac 0x3c0 0x000 0x0 0x0
--#define MX6DL_PAD_DI0_PIN4__LCD_BUSY               0x0ac 0x3c0 0x8d8 0x1 0x1
--#define MX6DL_PAD_DI0_PIN4__AUD6_RXD               0x0ac 0x3c0 0x000 0x2 0x0
--#define MX6DL_PAD_DI0_PIN4__SD1_WP                 0x0ac 0x3c0 0x92c 0x3 0x0
--#define MX6DL_PAD_DI0_PIN4__GPIO4_IO20             0x0ac 0x3c0 0x000 0x5 0x0
--#define MX6DL_PAD_DI0_PIN4__LCD_RESET              0x0ac 0x3c0 0x000 0x8 0x0
--#define MX6DL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00    0x0b0 0x3c4 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT0__LCD_DATA00           0x0b0 0x3c4 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT0__ECSPI3_SCLK          0x0b0 0x3c4 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT0__GPIO4_IO21           0x0b0 0x3c4 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01    0x0b4 0x3c8 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT1__LCD_DATA01           0x0b4 0x3c8 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT1__ECSPI3_MOSI          0x0b4 0x3c8 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT1__GPIO4_IO22           0x0b4 0x3c8 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10   0x0b8 0x3cc 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT10__LCD_DATA10          0x0b8 0x3cc 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT10__GPIO4_IO31          0x0b8 0x3cc 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11   0x0bc 0x3d0 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT11__LCD_DATA11          0x0bc 0x3d0 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT11__GPIO5_IO05          0x0bc 0x3d0 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12   0x0c0 0x3d4 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT12__LCD_DATA12          0x0c0 0x3d4 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT12__GPIO5_IO06          0x0c0 0x3d4 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13   0x0c4 0x3d8 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT13__LCD_DATA13          0x0c4 0x3d8 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT13__AUD5_RXFS           0x0c4 0x3d8 0x7bc 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT13__GPIO5_IO07          0x0c4 0x3d8 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14   0x0c8 0x3dc 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT14__LCD_DATA14          0x0c8 0x3dc 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT14__AUD5_RXC            0x0c8 0x3dc 0x7b8 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT14__GPIO5_IO08          0x0c8 0x3dc 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15   0x0cc 0x3e0 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT15__LCD_DATA15          0x0cc 0x3e0 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT15__ECSPI1_SS1          0x0cc 0x3e0 0x7e8 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT15__ECSPI2_SS1          0x0cc 0x3e0 0x804 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT15__GPIO5_IO09          0x0cc 0x3e0 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16   0x0d0 0x3e4 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT16__LCD_DATA16          0x0d0 0x3e4 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT16__ECSPI2_MOSI         0x0d0 0x3e4 0x7fc 0x2 0x1
--#define MX6DL_PAD_DISP0_DAT16__AUD5_TXC            0x0d0 0x3e4 0x7c0 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT16__SDMA_EXT_EVENT0     0x0d0 0x3e4 0x8e8 0x4 0x0
--#define MX6DL_PAD_DISP0_DAT16__GPIO5_IO10          0x0d0 0x3e4 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17   0x0d4 0x3e8 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT17__LCD_DATA17          0x0d4 0x3e8 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT17__ECSPI2_MISO         0x0d4 0x3e8 0x7f8 0x2 0x1
--#define MX6DL_PAD_DISP0_DAT17__AUD5_TXD            0x0d4 0x3e8 0x7b4 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT17__SDMA_EXT_EVENT1     0x0d4 0x3e8 0x8ec 0x4 0x0
--#define MX6DL_PAD_DISP0_DAT17__GPIO5_IO11          0x0d4 0x3e8 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18   0x0d8 0x3ec 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT18__LCD_DATA18          0x0d8 0x3ec 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT18__ECSPI2_SS0          0x0d8 0x3ec 0x800 0x2 0x1
--#define MX6DL_PAD_DISP0_DAT18__AUD5_TXFS           0x0d8 0x3ec 0x7c4 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT18__AUD4_RXFS           0x0d8 0x3ec 0x7a4 0x4 0x0
--#define MX6DL_PAD_DISP0_DAT18__GPIO5_IO12          0x0d8 0x3ec 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT18__EIM_CS2_B           0x0d8 0x3ec 0x000 0x7 0x0
--#define MX6DL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19   0x0dc 0x3f0 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT19__LCD_DATA19          0x0dc 0x3f0 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT19__ECSPI2_SCLK         0x0dc 0x3f0 0x7f4 0x2 0x1
--#define MX6DL_PAD_DISP0_DAT19__AUD5_RXD            0x0dc 0x3f0 0x7b0 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT19__AUD4_RXC            0x0dc 0x3f0 0x7a0 0x4 0x0
--#define MX6DL_PAD_DISP0_DAT19__GPIO5_IO13          0x0dc 0x3f0 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT19__EIM_CS3_B           0x0dc 0x3f0 0x000 0x7 0x0
--#define MX6DL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02    0x0e0 0x3f4 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT2__LCD_DATA02           0x0e0 0x3f4 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT2__ECSPI3_MISO          0x0e0 0x3f4 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT2__GPIO4_IO23           0x0e0 0x3f4 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20   0x0e4 0x3f8 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT20__LCD_DATA20          0x0e4 0x3f8 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT20__ECSPI1_SCLK         0x0e4 0x3f8 0x7d8 0x2 0x1
--#define MX6DL_PAD_DISP0_DAT20__AUD4_TXC            0x0e4 0x3f8 0x7a8 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT20__GPIO5_IO14          0x0e4 0x3f8 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21   0x0e8 0x3fc 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT21__LCD_DATA21          0x0e8 0x3fc 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT21__ECSPI1_MOSI         0x0e8 0x3fc 0x7e0 0x2 0x1
--#define MX6DL_PAD_DISP0_DAT21__AUD4_TXD            0x0e8 0x3fc 0x79c 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT21__GPIO5_IO15          0x0e8 0x3fc 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22   0x0ec 0x400 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT22__LCD_DATA22          0x0ec 0x400 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT22__ECSPI1_MISO         0x0ec 0x400 0x7dc 0x2 0x1
--#define MX6DL_PAD_DISP0_DAT22__AUD4_TXFS           0x0ec 0x400 0x7ac 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT22__GPIO5_IO16          0x0ec 0x400 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23   0x0f0 0x404 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT23__LCD_DATA23          0x0f0 0x404 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT23__ECSPI1_SS0          0x0f0 0x404 0x7e4 0x2 0x1
--#define MX6DL_PAD_DISP0_DAT23__AUD4_RXD            0x0f0 0x404 0x798 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT23__GPIO5_IO17          0x0f0 0x404 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03    0x0f4 0x408 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT3__LCD_DATA03           0x0f4 0x408 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT3__ECSPI3_SS0           0x0f4 0x408 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT3__GPIO4_IO24           0x0f4 0x408 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04    0x0f8 0x40c 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT4__LCD_DATA04           0x0f8 0x40c 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT4__ECSPI3_SS1           0x0f8 0x40c 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT4__GPIO4_IO25           0x0f8 0x40c 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05    0x0fc 0x410 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT5__LCD_DATA05           0x0fc 0x410 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT5__ECSPI3_SS2           0x0fc 0x410 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT5__AUD6_RXFS            0x0fc 0x410 0x000 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT5__GPIO4_IO26           0x0fc 0x410 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06    0x100 0x414 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT6__LCD_DATA06           0x100 0x414 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT6__ECSPI3_SS3           0x100 0x414 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT6__AUD6_RXC             0x100 0x414 0x000 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT6__GPIO4_IO27           0x100 0x414 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07    0x104 0x418 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT7__LCD_DATA07           0x104 0x418 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT7__ECSPI3_RDY           0x104 0x418 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT7__GPIO4_IO28           0x104 0x418 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08    0x108 0x41c 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT8__LCD_DATA08           0x108 0x41c 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT8__PWM1_OUT             0x108 0x41c 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT8__WDOG1_B              0x108 0x41c 0x000 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT8__GPIO4_IO29           0x108 0x41c 0x000 0x5 0x0
--#define MX6DL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09    0x10c 0x420 0x000 0x0 0x0
--#define MX6DL_PAD_DISP0_DAT9__LCD_DATA09           0x10c 0x420 0x000 0x1 0x0
--#define MX6DL_PAD_DISP0_DAT9__PWM2_OUT             0x10c 0x420 0x000 0x2 0x0
--#define MX6DL_PAD_DISP0_DAT9__WDOG2_B              0x10c 0x420 0x000 0x3 0x0
--#define MX6DL_PAD_DISP0_DAT9__GPIO4_IO30           0x10c 0x420 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A16__EIM_ADDR16              0x110 0x4e0 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A16__IPU1_DI1_DISP_CLK       0x110 0x4e0 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A16__IPU1_CSI1_PIXCLK        0x110 0x4e0 0x8b8 0x2 0x0
--#define MX6DL_PAD_EIM_A16__GPIO2_IO22              0x110 0x4e0 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A16__SRC_BOOT_CFG16          0x110 0x4e0 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_A16__EPDC_DATA00             0x110 0x4e0 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A17__EIM_ADDR17              0x114 0x4e4 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A17__IPU1_DISP1_DATA12       0x114 0x4e4 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A17__IPU1_CSI1_DATA12        0x114 0x4e4 0x890 0x2 0x0
--#define MX6DL_PAD_EIM_A17__GPIO2_IO21              0x114 0x4e4 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A17__SRC_BOOT_CFG17          0x114 0x4e4 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_A17__EPDC_PWR_STAT           0x114 0x4e4 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A18__EIM_ADDR18              0x118 0x4e8 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A18__IPU1_DISP1_DATA13       0x118 0x4e8 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A18__IPU1_CSI1_DATA13        0x118 0x4e8 0x894 0x2 0x0
--#define MX6DL_PAD_EIM_A18__GPIO2_IO20              0x118 0x4e8 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A18__SRC_BOOT_CFG18          0x118 0x4e8 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_A18__EPDC_PWR_CTRL0          0x118 0x4e8 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A19__EIM_ADDR19              0x11c 0x4ec 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A19__IPU1_DISP1_DATA14       0x11c 0x4ec 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A19__IPU1_CSI1_DATA14        0x11c 0x4ec 0x898 0x2 0x0
--#define MX6DL_PAD_EIM_A19__GPIO2_IO19              0x11c 0x4ec 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A19__SRC_BOOT_CFG19          0x11c 0x4ec 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_A19__EPDC_PWR_CTRL1          0x11c 0x4ec 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A20__EIM_ADDR20              0x120 0x4f0 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A20__IPU1_DISP1_DATA15       0x120 0x4f0 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A20__IPU1_CSI1_DATA15        0x120 0x4f0 0x89c 0x2 0x0
--#define MX6DL_PAD_EIM_A20__GPIO2_IO18              0x120 0x4f0 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A20__SRC_BOOT_CFG20          0x120 0x4f0 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_A20__EPDC_PWR_CTRL2          0x120 0x4f0 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A21__EIM_ADDR21              0x124 0x4f4 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A21__IPU1_DISP1_DATA16       0x124 0x4f4 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A21__IPU1_CSI1_DATA16        0x124 0x4f4 0x8a0 0x2 0x0
--#define MX6DL_PAD_EIM_A21__GPIO2_IO17              0x124 0x4f4 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A21__SRC_BOOT_CFG21          0x124 0x4f4 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_A21__EPDC_GDCLK              0x124 0x4f4 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A22__EIM_ADDR22              0x128 0x4f8 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A22__IPU1_DISP1_DATA17       0x128 0x4f8 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A22__IPU1_CSI1_DATA17        0x128 0x4f8 0x8a4 0x2 0x0
--#define MX6DL_PAD_EIM_A22__GPIO2_IO16              0x128 0x4f8 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A22__SRC_BOOT_CFG22          0x128 0x4f8 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_A22__EPDC_GDSP               0x128 0x4f8 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A23__EIM_ADDR23              0x12c 0x4fc 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A23__IPU1_DISP1_DATA18       0x12c 0x4fc 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A23__IPU1_CSI1_DATA18        0x12c 0x4fc 0x8a8 0x2 0x0
--#define MX6DL_PAD_EIM_A23__IPU1_SISG3              0x12c 0x4fc 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_A23__GPIO6_IO06              0x12c 0x4fc 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A23__SRC_BOOT_CFG23          0x12c 0x4fc 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_A23__EPDC_GDOE               0x12c 0x4fc 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A24__EIM_ADDR24              0x130 0x500 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A24__IPU1_DISP1_DATA19       0x130 0x500 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A24__IPU1_CSI1_DATA19        0x130 0x500 0x8ac 0x2 0x0
--#define MX6DL_PAD_EIM_A24__IPU1_SISG2              0x130 0x500 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_A24__GPIO5_IO04              0x130 0x500 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A24__SRC_BOOT_CFG24          0x130 0x500 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_A24__EPDC_GDRL               0x130 0x500 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A25__EIM_ADDR25              0x134 0x504 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_A25__ECSPI4_SS1              0x134 0x504 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_A25__ECSPI2_RDY              0x134 0x504 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_A25__IPU1_DI1_PIN12          0x134 0x504 0x000 0x3 0x0
--#define MX6DL_PAD_EIM_A25__IPU1_DI0_D1_CS          0x134 0x504 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_A25__GPIO5_IO02              0x134 0x504 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_A25__HDMI_TX_CEC_LINE        0x134 0x504 0x85c 0x6 0x0
--#define MX6DL_PAD_EIM_A25__EPDC_DATA15             0x134 0x504 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_A25__EIM_ACLK_FREERUN        0x134 0x504 0x000 0x9 0x0
--#define MX6DL_PAD_EIM_BCLK__EIM_BCLK               0x138 0x508 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_BCLK__IPU1_DI1_PIN16         0x138 0x508 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_BCLK__GPIO6_IO31             0x138 0x508 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_BCLK__EPDC_SDCE9             0x138 0x508 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_CS0__EIM_CS0_B               0x13c 0x50c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_CS0__IPU1_DI1_PIN05          0x13c 0x50c 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_CS0__ECSPI2_SCLK             0x13c 0x50c 0x7f4 0x2 0x2
--#define MX6DL_PAD_EIM_CS0__GPIO2_IO23              0x13c 0x50c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_CS0__EPDC_DATA06             0x13c 0x50c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_CS1__EIM_CS1_B               0x140 0x510 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_CS1__IPU1_DI1_PIN06          0x140 0x510 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_CS1__ECSPI2_MOSI             0x140 0x510 0x7fc 0x2 0x2
--#define MX6DL_PAD_EIM_CS1__GPIO2_IO24              0x140 0x510 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_CS1__EPDC_DATA08             0x140 0x510 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D16__EIM_DATA16              0x144 0x514 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D16__ECSPI1_SCLK             0x144 0x514 0x7d8 0x1 0x2
--#define MX6DL_PAD_EIM_D16__IPU1_DI0_PIN05          0x144 0x514 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D16__IPU1_CSI1_DATA18        0x144 0x514 0x8a8 0x3 0x1
--#define MX6DL_PAD_EIM_D16__HDMI_TX_DDC_SDA         0x144 0x514 0x864 0x4 0x0
--#define MX6DL_PAD_EIM_D16__GPIO3_IO16              0x144 0x514 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D16__I2C2_SDA                0x144 0x514 0x874 0x6 0x0
--#define MX6DL_PAD_EIM_D16__EPDC_DATA10             0x144 0x514 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D17__EIM_DATA17              0x148 0x518 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D17__ECSPI1_MISO             0x148 0x518 0x7dc 0x1 0x2
--#define MX6DL_PAD_EIM_D17__IPU1_DI0_PIN06          0x148 0x518 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D17__IPU1_CSI1_PIXCLK        0x148 0x518 0x8b8 0x3 0x1
--#define MX6DL_PAD_EIM_D17__DCIC1_OUT               0x148 0x518 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D17__GPIO3_IO17              0x148 0x518 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D17__I2C3_SCL                0x148 0x518 0x878 0x6 0x0
--#define MX6DL_PAD_EIM_D17__EPDC_VCOM0              0x148 0x518 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D18__EIM_DATA18              0x14c 0x51c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D18__ECSPI1_MOSI             0x14c 0x51c 0x7e0 0x1 0x2
--#define MX6DL_PAD_EIM_D18__IPU1_DI0_PIN07          0x14c 0x51c 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D18__IPU1_CSI1_DATA17        0x14c 0x51c 0x8a4 0x3 0x1
--#define MX6DL_PAD_EIM_D18__IPU1_DI1_D0_CS          0x14c 0x51c 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D18__GPIO3_IO18              0x14c 0x51c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D18__I2C3_SDA                0x14c 0x51c 0x87c 0x6 0x0
--#define MX6DL_PAD_EIM_D18__EPDC_VCOM1              0x14c 0x51c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D19__EIM_DATA19              0x150 0x520 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D19__ECSPI1_SS1              0x150 0x520 0x7e8 0x1 0x1
--#define MX6DL_PAD_EIM_D19__IPU1_DI0_PIN08          0x150 0x520 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D19__IPU1_CSI1_DATA16        0x150 0x520 0x8a0 0x3 0x1
--#define MX6DL_PAD_EIM_D19__UART1_CTS_B             0x150 0x520 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D19__UART1_RTS_B             0x150 0x520 0x8f8 0x4 0x0
--#define MX6DL_PAD_EIM_D19__GPIO3_IO19              0x150 0x520 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D19__EPIT1_OUT               0x150 0x520 0x000 0x6 0x0
--#define MX6DL_PAD_EIM_D19__EPDC_DATA12             0x150 0x520 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D20__EIM_DATA20              0x154 0x524 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D20__ECSPI4_SS0              0x154 0x524 0x808 0x1 0x0
--#define MX6DL_PAD_EIM_D20__IPU1_DI0_PIN16          0x154 0x524 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D20__IPU1_CSI1_DATA15        0x154 0x524 0x89c 0x3 0x1
--#define MX6DL_PAD_EIM_D20__UART1_RTS_B             0x154 0x524 0x8f8 0x4 0x1
--#define MX6DL_PAD_EIM_D20__UART1_CTS_B             0x154 0x524 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D20__GPIO3_IO20              0x154 0x524 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D20__EPIT2_OUT               0x154 0x524 0x000 0x6 0x0
--#define MX6DL_PAD_EIM_D21__EIM_DATA21              0x158 0x528 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D21__ECSPI4_SCLK             0x158 0x528 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D21__IPU1_DI0_PIN17          0x158 0x528 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D21__IPU1_CSI1_DATA11        0x158 0x528 0x88c 0x3 0x0
--#define MX6DL_PAD_EIM_D21__USB_OTG_OC              0x158 0x528 0x920 0x4 0x0
--#define MX6DL_PAD_EIM_D21__GPIO3_IO21              0x158 0x528 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D21__I2C1_SCL                0x158 0x528 0x868 0x6 0x1
--#define MX6DL_PAD_EIM_D21__SPDIF_IN                0x158 0x528 0x8f0 0x7 0x0
--#define MX6DL_PAD_EIM_D22__EIM_DATA22              0x15c 0x52c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D22__ECSPI4_MISO             0x15c 0x52c 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D22__IPU1_DI0_PIN01          0x15c 0x52c 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D22__IPU1_CSI1_DATA10        0x15c 0x52c 0x888 0x3 0x0
--#define MX6DL_PAD_EIM_D22__USB_OTG_PWR             0x15c 0x52c 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D22__GPIO3_IO22              0x15c 0x52c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D22__SPDIF_OUT               0x15c 0x52c 0x000 0x6 0x0
--#define MX6DL_PAD_EIM_D22__EPDC_SDCE6              0x15c 0x52c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D23__EIM_DATA23              0x160 0x530 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D23__IPU1_DI0_D0_CS          0x160 0x530 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D23__UART3_CTS_B             0x160 0x530 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D23__UART3_RTS_B             0x160 0x530 0x908 0x2 0x0
--#define MX6DL_PAD_EIM_D23__UART1_DCD_B             0x160 0x530 0x000 0x3 0x0
--#define MX6DL_PAD_EIM_D23__IPU1_CSI1_DATA_EN       0x160 0x530 0x8b0 0x4 0x0
--#define MX6DL_PAD_EIM_D23__GPIO3_IO23              0x160 0x530 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D23__IPU1_DI1_PIN02          0x160 0x530 0x000 0x6 0x0
--#define MX6DL_PAD_EIM_D23__IPU1_DI1_PIN14          0x160 0x530 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_D23__EPDC_DATA11             0x160 0x530 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D24__EIM_DATA24              0x164 0x534 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D24__ECSPI4_SS2              0x164 0x534 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D24__UART3_TX_DATA           0x164 0x534 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D24__UART3_RX_DATA           0x164 0x534 0x90c 0x2 0x0
--#define MX6DL_PAD_EIM_D24__ECSPI1_SS2              0x164 0x534 0x7ec 0x3 0x0
--#define MX6DL_PAD_EIM_D24__ECSPI2_SS2              0x164 0x534 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D24__GPIO3_IO24              0x164 0x534 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D24__AUD5_RXFS               0x164 0x534 0x7bc 0x6 0x1
--#define MX6DL_PAD_EIM_D24__UART1_DTR_B             0x164 0x534 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_D24__EPDC_SDCE7              0x164 0x534 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D25__EIM_DATA25              0x168 0x538 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D25__ECSPI4_SS3              0x168 0x538 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D25__UART3_RX_DATA           0x168 0x538 0x90c 0x2 0x1
--#define MX6DL_PAD_EIM_D25__UART3_TX_DATA           0x168 0x538 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D25__ECSPI1_SS3              0x168 0x538 0x7f0 0x3 0x0
--#define MX6DL_PAD_EIM_D25__ECSPI2_SS3              0x168 0x538 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D25__GPIO3_IO25              0x168 0x538 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D25__AUD5_RXC                0x168 0x538 0x7b8 0x6 0x1
--#define MX6DL_PAD_EIM_D25__UART1_DSR_B             0x168 0x538 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_D25__EPDC_SDCE8              0x168 0x538 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D26__EIM_DATA26              0x16c 0x53c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D26__IPU1_DI1_PIN11          0x16c 0x53c 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D26__IPU1_CSI0_DATA01        0x16c 0x53c 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D26__IPU1_CSI1_DATA14        0x16c 0x53c 0x898 0x3 0x1
--#define MX6DL_PAD_EIM_D26__UART2_TX_DATA           0x16c 0x53c 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D26__UART2_RX_DATA           0x16c 0x53c 0x904 0x4 0x0
--#define MX6DL_PAD_EIM_D26__GPIO3_IO26              0x16c 0x53c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D26__IPU1_SISG2              0x16c 0x53c 0x000 0x6 0x0
--#define MX6DL_PAD_EIM_D26__IPU1_DISP1_DATA22       0x16c 0x53c 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_D26__EPDC_SDOED              0x16c 0x53c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D27__EIM_DATA27              0x170 0x540 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D27__IPU1_DI1_PIN13          0x170 0x540 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D27__IPU1_CSI0_DATA00        0x170 0x540 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D27__IPU1_CSI1_DATA13        0x170 0x540 0x894 0x3 0x1
--#define MX6DL_PAD_EIM_D27__UART2_RX_DATA           0x170 0x540 0x904 0x4 0x1
--#define MX6DL_PAD_EIM_D27__UART2_TX_DATA           0x170 0x540 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D27__GPIO3_IO27              0x170 0x540 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D27__IPU1_SISG3              0x170 0x540 0x000 0x6 0x0
--#define MX6DL_PAD_EIM_D27__IPU1_DISP1_DATA23       0x170 0x540 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_D27__EPDC_SDOE               0x170 0x540 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D28__EIM_DATA28              0x174 0x544 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D28__I2C1_SDA                0x174 0x544 0x86c 0x1 0x1
--#define MX6DL_PAD_EIM_D28__ECSPI4_MOSI             0x174 0x544 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D28__IPU1_CSI1_DATA12        0x174 0x544 0x890 0x3 0x1
--#define MX6DL_PAD_EIM_D28__UART2_CTS_B             0x174 0x544 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D28__UART2_RTS_B             0x174 0x544 0x900 0x4 0x0
--#define MX6DL_PAD_EIM_D28__GPIO3_IO28              0x174 0x544 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D28__IPU1_EXT_TRIG           0x174 0x544 0x000 0x6 0x0
--#define MX6DL_PAD_EIM_D28__IPU1_DI0_PIN13          0x174 0x544 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_D28__EPDC_PWR_CTRL3          0x174 0x544 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D29__EIM_DATA29              0x178 0x548 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D29__IPU1_DI1_PIN15          0x178 0x548 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D29__ECSPI4_SS0              0x178 0x548 0x808 0x2 0x1
--#define MX6DL_PAD_EIM_D29__UART2_RTS_B             0x178 0x548 0x900 0x4 0x1
--#define MX6DL_PAD_EIM_D29__UART2_CTS_B             0x178 0x548 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D29__GPIO3_IO29              0x178 0x548 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D29__IPU1_CSI1_VSYNC         0x178 0x548 0x8bc 0x6 0x0
--#define MX6DL_PAD_EIM_D29__IPU1_DI0_PIN14          0x178 0x548 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_D29__EPDC_PWR_WAKE           0x178 0x548 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D30__EIM_DATA30              0x17c 0x54c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D30__IPU1_DISP1_DATA21       0x17c 0x54c 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D30__IPU1_DI0_PIN11          0x17c 0x54c 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D30__IPU1_CSI0_DATA03        0x17c 0x54c 0x000 0x3 0x0
--#define MX6DL_PAD_EIM_D30__UART3_CTS_B             0x17c 0x54c 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D30__UART3_RTS_B             0x17c 0x54c 0x908 0x4 0x1
--#define MX6DL_PAD_EIM_D30__GPIO3_IO30              0x17c 0x54c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D30__USB_H1_OC               0x17c 0x54c 0x924 0x6 0x0
--#define MX6DL_PAD_EIM_D30__EPDC_SDOEZ              0x17c 0x54c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D31__EIM_DATA31              0x180 0x550 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_D31__IPU1_DISP1_DATA20       0x180 0x550 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_D31__IPU1_DI0_PIN12          0x180 0x550 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_D31__IPU1_CSI0_DATA02        0x180 0x550 0x000 0x3 0x0
--#define MX6DL_PAD_EIM_D31__UART3_RTS_B             0x180 0x550 0x908 0x4 0x2
--#define MX6DL_PAD_EIM_D31__UART3_CTS_B             0x180 0x550 0x000 0x4 0x0
--#define MX6DL_PAD_EIM_D31__GPIO3_IO31              0x180 0x550 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_D31__USB_H1_PWR              0x180 0x550 0x000 0x6 0x0
--#define MX6DL_PAD_EIM_D31__EPDC_SDCLK_P            0x180 0x550 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_D31__EIM_ACLK_FREERUN        0x180 0x550 0x000 0x9 0x0
--#define MX6DL_PAD_EIM_DA0__EIM_AD00                0x184 0x554 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA0__IPU1_DISP1_DATA09       0x184 0x554 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA0__IPU1_CSI1_DATA09        0x184 0x554 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA0__GPIO3_IO00              0x184 0x554 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA0__SRC_BOOT_CFG00          0x184 0x554 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA0__EPDC_SDCLK_N            0x184 0x554 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA1__EIM_AD01                0x188 0x558 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA1__IPU1_DISP1_DATA08       0x188 0x558 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA1__IPU1_CSI1_DATA08        0x188 0x558 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA1__GPIO3_IO01              0x188 0x558 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA1__SRC_BOOT_CFG01          0x188 0x558 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA1__EPDC_SDLE               0x188 0x558 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA10__EIM_AD10               0x18c 0x55c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA10__IPU1_DI1_PIN15         0x18c 0x55c 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA10__IPU1_CSI1_DATA_EN      0x18c 0x55c 0x8b0 0x2 0x1
--#define MX6DL_PAD_EIM_DA10__GPIO3_IO10             0x18c 0x55c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA10__SRC_BOOT_CFG10         0x18c 0x55c 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA10__EPDC_DATA01            0x18c 0x55c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA11__EIM_AD11               0x190 0x560 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA11__IPU1_DI1_PIN02         0x190 0x560 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA11__IPU1_CSI1_HSYNC        0x190 0x560 0x8b4 0x2 0x0
--#define MX6DL_PAD_EIM_DA11__GPIO3_IO11             0x190 0x560 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA11__SRC_BOOT_CFG11         0x190 0x560 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA11__EPDC_DATA03            0x190 0x560 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA12__EIM_AD12               0x194 0x564 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA12__IPU1_DI1_PIN03         0x194 0x564 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA12__IPU1_CSI1_VSYNC        0x194 0x564 0x8bc 0x2 0x1
--#define MX6DL_PAD_EIM_DA12__GPIO3_IO12             0x194 0x564 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA12__SRC_BOOT_CFG12         0x194 0x564 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA12__EPDC_DATA02            0x194 0x564 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA13__EIM_AD13               0x198 0x568 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA13__IPU1_DI1_D0_CS         0x198 0x568 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA13__GPIO3_IO13             0x198 0x568 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA13__SRC_BOOT_CFG13         0x198 0x568 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA13__EPDC_DATA13            0x198 0x568 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA14__EIM_AD14               0x19c 0x56c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA14__IPU1_DI1_D1_CS         0x19c 0x56c 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA14__GPIO3_IO14             0x19c 0x56c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA14__SRC_BOOT_CFG14         0x19c 0x56c 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA14__EPDC_DATA14            0x19c 0x56c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA15__EIM_AD15               0x1a0 0x570 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA15__IPU1_DI1_PIN01         0x1a0 0x570 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA15__IPU1_DI1_PIN04         0x1a0 0x570 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA15__GPIO3_IO15             0x1a0 0x570 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA15__SRC_BOOT_CFG15         0x1a0 0x570 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA15__EPDC_DATA09            0x1a0 0x570 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA2__EIM_AD02                0x1a4 0x574 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA2__IPU1_DISP1_DATA07       0x1a4 0x574 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA2__IPU1_CSI1_DATA07        0x1a4 0x574 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA2__GPIO3_IO02              0x1a4 0x574 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA2__SRC_BOOT_CFG02          0x1a4 0x574 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA2__EPDC_BDR0               0x1a4 0x574 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA3__EIM_AD03                0x1a8 0x578 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA3__IPU1_DISP1_DATA06       0x1a8 0x578 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA3__IPU1_CSI1_DATA06        0x1a8 0x578 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA3__GPIO3_IO03              0x1a8 0x578 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA3__SRC_BOOT_CFG03          0x1a8 0x578 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA3__EPDC_BDR1               0x1a8 0x578 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA4__EIM_AD04                0x1ac 0x57c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA4__IPU1_DISP1_DATA05       0x1ac 0x57c 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA4__IPU1_CSI1_DATA05        0x1ac 0x57c 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA4__GPIO3_IO04              0x1ac 0x57c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA4__SRC_BOOT_CFG04          0x1ac 0x57c 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA4__EPDC_SDCE0              0x1ac 0x57c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA5__EIM_AD05                0x1b0 0x580 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA5__IPU1_DISP1_DATA04       0x1b0 0x580 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA5__IPU1_CSI1_DATA04        0x1b0 0x580 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA5__GPIO3_IO05              0x1b0 0x580 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA5__SRC_BOOT_CFG05          0x1b0 0x580 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA5__EPDC_SDCE1              0x1b0 0x580 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA6__EIM_AD06                0x1b4 0x584 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA6__IPU1_DISP1_DATA03       0x1b4 0x584 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA6__IPU1_CSI1_DATA03        0x1b4 0x584 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA6__GPIO3_IO06              0x1b4 0x584 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA6__SRC_BOOT_CFG06          0x1b4 0x584 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA6__EPDC_SDCE2              0x1b4 0x584 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA7__EIM_AD07                0x1b8 0x588 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA7__IPU1_DISP1_DATA02       0x1b8 0x588 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA7__IPU1_CSI1_DATA02        0x1b8 0x588 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA7__GPIO3_IO07              0x1b8 0x588 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA7__SRC_BOOT_CFG07          0x1b8 0x588 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA7__EPDC_SDCE3              0x1b8 0x588 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA8__EIM_AD08                0x1bc 0x58c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA8__IPU1_DISP1_DATA01       0x1bc 0x58c 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA8__IPU1_CSI1_DATA01        0x1bc 0x58c 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA8__GPIO3_IO08              0x1bc 0x58c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA8__SRC_BOOT_CFG08          0x1bc 0x58c 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA8__EPDC_SDCE4              0x1bc 0x58c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_DA9__EIM_AD09                0x1c0 0x590 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_DA9__IPU1_DISP1_DATA00       0x1c0 0x590 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_DA9__IPU1_CSI1_DATA00        0x1c0 0x590 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_DA9__GPIO3_IO09              0x1c0 0x590 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_DA9__SRC_BOOT_CFG09          0x1c0 0x590 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_DA9__EPDC_SDCE5              0x1c0 0x590 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_EB0__EIM_EB0_B               0x1c4 0x594 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_EB0__IPU1_DISP1_DATA11       0x1c4 0x594 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_EB0__IPU1_CSI1_DATA11        0x1c4 0x594 0x88c 0x2 0x1
--#define MX6DL_PAD_EIM_EB0__CCM_PMIC_READY          0x1c4 0x594 0x7d4 0x4 0x0
--#define MX6DL_PAD_EIM_EB0__GPIO2_IO28              0x1c4 0x594 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_EB0__SRC_BOOT_CFG27          0x1c4 0x594 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_EB0__EPDC_PWR_COM            0x1c4 0x594 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_EB1__EIM_EB1_B               0x1c8 0x598 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_EB1__IPU1_DISP1_DATA10       0x1c8 0x598 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_EB1__IPU1_CSI1_DATA10        0x1c8 0x598 0x888 0x2 0x1
--#define MX6DL_PAD_EIM_EB1__GPIO2_IO29              0x1c8 0x598 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_EB1__SRC_BOOT_CFG28          0x1c8 0x598 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_EB1__EPDC_SDSHR              0x1c8 0x598 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_EB2__EIM_EB2_B               0x1cc 0x59c 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_EB2__ECSPI1_SS0              0x1cc 0x59c 0x7e4 0x1 0x2
--#define MX6DL_PAD_EIM_EB2__IPU1_CSI1_DATA19        0x1cc 0x59c 0x8ac 0x3 0x1
--#define MX6DL_PAD_EIM_EB2__HDMI_TX_DDC_SCL         0x1cc 0x59c 0x860 0x4 0x0
--#define MX6DL_PAD_EIM_EB2__GPIO2_IO30              0x1cc 0x59c 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_EB2__I2C2_SCL                0x1cc 0x59c 0x870 0x6 0x0
--#define MX6DL_PAD_EIM_EB2__SRC_BOOT_CFG30          0x1cc 0x59c 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_EB2__EPDC_DATA05             0x1cc 0x59c 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_EB3__EIM_EB3_B               0x1d0 0x5a0 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_EB3__ECSPI4_RDY              0x1d0 0x5a0 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_EB3__UART3_RTS_B             0x1d0 0x5a0 0x908 0x2 0x3
--#define MX6DL_PAD_EIM_EB3__UART3_CTS_B             0x1d0 0x5a0 0x000 0x2 0x0
--#define MX6DL_PAD_EIM_EB3__UART1_RI_B              0x1d0 0x5a0 0x000 0x3 0x0
--#define MX6DL_PAD_EIM_EB3__IPU1_CSI1_HSYNC         0x1d0 0x5a0 0x8b4 0x4 0x1
--#define MX6DL_PAD_EIM_EB3__GPIO2_IO31              0x1d0 0x5a0 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_EB3__IPU1_DI1_PIN03          0x1d0 0x5a0 0x000 0x6 0x0
--#define MX6DL_PAD_EIM_EB3__SRC_BOOT_CFG31          0x1d0 0x5a0 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_EB3__EPDC_SDCE0              0x1d0 0x5a0 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_EB3__EIM_ACLK_FREERUN        0x1d0 0x5a0 0x000 0x9 0x0
--#define MX6DL_PAD_EIM_LBA__EIM_LBA_B               0x1d4 0x5a4 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_LBA__IPU1_DI1_PIN17          0x1d4 0x5a4 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_LBA__ECSPI2_SS1              0x1d4 0x5a4 0x804 0x2 0x1
--#define MX6DL_PAD_EIM_LBA__GPIO2_IO27              0x1d4 0x5a4 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_LBA__SRC_BOOT_CFG26          0x1d4 0x5a4 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_LBA__EPDC_DATA04             0x1d4 0x5a4 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_OE__EIM_OE_B                 0x1d8 0x5a8 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_OE__IPU1_DI1_PIN07           0x1d8 0x5a8 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_OE__ECSPI2_MISO              0x1d8 0x5a8 0x7f8 0x2 0x2
--#define MX6DL_PAD_EIM_OE__GPIO2_IO25               0x1d8 0x5a8 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_OE__EPDC_PWR_IRQ             0x1d8 0x5a8 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_RW__EIM_RW                   0x1dc 0x5ac 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_RW__IPU1_DI1_PIN08           0x1dc 0x5ac 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_RW__ECSPI2_SS0               0x1dc 0x5ac 0x800 0x2 0x2
--#define MX6DL_PAD_EIM_RW__GPIO2_IO26               0x1dc 0x5ac 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_RW__SRC_BOOT_CFG29           0x1dc 0x5ac 0x000 0x7 0x0
--#define MX6DL_PAD_EIM_RW__EPDC_DATA07              0x1dc 0x5ac 0x000 0x8 0x0
--#define MX6DL_PAD_EIM_WAIT__EIM_WAIT_B             0x1e0 0x5b0 0x000 0x0 0x0
--#define MX6DL_PAD_EIM_WAIT__EIM_DTACK_B            0x1e0 0x5b0 0x000 0x1 0x0
--#define MX6DL_PAD_EIM_WAIT__GPIO5_IO00             0x1e0 0x5b0 0x000 0x5 0x0
--#define MX6DL_PAD_EIM_WAIT__SRC_BOOT_CFG25         0x1e0 0x5b0 0x000 0x7 0x0
--#define MX6DL_PAD_ENET_CRS_DV__ENET_RX_EN          0x1e4 0x5b4 0x828 0x1 0x0
--#define MX6DL_PAD_ENET_CRS_DV__ESAI_TX_CLK         0x1e4 0x5b4 0x840 0x2 0x0
--#define MX6DL_PAD_ENET_CRS_DV__SPDIF_EXT_CLK       0x1e4 0x5b4 0x8f4 0x3 0x0
--#define MX6DL_PAD_ENET_CRS_DV__GPIO1_IO25          0x1e4 0x5b4 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_MDC__MLB_DATA               0x1e8 0x5b8 0x8e0 0x0 0x0
--#define MX6DL_PAD_ENET_MDC__ENET_MDC               0x1e8 0x5b8 0x000 0x1 0x0
--#define MX6DL_PAD_ENET_MDC__ESAI_TX5_RX0           0x1e8 0x5b8 0x858 0x2 0x0
--#define MX6DL_PAD_ENET_MDC__ENET_1588_EVENT1_IN    0x1e8 0x5b8 0x000 0x4 0x0
--#define MX6DL_PAD_ENET_MDC__GPIO1_IO31             0x1e8 0x5b8 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_MDIO__ENET_MDIO             0x1ec 0x5bc 0x810 0x1 0x0
--#define MX6DL_PAD_ENET_MDIO__ESAI_RX_CLK           0x1ec 0x5bc 0x83c 0x2 0x0
--#define MX6DL_PAD_ENET_MDIO__ENET_1588_EVENT1_OUT  0x1ec 0x5bc 0x000 0x4 0x0
--#define MX6DL_PAD_ENET_MDIO__GPIO1_IO22            0x1ec 0x5bc 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_MDIO__SPDIF_LOCK            0x1ec 0x5bc 0x000 0x6 0x0
--#define MX6DL_PAD_ENET_REF_CLK__ENET_TX_CLK        0x1f0 0x5c0 0x000 0x1 0x0
--#define MX6DL_PAD_ENET_REF_CLK__ESAI_RX_FS         0x1f0 0x5c0 0x82c 0x2 0x0
--#define MX6DL_PAD_ENET_REF_CLK__GPIO1_IO23         0x1f0 0x5c0 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_REF_CLK__SPDIF_SR_CLK       0x1f0 0x5c0 0x000 0x6 0x0
--#define MX6DL_PAD_ENET_RX_ER__USB_OTG_ID           0x1f4 0x5c4 0x790 0x0 0x0
--#define MX6DL_PAD_ENET_RX_ER__ENET_RX_ER           0x1f4 0x5c4 0x000 0x1 0x0
--#define MX6DL_PAD_ENET_RX_ER__ESAI_RX_HF_CLK       0x1f4 0x5c4 0x834 0x2 0x0
--#define MX6DL_PAD_ENET_RX_ER__SPDIF_IN             0x1f4 0x5c4 0x8f0 0x3 0x1
--#define MX6DL_PAD_ENET_RX_ER__ENET_1588_EVENT2_OUT 0x1f4 0x5c4 0x000 0x4 0x0
--#define MX6DL_PAD_ENET_RX_ER__GPIO1_IO24           0x1f4 0x5c4 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_RXD0__ENET_RX_DATA0         0x1f8 0x5c8 0x818 0x1 0x0
--#define MX6DL_PAD_ENET_RXD0__ESAI_TX_HF_CLK        0x1f8 0x5c8 0x838 0x2 0x0
--#define MX6DL_PAD_ENET_RXD0__SPDIF_OUT             0x1f8 0x5c8 0x000 0x3 0x0
--#define MX6DL_PAD_ENET_RXD0__GPIO1_IO27            0x1f8 0x5c8 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_RXD1__MLB_SIG               0x1fc 0x5cc 0x8e4 0x0 0x0
--#define MX6DL_PAD_ENET_RXD1__ENET_RX_DATA1         0x1fc 0x5cc 0x81c 0x1 0x0
--#define MX6DL_PAD_ENET_RXD1__ESAI_TX_FS            0x1fc 0x5cc 0x830 0x2 0x0
--#define MX6DL_PAD_ENET_RXD1__ENET_1588_EVENT3_OUT  0x1fc 0x5cc 0x000 0x4 0x0
--#define MX6DL_PAD_ENET_RXD1__GPIO1_IO26            0x1fc 0x5cc 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_TX_EN__ENET_TX_EN           0x200 0x5d0 0x000 0x1 0x0
--#define MX6DL_PAD_ENET_TX_EN__ESAI_TX3_RX2         0x200 0x5d0 0x850 0x2 0x0
--#define MX6DL_PAD_ENET_TX_EN__GPIO1_IO28           0x200 0x5d0 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_TX_EN__I2C4_SCL             0x200 0x5d0 0x880 0x9 0x0
--#define MX6DL_PAD_ENET_TXD0__ENET_TX_DATA0         0x204 0x5d4 0x000 0x1 0x0
--#define MX6DL_PAD_ENET_TXD0__ESAI_TX4_RX1          0x204 0x5d4 0x854 0x2 0x0
--#define MX6DL_PAD_ENET_TXD0__GPIO1_IO30            0x204 0x5d4 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_TXD1__MLB_CLK               0x208 0x5d8 0x8dc 0x0 0x0
--#define MX6DL_PAD_ENET_TXD1__ENET_TX_DATA1         0x208 0x5d8 0x000 0x1 0x0
--#define MX6DL_PAD_ENET_TXD1__ESAI_TX2_RX3          0x208 0x5d8 0x84c 0x2 0x0
--#define MX6DL_PAD_ENET_TXD1__ENET_1588_EVENT0_IN   0x208 0x5d8 0x000 0x4 0x0
--#define MX6DL_PAD_ENET_TXD1__GPIO1_IO29            0x208 0x5d8 0x000 0x5 0x0
--#define MX6DL_PAD_ENET_TXD1__I2C4_SDA              0x208 0x5d8 0x884 0x9 0x0
--#define MX6DL_PAD_GPIO_0__CCM_CLKO1                0x20c 0x5dc 0x000 0x0 0x0
--#define MX6DL_PAD_GPIO_0__KEY_COL5                 0x20c 0x5dc 0x8c0 0x2 0x1
--#define MX6DL_PAD_GPIO_0__ASRC_EXT_CLK             0x20c 0x5dc 0x794 0x3 0x0
--#define MX6DL_PAD_GPIO_0__EPIT1_OUT                0x20c 0x5dc 0x000 0x4 0x0
--#define MX6DL_PAD_GPIO_0__GPIO1_IO00               0x20c 0x5dc 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_0__USB_H1_PWR               0x20c 0x5dc 0x000 0x6 0x0
--#define MX6DL_PAD_GPIO_0__SNVS_VIO_5               0x20c 0x5dc 0x000 0x7 0x0
--#define MX6DL_PAD_GPIO_1__ESAI_RX_CLK              0x210 0x5e0 0x83c 0x0 0x1
--#define MX6DL_PAD_GPIO_1__WDOG2_B                  0x210 0x5e0 0x000 0x1 0x0
--#define MX6DL_PAD_GPIO_1__KEY_ROW5                 0x210 0x5e0 0x8cc 0x2 0x1
--#define MX6DL_PAD_GPIO_1__USB_OTG_ID               0x210 0x5e0 0x790 0x3 0x1
--#define MX6DL_PAD_GPIO_1__PWM2_OUT                 0x210 0x5e0 0x000 0x4 0x0
--#define MX6DL_PAD_GPIO_1__GPIO1_IO01               0x210 0x5e0 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_1__SD1_CD_B                 0x210 0x5e0 0x000 0x6 0x0
--#define MX6DL_PAD_GPIO_16__ESAI_TX3_RX2            0x214 0x5e4 0x850 0x0 0x1
--#define MX6DL_PAD_GPIO_16__ENET_1588_EVENT2_IN     0x214 0x5e4 0x000 0x1 0x0
--#define MX6DL_PAD_GPIO_16__ENET_REF_CLK            0x214 0x5e4 0x80c 0x2 0x0
--#define MX6DL_PAD_GPIO_16__SD1_LCTL                0x214 0x5e4 0x000 0x3 0x0
--#define MX6DL_PAD_GPIO_16__SPDIF_IN                0x214 0x5e4 0x8f0 0x4 0x2
--#define MX6DL_PAD_GPIO_16__GPIO7_IO11              0x214 0x5e4 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_16__I2C3_SDA                0x214 0x5e4 0x87c 0x6 0x1
--#define MX6DL_PAD_GPIO_16__JTAG_DE_B               0x214 0x5e4 0x000 0x7 0x0
--#define MX6DL_PAD_GPIO_17__ESAI_TX0                0x218 0x5e8 0x844 0x0 0x0
--#define MX6DL_PAD_GPIO_17__ENET_1588_EVENT3_IN     0x218 0x5e8 0x000 0x1 0x0
--#define MX6DL_PAD_GPIO_17__CCM_PMIC_READY          0x218 0x5e8 0x7d4 0x2 0x1
--#define MX6DL_PAD_GPIO_17__SDMA_EXT_EVENT0         0x218 0x5e8 0x8e8 0x3 0x1
--#define MX6DL_PAD_GPIO_17__SPDIF_OUT               0x218 0x5e8 0x000 0x4 0x0
--#define MX6DL_PAD_GPIO_17__GPIO7_IO12              0x218 0x5e8 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_18__ESAI_TX1                0x21c 0x5ec 0x848 0x0 0x0
--#define MX6DL_PAD_GPIO_18__ENET_RX_CLK             0x21c 0x5ec 0x814 0x1 0x0
--#define MX6DL_PAD_GPIO_18__SD3_VSELECT             0x21c 0x5ec 0x000 0x2 0x0
--#define MX6DL_PAD_GPIO_18__SDMA_EXT_EVENT1         0x21c 0x5ec 0x8ec 0x3 0x1
--#define MX6DL_PAD_GPIO_18__ASRC_EXT_CLK            0x21c 0x5ec 0x794 0x4 0x1
--#define MX6DL_PAD_GPIO_18__GPIO7_IO13              0x21c 0x5ec 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_18__SNVS_VIO_5_CTL          0x21c 0x5ec 0x000 0x6 0x0
--#define MX6DL_PAD_GPIO_19__KEY_COL5                0x220 0x5f0 0x8c0 0x0 0x2
--#define MX6DL_PAD_GPIO_19__ENET_1588_EVENT0_OUT    0x220 0x5f0 0x000 0x1 0x0
--#define MX6DL_PAD_GPIO_19__SPDIF_OUT               0x220 0x5f0 0x000 0x2 0x0
--#define MX6DL_PAD_GPIO_19__CCM_CLKO1               0x220 0x5f0 0x000 0x3 0x0
--#define MX6DL_PAD_GPIO_19__ECSPI1_RDY              0x220 0x5f0 0x000 0x4 0x0
--#define MX6DL_PAD_GPIO_19__GPIO4_IO05              0x220 0x5f0 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_19__ENET_TX_ER              0x220 0x5f0 0x000 0x6 0x0
--#define MX6DL_PAD_GPIO_2__ESAI_TX_FS               0x224 0x5f4 0x830 0x0 0x1
--#define MX6DL_PAD_GPIO_2__KEY_ROW6                 0x224 0x5f4 0x8d0 0x2 0x1
--#define MX6DL_PAD_GPIO_2__GPIO1_IO02               0x224 0x5f4 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_2__SD2_WP                   0x224 0x5f4 0x000 0x6 0x0
--#define MX6DL_PAD_GPIO_2__MLB_DATA                 0x224 0x5f4 0x8e0 0x7 0x1
--#define MX6DL_PAD_GPIO_3__ESAI_RX_HF_CLK           0x228 0x5f8 0x834 0x0 0x1
--#define MX6DL_PAD_GPIO_3__I2C3_SCL                 0x228 0x5f8 0x878 0x2 0x1
--#define MX6DL_PAD_GPIO_3__XTALOSC_REF_CLK_24M      0x228 0x5f8 0x000 0x3 0x0
--#define MX6DL_PAD_GPIO_3__CCM_CLKO2                0x228 0x5f8 0x000 0x4 0x0
--#define MX6DL_PAD_GPIO_3__GPIO1_IO03               0x228 0x5f8 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_3__USB_H1_OC                0x228 0x5f8 0x924 0x6 0x1
--#define MX6DL_PAD_GPIO_3__MLB_CLK                  0x228 0x5f8 0x8dc 0x7 0x1
--#define MX6DL_PAD_GPIO_4__ESAI_TX_HF_CLK           0x22c 0x5fc 0x838 0x0 0x1
--#define MX6DL_PAD_GPIO_4__KEY_COL7                 0x22c 0x5fc 0x8c8 0x2 0x1
--#define MX6DL_PAD_GPIO_4__GPIO1_IO04               0x22c 0x5fc 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_4__SD2_CD_B                 0x22c 0x5fc 0x000 0x6 0x0
--#define MX6DL_PAD_GPIO_5__ESAI_TX2_RX3             0x230 0x600 0x84c 0x0 0x1
--#define MX6DL_PAD_GPIO_5__KEY_ROW7                 0x230 0x600 0x8d4 0x2 0x1
--#define MX6DL_PAD_GPIO_5__CCM_CLKO1                0x230 0x600 0x000 0x3 0x0
--#define MX6DL_PAD_GPIO_5__GPIO1_IO05               0x230 0x600 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_5__I2C3_SCL                 0x230 0x600 0x878 0x6 0x2
--#define MX6DL_PAD_GPIO_5__ARM_EVENTI               0x230 0x600 0x000 0x7 0x0
--#define MX6DL_PAD_GPIO_6__ESAI_TX_CLK              0x234 0x604 0x840 0x0 0x1
--#define MX6DL_PAD_GPIO_6__I2C3_SDA                 0x234 0x604 0x87c 0x2 0x2
--#define MX6DL_PAD_GPIO_6__GPIO1_IO06               0x234 0x604 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_6__SD2_LCTL                 0x234 0x604 0x000 0x6 0x0
--#define MX6DL_PAD_GPIO_6__MLB_SIG                  0x234 0x604 0x8e4 0x7 0x1
--#define MX6DL_PAD_GPIO_7__ESAI_TX4_RX1             0x238 0x608 0x854 0x0 0x1
--#define MX6DL_PAD_GPIO_7__EPIT1_OUT                0x238 0x608 0x000 0x2 0x0
--#define MX6DL_PAD_GPIO_7__FLEXCAN1_TX              0x238 0x608 0x000 0x3 0x0
--#define MX6DL_PAD_GPIO_7__UART2_TX_DATA            0x238 0x608 0x000 0x4 0x0
--#define MX6DL_PAD_GPIO_7__UART2_RX_DATA            0x238 0x608 0x904 0x4 0x2
--#define MX6DL_PAD_GPIO_7__GPIO1_IO07               0x238 0x608 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_7__SPDIF_LOCK               0x238 0x608 0x000 0x6 0x0
--#define MX6DL_PAD_GPIO_7__USB_OTG_HOST_MODE        0x238 0x608 0x000 0x7 0x0
--#define MX6DL_PAD_GPIO_7__I2C4_SCL                 0x238 0x608 0x880 0x8 0x1
--#define MX6DL_PAD_GPIO_8__ESAI_TX5_RX0             0x23c 0x60c 0x858 0x0 0x1
--#define MX6DL_PAD_GPIO_8__XTALOSC_REF_CLK_32K      0x23c 0x60c 0x000 0x1 0x0
--#define MX6DL_PAD_GPIO_8__EPIT2_OUT                0x23c 0x60c 0x000 0x2 0x0
--#define MX6DL_PAD_GPIO_8__FLEXCAN1_RX              0x23c 0x60c 0x7c8 0x3 0x0
--#define MX6DL_PAD_GPIO_8__UART2_RX_DATA            0x23c 0x60c 0x904 0x4 0x3
--#define MX6DL_PAD_GPIO_8__UART2_TX_DATA            0x23c 0x60c 0x000 0x4 0x0
--#define MX6DL_PAD_GPIO_8__GPIO1_IO08               0x23c 0x60c 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_8__SPDIF_SR_CLK             0x23c 0x60c 0x000 0x6 0x0
--#define MX6DL_PAD_GPIO_8__USB_OTG_PWR_CTL_WAKE     0x23c 0x60c 0x000 0x7 0x0
--#define MX6DL_PAD_GPIO_8__I2C4_SDA                 0x23c 0x60c 0x884 0x8 0x1
--#define MX6DL_PAD_GPIO_9__ESAI_RX_FS               0x240 0x610 0x82c 0x0 0x1
--#define MX6DL_PAD_GPIO_9__WDOG1_B                  0x240 0x610 0x000 0x1 0x0
--#define MX6DL_PAD_GPIO_9__KEY_COL6                 0x240 0x610 0x8c4 0x2 0x1
--#define MX6DL_PAD_GPIO_9__CCM_REF_EN_B             0x240 0x610 0x000 0x3 0x0
--#define MX6DL_PAD_GPIO_9__PWM1_OUT                 0x240 0x610 0x000 0x4 0x0
--#define MX6DL_PAD_GPIO_9__GPIO1_IO09               0x240 0x610 0x000 0x5 0x0
--#define MX6DL_PAD_GPIO_9__SD1_WP                   0x240 0x610 0x92c 0x6 0x1
--#define MX6DL_PAD_KEY_COL0__ECSPI1_SCLK            0x244 0x62c 0x7d8 0x0 0x3
--#define MX6DL_PAD_KEY_COL0__ENET_RX_DATA3          0x244 0x62c 0x824 0x1 0x0
--#define MX6DL_PAD_KEY_COL0__AUD5_TXC               0x244 0x62c 0x7c0 0x2 0x1
--#define MX6DL_PAD_KEY_COL0__KEY_COL0               0x244 0x62c 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_COL0__UART4_TX_DATA          0x244 0x62c 0x000 0x4 0x0
--#define MX6DL_PAD_KEY_COL0__UART4_RX_DATA          0x244 0x62c 0x914 0x4 0x2
--#define MX6DL_PAD_KEY_COL0__GPIO4_IO06             0x244 0x62c 0x000 0x5 0x0
--#define MX6DL_PAD_KEY_COL0__DCIC1_OUT              0x244 0x62c 0x000 0x6 0x0
--#define MX6DL_PAD_KEY_COL1__ECSPI1_MISO            0x248 0x630 0x7dc 0x0 0x3
--#define MX6DL_PAD_KEY_COL1__ENET_MDIO              0x248 0x630 0x810 0x1 0x1
--#define MX6DL_PAD_KEY_COL1__AUD5_TXFS              0x248 0x630 0x7c4 0x2 0x1
--#define MX6DL_PAD_KEY_COL1__KEY_COL1               0x248 0x630 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_COL1__UART5_TX_DATA          0x248 0x630 0x000 0x4 0x0
--#define MX6DL_PAD_KEY_COL1__UART5_RX_DATA          0x248 0x630 0x91c 0x4 0x2
--#define MX6DL_PAD_KEY_COL1__GPIO4_IO08             0x248 0x630 0x000 0x5 0x0
--#define MX6DL_PAD_KEY_COL1__SD1_VSELECT            0x248 0x630 0x000 0x6 0x0
--#define MX6DL_PAD_KEY_COL2__ECSPI1_SS1             0x24c 0x634 0x7e8 0x0 0x2
--#define MX6DL_PAD_KEY_COL2__ENET_RX_DATA2          0x24c 0x634 0x820 0x1 0x0
--#define MX6DL_PAD_KEY_COL2__FLEXCAN1_TX            0x24c 0x634 0x000 0x2 0x0
--#define MX6DL_PAD_KEY_COL2__KEY_COL2               0x24c 0x634 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_COL2__ENET_MDC               0x24c 0x634 0x000 0x4 0x0
--#define MX6DL_PAD_KEY_COL2__GPIO4_IO10             0x24c 0x634 0x000 0x5 0x0
--#define MX6DL_PAD_KEY_COL2__USB_H1_PWR_CTL_WAKE    0x24c 0x634 0x000 0x6 0x0
--#define MX6DL_PAD_KEY_COL3__ECSPI1_SS3             0x250 0x638 0x7f0 0x0 0x1
--#define MX6DL_PAD_KEY_COL3__ENET_CRS               0x250 0x638 0x000 0x1 0x0
--#define MX6DL_PAD_KEY_COL3__HDMI_TX_DDC_SCL        0x250 0x638 0x860 0x2 0x1
--#define MX6DL_PAD_KEY_COL3__KEY_COL3               0x250 0x638 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_COL3__I2C2_SCL               0x250 0x638 0x870 0x4 0x1
--#define MX6DL_PAD_KEY_COL3__GPIO4_IO12             0x250 0x638 0x000 0x5 0x0
--#define MX6DL_PAD_KEY_COL3__SPDIF_IN               0x250 0x638 0x8f0 0x6 0x3
--#define MX6DL_PAD_KEY_COL4__FLEXCAN2_TX            0x254 0x63c 0x000 0x0 0x0
--#define MX6DL_PAD_KEY_COL4__IPU1_SISG4             0x254 0x63c 0x000 0x1 0x0
--#define MX6DL_PAD_KEY_COL4__USB_OTG_OC             0x254 0x63c 0x920 0x2 0x1
--#define MX6DL_PAD_KEY_COL4__KEY_COL4               0x254 0x63c 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_COL4__UART5_RTS_B            0x254 0x63c 0x918 0x4 0x2
--#define MX6DL_PAD_KEY_COL4__UART5_CTS_B            0x254 0x63c 0x000 0x4 0x0
--#define MX6DL_PAD_KEY_COL4__GPIO4_IO14             0x254 0x63c 0x000 0x5 0x0
--#define MX6DL_PAD_KEY_ROW0__ECSPI1_MOSI            0x258 0x640 0x7e0 0x0 0x3
--#define MX6DL_PAD_KEY_ROW0__ENET_TX_DATA3          0x258 0x640 0x000 0x1 0x0
--#define MX6DL_PAD_KEY_ROW0__AUD5_TXD               0x258 0x640 0x7b4 0x2 0x1
--#define MX6DL_PAD_KEY_ROW0__KEY_ROW0               0x258 0x640 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_ROW0__UART4_RX_DATA          0x258 0x640 0x914 0x4 0x3
--#define MX6DL_PAD_KEY_ROW0__UART4_TX_DATA          0x258 0x640 0x000 0x4 0x0
--#define MX6DL_PAD_KEY_ROW0__GPIO4_IO07             0x258 0x640 0x000 0x5 0x0
--#define MX6DL_PAD_KEY_ROW0__DCIC2_OUT              0x258 0x640 0x000 0x6 0x0
--#define MX6DL_PAD_KEY_ROW1__ECSPI1_SS0             0x25c 0x644 0x7e4 0x0 0x3
--#define MX6DL_PAD_KEY_ROW1__ENET_COL               0x25c 0x644 0x000 0x1 0x0
--#define MX6DL_PAD_KEY_ROW1__AUD5_RXD               0x25c 0x644 0x7b0 0x2 0x1
--#define MX6DL_PAD_KEY_ROW1__KEY_ROW1               0x25c 0x644 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_ROW1__UART5_RX_DATA          0x25c 0x644 0x91c 0x4 0x3
--#define MX6DL_PAD_KEY_ROW1__UART5_TX_DATA          0x25c 0x644 0x000 0x4 0x0
--#define MX6DL_PAD_KEY_ROW1__GPIO4_IO09             0x25c 0x644 0x000 0x5 0x0
--#define MX6DL_PAD_KEY_ROW1__SD2_VSELECT            0x25c 0x644 0x000 0x6 0x0
--#define MX6DL_PAD_KEY_ROW2__ECSPI1_SS2             0x260 0x648 0x7ec 0x0 0x1
--#define MX6DL_PAD_KEY_ROW2__ENET_TX_DATA2          0x260 0x648 0x000 0x1 0x0
--#define MX6DL_PAD_KEY_ROW2__FLEXCAN1_RX            0x260 0x648 0x7c8 0x2 0x1
--#define MX6DL_PAD_KEY_ROW2__KEY_ROW2               0x260 0x648 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_ROW2__SD2_VSELECT            0x260 0x648 0x000 0x4 0x0
--#define MX6DL_PAD_KEY_ROW2__GPIO4_IO11             0x260 0x648 0x000 0x5 0x0
--#define MX6DL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE       0x260 0x648 0x85c 0x6 0x1
--#define MX6DL_PAD_KEY_ROW3__ASRC_EXT_CLK           0x264 0x64c 0x794 0x1 0x2
--#define MX6DL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA        0x264 0x64c 0x864 0x2 0x1
--#define MX6DL_PAD_KEY_ROW3__KEY_ROW3               0x264 0x64c 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_ROW3__I2C2_SDA               0x264 0x64c 0x874 0x4 0x1
--#define MX6DL_PAD_KEY_ROW3__GPIO4_IO13             0x264 0x64c 0x000 0x5 0x0
--#define MX6DL_PAD_KEY_ROW3__SD1_VSELECT            0x264 0x64c 0x000 0x6 0x0
--#define MX6DL_PAD_KEY_ROW4__FLEXCAN2_RX            0x268 0x650 0x7cc 0x0 0x0
--#define MX6DL_PAD_KEY_ROW4__IPU1_SISG5             0x268 0x650 0x000 0x1 0x0
--#define MX6DL_PAD_KEY_ROW4__USB_OTG_PWR            0x268 0x650 0x000 0x2 0x0
--#define MX6DL_PAD_KEY_ROW4__KEY_ROW4               0x268 0x650 0x000 0x3 0x0
--#define MX6DL_PAD_KEY_ROW4__UART5_CTS_B            0x268 0x650 0x000 0x4 0x0
--#define MX6DL_PAD_KEY_ROW4__UART5_RTS_B            0x268 0x650 0x918 0x4 0x3
--#define MX6DL_PAD_KEY_ROW4__GPIO4_IO15             0x268 0x650 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_ALE__NAND_ALE              0x26c 0x654 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_ALE__SD4_RESET             0x26c 0x654 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_ALE__GPIO6_IO08            0x26c 0x654 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_CLE__NAND_CLE              0x270 0x658 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_CLE__GPIO6_IO07            0x270 0x658 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_CS0__NAND_CE0_B            0x274 0x65c 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_CS0__GPIO6_IO11            0x274 0x65c 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_CS1__NAND_CE1_B            0x278 0x660 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_CS1__SD4_VSELECT           0x278 0x660 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_CS1__SD3_VSELECT           0x278 0x660 0x000 0x2 0x0
--#define MX6DL_PAD_NANDF_CS1__GPIO6_IO14            0x278 0x660 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_CS2__NAND_CE2_B            0x27c 0x664 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_CS2__IPU1_SISG0            0x27c 0x664 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_CS2__ESAI_TX0              0x27c 0x664 0x844 0x2 0x1
--#define MX6DL_PAD_NANDF_CS2__EIM_CRE               0x27c 0x664 0x000 0x3 0x0
--#define MX6DL_PAD_NANDF_CS2__CCM_CLKO2             0x27c 0x664 0x000 0x4 0x0
--#define MX6DL_PAD_NANDF_CS2__GPIO6_IO15            0x27c 0x664 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_CS3__NAND_CE3_B            0x280 0x668 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_CS3__IPU1_SISG1            0x280 0x668 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_CS3__ESAI_TX1              0x280 0x668 0x848 0x2 0x1
--#define MX6DL_PAD_NANDF_CS3__EIM_ADDR26            0x280 0x668 0x000 0x3 0x0
--#define MX6DL_PAD_NANDF_CS3__GPIO6_IO16            0x280 0x668 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_CS3__I2C4_SDA              0x280 0x668 0x884 0x9 0x2
--#define MX6DL_PAD_NANDF_D0__NAND_DATA00            0x284 0x66c 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_D0__SD1_DATA4              0x284 0x66c 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_D0__GPIO2_IO00             0x284 0x66c 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_D1__NAND_DATA01            0x288 0x670 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_D1__SD1_DATA5              0x288 0x670 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_D1__GPIO2_IO01             0x288 0x670 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_D2__NAND_DATA02            0x28c 0x674 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_D2__SD1_DATA6              0x28c 0x674 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_D2__GPIO2_IO02             0x28c 0x674 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_D3__NAND_DATA03            0x290 0x678 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_D3__SD1_DATA7              0x290 0x678 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_D3__GPIO2_IO03             0x290 0x678 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_D4__NAND_DATA04            0x294 0x67c 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_D4__SD2_DATA4              0x294 0x67c 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_D4__GPIO2_IO04             0x294 0x67c 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_D5__NAND_DATA05            0x298 0x680 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_D5__SD2_DATA5              0x298 0x680 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_D5__GPIO2_IO05             0x298 0x680 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_D6__NAND_DATA06            0x29c 0x684 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_D6__SD2_DATA6              0x29c 0x684 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_D6__GPIO2_IO06             0x29c 0x684 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_D7__NAND_DATA07            0x2a0 0x688 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_D7__SD2_DATA7              0x2a0 0x688 0x000 0x1 0x0
--#define MX6DL_PAD_NANDF_D7__GPIO2_IO07             0x2a0 0x688 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_RB0__NAND_READY_B          0x2a4 0x68c 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_RB0__GPIO6_IO10            0x2a4 0x68c 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_WP_B__NAND_WP_B            0x2a8 0x690 0x000 0x0 0x0
--#define MX6DL_PAD_NANDF_WP_B__GPIO6_IO09           0x2a8 0x690 0x000 0x5 0x0
--#define MX6DL_PAD_NANDF_WP_B__I2C4_SCL             0x2a8 0x690 0x880 0x9 0x2
--#define MX6DL_PAD_RGMII_RD0__HSI_RX_READY          0x2ac 0x694 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_RD0__RGMII_RD0             0x2ac 0x694 0x818 0x1 0x1
--#define MX6DL_PAD_RGMII_RD0__GPIO6_IO25            0x2ac 0x694 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_RD1__HSI_TX_FLAG           0x2b0 0x698 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_RD1__RGMII_RD1             0x2b0 0x698 0x81c 0x1 0x1
--#define MX6DL_PAD_RGMII_RD1__GPIO6_IO27            0x2b0 0x698 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_RD2__HSI_TX_DATA           0x2b4 0x69c 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_RD2__RGMII_RD2             0x2b4 0x69c 0x820 0x1 0x1
--#define MX6DL_PAD_RGMII_RD2__GPIO6_IO28            0x2b4 0x69c 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_RD3__HSI_TX_WAKE           0x2b8 0x6a0 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_RD3__RGMII_RD3             0x2b8 0x6a0 0x824 0x1 0x1
--#define MX6DL_PAD_RGMII_RD3__GPIO6_IO29            0x2b8 0x6a0 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_RX_CTL__USB_H3_DATA        0x2bc 0x6a4 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_RX_CTL__RGMII_RX_CTL       0x2bc 0x6a4 0x828 0x1 0x1
--#define MX6DL_PAD_RGMII_RX_CTL__GPIO6_IO24         0x2bc 0x6a4 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_RXC__USB_H3_STROBE         0x2c0 0x6a8 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_RXC__RGMII_RXC             0x2c0 0x6a8 0x814 0x1 0x1
--#define MX6DL_PAD_RGMII_RXC__GPIO6_IO30            0x2c0 0x6a8 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_TD0__HSI_TX_READY          0x2c4 0x6ac 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_TD0__RGMII_TD0             0x2c4 0x6ac 0x000 0x1 0x0
--#define MX6DL_PAD_RGMII_TD0__GPIO6_IO20            0x2c4 0x6ac 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_TD1__HSI_RX_FLAG           0x2c8 0x6b0 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_TD1__RGMII_TD1             0x2c8 0x6b0 0x000 0x1 0x0
--#define MX6DL_PAD_RGMII_TD1__GPIO6_IO21            0x2c8 0x6b0 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_TD2__HSI_RX_DATA           0x2cc 0x6b4 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_TD2__RGMII_TD2             0x2cc 0x6b4 0x000 0x1 0x0
--#define MX6DL_PAD_RGMII_TD2__GPIO6_IO22            0x2cc 0x6b4 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_TD3__HSI_RX_WAKE           0x2d0 0x6b8 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_TD3__RGMII_TD3             0x2d0 0x6b8 0x000 0x1 0x0
--#define MX6DL_PAD_RGMII_TD3__GPIO6_IO23            0x2d0 0x6b8 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_TX_CTL__USB_H2_STROBE      0x2d4 0x6bc 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_TX_CTL__RGMII_TX_CTL       0x2d4 0x6bc 0x000 0x1 0x0
--#define MX6DL_PAD_RGMII_TX_CTL__GPIO6_IO26         0x2d4 0x6bc 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_TX_CTL__ENET_REF_CLK       0x2d4 0x6bc 0x80c 0x7 0x1
--#define MX6DL_PAD_RGMII_TXC__USB_H2_DATA           0x2d8 0x6c0 0x000 0x0 0x0
--#define MX6DL_PAD_RGMII_TXC__RGMII_TXC             0x2d8 0x6c0 0x000 0x1 0x0
--#define MX6DL_PAD_RGMII_TXC__SPDIF_EXT_CLK         0x2d8 0x6c0 0x8f4 0x2 0x1
--#define MX6DL_PAD_RGMII_TXC__GPIO6_IO19            0x2d8 0x6c0 0x000 0x5 0x0
--#define MX6DL_PAD_RGMII_TXC__XTALOSC_REF_CLK_24M   0x2d8 0x6c0 0x000 0x7 0x0
--#define MX6DL_PAD_SD1_CLK__SD1_CLK                 0x2dc 0x6c4 0x928 0x0 0x1
--#define MX6DL_PAD_SD1_CLK__GPT_CLKIN               0x2dc 0x6c4 0x000 0x3 0x0
--#define MX6DL_PAD_SD1_CLK__GPIO1_IO20              0x2dc 0x6c4 0x000 0x5 0x0
--#define MX6DL_PAD_SD1_CMD__SD1_CMD                 0x2e0 0x6c8 0x000 0x0 0x0
--#define MX6DL_PAD_SD1_CMD__PWM4_OUT                0x2e0 0x6c8 0x000 0x2 0x0
--#define MX6DL_PAD_SD1_CMD__GPT_COMPARE1            0x2e0 0x6c8 0x000 0x3 0x0
--#define MX6DL_PAD_SD1_CMD__GPIO1_IO18              0x2e0 0x6c8 0x000 0x5 0x0
--#define MX6DL_PAD_SD1_DAT0__SD1_DATA0              0x2e4 0x6cc 0x000 0x0 0x0
--#define MX6DL_PAD_SD1_DAT0__GPT_CAPTURE1           0x2e4 0x6cc 0x000 0x3 0x0
--#define MX6DL_PAD_SD1_DAT0__GPIO1_IO16             0x2e4 0x6cc 0x000 0x5 0x0
--#define MX6DL_PAD_SD1_DAT1__SD1_DATA1              0x2e8 0x6d0 0x000 0x0 0x0
--#define MX6DL_PAD_SD1_DAT1__PWM3_OUT               0x2e8 0x6d0 0x000 0x2 0x0
--#define MX6DL_PAD_SD1_DAT1__GPT_CAPTURE2           0x2e8 0x6d0 0x000 0x3 0x0
--#define MX6DL_PAD_SD1_DAT1__GPIO1_IO17             0x2e8 0x6d0 0x000 0x5 0x0
--#define MX6DL_PAD_SD1_DAT2__SD1_DATA2              0x2ec 0x6d4 0x000 0x0 0x0
--#define MX6DL_PAD_SD1_DAT2__GPT_COMPARE2           0x2ec 0x6d4 0x000 0x2 0x0
--#define MX6DL_PAD_SD1_DAT2__PWM2_OUT               0x2ec 0x6d4 0x000 0x3 0x0
--#define MX6DL_PAD_SD1_DAT2__WDOG1_B                0x2ec 0x6d4 0x000 0x4 0x0
--#define MX6DL_PAD_SD1_DAT2__GPIO1_IO19             0x2ec 0x6d4 0x000 0x5 0x0
--#define MX6DL_PAD_SD1_DAT2__WDOG1_RESET_B_DEB      0x2ec 0x6d4 0x000 0x6 0x0
--#define MX6DL_PAD_SD1_DAT3__SD1_DATA3              0x2f0 0x6d8 0x000 0x0 0x0
--#define MX6DL_PAD_SD1_DAT3__GPT_COMPARE3           0x2f0 0x6d8 0x000 0x2 0x0
--#define MX6DL_PAD_SD1_DAT3__PWM1_OUT               0x2f0 0x6d8 0x000 0x3 0x0
--#define MX6DL_PAD_SD1_DAT3__WDOG2_B                0x2f0 0x6d8 0x000 0x4 0x0
--#define MX6DL_PAD_SD1_DAT3__GPIO1_IO21             0x2f0 0x6d8 0x000 0x5 0x0
--#define MX6DL_PAD_SD1_DAT3__WDOG2_RESET_B_DEB      0x2f0 0x6d8 0x000 0x6 0x0
--#define MX6DL_PAD_SD2_CLK__SD2_CLK                 0x2f4 0x6dc 0x930 0x0 0x1
--#define MX6DL_PAD_SD2_CLK__KEY_COL5                0x2f4 0x6dc 0x8c0 0x2 0x3
--#define MX6DL_PAD_SD2_CLK__AUD4_RXFS               0x2f4 0x6dc 0x7a4 0x3 0x1
--#define MX6DL_PAD_SD2_CLK__GPIO1_IO10              0x2f4 0x6dc 0x000 0x5 0x0
--#define MX6DL_PAD_SD2_CMD__SD2_CMD                 0x2f8 0x6e0 0x000 0x0 0x0
--#define MX6DL_PAD_SD2_CMD__KEY_ROW5                0x2f8 0x6e0 0x8cc 0x2 0x2
--#define MX6DL_PAD_SD2_CMD__AUD4_RXC                0x2f8 0x6e0 0x7a0 0x3 0x1
--#define MX6DL_PAD_SD2_CMD__GPIO1_IO11              0x2f8 0x6e0 0x000 0x5 0x0
--#define MX6DL_PAD_SD2_DAT0__SD2_DATA0              0x2fc 0x6e4 0x000 0x0 0x0
--#define MX6DL_PAD_SD2_DAT0__AUD4_RXD               0x2fc 0x6e4 0x798 0x3 0x1
--#define MX6DL_PAD_SD2_DAT0__KEY_ROW7               0x2fc 0x6e4 0x8d4 0x4 0x2
--#define MX6DL_PAD_SD2_DAT0__GPIO1_IO15             0x2fc 0x6e4 0x000 0x5 0x0
--#define MX6DL_PAD_SD2_DAT0__DCIC2_OUT              0x2fc 0x6e4 0x000 0x6 0x0
--#define MX6DL_PAD_SD2_DAT1__SD2_DATA1              0x300 0x6e8 0x000 0x0 0x0
--#define MX6DL_PAD_SD2_DAT1__EIM_CS2_B              0x300 0x6e8 0x000 0x2 0x0
--#define MX6DL_PAD_SD2_DAT1__AUD4_TXFS              0x300 0x6e8 0x7ac 0x3 0x1
--#define MX6DL_PAD_SD2_DAT1__KEY_COL7               0x300 0x6e8 0x8c8 0x4 0x2
--#define MX6DL_PAD_SD2_DAT1__GPIO1_IO14             0x300 0x6e8 0x000 0x5 0x0
--#define MX6DL_PAD_SD2_DAT2__SD2_DATA2              0x304 0x6ec 0x000 0x0 0x0
--#define MX6DL_PAD_SD2_DAT2__EIM_CS3_B              0x304 0x6ec 0x000 0x2 0x0
--#define MX6DL_PAD_SD2_DAT2__AUD4_TXD               0x304 0x6ec 0x79c 0x3 0x1
--#define MX6DL_PAD_SD2_DAT2__KEY_ROW6               0x304 0x6ec 0x8d0 0x4 0x2
--#define MX6DL_PAD_SD2_DAT2__GPIO1_IO13             0x304 0x6ec 0x000 0x5 0x0
--#define MX6DL_PAD_SD2_DAT3__SD2_DATA3              0x308 0x6f0 0x000 0x0 0x0
--#define MX6DL_PAD_SD2_DAT3__KEY_COL6               0x308 0x6f0 0x8c4 0x2 0x2
--#define MX6DL_PAD_SD2_DAT3__AUD4_TXC               0x308 0x6f0 0x7a8 0x3 0x1
--#define MX6DL_PAD_SD2_DAT3__GPIO1_IO12             0x308 0x6f0 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_CLK__SD3_CLK                 0x30c 0x6f4 0x934 0x0 0x1
--#define MX6DL_PAD_SD3_CLK__UART2_RTS_B             0x30c 0x6f4 0x900 0x1 0x2
--#define MX6DL_PAD_SD3_CLK__UART2_CTS_B             0x30c 0x6f4 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_CLK__FLEXCAN1_RX             0x30c 0x6f4 0x7c8 0x2 0x2
--#define MX6DL_PAD_SD3_CLK__GPIO7_IO03              0x30c 0x6f4 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_CMD__SD3_CMD                 0x310 0x6f8 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_CMD__UART2_CTS_B             0x310 0x6f8 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_CMD__UART2_RTS_B             0x310 0x6f8 0x900 0x1 0x3
--#define MX6DL_PAD_SD3_CMD__FLEXCAN1_TX             0x310 0x6f8 0x000 0x2 0x0
--#define MX6DL_PAD_SD3_CMD__GPIO7_IO02              0x310 0x6f8 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_DAT0__SD3_DATA0              0x314 0x6fc 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_DAT0__UART1_CTS_B            0x314 0x6fc 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_DAT0__UART1_RTS_B            0x314 0x6fc 0x8f8 0x1 0x2
--#define MX6DL_PAD_SD3_DAT0__FLEXCAN2_TX            0x314 0x6fc 0x000 0x2 0x0
--#define MX6DL_PAD_SD3_DAT0__GPIO7_IO04             0x314 0x6fc 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_DAT1__SD3_DATA1              0x318 0x700 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_DAT1__UART1_RTS_B            0x318 0x700 0x8f8 0x1 0x3
--#define MX6DL_PAD_SD3_DAT1__UART1_CTS_B            0x318 0x700 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_DAT1__FLEXCAN2_RX            0x318 0x700 0x7cc 0x2 0x1
--#define MX6DL_PAD_SD3_DAT1__GPIO7_IO05             0x318 0x700 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_DAT2__SD3_DATA2              0x31c 0x704 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_DAT2__GPIO7_IO06             0x31c 0x704 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_DAT3__SD3_DATA3              0x320 0x708 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_DAT3__UART3_CTS_B            0x320 0x708 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_DAT3__UART3_RTS_B            0x320 0x708 0x908 0x1 0x4
--#define MX6DL_PAD_SD3_DAT3__GPIO7_IO07             0x320 0x708 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_DAT4__SD3_DATA4              0x324 0x70c 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_DAT4__UART2_RX_DATA          0x324 0x70c 0x904 0x1 0x4
--#define MX6DL_PAD_SD3_DAT4__UART2_TX_DATA          0x324 0x70c 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_DAT4__GPIO7_IO01             0x324 0x70c 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_DAT5__SD3_DATA5              0x328 0x710 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_DAT5__UART2_TX_DATA          0x328 0x710 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_DAT5__UART2_RX_DATA          0x328 0x710 0x904 0x1 0x5
--#define MX6DL_PAD_SD3_DAT5__GPIO7_IO00             0x328 0x710 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_DAT6__SD3_DATA6              0x32c 0x714 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_DAT6__UART1_RX_DATA          0x32c 0x714 0x8fc 0x1 0x2
--#define MX6DL_PAD_SD3_DAT6__UART1_TX_DATA          0x32c 0x714 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_DAT6__GPIO6_IO18             0x32c 0x714 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_DAT7__SD3_DATA7              0x330 0x718 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_DAT7__UART1_TX_DATA          0x330 0x718 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_DAT7__UART1_RX_DATA          0x330 0x718 0x8fc 0x1 0x3
--#define MX6DL_PAD_SD3_DAT7__GPIO6_IO17             0x330 0x718 0x000 0x5 0x0
--#define MX6DL_PAD_SD3_RST__SD3_RESET               0x334 0x71c 0x000 0x0 0x0
--#define MX6DL_PAD_SD3_RST__UART3_RTS_B             0x334 0x71c 0x908 0x1 0x5
--#define MX6DL_PAD_SD3_RST__UART3_CTS_B             0x334 0x71c 0x000 0x1 0x0
--#define MX6DL_PAD_SD3_RST__GPIO7_IO08              0x334 0x71c 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_CLK__SD4_CLK                 0x338 0x720 0x938 0x0 0x1
--#define MX6DL_PAD_SD4_CLK__NAND_WE_B               0x338 0x720 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_CLK__UART3_RX_DATA           0x338 0x720 0x90c 0x2 0x2
--#define MX6DL_PAD_SD4_CLK__UART3_TX_DATA           0x338 0x720 0x000 0x2 0x0
--#define MX6DL_PAD_SD4_CLK__GPIO7_IO10              0x338 0x720 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_CMD__SD4_CMD                 0x33c 0x724 0x000 0x0 0x0
--#define MX6DL_PAD_SD4_CMD__NAND_RE_B               0x33c 0x724 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_CMD__UART3_TX_DATA           0x33c 0x724 0x000 0x2 0x0
--#define MX6DL_PAD_SD4_CMD__UART3_RX_DATA           0x33c 0x724 0x90c 0x2 0x3
--#define MX6DL_PAD_SD4_CMD__GPIO7_IO09              0x33c 0x724 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_DAT0__SD4_DATA0              0x340 0x728 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_DAT0__NAND_DQS               0x340 0x728 0x000 0x2 0x0
--#define MX6DL_PAD_SD4_DAT0__GPIO2_IO08             0x340 0x728 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_DAT1__SD4_DATA1              0x344 0x72c 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_DAT1__PWM3_OUT               0x344 0x72c 0x000 0x2 0x0
--#define MX6DL_PAD_SD4_DAT1__GPIO2_IO09             0x344 0x72c 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_DAT2__SD4_DATA2              0x348 0x730 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_DAT2__PWM4_OUT               0x348 0x730 0x000 0x2 0x0
--#define MX6DL_PAD_SD4_DAT2__GPIO2_IO10             0x348 0x730 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_DAT3__SD4_DATA3              0x34c 0x734 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_DAT3__GPIO2_IO11             0x34c 0x734 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_DAT4__SD4_DATA4              0x350 0x738 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_DAT4__UART2_RX_DATA          0x350 0x738 0x904 0x2 0x6
--#define MX6DL_PAD_SD4_DAT4__UART2_TX_DATA          0x350 0x738 0x000 0x2 0x0
--#define MX6DL_PAD_SD4_DAT4__GPIO2_IO12             0x350 0x738 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_DAT5__SD4_DATA5              0x354 0x73c 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_DAT5__UART2_RTS_B            0x354 0x73c 0x900 0x2 0x4
--#define MX6DL_PAD_SD4_DAT5__UART2_CTS_B            0x354 0x73c 0x000 0x2 0x0
--#define MX6DL_PAD_SD4_DAT5__GPIO2_IO13             0x354 0x73c 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_DAT6__SD4_DATA6              0x358 0x740 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_DAT6__UART2_CTS_B            0x358 0x740 0x000 0x2 0x0
--#define MX6DL_PAD_SD4_DAT6__UART2_RTS_B            0x358 0x740 0x900 0x2 0x5
--#define MX6DL_PAD_SD4_DAT6__GPIO2_IO14             0x358 0x740 0x000 0x5 0x0
--#define MX6DL_PAD_SD4_DAT7__SD4_DATA7              0x35c 0x744 0x000 0x1 0x0
--#define MX6DL_PAD_SD4_DAT7__UART2_TX_DATA          0x35c 0x744 0x000 0x2 0x0
--#define MX6DL_PAD_SD4_DAT7__UART2_RX_DATA          0x35c 0x744 0x904 0x2 0x7
--#define MX6DL_PAD_SD4_DAT7__GPIO2_IO15             0x35c 0x744 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__IPU1_CSI0_DATA10     0x04c 0x360 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__AUD3_RXC             0x04c 0x360 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__ECSPI2_MISO          0x04c 0x360 0x7f8 0x2 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA        0x04c 0x360 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__UART1_RX_DATA        0x04c 0x360 0x8fc 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__GPIO5_IO28           0x04c 0x360 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__ARM_TRACE07          0x04c 0x360 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__IPU1_CSI0_DATA11     0x050 0x364 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__AUD3_RXFS            0x050 0x364 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__ECSPI2_SS0           0x050 0x364 0x800 0x2 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA        0x050 0x364 0x8fc 0x3 0x1
-+#define MX6QDL_PAD_CSI0_DAT11__UART1_TX_DATA        0x050 0x364 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__GPIO5_IO29           0x050 0x364 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__ARM_TRACE08          0x050 0x364 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12     0x054 0x368 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__EIM_DATA08           0x054 0x368 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__UART4_TX_DATA        0x054 0x368 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__UART4_RX_DATA        0x054 0x368 0x914 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__GPIO5_IO30           0x054 0x368 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__ARM_TRACE09          0x054 0x368 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13     0x058 0x36c 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__EIM_DATA09           0x058 0x36c 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__UART4_RX_DATA        0x058 0x36c 0x914 0x3 0x1
-+#define MX6QDL_PAD_CSI0_DAT13__UART4_TX_DATA        0x058 0x36c 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__GPIO5_IO31           0x058 0x36c 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__ARM_TRACE10          0x058 0x36c 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14     0x05c 0x370 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__EIM_DATA10           0x05c 0x370 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__UART5_TX_DATA        0x05c 0x370 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__UART5_RX_DATA        0x05c 0x370 0x91c 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__GPIO6_IO00           0x05c 0x370 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__ARM_TRACE11          0x05c 0x370 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15     0x060 0x374 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__EIM_DATA11           0x060 0x374 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__UART5_RX_DATA        0x060 0x374 0x91c 0x3 0x1
-+#define MX6QDL_PAD_CSI0_DAT15__UART5_TX_DATA        0x060 0x374 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__GPIO6_IO01           0x060 0x374 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__ARM_TRACE12          0x060 0x374 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16     0x064 0x378 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__EIM_DATA12           0x064 0x378 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__UART4_RTS_B          0x064 0x378 0x910 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__UART4_CTS_B          0x064 0x378 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__GPIO6_IO02           0x064 0x378 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__ARM_TRACE13          0x064 0x378 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17     0x068 0x37c 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__EIM_DATA13           0x068 0x37c 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__UART4_CTS_B          0x068 0x37c 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__UART4_RTS_B          0x068 0x37c 0x910 0x3 0x1
-+#define MX6QDL_PAD_CSI0_DAT17__GPIO6_IO03           0x068 0x37c 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__ARM_TRACE14          0x068 0x37c 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18     0x06c 0x380 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__EIM_DATA14           0x06c 0x380 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__UART5_RTS_B          0x06c 0x380 0x918 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__UART5_CTS_B          0x06c 0x380 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__GPIO6_IO04           0x06c 0x380 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__ARM_TRACE15          0x06c 0x380 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19     0x070 0x384 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT19__EIM_DATA15           0x070 0x384 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT19__UART5_CTS_B          0x070 0x384 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT19__UART5_RTS_B          0x070 0x384 0x918 0x3 0x1
-+#define MX6QDL_PAD_CSI0_DAT19__GPIO6_IO05           0x070 0x384 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__IPU1_CSI0_DATA04      0x074 0x388 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__EIM_DATA02            0x074 0x388 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__ECSPI1_SCLK           0x074 0x388 0x7d8 0x2 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__KEY_COL5              0x074 0x388 0x8c0 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__AUD3_TXC              0x074 0x388 0x000 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__GPIO5_IO22            0x074 0x388 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__ARM_TRACE01           0x074 0x388 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__IPU1_CSI0_DATA05      0x078 0x38c 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__EIM_DATA03            0x078 0x38c 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__ECSPI1_MOSI           0x078 0x38c 0x7e0 0x2 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__KEY_ROW5              0x078 0x38c 0x8cc 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__AUD3_TXD              0x078 0x38c 0x000 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__GPIO5_IO23            0x078 0x38c 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__ARM_TRACE02           0x078 0x38c 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__IPU1_CSI0_DATA06      0x07c 0x390 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__EIM_DATA04            0x07c 0x390 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__ECSPI1_MISO           0x07c 0x390 0x7dc 0x2 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__KEY_COL6              0x07c 0x390 0x8c4 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS             0x07c 0x390 0x000 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__GPIO5_IO24            0x07c 0x390 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__ARM_TRACE03           0x07c 0x390 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__IPU1_CSI0_DATA07      0x080 0x394 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__EIM_DATA05            0x080 0x394 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__ECSPI1_SS0            0x080 0x394 0x7e4 0x2 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__KEY_ROW6              0x080 0x394 0x8d0 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__AUD3_RXD              0x080 0x394 0x000 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__GPIO5_IO25            0x080 0x394 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__ARM_TRACE04           0x080 0x394 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__IPU1_CSI0_DATA08      0x084 0x398 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__EIM_DATA06            0x084 0x398 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__ECSPI2_SCLK           0x084 0x398 0x7f4 0x2 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__KEY_COL7              0x084 0x398 0x8c8 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__I2C1_SDA              0x084 0x398 0x86c 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__GPIO5_IO26            0x084 0x398 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__ARM_TRACE05           0x084 0x398 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__IPU1_CSI0_DATA09      0x088 0x39c 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__EIM_DATA07            0x088 0x39c 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__ECSPI2_MOSI           0x088 0x39c 0x7fc 0x2 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__KEY_ROW7              0x088 0x39c 0x8d4 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__I2C1_SCL              0x088 0x39c 0x868 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__GPIO5_IO27            0x088 0x39c 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__ARM_TRACE06           0x088 0x39c 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN  0x08c 0x3a0 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DATA_EN__EIM_DATA00         0x08c 0x3a0 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DATA_EN__GPIO5_IO20         0x08c 0x3a0 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DATA_EN__ARM_TRACE_CLK      0x08c 0x3a0 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC       0x090 0x3a4 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_MCLK__CCM_CLKO1             0x090 0x3a4 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_MCLK__GPIO5_IO19            0x090 0x3a4 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_MCLK__ARM_TRACE_CTL         0x090 0x3a4 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK    0x094 0x3a8 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_PIXCLK__GPIO5_IO18          0x094 0x3a8 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_PIXCLK__ARM_EVENTO          0x094 0x3a8 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC      0x098 0x3ac 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_VSYNC__EIM_DATA01           0x098 0x3ac 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_VSYNC__GPIO5_IO21           0x098 0x3ac 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_VSYNC__ARM_TRACE00          0x098 0x3ac 0x000 0x7 0x0
-+#define MX6QDL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK  0x09c 0x3b0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_DISP_CLK__LCD_CLK            0x09c 0x3b0 0x000 0x1 0x0
-+#define MX6QDL_PAD_DI0_DISP_CLK__GPIO4_IO16         0x09c 0x3b0 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_DISP_CLK__LCD_WR_RWN         0x09c 0x3b0 0x000 0x8 0x0
-+#define MX6QDL_PAD_DI0_PIN15__IPU1_DI0_PIN15        0x0a0 0x3b4 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_PIN15__LCD_ENABLE            0x0a0 0x3b4 0x000 0x1 0x0
-+#define MX6QDL_PAD_DI0_PIN15__AUD6_TXC              0x0a0 0x3b4 0x000 0x2 0x0
-+#define MX6QDL_PAD_DI0_PIN15__GPIO4_IO17            0x0a0 0x3b4 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_PIN15__LCD_RD_E              0x0a0 0x3b4 0x000 0x8 0x0
-+#define MX6QDL_PAD_DI0_PIN2__IPU1_DI0_PIN02         0x0a4 0x3b8 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_PIN2__LCD_HSYNC              0x0a4 0x3b8 0x8d8 0x1 0x0
-+#define MX6QDL_PAD_DI0_PIN2__AUD6_TXD               0x0a4 0x3b8 0x000 0x2 0x0
-+#define MX6QDL_PAD_DI0_PIN2__GPIO4_IO18             0x0a4 0x3b8 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_PIN2__LCD_RS                 0x0a4 0x3b8 0x000 0x8 0x0
-+#define MX6QDL_PAD_DI0_PIN3__IPU1_DI0_PIN03         0x0a8 0x3bc 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_PIN3__LCD_VSYNC              0x0a8 0x3bc 0x000 0x1 0x0
-+#define MX6QDL_PAD_DI0_PIN3__AUD6_TXFS              0x0a8 0x3bc 0x000 0x2 0x0
-+#define MX6QDL_PAD_DI0_PIN3__GPIO4_IO19             0x0a8 0x3bc 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_PIN3__LCD_CS                 0x0a8 0x3bc 0x000 0x8 0x0
-+#define MX6QDL_PAD_DI0_PIN4__IPU1_DI0_PIN04         0x0ac 0x3c0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_PIN4__LCD_BUSY               0x0ac 0x3c0 0x8d8 0x1 0x1
-+#define MX6QDL_PAD_DI0_PIN4__AUD6_RXD               0x0ac 0x3c0 0x000 0x2 0x0
-+#define MX6QDL_PAD_DI0_PIN4__SD1_WP                 0x0ac 0x3c0 0x92c 0x3 0x0
-+#define MX6QDL_PAD_DI0_PIN4__GPIO4_IO20             0x0ac 0x3c0 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_PIN4__LCD_RESET              0x0ac 0x3c0 0x000 0x8 0x0
-+#define MX6QDL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00    0x0b0 0x3c4 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT0__LCD_DATA00           0x0b0 0x3c4 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK          0x0b0 0x3c4 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT0__GPIO4_IO21           0x0b0 0x3c4 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01    0x0b4 0x3c8 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT1__LCD_DATA01           0x0b4 0x3c8 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI          0x0b4 0x3c8 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT1__GPIO4_IO22           0x0b4 0x3c8 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10   0x0b8 0x3cc 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT10__LCD_DATA10          0x0b8 0x3cc 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT10__GPIO4_IO31          0x0b8 0x3cc 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11   0x0bc 0x3d0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT11__LCD_DATA11          0x0bc 0x3d0 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT11__GPIO5_IO05          0x0bc 0x3d0 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12   0x0c0 0x3d4 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT12__LCD_DATA12          0x0c0 0x3d4 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT12__GPIO5_IO06          0x0c0 0x3d4 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13   0x0c4 0x3d8 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT13__LCD_DATA13          0x0c4 0x3d8 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT13__AUD5_RXFS           0x0c4 0x3d8 0x7bc 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT13__GPIO5_IO07          0x0c4 0x3d8 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14   0x0c8 0x3dc 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT14__LCD_DATA14          0x0c8 0x3dc 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT14__AUD5_RXC            0x0c8 0x3dc 0x7b8 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT14__GPIO5_IO08          0x0c8 0x3dc 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15   0x0cc 0x3e0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT15__LCD_DATA15          0x0cc 0x3e0 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT15__ECSPI1_SS1          0x0cc 0x3e0 0x7e8 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT15__ECSPI2_SS1          0x0cc 0x3e0 0x804 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09          0x0cc 0x3e0 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16   0x0d0 0x3e4 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__LCD_DATA16          0x0d0 0x3e4 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__ECSPI2_MOSI         0x0d0 0x3e4 0x7fc 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT16__AUD5_TXC            0x0d0 0x3e4 0x7c0 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__SDMA_EXT_EVENT0     0x0d0 0x3e4 0x8e8 0x4 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__GPIO5_IO10          0x0d0 0x3e4 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17   0x0d4 0x3e8 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__LCD_DATA17          0x0d4 0x3e8 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__ECSPI2_MISO         0x0d4 0x3e8 0x7f8 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT17__AUD5_TXD            0x0d4 0x3e8 0x7b4 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__SDMA_EXT_EVENT1     0x0d4 0x3e8 0x8ec 0x4 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__GPIO5_IO11          0x0d4 0x3e8 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18   0x0d8 0x3ec 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__LCD_DATA18          0x0d8 0x3ec 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__ECSPI2_SS0          0x0d8 0x3ec 0x800 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT18__AUD5_TXFS           0x0d8 0x3ec 0x7c4 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__AUD4_RXFS           0x0d8 0x3ec 0x7a4 0x4 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__GPIO5_IO12          0x0d8 0x3ec 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__EIM_CS2_B           0x0d8 0x3ec 0x000 0x7 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19   0x0dc 0x3f0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__LCD_DATA19          0x0dc 0x3f0 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__ECSPI2_SCLK         0x0dc 0x3f0 0x7f4 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT19__AUD5_RXD            0x0dc 0x3f0 0x7b0 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__AUD4_RXC            0x0dc 0x3f0 0x7a0 0x4 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__GPIO5_IO13          0x0dc 0x3f0 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__EIM_CS3_B           0x0dc 0x3f0 0x000 0x7 0x0
-+#define MX6QDL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02    0x0e0 0x3f4 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT2__LCD_DATA02           0x0e0 0x3f4 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO          0x0e0 0x3f4 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT2__GPIO4_IO23           0x0e0 0x3f4 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20   0x0e4 0x3f8 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT20__LCD_DATA20          0x0e4 0x3f8 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT20__ECSPI1_SCLK         0x0e4 0x3f8 0x7d8 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT20__AUD4_TXC            0x0e4 0x3f8 0x7a8 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT20__GPIO5_IO14          0x0e4 0x3f8 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21   0x0e8 0x3fc 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT21__LCD_DATA21          0x0e8 0x3fc 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT21__ECSPI1_MOSI         0x0e8 0x3fc 0x7e0 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT21__AUD4_TXD            0x0e8 0x3fc 0x79c 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT21__GPIO5_IO15          0x0e8 0x3fc 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22   0x0ec 0x400 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT22__LCD_DATA22          0x0ec 0x400 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT22__ECSPI1_MISO         0x0ec 0x400 0x7dc 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT22__AUD4_TXFS           0x0ec 0x400 0x7ac 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT22__GPIO5_IO16          0x0ec 0x400 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23   0x0f0 0x404 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT23__LCD_DATA23          0x0f0 0x404 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT23__ECSPI1_SS0          0x0f0 0x404 0x7e4 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT23__AUD4_RXD            0x0f0 0x404 0x798 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT23__GPIO5_IO17          0x0f0 0x404 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03    0x0f4 0x408 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT3__LCD_DATA03           0x0f4 0x408 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT3__ECSPI3_SS0           0x0f4 0x408 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24           0x0f4 0x408 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04    0x0f8 0x40c 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT4__LCD_DATA04           0x0f8 0x40c 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT4__ECSPI3_SS1           0x0f8 0x40c 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25           0x0f8 0x40c 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05    0x0fc 0x410 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__LCD_DATA05           0x0fc 0x410 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__ECSPI3_SS2           0x0fc 0x410 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__AUD6_RXFS            0x0fc 0x410 0x000 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__GPIO4_IO26           0x0fc 0x410 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06    0x100 0x414 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__LCD_DATA06           0x100 0x414 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__ECSPI3_SS3           0x100 0x414 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__AUD6_RXC             0x100 0x414 0x000 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__GPIO4_IO27           0x100 0x414 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07    0x104 0x418 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT7__LCD_DATA07           0x104 0x418 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT7__ECSPI3_RDY           0x104 0x418 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT7__GPIO4_IO28           0x104 0x418 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08    0x108 0x41c 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__LCD_DATA08           0x108 0x41c 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__PWM1_OUT             0x108 0x41c 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__WDOG1_B              0x108 0x41c 0x000 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__GPIO4_IO29           0x108 0x41c 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09    0x10c 0x420 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__LCD_DATA09           0x10c 0x420 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__PWM2_OUT             0x10c 0x420 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__WDOG2_B              0x10c 0x420 0x000 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__GPIO4_IO30           0x10c 0x420 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A16__EIM_ADDR16              0x110 0x4e0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A16__IPU1_DI1_DISP_CLK       0x110 0x4e0 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A16__IPU1_CSI1_PIXCLK        0x110 0x4e0 0x8b8 0x2 0x0
-+#define MX6QDL_PAD_EIM_A16__GPIO2_IO22              0x110 0x4e0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A16__SRC_BOOT_CFG16          0x110 0x4e0 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A16__EPDC_DATA00             0x110 0x4e0 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A17__EIM_ADDR17              0x114 0x4e4 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A17__IPU1_DISP1_DATA12       0x114 0x4e4 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A17__IPU1_CSI1_DATA12        0x114 0x4e4 0x890 0x2 0x0
-+#define MX6QDL_PAD_EIM_A17__GPIO2_IO21              0x114 0x4e4 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A17__SRC_BOOT_CFG17          0x114 0x4e4 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A17__EPDC_PWR_STAT           0x114 0x4e4 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A18__EIM_ADDR18              0x118 0x4e8 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A18__IPU1_DISP1_DATA13       0x118 0x4e8 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A18__IPU1_CSI1_DATA13        0x118 0x4e8 0x894 0x2 0x0
-+#define MX6QDL_PAD_EIM_A18__GPIO2_IO20              0x118 0x4e8 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A18__SRC_BOOT_CFG18          0x118 0x4e8 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A18__EPDC_PWR_CTRL0          0x118 0x4e8 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A19__EIM_ADDR19              0x11c 0x4ec 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A19__IPU1_DISP1_DATA14       0x11c 0x4ec 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A19__IPU1_CSI1_DATA14        0x11c 0x4ec 0x898 0x2 0x0
-+#define MX6QDL_PAD_EIM_A19__GPIO2_IO19              0x11c 0x4ec 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A19__SRC_BOOT_CFG19          0x11c 0x4ec 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A19__EPDC_PWR_CTRL1          0x11c 0x4ec 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A20__EIM_ADDR20              0x120 0x4f0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A20__IPU1_DISP1_DATA15       0x120 0x4f0 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A20__IPU1_CSI1_DATA15        0x120 0x4f0 0x89c 0x2 0x0
-+#define MX6QDL_PAD_EIM_A20__GPIO2_IO18              0x120 0x4f0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A20__SRC_BOOT_CFG20          0x120 0x4f0 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A20__EPDC_PWR_CTRL2          0x120 0x4f0 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A21__EIM_ADDR21              0x124 0x4f4 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A21__IPU1_DISP1_DATA16       0x124 0x4f4 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A21__IPU1_CSI1_DATA16        0x124 0x4f4 0x8a0 0x2 0x0
-+#define MX6QDL_PAD_EIM_A21__GPIO2_IO17              0x124 0x4f4 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A21__SRC_BOOT_CFG21          0x124 0x4f4 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A21__EPDC_GDCLK              0x124 0x4f4 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A22__EIM_ADDR22              0x128 0x4f8 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A22__IPU1_DISP1_DATA17       0x128 0x4f8 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A22__IPU1_CSI1_DATA17        0x128 0x4f8 0x8a4 0x2 0x0
-+#define MX6QDL_PAD_EIM_A22__GPIO2_IO16              0x128 0x4f8 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A22__SRC_BOOT_CFG22          0x128 0x4f8 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A22__EPDC_GDSP               0x128 0x4f8 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A23__EIM_ADDR23              0x12c 0x4fc 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A23__IPU1_DISP1_DATA18       0x12c 0x4fc 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A23__IPU1_CSI1_DATA18        0x12c 0x4fc 0x8a8 0x2 0x0
-+#define MX6QDL_PAD_EIM_A23__IPU1_SISG3              0x12c 0x4fc 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_A23__GPIO6_IO06              0x12c 0x4fc 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A23__SRC_BOOT_CFG23          0x12c 0x4fc 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A23__EPDC_GDOE               0x12c 0x4fc 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A24__EIM_ADDR24              0x130 0x500 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A24__IPU1_DISP1_DATA19       0x130 0x500 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A24__IPU1_CSI1_DATA19        0x130 0x500 0x8ac 0x2 0x0
-+#define MX6QDL_PAD_EIM_A24__IPU1_SISG2              0x130 0x500 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_A24__GPIO5_IO04              0x130 0x500 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A24__SRC_BOOT_CFG24          0x130 0x500 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A24__EPDC_GDRL               0x130 0x500 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A25__EIM_ADDR25              0x134 0x504 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A25__ECSPI4_SS1              0x134 0x504 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A25__ECSPI2_RDY              0x134 0x504 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_A25__IPU1_DI1_PIN12          0x134 0x504 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_A25__IPU1_DI0_D1_CS          0x134 0x504 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_A25__GPIO5_IO02              0x134 0x504 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A25__HDMI_TX_CEC_LINE        0x134 0x504 0x85c 0x6 0x0
-+#define MX6QDL_PAD_EIM_A25__EPDC_DATA15             0x134 0x504 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_A25__EIM_ACLK_FREERUN        0x134 0x504 0x000 0x9 0x0
-+#define MX6QDL_PAD_EIM_BCLK__EIM_BCLK               0x138 0x508 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_BCLK__IPU1_DI1_PIN16         0x138 0x508 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_BCLK__GPIO6_IO31             0x138 0x508 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_BCLK__EPDC_SDCE9             0x138 0x508 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_CS0__EIM_CS0_B               0x13c 0x50c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_CS0__IPU1_DI1_PIN05          0x13c 0x50c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_CS0__ECSPI2_SCLK             0x13c 0x50c 0x7f4 0x2 0x2
-+#define MX6QDL_PAD_EIM_CS0__GPIO2_IO23              0x13c 0x50c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_CS0__EPDC_DATA06             0x13c 0x50c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_CS1__EIM_CS1_B               0x140 0x510 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_CS1__IPU1_DI1_PIN06          0x140 0x510 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_CS1__ECSPI2_MOSI             0x140 0x510 0x7fc 0x2 0x2
-+#define MX6QDL_PAD_EIM_CS1__GPIO2_IO24              0x140 0x510 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_CS1__EPDC_DATA08             0x140 0x510 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D16__EIM_DATA16              0x144 0x514 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D16__ECSPI1_SCLK             0x144 0x514 0x7d8 0x1 0x2
-+#define MX6QDL_PAD_EIM_D16__IPU1_DI0_PIN05          0x144 0x514 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D16__IPU1_CSI1_DATA18        0x144 0x514 0x8a8 0x3 0x1
-+#define MX6QDL_PAD_EIM_D16__HDMI_TX_DDC_SDA         0x144 0x514 0x864 0x4 0x0
-+#define MX6QDL_PAD_EIM_D16__GPIO3_IO16              0x144 0x514 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D16__I2C2_SDA                0x144 0x514 0x874 0x6 0x0
-+#define MX6QDL_PAD_EIM_D16__EPDC_DATA10             0x144 0x514 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D17__EIM_DATA17              0x148 0x518 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D17__ECSPI1_MISO             0x148 0x518 0x7dc 0x1 0x2
-+#define MX6QDL_PAD_EIM_D17__IPU1_DI0_PIN06          0x148 0x518 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D17__IPU1_CSI1_PIXCLK        0x148 0x518 0x8b8 0x3 0x1
-+#define MX6QDL_PAD_EIM_D17__DCIC1_OUT               0x148 0x518 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D17__GPIO3_IO17              0x148 0x518 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D17__I2C3_SCL                0x148 0x518 0x878 0x6 0x0
-+#define MX6QDL_PAD_EIM_D17__EPDC_VCOM0              0x148 0x518 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D18__EIM_DATA18              0x14c 0x51c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D18__ECSPI1_MOSI             0x14c 0x51c 0x7e0 0x1 0x2
-+#define MX6QDL_PAD_EIM_D18__IPU1_DI0_PIN07          0x14c 0x51c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D18__IPU1_CSI1_DATA17        0x14c 0x51c 0x8a4 0x3 0x1
-+#define MX6QDL_PAD_EIM_D18__IPU1_DI1_D0_CS          0x14c 0x51c 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D18__GPIO3_IO18              0x14c 0x51c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D18__I2C3_SDA                0x14c 0x51c 0x87c 0x6 0x0
-+#define MX6QDL_PAD_EIM_D18__EPDC_VCOM1              0x14c 0x51c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D19__EIM_DATA19              0x150 0x520 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D19__ECSPI1_SS1              0x150 0x520 0x7e8 0x1 0x1
-+#define MX6QDL_PAD_EIM_D19__IPU1_DI0_PIN08          0x150 0x520 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D19__IPU1_CSI1_DATA16        0x150 0x520 0x8a0 0x3 0x1
-+#define MX6QDL_PAD_EIM_D19__UART1_CTS_B             0x150 0x520 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D19__UART1_RTS_B             0x150 0x520 0x8f8 0x4 0x0
-+#define MX6QDL_PAD_EIM_D19__GPIO3_IO19              0x150 0x520 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D19__EPIT1_OUT               0x150 0x520 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D19__EPDC_DATA12             0x150 0x520 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D20__EIM_DATA20              0x154 0x524 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D20__ECSPI4_SS0              0x154 0x524 0x808 0x1 0x0
-+#define MX6QDL_PAD_EIM_D20__IPU1_DI0_PIN16          0x154 0x524 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D20__IPU1_CSI1_DATA15        0x154 0x524 0x89c 0x3 0x1
-+#define MX6QDL_PAD_EIM_D20__UART1_RTS_B             0x154 0x524 0x8f8 0x4 0x1
-+#define MX6QDL_PAD_EIM_D20__UART1_CTS_B             0x154 0x524 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D20__GPIO3_IO20              0x154 0x524 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D20__EPIT2_OUT               0x154 0x524 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D21__EIM_DATA21              0x158 0x528 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D21__ECSPI4_SCLK             0x158 0x528 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D21__IPU1_DI0_PIN17          0x158 0x528 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D21__IPU1_CSI1_DATA11        0x158 0x528 0x88c 0x3 0x0
-+#define MX6QDL_PAD_EIM_D21__USB_OTG_OC              0x158 0x528 0x920 0x4 0x0
-+#define MX6QDL_PAD_EIM_D21__GPIO3_IO21              0x158 0x528 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D21__I2C1_SCL                0x158 0x528 0x868 0x6 0x1
-+#define MX6QDL_PAD_EIM_D21__SPDIF_IN                0x158 0x528 0x8f0 0x7 0x0
-+#define MX6QDL_PAD_EIM_D22__EIM_DATA22              0x15c 0x52c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D22__ECSPI4_MISO             0x15c 0x52c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D22__IPU1_DI0_PIN01          0x15c 0x52c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D22__IPU1_CSI1_DATA10        0x15c 0x52c 0x888 0x3 0x0
-+#define MX6QDL_PAD_EIM_D22__USB_OTG_PWR             0x15c 0x52c 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D22__GPIO3_IO22              0x15c 0x52c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D22__SPDIF_OUT               0x15c 0x52c 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D22__EPDC_SDCE6              0x15c 0x52c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D23__EIM_DATA23              0x160 0x530 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D23__IPU1_DI0_D0_CS          0x160 0x530 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D23__UART3_CTS_B             0x160 0x530 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D23__UART3_RTS_B             0x160 0x530 0x908 0x2 0x0
-+#define MX6QDL_PAD_EIM_D23__UART1_DCD_B             0x160 0x530 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_D23__IPU1_CSI1_DATA_EN       0x160 0x530 0x8b0 0x4 0x0
-+#define MX6QDL_PAD_EIM_D23__GPIO3_IO23              0x160 0x530 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D23__IPU1_DI1_PIN02          0x160 0x530 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D23__IPU1_DI1_PIN14          0x160 0x530 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D23__EPDC_DATA11             0x160 0x530 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D24__EIM_DATA24              0x164 0x534 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D24__ECSPI4_SS2              0x164 0x534 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D24__UART3_TX_DATA           0x164 0x534 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D24__UART3_RX_DATA           0x164 0x534 0x90c 0x2 0x0
-+#define MX6QDL_PAD_EIM_D24__ECSPI1_SS2              0x164 0x534 0x7ec 0x3 0x0
-+#define MX6QDL_PAD_EIM_D24__ECSPI2_SS2              0x164 0x534 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D24__GPIO3_IO24              0x164 0x534 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D24__AUD5_RXFS               0x164 0x534 0x7bc 0x6 0x1
-+#define MX6QDL_PAD_EIM_D24__UART1_DTR_B             0x164 0x534 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D24__EPDC_SDCE7              0x164 0x534 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D25__EIM_DATA25              0x168 0x538 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D25__ECSPI4_SS3              0x168 0x538 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D25__UART3_RX_DATA           0x168 0x538 0x90c 0x2 0x1
-+#define MX6QDL_PAD_EIM_D25__UART3_TX_DATA           0x168 0x538 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D25__ECSPI1_SS3              0x168 0x538 0x7f0 0x3 0x0
-+#define MX6QDL_PAD_EIM_D25__ECSPI2_SS3              0x168 0x538 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D25__GPIO3_IO25              0x168 0x538 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D25__AUD5_RXC                0x168 0x538 0x7b8 0x6 0x1
-+#define MX6QDL_PAD_EIM_D25__UART1_DSR_B             0x168 0x538 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D25__EPDC_SDCE8              0x168 0x538 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D26__EIM_DATA26              0x16c 0x53c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU1_DI1_PIN11          0x16c 0x53c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU1_CSI0_DATA01        0x16c 0x53c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU1_CSI1_DATA14        0x16c 0x53c 0x898 0x3 0x1
-+#define MX6QDL_PAD_EIM_D26__UART2_TX_DATA           0x16c 0x53c 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D26__UART2_RX_DATA           0x16c 0x53c 0x904 0x4 0x0
-+#define MX6QDL_PAD_EIM_D26__GPIO3_IO26              0x16c 0x53c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU1_SISG2              0x16c 0x53c 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU1_DISP1_DATA22       0x16c 0x53c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D26__EPDC_SDOED              0x16c 0x53c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D27__EIM_DATA27              0x170 0x540 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU1_DI1_PIN13          0x170 0x540 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU1_CSI0_DATA00        0x170 0x540 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU1_CSI1_DATA13        0x170 0x540 0x894 0x3 0x1
-+#define MX6QDL_PAD_EIM_D27__UART2_RX_DATA           0x170 0x540 0x904 0x4 0x1
-+#define MX6QDL_PAD_EIM_D27__UART2_TX_DATA           0x170 0x540 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D27__GPIO3_IO27              0x170 0x540 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU1_SISG3              0x170 0x540 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU1_DISP1_DATA23       0x170 0x540 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D27__EPDC_SDOE               0x170 0x540 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D28__EIM_DATA28              0x174 0x544 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D28__I2C1_SDA                0x174 0x544 0x86c 0x1 0x1
-+#define MX6QDL_PAD_EIM_D28__ECSPI4_MOSI             0x174 0x544 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D28__IPU1_CSI1_DATA12        0x174 0x544 0x890 0x3 0x1
-+#define MX6QDL_PAD_EIM_D28__UART2_CTS_B             0x174 0x544 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D28__UART2_RTS_B             0x174 0x544 0x900 0x4 0x0
-+#define MX6QDL_PAD_EIM_D28__UART2_DTE_CTS_B         0x174 0x544 0x900 0x4 0x0
-+#define MX6QDL_PAD_EIM_D28__UART2_DTE_RTS_B         0x174 0x544 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D28__GPIO3_IO28              0x174 0x544 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D28__IPU1_EXT_TRIG           0x174 0x544 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D28__IPU1_DI0_PIN13          0x174 0x544 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D28__EPDC_PWR_CTRL3          0x174 0x544 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D29__EIM_DATA29              0x178 0x548 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D29__IPU1_DI1_PIN15          0x178 0x548 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D29__ECSPI4_SS0              0x178 0x548 0x808 0x2 0x1
-+#define MX6QDL_PAD_EIM_D29__UART2_RTS_B             0x178 0x548 0x900 0x4 0x1
-+#define MX6QDL_PAD_EIM_D29__UART2_CTS_B             0x178 0x548 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D29__UART2_DTE_RTS_B         0x178 0x548 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D29__UART2_DTE_CTS_B         0x178 0x548 0x900 0x4 0x1
-+#define MX6QDL_PAD_EIM_D29__GPIO3_IO29              0x178 0x548 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D29__IPU1_CSI1_VSYNC         0x178 0x548 0x8bc 0x6 0x0
-+#define MX6QDL_PAD_EIM_D29__IPU1_DI0_PIN14          0x178 0x548 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D29__EPDC_PWR_WAKE           0x178 0x548 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D30__EIM_DATA30              0x17c 0x54c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D30__IPU1_DISP1_DATA21       0x17c 0x54c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D30__IPU1_DI0_PIN11          0x17c 0x54c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D30__IPU1_CSI0_DATA03        0x17c 0x54c 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_D30__UART3_CTS_B             0x17c 0x54c 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D30__UART3_RTS_B             0x17c 0x54c 0x908 0x4 0x1
-+#define MX6QDL_PAD_EIM_D30__GPIO3_IO30              0x17c 0x54c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D30__USB_H1_OC               0x17c 0x54c 0x924 0x6 0x0
-+#define MX6QDL_PAD_EIM_D30__EPDC_SDOEZ              0x17c 0x54c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D31__EIM_DATA31              0x180 0x550 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D31__IPU1_DISP1_DATA20       0x180 0x550 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D31__IPU1_DI0_PIN12          0x180 0x550 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D31__IPU1_CSI0_DATA02        0x180 0x550 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_D31__UART3_RTS_B             0x180 0x550 0x908 0x4 0x2
-+#define MX6QDL_PAD_EIM_D31__UART3_CTS_B             0x180 0x550 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D31__GPIO3_IO31              0x180 0x550 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D31__USB_H1_PWR              0x180 0x550 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D31__EPDC_SDCLK_P            0x180 0x550 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_D31__EIM_ACLK_FREERUN        0x180 0x550 0x000 0x9 0x0
-+#define MX6QDL_PAD_EIM_DA0__EIM_AD00                0x184 0x554 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA0__IPU1_DISP1_DATA09       0x184 0x554 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA0__IPU1_CSI1_DATA09        0x184 0x554 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA0__GPIO3_IO00              0x184 0x554 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA0__SRC_BOOT_CFG00          0x184 0x554 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA0__EPDC_SDCLK_N            0x184 0x554 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA1__EIM_AD01                0x188 0x558 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA1__IPU1_DISP1_DATA08       0x188 0x558 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA1__IPU1_CSI1_DATA08        0x188 0x558 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA1__GPIO3_IO01              0x188 0x558 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA1__SRC_BOOT_CFG01          0x188 0x558 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA1__EPDC_SDLE               0x188 0x558 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA10__EIM_AD10               0x18c 0x55c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA10__IPU1_DI1_PIN15         0x18c 0x55c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA10__IPU1_CSI1_DATA_EN      0x18c 0x55c 0x8b0 0x2 0x1
-+#define MX6QDL_PAD_EIM_DA10__GPIO3_IO10             0x18c 0x55c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA10__SRC_BOOT_CFG10         0x18c 0x55c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA10__EPDC_DATA01            0x18c 0x55c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA11__EIM_AD11               0x190 0x560 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA11__IPU1_DI1_PIN02         0x190 0x560 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA11__IPU1_CSI1_HSYNC        0x190 0x560 0x8b4 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA11__GPIO3_IO11             0x190 0x560 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA11__SRC_BOOT_CFG11         0x190 0x560 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA11__EPDC_DATA03            0x190 0x560 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA12__EIM_AD12               0x194 0x564 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA12__IPU1_DI1_PIN03         0x194 0x564 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA12__IPU1_CSI1_VSYNC        0x194 0x564 0x8bc 0x2 0x1
-+#define MX6QDL_PAD_EIM_DA12__GPIO3_IO12             0x194 0x564 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA12__SRC_BOOT_CFG12         0x194 0x564 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA12__EPDC_DATA02            0x194 0x564 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA13__EIM_AD13               0x198 0x568 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA13__IPU1_DI1_D0_CS         0x198 0x568 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA13__GPIO3_IO13             0x198 0x568 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA13__SRC_BOOT_CFG13         0x198 0x568 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA13__EPDC_DATA13            0x198 0x568 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA14__EIM_AD14               0x19c 0x56c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA14__IPU1_DI1_D1_CS         0x19c 0x56c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA14__GPIO3_IO14             0x19c 0x56c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA14__SRC_BOOT_CFG14         0x19c 0x56c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA14__EPDC_DATA14            0x19c 0x56c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA15__EIM_AD15               0x1a0 0x570 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA15__IPU1_DI1_PIN01         0x1a0 0x570 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA15__IPU1_DI1_PIN04         0x1a0 0x570 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA15__GPIO3_IO15             0x1a0 0x570 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA15__SRC_BOOT_CFG15         0x1a0 0x570 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA15__EPDC_DATA09            0x1a0 0x570 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA2__EIM_AD02                0x1a4 0x574 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA2__IPU1_DISP1_DATA07       0x1a4 0x574 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA2__IPU1_CSI1_DATA07        0x1a4 0x574 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA2__GPIO3_IO02              0x1a4 0x574 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA2__SRC_BOOT_CFG02          0x1a4 0x574 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA2__EPDC_BDR0               0x1a4 0x574 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA3__EIM_AD03                0x1a8 0x578 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA3__IPU1_DISP1_DATA06       0x1a8 0x578 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA3__IPU1_CSI1_DATA06        0x1a8 0x578 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA3__GPIO3_IO03              0x1a8 0x578 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA3__SRC_BOOT_CFG03          0x1a8 0x578 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA3__EPDC_BDR1               0x1a8 0x578 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA4__EIM_AD04                0x1ac 0x57c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA4__IPU1_DISP1_DATA05       0x1ac 0x57c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA4__IPU1_CSI1_DATA05        0x1ac 0x57c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA4__GPIO3_IO04              0x1ac 0x57c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA4__SRC_BOOT_CFG04          0x1ac 0x57c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA4__EPDC_SDCE0              0x1ac 0x57c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA5__EIM_AD05                0x1b0 0x580 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA5__IPU1_DISP1_DATA04       0x1b0 0x580 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA5__IPU1_CSI1_DATA04        0x1b0 0x580 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA5__GPIO3_IO05              0x1b0 0x580 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA5__SRC_BOOT_CFG05          0x1b0 0x580 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA5__EPDC_SDCE1              0x1b0 0x580 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA6__EIM_AD06                0x1b4 0x584 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA6__IPU1_DISP1_DATA03       0x1b4 0x584 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA6__IPU1_CSI1_DATA03        0x1b4 0x584 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA6__GPIO3_IO06              0x1b4 0x584 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA6__SRC_BOOT_CFG06          0x1b4 0x584 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA6__EPDC_SDCE2              0x1b4 0x584 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA7__EIM_AD07                0x1b8 0x588 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA7__IPU1_DISP1_DATA02       0x1b8 0x588 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA7__IPU1_CSI1_DATA02        0x1b8 0x588 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA7__GPIO3_IO07              0x1b8 0x588 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA7__SRC_BOOT_CFG07          0x1b8 0x588 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA7__EPDC_SDCE3              0x1b8 0x588 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA8__EIM_AD08                0x1bc 0x58c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA8__IPU1_DISP1_DATA01       0x1bc 0x58c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA8__IPU1_CSI1_DATA01        0x1bc 0x58c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA8__GPIO3_IO08              0x1bc 0x58c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA8__SRC_BOOT_CFG08          0x1bc 0x58c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA8__EPDC_SDCE4              0x1bc 0x58c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_DA9__EIM_AD09                0x1c0 0x590 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA9__IPU1_DISP1_DATA00       0x1c0 0x590 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA9__IPU1_CSI1_DATA00        0x1c0 0x590 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA9__GPIO3_IO09              0x1c0 0x590 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA9__SRC_BOOT_CFG09          0x1c0 0x590 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA9__EPDC_SDCE5              0x1c0 0x590 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_EB0__EIM_EB0_B               0x1c4 0x594 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_EB0__IPU1_DISP1_DATA11       0x1c4 0x594 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_EB0__IPU1_CSI1_DATA11        0x1c4 0x594 0x88c 0x2 0x1
-+#define MX6QDL_PAD_EIM_EB0__CCM_PMIC_READY          0x1c4 0x594 0x7d4 0x4 0x0
-+#define MX6QDL_PAD_EIM_EB0__GPIO2_IO28              0x1c4 0x594 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_EB0__SRC_BOOT_CFG27          0x1c4 0x594 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_EB0__EPDC_PWR_COM            0x1c4 0x594 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_EB1__EIM_EB1_B               0x1c8 0x598 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_EB1__IPU1_DISP1_DATA10       0x1c8 0x598 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_EB1__IPU1_CSI1_DATA10        0x1c8 0x598 0x888 0x2 0x1
-+#define MX6QDL_PAD_EIM_EB1__GPIO2_IO29              0x1c8 0x598 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_EB1__SRC_BOOT_CFG28          0x1c8 0x598 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_EB1__EPDC_SDSHR              0x1c8 0x598 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_EB2__EIM_EB2_B               0x1cc 0x59c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_EB2__ECSPI1_SS0              0x1cc 0x59c 0x7e4 0x1 0x2
-+#define MX6QDL_PAD_EIM_EB2__IPU1_CSI1_DATA19        0x1cc 0x59c 0x8ac 0x3 0x1
-+#define MX6QDL_PAD_EIM_EB2__HDMI_TX_DDC_SCL         0x1cc 0x59c 0x860 0x4 0x0
-+#define MX6QDL_PAD_EIM_EB2__GPIO2_IO30              0x1cc 0x59c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_EB2__I2C2_SCL                0x1cc 0x59c 0x870 0x6 0x0
-+#define MX6QDL_PAD_EIM_EB2__SRC_BOOT_CFG30          0x1cc 0x59c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_EB2__EPDC_DATA05             0x1cc 0x59c 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_EB3__EIM_EB3_B               0x1d0 0x5a0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_EB3__ECSPI4_RDY              0x1d0 0x5a0 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_EB3__UART3_RTS_B             0x1d0 0x5a0 0x908 0x2 0x3
-+#define MX6QDL_PAD_EIM_EB3__UART3_CTS_B             0x1d0 0x5a0 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_EB3__UART1_RI_B              0x1d0 0x5a0 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_EB3__IPU1_CSI1_HSYNC         0x1d0 0x5a0 0x8b4 0x4 0x1
-+#define MX6QDL_PAD_EIM_EB3__GPIO2_IO31              0x1d0 0x5a0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_EB3__IPU1_DI1_PIN03          0x1d0 0x5a0 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_EB3__SRC_BOOT_CFG31          0x1d0 0x5a0 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_EB3__EPDC_SDCE0              0x1d0 0x5a0 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_EB3__EIM_ACLK_FREERUN        0x1d0 0x5a0 0x000 0x9 0x0
-+#define MX6QDL_PAD_EIM_LBA__EIM_LBA_B               0x1d4 0x5a4 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_LBA__IPU1_DI1_PIN17          0x1d4 0x5a4 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_LBA__ECSPI2_SS1              0x1d4 0x5a4 0x804 0x2 0x1
-+#define MX6QDL_PAD_EIM_LBA__GPIO2_IO27              0x1d4 0x5a4 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_LBA__SRC_BOOT_CFG26          0x1d4 0x5a4 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_LBA__EPDC_DATA04             0x1d4 0x5a4 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_OE__EIM_OE_B                 0x1d8 0x5a8 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_OE__IPU1_DI1_PIN07           0x1d8 0x5a8 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_OE__ECSPI2_MISO              0x1d8 0x5a8 0x7f8 0x2 0x2
-+#define MX6QDL_PAD_EIM_OE__GPIO2_IO25               0x1d8 0x5a8 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_OE__EPDC_PWR_IRQ             0x1d8 0x5a8 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_RW__EIM_RW                   0x1dc 0x5ac 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_RW__IPU1_DI1_PIN08           0x1dc 0x5ac 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_RW__ECSPI2_SS0               0x1dc 0x5ac 0x800 0x2 0x2
-+#define MX6QDL_PAD_EIM_RW__GPIO2_IO26               0x1dc 0x5ac 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_RW__SRC_BOOT_CFG29           0x1dc 0x5ac 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_RW__EPDC_DATA07              0x1dc 0x5ac 0x000 0x8 0x0
-+#define MX6QDL_PAD_EIM_WAIT__EIM_WAIT_B             0x1e0 0x5b0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_WAIT__EIM_DTACK_B            0x1e0 0x5b0 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_WAIT__GPIO5_IO00             0x1e0 0x5b0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_WAIT__SRC_BOOT_CFG25         0x1e0 0x5b0 0x000 0x7 0x0
-+#define MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN          0x1e4 0x5b4 0x828 0x1 0x0
-+#define MX6QDL_PAD_ENET_CRS_DV__ESAI_TX_CLK         0x1e4 0x5b4 0x840 0x2 0x0
-+#define MX6QDL_PAD_ENET_CRS_DV__SPDIF_EXT_CLK       0x1e4 0x5b4 0x8f4 0x3 0x0
-+#define MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25          0x1e4 0x5b4 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_MDC__MLB_DATA               0x1e8 0x5b8 0x8e0 0x0 0x0
-+#define MX6QDL_PAD_ENET_MDC__ENET_MDC               0x1e8 0x5b8 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_MDC__ESAI_TX5_RX0           0x1e8 0x5b8 0x858 0x2 0x0
-+#define MX6QDL_PAD_ENET_MDC__ENET_1588_EVENT1_IN    0x1e8 0x5b8 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_MDC__GPIO1_IO31             0x1e8 0x5b8 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_MDIO__ENET_MDIO             0x1ec 0x5bc 0x810 0x1 0x0
-+#define MX6QDL_PAD_ENET_MDIO__ESAI_RX_CLK           0x1ec 0x5bc 0x83c 0x2 0x0
-+#define MX6QDL_PAD_ENET_MDIO__ENET_1588_EVENT1_OUT  0x1ec 0x5bc 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_MDIO__GPIO1_IO22            0x1ec 0x5bc 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_MDIO__SPDIF_LOCK            0x1ec 0x5bc 0x000 0x6 0x0
-+#define MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK        0x1f0 0x5c0 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_REF_CLK__ESAI_RX_FS         0x1f0 0x5c0 0x82c 0x2 0x0
-+#define MX6QDL_PAD_ENET_REF_CLK__GPIO1_IO23         0x1f0 0x5c0 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_REF_CLK__SPDIF_SR_CLK       0x1f0 0x5c0 0x000 0x6 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID           0x1f4 0x5c4 0x790 0x0 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__ENET_RX_ER           0x1f4 0x5c4 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__ESAI_RX_HF_CLK       0x1f4 0x5c4 0x834 0x2 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__SPDIF_IN             0x1f4 0x5c4 0x8f0 0x3 0x1
-+#define MX6QDL_PAD_ENET_RX_ER__ENET_1588_EVENT2_OUT 0x1f4 0x5c4 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__GPIO1_IO24           0x1f4 0x5c4 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0         0x1f8 0x5c8 0x818 0x1 0x0
-+#define MX6QDL_PAD_ENET_RXD0__ESAI_TX_HF_CLK        0x1f8 0x5c8 0x838 0x2 0x0
-+#define MX6QDL_PAD_ENET_RXD0__SPDIF_OUT             0x1f8 0x5c8 0x000 0x3 0x0
-+#define MX6QDL_PAD_ENET_RXD0__GPIO1_IO27            0x1f8 0x5c8 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_RXD1__MLB_SIG               0x1fc 0x5cc 0x8e4 0x0 0x0
-+#define MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1         0x1fc 0x5cc 0x81c 0x1 0x0
-+#define MX6QDL_PAD_ENET_RXD1__ESAI_TX_FS            0x1fc 0x5cc 0x830 0x2 0x0
-+#define MX6QDL_PAD_ENET_RXD1__ENET_1588_EVENT3_OUT  0x1fc 0x5cc 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_RXD1__GPIO1_IO26            0x1fc 0x5cc 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN           0x200 0x5d0 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_TX_EN__ESAI_TX3_RX2         0x200 0x5d0 0x850 0x2 0x0
-+#define MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28           0x200 0x5d0 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_TX_EN__I2C4_SCL             0x200 0x5d0 0x880 0x9 0x0
-+#define MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0         0x204 0x5d4 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_TXD0__ESAI_TX4_RX1          0x204 0x5d4 0x854 0x2 0x0
-+#define MX6QDL_PAD_ENET_TXD0__GPIO1_IO30            0x204 0x5d4 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_TXD1__MLB_CLK               0x208 0x5d8 0x8dc 0x0 0x0
-+#define MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1         0x208 0x5d8 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_TXD1__ESAI_TX2_RX3          0x208 0x5d8 0x84c 0x2 0x0
-+#define MX6QDL_PAD_ENET_TXD1__ENET_1588_EVENT0_IN   0x208 0x5d8 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_TXD1__GPIO1_IO29            0x208 0x5d8 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_TXD1__I2C4_SDA              0x208 0x5d8 0x884 0x9 0x0
-+#define MX6QDL_PAD_GPIO_0__CCM_CLKO1                0x20c 0x5dc 0x000 0x0 0x0
-+#define MX6QDL_PAD_GPIO_0__KEY_COL5                 0x20c 0x5dc 0x8c0 0x2 0x1
-+#define MX6QDL_PAD_GPIO_0__ASRC_EXT_CLK             0x20c 0x5dc 0x794 0x3 0x0
-+#define MX6QDL_PAD_GPIO_0__EPIT1_OUT                0x20c 0x5dc 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_0__GPIO1_IO00               0x20c 0x5dc 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_0__USB_H1_PWR               0x20c 0x5dc 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_0__SNVS_VIO_5               0x20c 0x5dc 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_1__ESAI_RX_CLK              0x210 0x5e0 0x83c 0x0 0x1
-+#define MX6QDL_PAD_GPIO_1__WDOG2_B                  0x210 0x5e0 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_1__KEY_ROW5                 0x210 0x5e0 0x8cc 0x2 0x1
-+#define MX6QDL_PAD_GPIO_1__USB_OTG_ID               0x210 0x5e0 0x790 0x3 0x1
-+#define MX6QDL_PAD_GPIO_1__PWM2_OUT                 0x210 0x5e0 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_1__GPIO1_IO01               0x210 0x5e0 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_1__SD1_CD_B                 0x210 0x5e0 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_16__ESAI_TX3_RX2            0x214 0x5e4 0x850 0x0 0x1
-+#define MX6QDL_PAD_GPIO_16__ENET_1588_EVENT2_IN     0x214 0x5e4 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_16__ENET_REF_CLK            0x214 0x5e4 0x80c 0x2 0x0
-+#define MX6QDL_PAD_GPIO_16__SD1_LCTL                0x214 0x5e4 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_16__SPDIF_IN                0x214 0x5e4 0x8f0 0x4 0x2
-+#define MX6QDL_PAD_GPIO_16__GPIO7_IO11              0x214 0x5e4 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_16__I2C3_SDA                0x214 0x5e4 0x87c 0x6 0x1
-+#define MX6QDL_PAD_GPIO_16__JTAG_DE_B               0x214 0x5e4 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_17__ESAI_TX0                0x218 0x5e8 0x844 0x0 0x0
-+#define MX6QDL_PAD_GPIO_17__ENET_1588_EVENT3_IN     0x218 0x5e8 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_17__CCM_PMIC_READY          0x218 0x5e8 0x7d4 0x2 0x1
-+#define MX6QDL_PAD_GPIO_17__SDMA_EXT_EVENT0         0x218 0x5e8 0x8e8 0x3 0x1
-+#define MX6QDL_PAD_GPIO_17__SPDIF_OUT               0x218 0x5e8 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_17__GPIO7_IO12              0x218 0x5e8 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_18__ESAI_TX1                0x21c 0x5ec 0x848 0x0 0x0
-+#define MX6QDL_PAD_GPIO_18__ENET_RX_CLK             0x21c 0x5ec 0x814 0x1 0x0
-+#define MX6QDL_PAD_GPIO_18__SD3_VSELECT             0x21c 0x5ec 0x000 0x2 0x0
-+#define MX6QDL_PAD_GPIO_18__SDMA_EXT_EVENT1         0x21c 0x5ec 0x8ec 0x3 0x1
-+#define MX6QDL_PAD_GPIO_18__ASRC_EXT_CLK            0x21c 0x5ec 0x794 0x4 0x1
-+#define MX6QDL_PAD_GPIO_18__GPIO7_IO13              0x21c 0x5ec 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_18__SNVS_VIO_5_CTL          0x21c 0x5ec 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_19__KEY_COL5                0x220 0x5f0 0x8c0 0x0 0x2
-+#define MX6QDL_PAD_GPIO_19__ENET_1588_EVENT0_OUT    0x220 0x5f0 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_19__SPDIF_OUT               0x220 0x5f0 0x000 0x2 0x0
-+#define MX6QDL_PAD_GPIO_19__CCM_CLKO1               0x220 0x5f0 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_19__ECSPI1_RDY              0x220 0x5f0 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_19__GPIO4_IO05              0x220 0x5f0 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_19__ENET_TX_ER              0x220 0x5f0 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_2__ESAI_TX_FS               0x224 0x5f4 0x830 0x0 0x1
-+#define MX6QDL_PAD_GPIO_2__KEY_ROW6                 0x224 0x5f4 0x8d0 0x2 0x1
-+#define MX6QDL_PAD_GPIO_2__GPIO1_IO02               0x224 0x5f4 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_2__SD2_WP                   0x224 0x5f4 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_2__MLB_DATA                 0x224 0x5f4 0x8e0 0x7 0x1
-+#define MX6QDL_PAD_GPIO_3__ESAI_RX_HF_CLK           0x228 0x5f8 0x834 0x0 0x1
-+#define MX6QDL_PAD_GPIO_3__I2C3_SCL                 0x228 0x5f8 0x878 0x2 0x1
-+#define MX6QDL_PAD_GPIO_3__XTALOSC_REF_CLK_24M      0x228 0x5f8 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_3__CCM_CLKO2                0x228 0x5f8 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_3__GPIO1_IO03               0x228 0x5f8 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_3__USB_H1_OC                0x228 0x5f8 0x924 0x6 0x1
-+#define MX6QDL_PAD_GPIO_3__MLB_CLK                  0x228 0x5f8 0x8dc 0x7 0x1
-+#define MX6QDL_PAD_GPIO_4__ESAI_TX_HF_CLK           0x22c 0x5fc 0x838 0x0 0x1
-+#define MX6QDL_PAD_GPIO_4__KEY_COL7                 0x22c 0x5fc 0x8c8 0x2 0x1
-+#define MX6QDL_PAD_GPIO_4__GPIO1_IO04               0x22c 0x5fc 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_4__SD2_CD_B                 0x22c 0x5fc 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_5__ESAI_TX2_RX3             0x230 0x600 0x84c 0x0 0x1
-+#define MX6QDL_PAD_GPIO_5__KEY_ROW7                 0x230 0x600 0x8d4 0x2 0x1
-+#define MX6QDL_PAD_GPIO_5__CCM_CLKO1                0x230 0x600 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_5__GPIO1_IO05               0x230 0x600 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_5__I2C3_SCL                 0x230 0x600 0x878 0x6 0x2
-+#define MX6QDL_PAD_GPIO_5__ARM_EVENTI               0x230 0x600 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_6__ESAI_TX_CLK              0x234 0x604 0x840 0x0 0x1
-+#define MX6QDL_PAD_GPIO_6__I2C3_SDA                 0x234 0x604 0x87c 0x2 0x2
-+#define MX6QDL_PAD_GPIO_6__GPIO1_IO06               0x234 0x604 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_6__SD2_LCTL                 0x234 0x604 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_6__MLB_SIG                  0x234 0x604 0x8e4 0x7 0x1
-+#define MX6QDL_PAD_GPIO_7__ESAI_TX4_RX1             0x238 0x608 0x854 0x0 0x1
-+#define MX6QDL_PAD_GPIO_7__EPIT1_OUT                0x238 0x608 0x000 0x2 0x0
-+#define MX6QDL_PAD_GPIO_7__FLEXCAN1_TX              0x238 0x608 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_7__UART2_TX_DATA            0x238 0x608 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_7__UART2_RX_DATA            0x238 0x608 0x904 0x4 0x2
-+#define MX6QDL_PAD_GPIO_7__GPIO1_IO07               0x238 0x608 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_7__SPDIF_LOCK               0x238 0x608 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_7__USB_OTG_HOST_MODE        0x238 0x608 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_7__I2C4_SCL                 0x238 0x608 0x880 0x8 0x1
-+#define MX6QDL_PAD_GPIO_8__ESAI_TX5_RX0             0x23c 0x60c 0x858 0x0 0x1
-+#define MX6QDL_PAD_GPIO_8__XTALOSC_REF_CLK_32K      0x23c 0x60c 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_8__EPIT2_OUT                0x23c 0x60c 0x000 0x2 0x0
-+#define MX6QDL_PAD_GPIO_8__FLEXCAN1_RX              0x23c 0x60c 0x7c8 0x3 0x0
-+#define MX6QDL_PAD_GPIO_8__UART2_RX_DATA            0x23c 0x60c 0x904 0x4 0x3
-+#define MX6QDL_PAD_GPIO_8__UART2_TX_DATA            0x23c 0x60c 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_8__GPIO1_IO08               0x23c 0x60c 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_8__SPDIF_SR_CLK             0x23c 0x60c 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_8__USB_OTG_PWR_CTL_WAKE     0x23c 0x60c 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_8__I2C4_SDA                 0x23c 0x60c 0x884 0x8 0x1
-+#define MX6QDL_PAD_GPIO_9__ESAI_RX_FS               0x240 0x610 0x82c 0x0 0x1
-+#define MX6QDL_PAD_GPIO_9__WDOG1_B                  0x240 0x610 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_9__KEY_COL6                 0x240 0x610 0x8c4 0x2 0x1
-+#define MX6QDL_PAD_GPIO_9__CCM_REF_EN_B             0x240 0x610 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_9__PWM1_OUT                 0x240 0x610 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_9__GPIO1_IO09               0x240 0x610 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_9__SD1_WP                   0x240 0x610 0x92c 0x6 0x1
-+#define MX6QDL_PAD_KEY_COL0__ECSPI1_SCLK            0x244 0x62c 0x7d8 0x0 0x3
-+#define MX6QDL_PAD_KEY_COL0__ENET_RX_DATA3          0x244 0x62c 0x824 0x1 0x0
-+#define MX6QDL_PAD_KEY_COL0__AUD5_TXC               0x244 0x62c 0x7c0 0x2 0x1
-+#define MX6QDL_PAD_KEY_COL0__KEY_COL0               0x244 0x62c 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL0__UART4_TX_DATA          0x244 0x62c 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL0__UART4_RX_DATA          0x244 0x62c 0x914 0x4 0x2
-+#define MX6QDL_PAD_KEY_COL0__GPIO4_IO06             0x244 0x62c 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_COL0__DCIC1_OUT              0x244 0x62c 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_COL1__ECSPI1_MISO            0x248 0x630 0x7dc 0x0 0x3
-+#define MX6QDL_PAD_KEY_COL1__ENET_MDIO              0x248 0x630 0x810 0x1 0x1
-+#define MX6QDL_PAD_KEY_COL1__AUD5_TXFS              0x248 0x630 0x7c4 0x2 0x1
-+#define MX6QDL_PAD_KEY_COL1__KEY_COL1               0x248 0x630 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL1__UART5_TX_DATA          0x248 0x630 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL1__UART5_RX_DATA          0x248 0x630 0x91c 0x4 0x2
-+#define MX6QDL_PAD_KEY_COL1__GPIO4_IO08             0x248 0x630 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_COL1__SD1_VSELECT            0x248 0x630 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_COL2__ECSPI1_SS1             0x24c 0x634 0x7e8 0x0 0x2
-+#define MX6QDL_PAD_KEY_COL2__ENET_RX_DATA2          0x24c 0x634 0x820 0x1 0x0
-+#define MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX            0x24c 0x634 0x000 0x2 0x0
-+#define MX6QDL_PAD_KEY_COL2__KEY_COL2               0x24c 0x634 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL2__ENET_MDC               0x24c 0x634 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL2__GPIO4_IO10             0x24c 0x634 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_COL2__USB_H1_PWR_CTL_WAKE    0x24c 0x634 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_COL3__ECSPI1_SS3             0x250 0x638 0x7f0 0x0 0x1
-+#define MX6QDL_PAD_KEY_COL3__ENET_CRS               0x250 0x638 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_COL3__HDMI_TX_DDC_SCL        0x250 0x638 0x860 0x2 0x1
-+#define MX6QDL_PAD_KEY_COL3__KEY_COL3               0x250 0x638 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL3__I2C2_SCL               0x250 0x638 0x870 0x4 0x1
-+#define MX6QDL_PAD_KEY_COL3__GPIO4_IO12             0x250 0x638 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_COL3__SPDIF_IN               0x250 0x638 0x8f0 0x6 0x3
-+#define MX6QDL_PAD_KEY_COL4__FLEXCAN2_TX            0x254 0x63c 0x000 0x0 0x0
-+#define MX6QDL_PAD_KEY_COL4__IPU1_SISG4             0x254 0x63c 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_COL4__USB_OTG_OC             0x254 0x63c 0x920 0x2 0x1
-+#define MX6QDL_PAD_KEY_COL4__KEY_COL4               0x254 0x63c 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL4__UART5_RTS_B            0x254 0x63c 0x918 0x4 0x2
-+#define MX6QDL_PAD_KEY_COL4__UART5_CTS_B            0x254 0x63c 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL4__GPIO4_IO14             0x254 0x63c 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW0__ECSPI1_MOSI            0x258 0x640 0x7e0 0x0 0x3
-+#define MX6QDL_PAD_KEY_ROW0__ENET_TX_DATA3          0x258 0x640 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_ROW0__AUD5_TXD               0x258 0x640 0x7b4 0x2 0x1
-+#define MX6QDL_PAD_KEY_ROW0__KEY_ROW0               0x258 0x640 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA          0x258 0x640 0x914 0x4 0x3
-+#define MX6QDL_PAD_KEY_ROW0__UART4_TX_DATA          0x258 0x640 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_ROW0__GPIO4_IO07             0x258 0x640 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW0__DCIC2_OUT              0x258 0x640 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_ROW1__ECSPI1_SS0             0x25c 0x644 0x7e4 0x0 0x3
-+#define MX6QDL_PAD_KEY_ROW1__ENET_COL               0x25c 0x644 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_ROW1__AUD5_RXD               0x25c 0x644 0x7b0 0x2 0x1
-+#define MX6QDL_PAD_KEY_ROW1__KEY_ROW1               0x25c 0x644 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA          0x25c 0x644 0x91c 0x4 0x3
-+#define MX6QDL_PAD_KEY_ROW1__UART5_TX_DATA          0x25c 0x644 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_ROW1__GPIO4_IO09             0x25c 0x644 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW1__SD2_VSELECT            0x25c 0x644 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_ROW2__ECSPI1_SS2             0x260 0x648 0x7ec 0x0 0x1
-+#define MX6QDL_PAD_KEY_ROW2__ENET_TX_DATA2          0x260 0x648 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX            0x260 0x648 0x7c8 0x2 0x1
-+#define MX6QDL_PAD_KEY_ROW2__KEY_ROW2               0x260 0x648 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW2__SD2_VSELECT            0x260 0x648 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_ROW2__GPIO4_IO11             0x260 0x648 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE       0x260 0x648 0x85c 0x6 0x1
-+#define MX6QDL_PAD_KEY_ROW3__ASRC_EXT_CLK           0x264 0x64c 0x794 0x1 0x2
-+#define MX6QDL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA        0x264 0x64c 0x864 0x2 0x1
-+#define MX6QDL_PAD_KEY_ROW3__KEY_ROW3               0x264 0x64c 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW3__I2C2_SDA               0x264 0x64c 0x874 0x4 0x1
-+#define MX6QDL_PAD_KEY_ROW3__GPIO4_IO13             0x264 0x64c 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW3__SD1_VSELECT            0x264 0x64c 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_ROW4__FLEXCAN2_RX            0x268 0x650 0x7cc 0x0 0x0
-+#define MX6QDL_PAD_KEY_ROW4__IPU1_SISG5             0x268 0x650 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_ROW4__USB_OTG_PWR            0x268 0x650 0x000 0x2 0x0
-+#define MX6QDL_PAD_KEY_ROW4__KEY_ROW4               0x268 0x650 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW4__UART5_CTS_B            0x268 0x650 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_ROW4__UART5_RTS_B            0x268 0x650 0x918 0x4 0x3
-+#define MX6QDL_PAD_KEY_ROW4__GPIO4_IO15             0x268 0x650 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_ALE__NAND_ALE              0x26c 0x654 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_ALE__SD4_RESET             0x26c 0x654 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_ALE__GPIO6_IO08            0x26c 0x654 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CLE__NAND_CLE              0x270 0x658 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CLE__GPIO6_IO07            0x270 0x658 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS0__NAND_CE0_B            0x274 0x65c 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CS0__GPIO6_IO11            0x274 0x65c 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS1__NAND_CE1_B            0x278 0x660 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CS1__SD4_VSELECT           0x278 0x660 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_CS1__SD3_VSELECT           0x278 0x660 0x000 0x2 0x0
-+#define MX6QDL_PAD_NANDF_CS1__GPIO6_IO14            0x278 0x660 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS2__NAND_CE2_B            0x27c 0x664 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CS2__IPU1_SISG0            0x27c 0x664 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_CS2__ESAI_TX0              0x27c 0x664 0x844 0x2 0x1
-+#define MX6QDL_PAD_NANDF_CS2__EIM_CRE               0x27c 0x664 0x000 0x3 0x0
-+#define MX6QDL_PAD_NANDF_CS2__CCM_CLKO2             0x27c 0x664 0x000 0x4 0x0
-+#define MX6QDL_PAD_NANDF_CS2__GPIO6_IO15            0x27c 0x664 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS3__NAND_CE3_B            0x280 0x668 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CS3__IPU1_SISG1            0x280 0x668 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_CS3__ESAI_TX1              0x280 0x668 0x848 0x2 0x1
-+#define MX6QDL_PAD_NANDF_CS3__EIM_ADDR26            0x280 0x668 0x000 0x3 0x0
-+#define MX6QDL_PAD_NANDF_CS3__GPIO6_IO16            0x280 0x668 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS3__I2C4_SDA              0x280 0x668 0x884 0x9 0x2
-+#define MX6QDL_PAD_NANDF_D0__NAND_DATA00            0x284 0x66c 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D0__SD1_DATA4              0x284 0x66c 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D0__GPIO2_IO00             0x284 0x66c 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D1__NAND_DATA01            0x288 0x670 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D1__SD1_DATA5              0x288 0x670 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D1__GPIO2_IO01             0x288 0x670 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D2__NAND_DATA02            0x28c 0x674 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D2__SD1_DATA6              0x28c 0x674 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D2__GPIO2_IO02             0x28c 0x674 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D3__NAND_DATA03            0x290 0x678 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D3__SD1_DATA7              0x290 0x678 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D3__GPIO2_IO03             0x290 0x678 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D4__NAND_DATA04            0x294 0x67c 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D4__SD2_DATA4              0x294 0x67c 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D4__GPIO2_IO04             0x294 0x67c 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D5__NAND_DATA05            0x298 0x680 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D5__SD2_DATA5              0x298 0x680 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D5__GPIO2_IO05             0x298 0x680 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D6__NAND_DATA06            0x29c 0x684 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D6__SD2_DATA6              0x29c 0x684 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D6__GPIO2_IO06             0x29c 0x684 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D7__NAND_DATA07            0x2a0 0x688 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D7__SD2_DATA7              0x2a0 0x688 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D7__GPIO2_IO07             0x2a0 0x688 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_RB0__NAND_READY_B          0x2a4 0x68c 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_RB0__GPIO6_IO10            0x2a4 0x68c 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_WP_B__NAND_WP_B            0x2a8 0x690 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_WP_B__GPIO6_IO09           0x2a8 0x690 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_WP_B__I2C4_SCL             0x2a8 0x690 0x880 0x9 0x2
-+#define MX6QDL_PAD_RGMII_RD0__HSI_RX_READY          0x2ac 0x694 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RD0__RGMII_RD0             0x2ac 0x694 0x818 0x1 0x1
-+#define MX6QDL_PAD_RGMII_RD0__GPIO6_IO25            0x2ac 0x694 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RD1__HSI_TX_FLAG           0x2b0 0x698 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RD1__RGMII_RD1             0x2b0 0x698 0x81c 0x1 0x1
-+#define MX6QDL_PAD_RGMII_RD1__GPIO6_IO27            0x2b0 0x698 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RD2__HSI_TX_DATA           0x2b4 0x69c 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RD2__RGMII_RD2             0x2b4 0x69c 0x820 0x1 0x1
-+#define MX6QDL_PAD_RGMII_RD2__GPIO6_IO28            0x2b4 0x69c 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RD3__HSI_TX_WAKE           0x2b8 0x6a0 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RD3__RGMII_RD3             0x2b8 0x6a0 0x824 0x1 0x1
-+#define MX6QDL_PAD_RGMII_RD3__GPIO6_IO29            0x2b8 0x6a0 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RX_CTL__USB_H3_DATA        0x2bc 0x6a4 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL       0x2bc 0x6a4 0x828 0x1 0x1
-+#define MX6QDL_PAD_RGMII_RX_CTL__GPIO6_IO24         0x2bc 0x6a4 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RXC__USB_H3_STROBE         0x2c0 0x6a8 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RXC__RGMII_RXC             0x2c0 0x6a8 0x814 0x1 0x1
-+#define MX6QDL_PAD_RGMII_RXC__GPIO6_IO30            0x2c0 0x6a8 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TD0__HSI_TX_READY          0x2c4 0x6ac 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TD0__RGMII_TD0             0x2c4 0x6ac 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TD0__GPIO6_IO20            0x2c4 0x6ac 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TD1__HSI_RX_FLAG           0x2c8 0x6b0 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TD1__RGMII_TD1             0x2c8 0x6b0 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TD1__GPIO6_IO21            0x2c8 0x6b0 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TD2__HSI_RX_DATA           0x2cc 0x6b4 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TD2__RGMII_TD2             0x2cc 0x6b4 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TD2__GPIO6_IO22            0x2cc 0x6b4 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TD3__HSI_RX_WAKE           0x2d0 0x6b8 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TD3__RGMII_TD3             0x2d0 0x6b8 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TD3__GPIO6_IO23            0x2d0 0x6b8 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TX_CTL__USB_H2_STROBE      0x2d4 0x6bc 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL       0x2d4 0x6bc 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TX_CTL__GPIO6_IO26         0x2d4 0x6bc 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TX_CTL__ENET_REF_CLK       0x2d4 0x6bc 0x80c 0x7 0x1
-+#define MX6QDL_PAD_RGMII_TXC__USB_H2_DATA           0x2d8 0x6c0 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TXC__RGMII_TXC             0x2d8 0x6c0 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TXC__SPDIF_EXT_CLK         0x2d8 0x6c0 0x8f4 0x2 0x1
-+#define MX6QDL_PAD_RGMII_TXC__GPIO6_IO19            0x2d8 0x6c0 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TXC__XTALOSC_REF_CLK_24M   0x2d8 0x6c0 0x000 0x7 0x0
-+#define MX6QDL_PAD_SD1_CLK__SD1_CLK                 0x2dc 0x6c4 0x928 0x0 0x1
-+#define MX6QDL_PAD_SD1_CLK__GPT_CLKIN               0x2dc 0x6c4 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_CLK__GPIO1_IO20              0x2dc 0x6c4 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_CMD__SD1_CMD                 0x2e0 0x6c8 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_CMD__PWM4_OUT                0x2e0 0x6c8 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD1_CMD__GPT_COMPARE1            0x2e0 0x6c8 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_CMD__GPIO1_IO18              0x2e0 0x6c8 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT0__SD1_DATA0              0x2e4 0x6cc 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_DAT0__GPT_CAPTURE1           0x2e4 0x6cc 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_DAT0__GPIO1_IO16             0x2e4 0x6cc 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT1__SD1_DATA1              0x2e8 0x6d0 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_DAT1__PWM3_OUT               0x2e8 0x6d0 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD1_DAT1__GPT_CAPTURE2           0x2e8 0x6d0 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_DAT1__GPIO1_IO17             0x2e8 0x6d0 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT2__SD1_DATA2              0x2ec 0x6d4 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_DAT2__GPT_COMPARE2           0x2ec 0x6d4 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD1_DAT2__PWM2_OUT               0x2ec 0x6d4 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_DAT2__WDOG1_B                0x2ec 0x6d4 0x000 0x4 0x0
-+#define MX6QDL_PAD_SD1_DAT2__GPIO1_IO19             0x2ec 0x6d4 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT2__WDOG1_RESET_B_DEB      0x2ec 0x6d4 0x000 0x6 0x0
-+#define MX6QDL_PAD_SD1_DAT3__SD1_DATA3              0x2f0 0x6d8 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_DAT3__GPT_COMPARE3           0x2f0 0x6d8 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD1_DAT3__PWM1_OUT               0x2f0 0x6d8 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_DAT3__WDOG2_B                0x2f0 0x6d8 0x000 0x4 0x0
-+#define MX6QDL_PAD_SD1_DAT3__GPIO1_IO21             0x2f0 0x6d8 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT3__WDOG2_RESET_B_DEB      0x2f0 0x6d8 0x000 0x6 0x0
-+#define MX6QDL_PAD_SD2_CLK__SD2_CLK                 0x2f4 0x6dc 0x930 0x0 0x1
-+#define MX6QDL_PAD_SD2_CLK__KEY_COL5                0x2f4 0x6dc 0x8c0 0x2 0x3
-+#define MX6QDL_PAD_SD2_CLK__AUD4_RXFS               0x2f4 0x6dc 0x7a4 0x3 0x1
-+#define MX6QDL_PAD_SD2_CLK__GPIO1_IO10              0x2f4 0x6dc 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_CMD__SD2_CMD                 0x2f8 0x6e0 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_CMD__KEY_ROW5                0x2f8 0x6e0 0x8cc 0x2 0x2
-+#define MX6QDL_PAD_SD2_CMD__AUD4_RXC                0x2f8 0x6e0 0x7a0 0x3 0x1
-+#define MX6QDL_PAD_SD2_CMD__GPIO1_IO11              0x2f8 0x6e0 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_DAT0__SD2_DATA0              0x2fc 0x6e4 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_DAT0__AUD4_RXD               0x2fc 0x6e4 0x798 0x3 0x1
-+#define MX6QDL_PAD_SD2_DAT0__KEY_ROW7               0x2fc 0x6e4 0x8d4 0x4 0x2
-+#define MX6QDL_PAD_SD2_DAT0__GPIO1_IO15             0x2fc 0x6e4 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_DAT0__DCIC2_OUT              0x2fc 0x6e4 0x000 0x6 0x0
-+#define MX6QDL_PAD_SD2_DAT1__SD2_DATA1              0x300 0x6e8 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_DAT1__EIM_CS2_B              0x300 0x6e8 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD2_DAT1__AUD4_TXFS              0x300 0x6e8 0x7ac 0x3 0x1
-+#define MX6QDL_PAD_SD2_DAT1__KEY_COL7               0x300 0x6e8 0x8c8 0x4 0x2
-+#define MX6QDL_PAD_SD2_DAT1__GPIO1_IO14             0x300 0x6e8 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_DAT2__SD2_DATA2              0x304 0x6ec 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_DAT2__EIM_CS3_B              0x304 0x6ec 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD2_DAT2__AUD4_TXD               0x304 0x6ec 0x79c 0x3 0x1
-+#define MX6QDL_PAD_SD2_DAT2__KEY_ROW6               0x304 0x6ec 0x8d0 0x4 0x2
-+#define MX6QDL_PAD_SD2_DAT2__GPIO1_IO13             0x304 0x6ec 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_DAT3__SD2_DATA3              0x308 0x6f0 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_DAT3__KEY_COL6               0x308 0x6f0 0x8c4 0x2 0x2
-+#define MX6QDL_PAD_SD2_DAT3__AUD4_TXC               0x308 0x6f0 0x7a8 0x3 0x1
-+#define MX6QDL_PAD_SD2_DAT3__GPIO1_IO12             0x308 0x6f0 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_CLK__SD3_CLK                 0x30c 0x6f4 0x934 0x0 0x1
-+#define MX6QDL_PAD_SD3_CLK__UART2_RTS_B             0x30c 0x6f4 0x900 0x1 0x2
-+#define MX6QDL_PAD_SD3_CLK__UART2_CTS_B             0x30c 0x6f4 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_CLK__FLEXCAN1_RX             0x30c 0x6f4 0x7c8 0x2 0x2
-+#define MX6QDL_PAD_SD3_CLK__GPIO7_IO03              0x30c 0x6f4 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_CMD__SD3_CMD                 0x310 0x6f8 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_CMD__UART2_CTS_B             0x310 0x6f8 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_CMD__UART2_RTS_B             0x310 0x6f8 0x900 0x1 0x3
-+#define MX6QDL_PAD_SD3_CMD__FLEXCAN1_TX             0x310 0x6f8 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD3_CMD__GPIO7_IO02              0x310 0x6f8 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT0__SD3_DATA0              0x314 0x6fc 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT0__UART1_CTS_B            0x314 0x6fc 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT0__UART1_RTS_B            0x314 0x6fc 0x8f8 0x1 0x2
-+#define MX6QDL_PAD_SD3_DAT0__FLEXCAN2_TX            0x314 0x6fc 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD3_DAT0__GPIO7_IO04             0x314 0x6fc 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT1__SD3_DATA1              0x318 0x700 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT1__UART1_RTS_B            0x318 0x700 0x8f8 0x1 0x3
-+#define MX6QDL_PAD_SD3_DAT1__UART1_CTS_B            0x318 0x700 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT1__FLEXCAN2_RX            0x318 0x700 0x7cc 0x2 0x1
-+#define MX6QDL_PAD_SD3_DAT1__GPIO7_IO05             0x318 0x700 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT2__SD3_DATA2              0x31c 0x704 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT2__GPIO7_IO06             0x31c 0x704 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT3__SD3_DATA3              0x320 0x708 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT3__UART3_CTS_B            0x320 0x708 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT3__UART3_RTS_B            0x320 0x708 0x908 0x1 0x4
-+#define MX6QDL_PAD_SD3_DAT3__GPIO7_IO07             0x320 0x708 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT4__SD3_DATA4              0x324 0x70c 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT4__UART2_RX_DATA          0x324 0x70c 0x904 0x1 0x4
-+#define MX6QDL_PAD_SD3_DAT4__UART2_TX_DATA          0x324 0x70c 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT4__GPIO7_IO01             0x324 0x70c 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT5__SD3_DATA5              0x328 0x710 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT5__UART2_TX_DATA          0x328 0x710 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT5__UART2_RX_DATA          0x328 0x710 0x904 0x1 0x5
-+#define MX6QDL_PAD_SD3_DAT5__GPIO7_IO00             0x328 0x710 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT6__SD3_DATA6              0x32c 0x714 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA          0x32c 0x714 0x8fc 0x1 0x2
-+#define MX6QDL_PAD_SD3_DAT6__UART1_TX_DATA          0x32c 0x714 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT6__GPIO6_IO18             0x32c 0x714 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT7__SD3_DATA7              0x330 0x718 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA          0x330 0x718 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT7__UART1_RX_DATA          0x330 0x718 0x8fc 0x1 0x3
-+#define MX6QDL_PAD_SD3_DAT7__GPIO6_IO17             0x330 0x718 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_RST__SD3_RESET               0x334 0x71c 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_RST__UART3_RTS_B             0x334 0x71c 0x908 0x1 0x5
-+#define MX6QDL_PAD_SD3_RST__UART3_CTS_B             0x334 0x71c 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_RST__GPIO7_IO08              0x334 0x71c 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_CLK__SD4_CLK                 0x338 0x720 0x938 0x0 0x1
-+#define MX6QDL_PAD_SD4_CLK__NAND_WE_B               0x338 0x720 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_CLK__UART3_RX_DATA           0x338 0x720 0x90c 0x2 0x2
-+#define MX6QDL_PAD_SD4_CLK__UART3_TX_DATA           0x338 0x720 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_CLK__GPIO7_IO10              0x338 0x720 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_CMD__SD4_CMD                 0x33c 0x724 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD4_CMD__NAND_RE_B               0x33c 0x724 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_CMD__UART3_TX_DATA           0x33c 0x724 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_CMD__UART3_RX_DATA           0x33c 0x724 0x90c 0x2 0x3
-+#define MX6QDL_PAD_SD4_CMD__GPIO7_IO09              0x33c 0x724 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT0__SD4_DATA0              0x340 0x728 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT0__NAND_DQS               0x340 0x728 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT0__GPIO2_IO08             0x340 0x728 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT1__SD4_DATA1              0x344 0x72c 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT1__PWM3_OUT               0x344 0x72c 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT1__GPIO2_IO09             0x344 0x72c 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT2__SD4_DATA2              0x348 0x730 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT2__PWM4_OUT               0x348 0x730 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT2__GPIO2_IO10             0x348 0x730 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT3__SD4_DATA3              0x34c 0x734 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT3__GPIO2_IO11             0x34c 0x734 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT4__SD4_DATA4              0x350 0x738 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT4__UART2_RX_DATA          0x350 0x738 0x904 0x2 0x6
-+#define MX6QDL_PAD_SD4_DAT4__UART2_TX_DATA          0x350 0x738 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT4__GPIO2_IO12             0x350 0x738 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT5__SD4_DATA5              0x354 0x73c 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT5__UART2_RTS_B            0x354 0x73c 0x900 0x2 0x4
-+#define MX6QDL_PAD_SD4_DAT5__UART2_CTS_B            0x354 0x73c 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT5__GPIO2_IO13             0x354 0x73c 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT6__SD4_DATA6              0x358 0x740 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT6__UART2_CTS_B            0x358 0x740 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT6__UART2_RTS_B            0x358 0x740 0x900 0x2 0x5
-+#define MX6QDL_PAD_SD4_DAT6__GPIO2_IO14             0x358 0x740 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT7__SD4_DATA7              0x35c 0x744 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT7__UART2_TX_DATA          0x35c 0x744 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT7__UART2_RX_DATA          0x35c 0x744 0x904 0x2 0x7
-+#define MX6QDL_PAD_SD4_DAT7__GPIO2_IO15             0x35c 0x744 0x000 0x5 0x0
- #endif /* __DTS_IMX6DL_PINFUNC_H */
-diff --git a/arch/arm/boot/dts/imx6dl-sabreauto.dts b/arch/arm/boot/dts/imx6dl-sabreauto.dts
-index 7adcec3..a6ce7b4 100644
---- a/arch/arm/boot/dts/imx6dl-sabreauto.dts
-+++ b/arch/arm/boot/dts/imx6dl-sabreauto.dts
-@@ -15,17 +15,3 @@
-       model = "Freescale i.MX6 DualLite/Solo SABRE Automotive Board";
-       compatible = "fsl,imx6dl-sabreauto", "fsl,imx6dl";
- };
--
--&iomuxc {
--      pinctrl-names = "default";
--      pinctrl-0 = <&pinctrl_hog>;
--
--      hog {
--              pinctrl_hog: hoggrp {
--                      fsl,pins = <
--                              MX6DL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000
--                              MX6DL_PAD_SD2_DAT2__GPIO1_IO13  0x80000000
--                      >;
--              };
--      };
--};
-diff --git a/arch/arm/boot/dts/imx6dl-sabresd.dts b/arch/arm/boot/dts/imx6dl-sabresd.dts
-index 7efb05d..1e45f2f 100644
---- a/arch/arm/boot/dts/imx6dl-sabresd.dts
-+++ b/arch/arm/boot/dts/imx6dl-sabresd.dts
-@@ -15,21 +15,3 @@
-       model = "Freescale i.MX6 DualLite SABRE Smart Device Board";
-       compatible = "fsl,imx6dl-sabresd", "fsl,imx6dl";
- };
--
--&iomuxc {
--      pinctrl-names = "default";
--      pinctrl-0 = <&pinctrl_hog>;
--
--      hog {
--              pinctrl_hog: hoggrp {
--                      fsl,pins = <
--                              MX6DL_PAD_GPIO_4__GPIO1_IO04   0x80000000
--                              MX6DL_PAD_GPIO_5__GPIO1_IO05   0x80000000
--                              MX6DL_PAD_NANDF_D0__GPIO2_IO00 0x80000000
--                              MX6DL_PAD_NANDF_D1__GPIO2_IO01 0x80000000
--                              MX6DL_PAD_NANDF_D2__GPIO2_IO02 0x80000000
--                              MX6DL_PAD_NANDF_D3__GPIO2_IO03 0x80000000
--                      >;
--              };
--      };
--};
-diff --git a/arch/arm/boot/dts/imx6dl-wandboard.dts b/arch/arm/boot/dts/imx6dl-wandboard.dts
-index bfc59c3..e672891 100644
---- a/arch/arm/boot/dts/imx6dl-wandboard.dts
-+++ b/arch/arm/boot/dts/imx6dl-wandboard.dts
-@@ -10,6 +10,7 @@
-  */
- /dts-v1/;
- #include "imx6dl.dtsi"
-+#include "imx6qdl-wandboard.dtsi"
- / {
-       model = "Wandboard i.MX6 Dual Lite Board";
-@@ -19,26 +20,3 @@
-               reg = <0x10000000 0x40000000>;
-       };
- };
--
--&fec {
--      pinctrl-names = "default";
--      pinctrl-0 = <&pinctrl_enet_1>;
--      phy-mode = "rgmii";
--      status = "okay";
--};
--
--&uart1 {
--      pinctrl-names = "default";
--      pinctrl-0 = <&pinctrl_uart1_1>;
--      status = "okay";
--};
--
--&usbh1 {
--      status = "okay";
--};
--
--&usdhc3 {
--      pinctrl-names = "default";
--      pinctrl-0 = <&pinctrl_usdhc3_2>;
--      status = "okay";
--};
-diff --git a/arch/arm/boot/dts/imx6dl.dtsi b/arch/arm/boot/dts/imx6dl.dtsi
-index 62dc781..9e8ae11 100644
---- a/arch/arm/boot/dts/imx6dl.dtsi
-+++ b/arch/arm/boot/dts/imx6dl.dtsi
-@@ -8,8 +8,8 @@
-  *
-  */
--#include "imx6qdl.dtsi"
- #include "imx6dl-pinfunc.h"
-+#include "imx6qdl.dtsi"
- / {
-       cpus {
-@@ -32,126 +32,15 @@
-       };
-       soc {
-+              ocram: sram@00900000 {
-+                      compatible = "mmio-sram";
-+                      reg = <0x00900000 0x20000>;
-+                      clocks = <&clks 142>;
-+              };
-+
-               aips1: aips-bus@02000000 {
-                       iomuxc: iomuxc@020e0000 {
-                               compatible = "fsl,imx6dl-iomuxc";
--                              reg = <0x020e0000 0x4000>;
--
--                              enet {
--                                      pinctrl_enet_1: enetgrp-1 {
--                                              fsl,pins = <
--                                                      MX6DL_PAD_ENET_MDIO__ENET_MDIO       0x1b0b0
--                                                      MX6DL_PAD_ENET_MDC__ENET_MDC         0x1b0b0
--                                                      MX6DL_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
--                                                      MX6DL_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0
--                                                      MX6DL_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
--                                                      MX6DL_PAD_GPIO_16__ENET_REF_CLK      0x4001b0a8
--                                              >;
--                                      };
--
--                                      pinctrl_enet_2: enetgrp-2 {
--                                              fsl,pins = <
--                                                      MX6DL_PAD_KEY_COL1__ENET_MDIO        0x1b0b0
--                                                      MX6DL_PAD_KEY_COL2__ENET_MDC         0x1b0b0
--                                                      MX6DL_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0
--                                                      MX6DL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
--                                                      MX6DL_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0
--                                                      MX6DL_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0
--                                                      MX6DL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
--                                              >;
--                                      };
--                              };
--
--                              uart1 {
--                                      pinctrl_uart1_1: uart1grp-1 {
--                                              fsl,pins = <
--                                                      MX6DL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
--                                                      MX6DL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
--                                              >;
--                                      };
--                              };
--
--                              uart4 {
--                                      pinctrl_uart4_1: uart4grp-1 {
--                                              fsl,pins = <
--                                                      MX6DL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
--                                                      MX6DL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
--                                              >;
--                                      };
--                              };
--
--                              usbotg {
--                                      pinctrl_usbotg_2: usbotggrp-2 {
--                                              fsl,pins = <
--                                                      MX6DL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
--                                              >;
--                                      };
--                              };
--
--                              usdhc2 {
--                                      pinctrl_usdhc2_1: usdhc2grp-1 {
--                                              fsl,pins = <
--                                                      MX6DL_PAD_SD2_CMD__SD2_CMD    0x17059
--                                                      MX6DL_PAD_SD2_CLK__SD2_CLK    0x10059
--                                                      MX6DL_PAD_SD2_DAT0__SD2_DATA0 0x17059
--                                                      MX6DL_PAD_SD2_DAT1__SD2_DATA1 0x17059
--                                                      MX6DL_PAD_SD2_DAT2__SD2_DATA2 0x17059
--                                                      MX6DL_PAD_SD2_DAT3__SD2_DATA3 0x17059
--                                                      MX6DL_PAD_NANDF_D4__SD2_DATA4 0x17059
--                                                      MX6DL_PAD_NANDF_D5__SD2_DATA5 0x17059
--                                                      MX6DL_PAD_NANDF_D6__SD2_DATA6 0x17059
--                                                      MX6DL_PAD_NANDF_D7__SD2_DATA7 0x17059
--                                              >;
--                                      };
--                              };
--
--                              usdhc3 {
--                                      pinctrl_usdhc3_1: usdhc3grp-1 {
--                                              fsl,pins = <
--                                                      MX6DL_PAD_SD3_CMD__SD3_CMD    0x17059
--                                                      MX6DL_PAD_SD3_CLK__SD3_CLK    0x10059
--                                                      MX6DL_PAD_SD3_DAT0__SD3_DATA0 0x17059
--                                                      MX6DL_PAD_SD3_DAT1__SD3_DATA1 0x17059
--                                                      MX6DL_PAD_SD3_DAT2__SD3_DATA2 0x17059
--                                                      MX6DL_PAD_SD3_DAT3__SD3_DATA3 0x17059
--                                                      MX6DL_PAD_SD3_DAT4__SD3_DATA4 0x17059
--                                                      MX6DL_PAD_SD3_DAT5__SD3_DATA5 0x17059
--                                                      MX6DL_PAD_SD3_DAT6__SD3_DATA6 0x17059
--                                                      MX6DL_PAD_SD3_DAT7__SD3_DATA7 0x17059
--                                              >;
--                                      };
--
--                                      pinctrl_usdhc3_2: usdhc3grp_2 {
--                                              fsl,pins = <
--                                                      MX6DL_PAD_SD3_CMD__SD3_CMD    0x17059
--                                                      MX6DL_PAD_SD3_CLK__SD3_CLK    0x10059
--                                                      MX6DL_PAD_SD3_DAT0__SD3_DATA0 0x17059
--                                                      MX6DL_PAD_SD3_DAT1__SD3_DATA1 0x17059
--                                                      MX6DL_PAD_SD3_DAT2__SD3_DATA2 0x17059
--                                                      MX6DL_PAD_SD3_DAT3__SD3_DATA3 0x17059
--                                              >;
--                                      };
--                              };
--
--
-                       };
-                       pxp: pxp@020f0000 {
-@@ -182,3 +71,20 @@
-               };
-       };
- };
-+
-+&ldb {
-+      clocks = <&clks 33>, <&clks 34>,
-+               <&clks 39>, <&clks 40>,
-+               <&clks 135>, <&clks 136>;
-+      clock-names = "di0_pll", "di1_pll",
-+                    "di0_sel", "di1_sel",
-+                    "di0", "di1";
-+
-+      lvds-channel@0 {
-+              crtcs = <&ipu1 0>, <&ipu1 1>;
-+      };
-+
-+      lvds-channel@1 {
-+              crtcs = <&ipu1 0>, <&ipu1 1>;
-+      };
-+};
-diff --git a/arch/arm/boot/dts/imx6q-arm2.dts b/arch/arm/boot/dts/imx6q-arm2.dts
-index 4e54fde..edf1bd9 100644
---- a/arch/arm/boot/dts/imx6q-arm2.dts
-+++ b/arch/arm/boot/dts/imx6q-arm2.dts
-@@ -57,7 +57,7 @@
-       hog {
-               pinctrl_hog: hoggrp {
-                       fsl,pins = <
--                              MX6Q_PAD_EIM_D25__GPIO3_IO25 0x80000000
-+                              MX6QDL_PAD_EIM_D25__GPIO3_IO25 0x80000000
-                       >;
-               };
-       };
-@@ -65,8 +65,8 @@
-       arm2 {
-               pinctrl_usdhc3_arm2: usdhc3grp-arm2 {
-                       fsl,pins = <
--                              MX6Q_PAD_NANDF_CS0__GPIO6_IO11 0x80000000
--                              MX6Q_PAD_NANDF_CS1__GPIO6_IO14 0x80000000
-+                              MX6QDL_PAD_NANDF_CS0__GPIO6_IO11 0x80000000
-+                              MX6QDL_PAD_NANDF_CS1__GPIO6_IO14 0x80000000
-                       >;
-               };
-       };
-@@ -97,6 +97,14 @@
-       status = "okay";
- };
-+&uart2 {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_uart2_2>;
-+      fsl,dte-mode;
-+      fsl,uart-has-rtscts;
-+      status = "okay";
-+};
-+
- &uart4 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_uart4_1>;
-diff --git a/arch/arm/boot/dts/imx6q-pinfunc.h b/arch/arm/boot/dts/imx6q-pinfunc.h
-index faea6e1..9bbe82b 100644
---- a/arch/arm/boot/dts/imx6q-pinfunc.h
-+++ b/arch/arm/boot/dts/imx6q-pinfunc.h
-@@ -14,1028 +14,1032 @@
-  * The pin function ID is a tuple of
-  * <mux_reg conf_reg input_reg mux_mode input_val>
-  */
--#define MX6Q_PAD_SD2_DAT1__SD2_DATA1              0x04c 0x360 0x000 0x0 0x0
--#define MX6Q_PAD_SD2_DAT1__ECSPI5_SS0             0x04c 0x360 0x834 0x1 0x0
--#define MX6Q_PAD_SD2_DAT1__EIM_CS2_B              0x04c 0x360 0x000 0x2 0x0
--#define MX6Q_PAD_SD2_DAT1__AUD4_TXFS              0x04c 0x360 0x7c8 0x3 0x0
--#define MX6Q_PAD_SD2_DAT1__KEY_COL7               0x04c 0x360 0x8f0 0x4 0x0
--#define MX6Q_PAD_SD2_DAT1__GPIO1_IO14             0x04c 0x360 0x000 0x5 0x0
--#define MX6Q_PAD_SD2_DAT2__SD2_DATA2              0x050 0x364 0x000 0x0 0x0
--#define MX6Q_PAD_SD2_DAT2__ECSPI5_SS1             0x050 0x364 0x838 0x1 0x0
--#define MX6Q_PAD_SD2_DAT2__EIM_CS3_B              0x050 0x364 0x000 0x2 0x0
--#define MX6Q_PAD_SD2_DAT2__AUD4_TXD               0x050 0x364 0x7b8 0x3 0x0
--#define MX6Q_PAD_SD2_DAT2__KEY_ROW6               0x050 0x364 0x8f8 0x4 0x0
--#define MX6Q_PAD_SD2_DAT2__GPIO1_IO13             0x050 0x364 0x000 0x5 0x0
--#define MX6Q_PAD_SD2_DAT0__SD2_DATA0              0x054 0x368 0x000 0x0 0x0
--#define MX6Q_PAD_SD2_DAT0__ECSPI5_MISO            0x054 0x368 0x82c 0x1 0x0
--#define MX6Q_PAD_SD2_DAT0__AUD4_RXD               0x054 0x368 0x7b4 0x3 0x0
--#define MX6Q_PAD_SD2_DAT0__KEY_ROW7               0x054 0x368 0x8fc 0x4 0x0
--#define MX6Q_PAD_SD2_DAT0__GPIO1_IO15             0x054 0x368 0x000 0x5 0x0
--#define MX6Q_PAD_SD2_DAT0__DCIC2_OUT              0x054 0x368 0x000 0x6 0x0
--#define MX6Q_PAD_RGMII_TXC__USB_H2_DATA           0x058 0x36c 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_TXC__RGMII_TXC             0x058 0x36c 0x000 0x1 0x0
--#define MX6Q_PAD_RGMII_TXC__SPDIF_EXT_CLK         0x058 0x36c 0x918 0x2 0x0
--#define MX6Q_PAD_RGMII_TXC__GPIO6_IO19            0x058 0x36c 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_TXC__XTALOSC_REF_CLK_24M   0x058 0x36c 0x000 0x7 0x0
--#define MX6Q_PAD_RGMII_TD0__HSI_TX_READY          0x05c 0x370 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_TD0__RGMII_TD0             0x05c 0x370 0x000 0x1 0x0
--#define MX6Q_PAD_RGMII_TD0__GPIO6_IO20            0x05c 0x370 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_TD1__HSI_RX_FLAG           0x060 0x374 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_TD1__RGMII_TD1             0x060 0x374 0x000 0x1 0x0
--#define MX6Q_PAD_RGMII_TD1__GPIO6_IO21            0x060 0x374 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_TD2__HSI_RX_DATA           0x064 0x378 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_TD2__RGMII_TD2             0x064 0x378 0x000 0x1 0x0
--#define MX6Q_PAD_RGMII_TD2__GPIO6_IO22            0x064 0x378 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_TD3__HSI_RX_WAKE           0x068 0x37c 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_TD3__RGMII_TD3             0x068 0x37c 0x000 0x1 0x0
--#define MX6Q_PAD_RGMII_TD3__GPIO6_IO23            0x068 0x37c 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_RX_CTL__USB_H3_DATA        0x06c 0x380 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL       0x06c 0x380 0x858 0x1 0x0
--#define MX6Q_PAD_RGMII_RX_CTL__GPIO6_IO24         0x06c 0x380 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_RD0__HSI_RX_READY          0x070 0x384 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_RD0__RGMII_RD0             0x070 0x384 0x848 0x1 0x0
--#define MX6Q_PAD_RGMII_RD0__GPIO6_IO25            0x070 0x384 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_TX_CTL__USB_H2_STROBE      0x074 0x388 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_TX_CTL__RGMII_TX_CTL       0x074 0x388 0x000 0x1 0x0
--#define MX6Q_PAD_RGMII_TX_CTL__GPIO6_IO26         0x074 0x388 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_TX_CTL__ENET_REF_CLK       0x074 0x388 0x83c 0x7 0x0
--#define MX6Q_PAD_RGMII_RD1__HSI_TX_FLAG           0x078 0x38c 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_RD1__RGMII_RD1             0x078 0x38c 0x84c 0x1 0x0
--#define MX6Q_PAD_RGMII_RD1__GPIO6_IO27            0x078 0x38c 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_RD2__HSI_TX_DATA           0x07c 0x390 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_RD2__RGMII_RD2             0x07c 0x390 0x850 0x1 0x0
--#define MX6Q_PAD_RGMII_RD2__GPIO6_IO28            0x07c 0x390 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_RD3__HSI_TX_WAKE           0x080 0x394 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_RD3__RGMII_RD3             0x080 0x394 0x854 0x1 0x0
--#define MX6Q_PAD_RGMII_RD3__GPIO6_IO29            0x080 0x394 0x000 0x5 0x0
--#define MX6Q_PAD_RGMII_RXC__USB_H3_STROBE         0x084 0x398 0x000 0x0 0x0
--#define MX6Q_PAD_RGMII_RXC__RGMII_RXC             0x084 0x398 0x844 0x1 0x0
--#define MX6Q_PAD_RGMII_RXC__GPIO6_IO30            0x084 0x398 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A25__EIM_ADDR25              0x088 0x39c 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A25__ECSPI4_SS1              0x088 0x39c 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A25__ECSPI2_RDY              0x088 0x39c 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_A25__IPU1_DI1_PIN12          0x088 0x39c 0x000 0x3 0x0
--#define MX6Q_PAD_EIM_A25__IPU1_DI0_D1_CS          0x088 0x39c 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_A25__GPIO5_IO02              0x088 0x39c 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A25__HDMI_TX_CEC_LINE        0x088 0x39c 0x88c 0x6 0x0
--#define MX6Q_PAD_EIM_EB2__EIM_EB2_B               0x08c 0x3a0 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_EB2__ECSPI1_SS0              0x08c 0x3a0 0x800 0x1 0x0
--#define MX6Q_PAD_EIM_EB2__IPU2_CSI1_DATA19        0x08c 0x3a0 0x8d4 0x3 0x0
--#define MX6Q_PAD_EIM_EB2__HDMI_TX_DDC_SCL         0x08c 0x3a0 0x890 0x4 0x0
--#define MX6Q_PAD_EIM_EB2__GPIO2_IO30              0x08c 0x3a0 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_EB2__I2C2_SCL                0x08c 0x3a0 0x8a0 0x6 0x0
--#define MX6Q_PAD_EIM_EB2__SRC_BOOT_CFG30          0x08c 0x3a0 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_D16__EIM_DATA16              0x090 0x3a4 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D16__ECSPI1_SCLK             0x090 0x3a4 0x7f4 0x1 0x0
--#define MX6Q_PAD_EIM_D16__IPU1_DI0_PIN05          0x090 0x3a4 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D16__IPU2_CSI1_DATA18        0x090 0x3a4 0x8d0 0x3 0x0
--#define MX6Q_PAD_EIM_D16__HDMI_TX_DDC_SDA         0x090 0x3a4 0x894 0x4 0x0
--#define MX6Q_PAD_EIM_D16__GPIO3_IO16              0x090 0x3a4 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D16__I2C2_SDA                0x090 0x3a4 0x8a4 0x6 0x0
--#define MX6Q_PAD_EIM_D17__EIM_DATA17              0x094 0x3a8 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D17__ECSPI1_MISO             0x094 0x3a8 0x7f8 0x1 0x0
--#define MX6Q_PAD_EIM_D17__IPU1_DI0_PIN06          0x094 0x3a8 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D17__IPU2_CSI1_PIXCLK        0x094 0x3a8 0x8e0 0x3 0x0
--#define MX6Q_PAD_EIM_D17__DCIC1_OUT               0x094 0x3a8 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D17__GPIO3_IO17              0x094 0x3a8 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D17__I2C3_SCL                0x094 0x3a8 0x8a8 0x6 0x0
--#define MX6Q_PAD_EIM_D18__EIM_DATA18              0x098 0x3ac 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D18__ECSPI1_MOSI             0x098 0x3ac 0x7fc 0x1 0x0
--#define MX6Q_PAD_EIM_D18__IPU1_DI0_PIN07          0x098 0x3ac 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D18__IPU2_CSI1_DATA17        0x098 0x3ac 0x8cc 0x3 0x0
--#define MX6Q_PAD_EIM_D18__IPU1_DI1_D0_CS          0x098 0x3ac 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D18__GPIO3_IO18              0x098 0x3ac 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D18__I2C3_SDA                0x098 0x3ac 0x8ac 0x6 0x0
--#define MX6Q_PAD_EIM_D19__EIM_DATA19              0x09c 0x3b0 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D19__ECSPI1_SS1              0x09c 0x3b0 0x804 0x1 0x0
--#define MX6Q_PAD_EIM_D19__IPU1_DI0_PIN08          0x09c 0x3b0 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D19__IPU2_CSI1_DATA16        0x09c 0x3b0 0x8c8 0x3 0x0
--#define MX6Q_PAD_EIM_D19__UART1_CTS_B             0x09c 0x3b0 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D19__UART1_RTS_B             0x09c 0x3b0 0x91c 0x4 0x0
--#define MX6Q_PAD_EIM_D19__GPIO3_IO19              0x09c 0x3b0 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D19__EPIT1_OUT               0x09c 0x3b0 0x000 0x6 0x0
--#define MX6Q_PAD_EIM_D20__EIM_DATA20              0x0a0 0x3b4 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D20__ECSPI4_SS0              0x0a0 0x3b4 0x824 0x1 0x0
--#define MX6Q_PAD_EIM_D20__IPU1_DI0_PIN16          0x0a0 0x3b4 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D20__IPU2_CSI1_DATA15        0x0a0 0x3b4 0x8c4 0x3 0x0
--#define MX6Q_PAD_EIM_D20__UART1_RTS_B             0x0a0 0x3b4 0x91c 0x4 0x1
--#define MX6Q_PAD_EIM_D20__UART1_CTS_B             0x0a0 0x3b4 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D20__GPIO3_IO20              0x0a0 0x3b4 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D20__EPIT2_OUT               0x0a0 0x3b4 0x000 0x6 0x0
--#define MX6Q_PAD_EIM_D21__EIM_DATA21              0x0a4 0x3b8 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D21__ECSPI4_SCLK             0x0a4 0x3b8 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D21__IPU1_DI0_PIN17          0x0a4 0x3b8 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D21__IPU2_CSI1_DATA11        0x0a4 0x3b8 0x8b4 0x3 0x0
--#define MX6Q_PAD_EIM_D21__USB_OTG_OC              0x0a4 0x3b8 0x944 0x4 0x0
--#define MX6Q_PAD_EIM_D21__GPIO3_IO21              0x0a4 0x3b8 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D21__I2C1_SCL                0x0a4 0x3b8 0x898 0x6 0x0
--#define MX6Q_PAD_EIM_D21__SPDIF_IN                0x0a4 0x3b8 0x914 0x7 0x0
--#define MX6Q_PAD_EIM_D22__EIM_DATA22              0x0a8 0x3bc 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D22__ECSPI4_MISO             0x0a8 0x3bc 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D22__IPU1_DI0_PIN01          0x0a8 0x3bc 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D22__IPU2_CSI1_DATA10        0x0a8 0x3bc 0x8b0 0x3 0x0
--#define MX6Q_PAD_EIM_D22__USB_OTG_PWR             0x0a8 0x3bc 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D22__GPIO3_IO22              0x0a8 0x3bc 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D22__SPDIF_OUT               0x0a8 0x3bc 0x000 0x6 0x0
--#define MX6Q_PAD_EIM_D23__EIM_DATA23              0x0ac 0x3c0 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D23__IPU1_DI0_D0_CS          0x0ac 0x3c0 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D23__UART3_CTS_B             0x0ac 0x3c0 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D23__UART3_RTS_B             0x0ac 0x3c0 0x92c 0x2 0x0
--#define MX6Q_PAD_EIM_D23__UART1_DCD_B             0x0ac 0x3c0 0x000 0x3 0x0
--#define MX6Q_PAD_EIM_D23__IPU2_CSI1_DATA_EN       0x0ac 0x3c0 0x8d8 0x4 0x0
--#define MX6Q_PAD_EIM_D23__GPIO3_IO23              0x0ac 0x3c0 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D23__IPU1_DI1_PIN02          0x0ac 0x3c0 0x000 0x6 0x0
--#define MX6Q_PAD_EIM_D23__IPU1_DI1_PIN14          0x0ac 0x3c0 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_EB3__EIM_EB3_B               0x0b0 0x3c4 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_EB3__ECSPI4_RDY              0x0b0 0x3c4 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_EB3__UART3_RTS_B             0x0b0 0x3c4 0x92c 0x2 0x1
--#define MX6Q_PAD_EIM_EB3__UART3_CTS_B             0x0b0 0x3c4 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_EB3__UART1_RI_B              0x0b0 0x3c4 0x000 0x3 0x0
--#define MX6Q_PAD_EIM_EB3__IPU2_CSI1_HSYNC         0x0b0 0x3c4 0x8dc 0x4 0x0
--#define MX6Q_PAD_EIM_EB3__GPIO2_IO31              0x0b0 0x3c4 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_EB3__IPU1_DI1_PIN03          0x0b0 0x3c4 0x000 0x6 0x0
--#define MX6Q_PAD_EIM_EB3__SRC_BOOT_CFG31          0x0b0 0x3c4 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_D24__EIM_DATA24              0x0b4 0x3c8 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D24__ECSPI4_SS2              0x0b4 0x3c8 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D24__UART3_TX_DATA           0x0b4 0x3c8 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D24__UART3_RX_DATA           0x0b4 0x3c8 0x930 0x2 0x0
--#define MX6Q_PAD_EIM_D24__ECSPI1_SS2              0x0b4 0x3c8 0x808 0x3 0x0
--#define MX6Q_PAD_EIM_D24__ECSPI2_SS2              0x0b4 0x3c8 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D24__GPIO3_IO24              0x0b4 0x3c8 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D24__AUD5_RXFS               0x0b4 0x3c8 0x7d8 0x6 0x0
--#define MX6Q_PAD_EIM_D24__UART1_DTR_B             0x0b4 0x3c8 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_D25__EIM_DATA25              0x0b8 0x3cc 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D25__ECSPI4_SS3              0x0b8 0x3cc 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D25__UART3_RX_DATA           0x0b8 0x3cc 0x930 0x2 0x1
--#define MX6Q_PAD_EIM_D25__UART3_TX_DATA           0x0b8 0x3cc 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D25__ECSPI1_SS3              0x0b8 0x3cc 0x80c 0x3 0x0
--#define MX6Q_PAD_EIM_D25__ECSPI2_SS3              0x0b8 0x3cc 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D25__GPIO3_IO25              0x0b8 0x3cc 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D25__AUD5_RXC                0x0b8 0x3cc 0x7d4 0x6 0x0
--#define MX6Q_PAD_EIM_D25__UART1_DSR_B             0x0b8 0x3cc 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_D26__EIM_DATA26              0x0bc 0x3d0 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D26__IPU1_DI1_PIN11          0x0bc 0x3d0 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D26__IPU1_CSI0_DATA01        0x0bc 0x3d0 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D26__IPU2_CSI1_DATA14        0x0bc 0x3d0 0x8c0 0x3 0x0
--#define MX6Q_PAD_EIM_D26__UART2_TX_DATA           0x0bc 0x3d0 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D26__UART2_RX_DATA           0x0bc 0x3d0 0x928 0x4 0x0
--#define MX6Q_PAD_EIM_D26__GPIO3_IO26              0x0bc 0x3d0 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D26__IPU1_SISG2              0x0bc 0x3d0 0x000 0x6 0x0
--#define MX6Q_PAD_EIM_D26__IPU1_DISP1_DATA22       0x0bc 0x3d0 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_D27__EIM_DATA27              0x0c0 0x3d4 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D27__IPU1_DI1_PIN13          0x0c0 0x3d4 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D27__IPU1_CSI0_DATA00        0x0c0 0x3d4 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D27__IPU2_CSI1_DATA13        0x0c0 0x3d4 0x8bc 0x3 0x0
--#define MX6Q_PAD_EIM_D27__UART2_RX_DATA           0x0c0 0x3d4 0x928 0x4 0x1
--#define MX6Q_PAD_EIM_D27__UART2_TX_DATA           0x0c0 0x3d4 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D27__GPIO3_IO27              0x0c0 0x3d4 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D27__IPU1_SISG3              0x0c0 0x3d4 0x000 0x6 0x0
--#define MX6Q_PAD_EIM_D27__IPU1_DISP1_DATA23       0x0c0 0x3d4 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_D28__EIM_DATA28              0x0c4 0x3d8 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D28__I2C1_SDA                0x0c4 0x3d8 0x89c 0x1 0x0
--#define MX6Q_PAD_EIM_D28__ECSPI4_MOSI             0x0c4 0x3d8 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D28__IPU2_CSI1_DATA12        0x0c4 0x3d8 0x8b8 0x3 0x0
--#define MX6Q_PAD_EIM_D28__UART2_CTS_B             0x0c4 0x3d8 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D28__UART2_RTS_B             0x0c4 0x3d8 0x924 0x4 0x0
--#define MX6Q_PAD_EIM_D28__GPIO3_IO28              0x0c4 0x3d8 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D28__IPU1_EXT_TRIG           0x0c4 0x3d8 0x000 0x6 0x0
--#define MX6Q_PAD_EIM_D28__IPU1_DI0_PIN13          0x0c4 0x3d8 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_D29__EIM_DATA29              0x0c8 0x3dc 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D29__IPU1_DI1_PIN15          0x0c8 0x3dc 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D29__ECSPI4_SS0              0x0c8 0x3dc 0x824 0x2 0x1
--#define MX6Q_PAD_EIM_D29__UART2_RTS_B             0x0c8 0x3dc 0x924 0x4 0x1
--#define MX6Q_PAD_EIM_D29__UART2_CTS_B             0x0c8 0x3dc 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D29__GPIO3_IO29              0x0c8 0x3dc 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D29__IPU2_CSI1_VSYNC         0x0c8 0x3dc 0x8e4 0x6 0x0
--#define MX6Q_PAD_EIM_D29__IPU1_DI0_PIN14          0x0c8 0x3dc 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_D30__EIM_DATA30              0x0cc 0x3e0 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D30__IPU1_DISP1_DATA21       0x0cc 0x3e0 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D30__IPU1_DI0_PIN11          0x0cc 0x3e0 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D30__IPU1_CSI0_DATA03        0x0cc 0x3e0 0x000 0x3 0x0
--#define MX6Q_PAD_EIM_D30__UART3_CTS_B             0x0cc 0x3e0 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D30__UART3_RTS_B             0x0cc 0x3e0 0x92c 0x4 0x2
--#define MX6Q_PAD_EIM_D30__GPIO3_IO30              0x0cc 0x3e0 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D30__USB_H1_OC               0x0cc 0x3e0 0x948 0x6 0x0
--#define MX6Q_PAD_EIM_D31__EIM_DATA31              0x0d0 0x3e4 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_D31__IPU1_DISP1_DATA20       0x0d0 0x3e4 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_D31__IPU1_DI0_PIN12          0x0d0 0x3e4 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_D31__IPU1_CSI0_DATA02        0x0d0 0x3e4 0x000 0x3 0x0
--#define MX6Q_PAD_EIM_D31__UART3_RTS_B             0x0d0 0x3e4 0x92c 0x4 0x3
--#define MX6Q_PAD_EIM_D31__UART3_CTS_B             0x0d0 0x3e4 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_D31__GPIO3_IO31              0x0d0 0x3e4 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_D31__USB_H1_PWR              0x0d0 0x3e4 0x000 0x6 0x0
--#define MX6Q_PAD_EIM_A24__EIM_ADDR24              0x0d4 0x3e8 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A24__IPU1_DISP1_DATA19       0x0d4 0x3e8 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A24__IPU2_CSI1_DATA19        0x0d4 0x3e8 0x8d4 0x2 0x1
--#define MX6Q_PAD_EIM_A24__IPU2_SISG2              0x0d4 0x3e8 0x000 0x3 0x0
--#define MX6Q_PAD_EIM_A24__IPU1_SISG2              0x0d4 0x3e8 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_A24__GPIO5_IO04              0x0d4 0x3e8 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A24__SRC_BOOT_CFG24          0x0d4 0x3e8 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_A23__EIM_ADDR23              0x0d8 0x3ec 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A23__IPU1_DISP1_DATA18       0x0d8 0x3ec 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A23__IPU2_CSI1_DATA18        0x0d8 0x3ec 0x8d0 0x2 0x1
--#define MX6Q_PAD_EIM_A23__IPU2_SISG3              0x0d8 0x3ec 0x000 0x3 0x0
--#define MX6Q_PAD_EIM_A23__IPU1_SISG3              0x0d8 0x3ec 0x000 0x4 0x0
--#define MX6Q_PAD_EIM_A23__GPIO6_IO06              0x0d8 0x3ec 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A23__SRC_BOOT_CFG23          0x0d8 0x3ec 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_A22__EIM_ADDR22              0x0dc 0x3f0 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A22__IPU1_DISP1_DATA17       0x0dc 0x3f0 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A22__IPU2_CSI1_DATA17        0x0dc 0x3f0 0x8cc 0x2 0x1
--#define MX6Q_PAD_EIM_A22__GPIO2_IO16              0x0dc 0x3f0 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A22__SRC_BOOT_CFG22          0x0dc 0x3f0 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_A21__EIM_ADDR21              0x0e0 0x3f4 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A21__IPU1_DISP1_DATA16       0x0e0 0x3f4 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A21__IPU2_CSI1_DATA16        0x0e0 0x3f4 0x8c8 0x2 0x1
--#define MX6Q_PAD_EIM_A21__GPIO2_IO17              0x0e0 0x3f4 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A21__SRC_BOOT_CFG21          0x0e0 0x3f4 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_A20__EIM_ADDR20              0x0e4 0x3f8 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A20__IPU1_DISP1_DATA15       0x0e4 0x3f8 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A20__IPU2_CSI1_DATA15        0x0e4 0x3f8 0x8c4 0x2 0x1
--#define MX6Q_PAD_EIM_A20__GPIO2_IO18              0x0e4 0x3f8 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A20__SRC_BOOT_CFG20          0x0e4 0x3f8 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_A19__EIM_ADDR19              0x0e8 0x3fc 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A19__IPU1_DISP1_DATA14       0x0e8 0x3fc 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A19__IPU2_CSI1_DATA14        0x0e8 0x3fc 0x8c0 0x2 0x1
--#define MX6Q_PAD_EIM_A19__GPIO2_IO19              0x0e8 0x3fc 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A19__SRC_BOOT_CFG19          0x0e8 0x3fc 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_A18__EIM_ADDR18              0x0ec 0x400 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A18__IPU1_DISP1_DATA13       0x0ec 0x400 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A18__IPU2_CSI1_DATA13        0x0ec 0x400 0x8bc 0x2 0x1
--#define MX6Q_PAD_EIM_A18__GPIO2_IO20              0x0ec 0x400 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A18__SRC_BOOT_CFG18          0x0ec 0x400 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_A17__EIM_ADDR17              0x0f0 0x404 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A17__IPU1_DISP1_DATA12       0x0f0 0x404 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A17__IPU2_CSI1_DATA12        0x0f0 0x404 0x8b8 0x2 0x1
--#define MX6Q_PAD_EIM_A17__GPIO2_IO21              0x0f0 0x404 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A17__SRC_BOOT_CFG17          0x0f0 0x404 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_A16__EIM_ADDR16              0x0f4 0x408 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_A16__IPU1_DI1_DISP_CLK       0x0f4 0x408 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_A16__IPU2_CSI1_PIXCLK        0x0f4 0x408 0x8e0 0x2 0x1
--#define MX6Q_PAD_EIM_A16__GPIO2_IO22              0x0f4 0x408 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_A16__SRC_BOOT_CFG16          0x0f4 0x408 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_CS0__EIM_CS0_B               0x0f8 0x40c 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_CS0__IPU1_DI1_PIN05          0x0f8 0x40c 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_CS0__ECSPI2_SCLK             0x0f8 0x40c 0x810 0x2 0x0
--#define MX6Q_PAD_EIM_CS0__GPIO2_IO23              0x0f8 0x40c 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_CS1__EIM_CS1_B               0x0fc 0x410 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_CS1__IPU1_DI1_PIN06          0x0fc 0x410 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_CS1__ECSPI2_MOSI             0x0fc 0x410 0x818 0x2 0x0
--#define MX6Q_PAD_EIM_CS1__GPIO2_IO24              0x0fc 0x410 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_OE__EIM_OE_B                 0x100 0x414 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_OE__IPU1_DI1_PIN07           0x100 0x414 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_OE__ECSPI2_MISO              0x100 0x414 0x814 0x2 0x0
--#define MX6Q_PAD_EIM_OE__GPIO2_IO25               0x100 0x414 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_RW__EIM_RW                   0x104 0x418 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_RW__IPU1_DI1_PIN08           0x104 0x418 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_RW__ECSPI2_SS0               0x104 0x418 0x81c 0x2 0x0
--#define MX6Q_PAD_EIM_RW__GPIO2_IO26               0x104 0x418 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_RW__SRC_BOOT_CFG29           0x104 0x418 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_LBA__EIM_LBA_B               0x108 0x41c 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_LBA__IPU1_DI1_PIN17          0x108 0x41c 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_LBA__ECSPI2_SS1              0x108 0x41c 0x820 0x2 0x0
--#define MX6Q_PAD_EIM_LBA__GPIO2_IO27              0x108 0x41c 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_LBA__SRC_BOOT_CFG26          0x108 0x41c 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_EB0__EIM_EB0_B               0x10c 0x420 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_EB0__IPU1_DISP1_DATA11       0x10c 0x420 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_EB0__IPU2_CSI1_DATA11        0x10c 0x420 0x8b4 0x2 0x1
--#define MX6Q_PAD_EIM_EB0__CCM_PMIC_READY          0x10c 0x420 0x7f0 0x4 0x0
--#define MX6Q_PAD_EIM_EB0__GPIO2_IO28              0x10c 0x420 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_EB0__SRC_BOOT_CFG27          0x10c 0x420 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_EB1__EIM_EB1_B               0x110 0x424 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_EB1__IPU1_DISP1_DATA10       0x110 0x424 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_EB1__IPU2_CSI1_DATA10        0x110 0x424 0x8b0 0x2 0x1
--#define MX6Q_PAD_EIM_EB1__GPIO2_IO29              0x110 0x424 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_EB1__SRC_BOOT_CFG28          0x110 0x424 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA0__EIM_AD00                0x114 0x428 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA0__IPU1_DISP1_DATA09       0x114 0x428 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA0__IPU2_CSI1_DATA09        0x114 0x428 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA0__GPIO3_IO00              0x114 0x428 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA0__SRC_BOOT_CFG00          0x114 0x428 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA1__EIM_AD01                0x118 0x42c 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA1__IPU1_DISP1_DATA08       0x118 0x42c 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA1__IPU2_CSI1_DATA08        0x118 0x42c 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA1__GPIO3_IO01              0x118 0x42c 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA1__SRC_BOOT_CFG01          0x118 0x42c 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA2__EIM_AD02                0x11c 0x430 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA2__IPU1_DISP1_DATA07       0x11c 0x430 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA2__IPU2_CSI1_DATA07        0x11c 0x430 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA2__GPIO3_IO02              0x11c 0x430 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA2__SRC_BOOT_CFG02          0x11c 0x430 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA3__EIM_AD03                0x120 0x434 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA3__IPU1_DISP1_DATA06       0x120 0x434 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA3__IPU2_CSI1_DATA06        0x120 0x434 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA3__GPIO3_IO03              0x120 0x434 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA3__SRC_BOOT_CFG03          0x120 0x434 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA4__EIM_AD04                0x124 0x438 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA4__IPU1_DISP1_DATA05       0x124 0x438 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA4__IPU2_CSI1_DATA05        0x124 0x438 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA4__GPIO3_IO04              0x124 0x438 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA4__SRC_BOOT_CFG04          0x124 0x438 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA5__EIM_AD05                0x128 0x43c 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA5__IPU1_DISP1_DATA04       0x128 0x43c 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA5__IPU2_CSI1_DATA04        0x128 0x43c 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA5__GPIO3_IO05              0x128 0x43c 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA5__SRC_BOOT_CFG05          0x128 0x43c 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA6__EIM_AD06                0x12c 0x440 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA6__IPU1_DISP1_DATA03       0x12c 0x440 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA6__IPU2_CSI1_DATA03        0x12c 0x440 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA6__GPIO3_IO06              0x12c 0x440 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA6__SRC_BOOT_CFG06          0x12c 0x440 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA7__EIM_AD07                0x130 0x444 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA7__IPU1_DISP1_DATA02       0x130 0x444 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA7__IPU2_CSI1_DATA02        0x130 0x444 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA7__GPIO3_IO07              0x130 0x444 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA7__SRC_BOOT_CFG07          0x130 0x444 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA8__EIM_AD08                0x134 0x448 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA8__IPU1_DISP1_DATA01       0x134 0x448 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA8__IPU2_CSI1_DATA01        0x134 0x448 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA8__GPIO3_IO08              0x134 0x448 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA8__SRC_BOOT_CFG08          0x134 0x448 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA9__EIM_AD09                0x138 0x44c 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA9__IPU1_DISP1_DATA00       0x138 0x44c 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA9__IPU2_CSI1_DATA00        0x138 0x44c 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA9__GPIO3_IO09              0x138 0x44c 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA9__SRC_BOOT_CFG09          0x138 0x44c 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA10__EIM_AD10               0x13c 0x450 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA10__IPU1_DI1_PIN15         0x13c 0x450 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA10__IPU2_CSI1_DATA_EN      0x13c 0x450 0x8d8 0x2 0x1
--#define MX6Q_PAD_EIM_DA10__GPIO3_IO10             0x13c 0x450 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA10__SRC_BOOT_CFG10         0x13c 0x450 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA11__EIM_AD11               0x140 0x454 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA11__IPU1_DI1_PIN02         0x140 0x454 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA11__IPU2_CSI1_HSYNC        0x140 0x454 0x8dc 0x2 0x1
--#define MX6Q_PAD_EIM_DA11__GPIO3_IO11             0x140 0x454 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA11__SRC_BOOT_CFG11         0x140 0x454 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA12__EIM_AD12               0x144 0x458 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA12__IPU1_DI1_PIN03         0x144 0x458 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA12__IPU2_CSI1_VSYNC        0x144 0x458 0x8e4 0x2 0x1
--#define MX6Q_PAD_EIM_DA12__GPIO3_IO12             0x144 0x458 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA12__SRC_BOOT_CFG12         0x144 0x458 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA13__EIM_AD13               0x148 0x45c 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA13__IPU1_DI1_D0_CS         0x148 0x45c 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA13__GPIO3_IO13             0x148 0x45c 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA13__SRC_BOOT_CFG13         0x148 0x45c 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA14__EIM_AD14               0x14c 0x460 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA14__IPU1_DI1_D1_CS         0x14c 0x460 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA14__GPIO3_IO14             0x14c 0x460 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA14__SRC_BOOT_CFG14         0x14c 0x460 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_DA15__EIM_AD15               0x150 0x464 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_DA15__IPU1_DI1_PIN01         0x150 0x464 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_DA15__IPU1_DI1_PIN04         0x150 0x464 0x000 0x2 0x0
--#define MX6Q_PAD_EIM_DA15__GPIO3_IO15             0x150 0x464 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_DA15__SRC_BOOT_CFG15         0x150 0x464 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_WAIT__EIM_WAIT_B             0x154 0x468 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_WAIT__EIM_DTACK_B            0x154 0x468 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_WAIT__GPIO5_IO00             0x154 0x468 0x000 0x5 0x0
--#define MX6Q_PAD_EIM_WAIT__SRC_BOOT_CFG25         0x154 0x468 0x000 0x7 0x0
--#define MX6Q_PAD_EIM_BCLK__EIM_BCLK               0x158 0x46c 0x000 0x0 0x0
--#define MX6Q_PAD_EIM_BCLK__IPU1_DI1_PIN16         0x158 0x46c 0x000 0x1 0x0
--#define MX6Q_PAD_EIM_BCLK__GPIO6_IO31             0x158 0x46c 0x000 0x5 0x0
--#define MX6Q_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK  0x15c 0x470 0x000 0x0 0x0
--#define MX6Q_PAD_DI0_DISP_CLK__IPU2_DI0_DISP_CLK  0x15c 0x470 0x000 0x1 0x0
--#define MX6Q_PAD_DI0_DISP_CLK__GPIO4_IO16         0x15c 0x470 0x000 0x5 0x0
--#define MX6Q_PAD_DI0_PIN15__IPU1_DI0_PIN15        0x160 0x474 0x000 0x0 0x0
--#define MX6Q_PAD_DI0_PIN15__IPU2_DI0_PIN15        0x160 0x474 0x000 0x1 0x0
--#define MX6Q_PAD_DI0_PIN15__AUD6_TXC              0x160 0x474 0x000 0x2 0x0
--#define MX6Q_PAD_DI0_PIN15__GPIO4_IO17            0x160 0x474 0x000 0x5 0x0
--#define MX6Q_PAD_DI0_PIN2__IPU1_DI0_PIN02         0x164 0x478 0x000 0x0 0x0
--#define MX6Q_PAD_DI0_PIN2__IPU2_DI0_PIN02         0x164 0x478 0x000 0x1 0x0
--#define MX6Q_PAD_DI0_PIN2__AUD6_TXD               0x164 0x478 0x000 0x2 0x0
--#define MX6Q_PAD_DI0_PIN2__GPIO4_IO18             0x164 0x478 0x000 0x5 0x0
--#define MX6Q_PAD_DI0_PIN3__IPU1_DI0_PIN03         0x168 0x47c 0x000 0x0 0x0
--#define MX6Q_PAD_DI0_PIN3__IPU2_DI0_PIN03         0x168 0x47c 0x000 0x1 0x0
--#define MX6Q_PAD_DI0_PIN3__AUD6_TXFS              0x168 0x47c 0x000 0x2 0x0
--#define MX6Q_PAD_DI0_PIN3__GPIO4_IO19             0x168 0x47c 0x000 0x5 0x0
--#define MX6Q_PAD_DI0_PIN4__IPU1_DI0_PIN04         0x16c 0x480 0x000 0x0 0x0
--#define MX6Q_PAD_DI0_PIN4__IPU2_DI0_PIN04         0x16c 0x480 0x000 0x1 0x0
--#define MX6Q_PAD_DI0_PIN4__AUD6_RXD               0x16c 0x480 0x000 0x2 0x0
--#define MX6Q_PAD_DI0_PIN4__SD1_WP                 0x16c 0x480 0x94c 0x3 0x0
--#define MX6Q_PAD_DI0_PIN4__GPIO4_IO20             0x16c 0x480 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT0__IPU1_DISP0_DATA00    0x170 0x484 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT0__IPU2_DISP0_DATA00    0x170 0x484 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT0__ECSPI3_SCLK          0x170 0x484 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT0__GPIO4_IO21           0x170 0x484 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT1__IPU1_DISP0_DATA01    0x174 0x488 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT1__IPU2_DISP0_DATA01    0x174 0x488 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT1__ECSPI3_MOSI          0x174 0x488 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT1__GPIO4_IO22           0x174 0x488 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT2__IPU1_DISP0_DATA02    0x178 0x48c 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT2__IPU2_DISP0_DATA02    0x178 0x48c 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT2__ECSPI3_MISO          0x178 0x48c 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT2__GPIO4_IO23           0x178 0x48c 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT3__IPU1_DISP0_DATA03    0x17c 0x490 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT3__IPU2_DISP0_DATA03    0x17c 0x490 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT3__ECSPI3_SS0           0x17c 0x490 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT3__GPIO4_IO24           0x17c 0x490 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT4__IPU1_DISP0_DATA04    0x180 0x494 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT4__IPU2_DISP0_DATA04    0x180 0x494 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT4__ECSPI3_SS1           0x180 0x494 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT4__GPIO4_IO25           0x180 0x494 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT5__IPU1_DISP0_DATA05    0x184 0x498 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT5__IPU2_DISP0_DATA05    0x184 0x498 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT5__ECSPI3_SS2           0x184 0x498 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT5__AUD6_RXFS            0x184 0x498 0x000 0x3 0x0
--#define MX6Q_PAD_DISP0_DAT5__GPIO4_IO26           0x184 0x498 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT6__IPU1_DISP0_DATA06    0x188 0x49c 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT6__IPU2_DISP0_DATA06    0x188 0x49c 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT6__ECSPI3_SS3           0x188 0x49c 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT6__AUD6_RXC             0x188 0x49c 0x000 0x3 0x0
--#define MX6Q_PAD_DISP0_DAT6__GPIO4_IO27           0x188 0x49c 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT7__IPU1_DISP0_DATA07    0x18c 0x4a0 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT7__IPU2_DISP0_DATA07    0x18c 0x4a0 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT7__ECSPI3_RDY           0x18c 0x4a0 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT7__GPIO4_IO28           0x18c 0x4a0 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT8__IPU1_DISP0_DATA08    0x190 0x4a4 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT8__IPU2_DISP0_DATA08    0x190 0x4a4 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT8__PWM1_OUT             0x190 0x4a4 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT8__WDOG1_B              0x190 0x4a4 0x000 0x3 0x0
--#define MX6Q_PAD_DISP0_DAT8__GPIO4_IO29           0x190 0x4a4 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT9__IPU1_DISP0_DATA09    0x194 0x4a8 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT9__IPU2_DISP0_DATA09    0x194 0x4a8 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT9__PWM2_OUT             0x194 0x4a8 0x000 0x2 0x0
--#define MX6Q_PAD_DISP0_DAT9__WDOG2_B              0x194 0x4a8 0x000 0x3 0x0
--#define MX6Q_PAD_DISP0_DAT9__GPIO4_IO30           0x194 0x4a8 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT10__IPU1_DISP0_DATA10   0x198 0x4ac 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT10__IPU2_DISP0_DATA10   0x198 0x4ac 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT10__GPIO4_IO31          0x198 0x4ac 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT11__IPU1_DISP0_DATA11   0x19c 0x4b0 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT11__IPU2_DISP0_DATA11   0x19c 0x4b0 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT11__GPIO5_IO05          0x19c 0x4b0 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT12__IPU1_DISP0_DATA12   0x1a0 0x4b4 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT12__IPU2_DISP0_DATA12   0x1a0 0x4b4 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT12__GPIO5_IO06          0x1a0 0x4b4 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT13__IPU1_DISP0_DATA13   0x1a4 0x4b8 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT13__IPU2_DISP0_DATA13   0x1a4 0x4b8 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT13__AUD5_RXFS           0x1a4 0x4b8 0x7d8 0x3 0x1
--#define MX6Q_PAD_DISP0_DAT13__GPIO5_IO07          0x1a4 0x4b8 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT14__IPU1_DISP0_DATA14   0x1a8 0x4bc 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT14__IPU2_DISP0_DATA14   0x1a8 0x4bc 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT14__AUD5_RXC            0x1a8 0x4bc 0x7d4 0x3 0x1
--#define MX6Q_PAD_DISP0_DAT14__GPIO5_IO08          0x1a8 0x4bc 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT15__IPU1_DISP0_DATA15   0x1ac 0x4c0 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT15__IPU2_DISP0_DATA15   0x1ac 0x4c0 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT15__ECSPI1_SS1          0x1ac 0x4c0 0x804 0x2 0x1
--#define MX6Q_PAD_DISP0_DAT15__ECSPI2_SS1          0x1ac 0x4c0 0x820 0x3 0x1
--#define MX6Q_PAD_DISP0_DAT15__GPIO5_IO09          0x1ac 0x4c0 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT16__IPU1_DISP0_DATA16   0x1b0 0x4c4 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT16__IPU2_DISP0_DATA16   0x1b0 0x4c4 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT16__ECSPI2_MOSI         0x1b0 0x4c4 0x818 0x2 0x1
--#define MX6Q_PAD_DISP0_DAT16__AUD5_TXC            0x1b0 0x4c4 0x7dc 0x3 0x0
--#define MX6Q_PAD_DISP0_DAT16__SDMA_EXT_EVENT0     0x1b0 0x4c4 0x90c 0x4 0x0
--#define MX6Q_PAD_DISP0_DAT16__GPIO5_IO10          0x1b0 0x4c4 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT17__IPU1_DISP0_DATA17   0x1b4 0x4c8 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT17__IPU2_DISP0_DATA17   0x1b4 0x4c8 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT17__ECSPI2_MISO         0x1b4 0x4c8 0x814 0x2 0x1
--#define MX6Q_PAD_DISP0_DAT17__AUD5_TXD            0x1b4 0x4c8 0x7d0 0x3 0x0
--#define MX6Q_PAD_DISP0_DAT17__SDMA_EXT_EVENT1     0x1b4 0x4c8 0x910 0x4 0x0
--#define MX6Q_PAD_DISP0_DAT17__GPIO5_IO11          0x1b4 0x4c8 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT18__IPU1_DISP0_DATA18   0x1b8 0x4cc 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT18__IPU2_DISP0_DATA18   0x1b8 0x4cc 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT18__ECSPI2_SS0          0x1b8 0x4cc 0x81c 0x2 0x1
--#define MX6Q_PAD_DISP0_DAT18__AUD5_TXFS           0x1b8 0x4cc 0x7e0 0x3 0x0
--#define MX6Q_PAD_DISP0_DAT18__AUD4_RXFS           0x1b8 0x4cc 0x7c0 0x4 0x0
--#define MX6Q_PAD_DISP0_DAT18__GPIO5_IO12          0x1b8 0x4cc 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT18__EIM_CS2_B           0x1b8 0x4cc 0x000 0x7 0x0
--#define MX6Q_PAD_DISP0_DAT19__IPU1_DISP0_DATA19   0x1bc 0x4d0 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT19__IPU2_DISP0_DATA19   0x1bc 0x4d0 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT19__ECSPI2_SCLK         0x1bc 0x4d0 0x810 0x2 0x1
--#define MX6Q_PAD_DISP0_DAT19__AUD5_RXD            0x1bc 0x4d0 0x7cc 0x3 0x0
--#define MX6Q_PAD_DISP0_DAT19__AUD4_RXC            0x1bc 0x4d0 0x7bc 0x4 0x0
--#define MX6Q_PAD_DISP0_DAT19__GPIO5_IO13          0x1bc 0x4d0 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT19__EIM_CS3_B           0x1bc 0x4d0 0x000 0x7 0x0
--#define MX6Q_PAD_DISP0_DAT20__IPU1_DISP0_DATA20   0x1c0 0x4d4 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT20__IPU2_DISP0_DATA20   0x1c0 0x4d4 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT20__ECSPI1_SCLK         0x1c0 0x4d4 0x7f4 0x2 0x1
--#define MX6Q_PAD_DISP0_DAT20__AUD4_TXC            0x1c0 0x4d4 0x7c4 0x3 0x0
--#define MX6Q_PAD_DISP0_DAT20__GPIO5_IO14          0x1c0 0x4d4 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT21__IPU1_DISP0_DATA21   0x1c4 0x4d8 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT21__IPU2_DISP0_DATA21   0x1c4 0x4d8 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT21__ECSPI1_MOSI         0x1c4 0x4d8 0x7fc 0x2 0x1
--#define MX6Q_PAD_DISP0_DAT21__AUD4_TXD            0x1c4 0x4d8 0x7b8 0x3 0x1
--#define MX6Q_PAD_DISP0_DAT21__GPIO5_IO15          0x1c4 0x4d8 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT22__IPU1_DISP0_DATA22   0x1c8 0x4dc 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT22__IPU2_DISP0_DATA22   0x1c8 0x4dc 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT22__ECSPI1_MISO         0x1c8 0x4dc 0x7f8 0x2 0x1
--#define MX6Q_PAD_DISP0_DAT22__AUD4_TXFS           0x1c8 0x4dc 0x7c8 0x3 0x1
--#define MX6Q_PAD_DISP0_DAT22__GPIO5_IO16          0x1c8 0x4dc 0x000 0x5 0x0
--#define MX6Q_PAD_DISP0_DAT23__IPU1_DISP0_DATA23   0x1cc 0x4e0 0x000 0x0 0x0
--#define MX6Q_PAD_DISP0_DAT23__IPU2_DISP0_DATA23   0x1cc 0x4e0 0x000 0x1 0x0
--#define MX6Q_PAD_DISP0_DAT23__ECSPI1_SS0          0x1cc 0x4e0 0x800 0x2 0x1
--#define MX6Q_PAD_DISP0_DAT23__AUD4_RXD            0x1cc 0x4e0 0x7b4 0x3 0x1
--#define MX6Q_PAD_DISP0_DAT23__GPIO5_IO17          0x1cc 0x4e0 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_MDIO__ENET_MDIO             0x1d0 0x4e4 0x840 0x1 0x0
--#define MX6Q_PAD_ENET_MDIO__ESAI_RX_CLK           0x1d0 0x4e4 0x86c 0x2 0x0
--#define MX6Q_PAD_ENET_MDIO__ENET_1588_EVENT1_OUT  0x1d0 0x4e4 0x000 0x4 0x0
--#define MX6Q_PAD_ENET_MDIO__GPIO1_IO22            0x1d0 0x4e4 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_MDIO__SPDIF_LOCK            0x1d0 0x4e4 0x000 0x6 0x0
--#define MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK        0x1d4 0x4e8 0x000 0x1 0x0
--#define MX6Q_PAD_ENET_REF_CLK__ESAI_RX_FS         0x1d4 0x4e8 0x85c 0x2 0x0
--#define MX6Q_PAD_ENET_REF_CLK__GPIO1_IO23         0x1d4 0x4e8 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_REF_CLK__SPDIF_SR_CLK       0x1d4 0x4e8 0x000 0x6 0x0
--#define MX6Q_PAD_ENET_RX_ER__USB_OTG_ID           0x1d8 0x4ec 0x000 0x0 0x0
--#define MX6Q_PAD_ENET_RX_ER__ENET_RX_ER           0x1d8 0x4ec 0x000 0x1 0x0
--#define MX6Q_PAD_ENET_RX_ER__ESAI_RX_HF_CLK       0x1d8 0x4ec 0x864 0x2 0x0
--#define MX6Q_PAD_ENET_RX_ER__SPDIF_IN             0x1d8 0x4ec 0x914 0x3 0x1
--#define MX6Q_PAD_ENET_RX_ER__ENET_1588_EVENT2_OUT 0x1d8 0x4ec 0x000 0x4 0x0
--#define MX6Q_PAD_ENET_RX_ER__GPIO1_IO24           0x1d8 0x4ec 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_CRS_DV__ENET_RX_EN          0x1dc 0x4f0 0x858 0x1 0x1
--#define MX6Q_PAD_ENET_CRS_DV__ESAI_TX_CLK         0x1dc 0x4f0 0x870 0x2 0x0
--#define MX6Q_PAD_ENET_CRS_DV__SPDIF_EXT_CLK       0x1dc 0x4f0 0x918 0x3 0x1
--#define MX6Q_PAD_ENET_CRS_DV__GPIO1_IO25          0x1dc 0x4f0 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_RXD1__MLB_SIG               0x1e0 0x4f4 0x908 0x0 0x0
--#define MX6Q_PAD_ENET_RXD1__ENET_RX_DATA1         0x1e0 0x4f4 0x84c 0x1 0x1
--#define MX6Q_PAD_ENET_RXD1__ESAI_TX_FS            0x1e0 0x4f4 0x860 0x2 0x0
--#define MX6Q_PAD_ENET_RXD1__ENET_1588_EVENT3_OUT  0x1e0 0x4f4 0x000 0x4 0x0
--#define MX6Q_PAD_ENET_RXD1__GPIO1_IO26            0x1e0 0x4f4 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_RXD0__ENET_RX_DATA0         0x1e4 0x4f8 0x848 0x1 0x1
--#define MX6Q_PAD_ENET_RXD0__ESAI_TX_HF_CLK        0x1e4 0x4f8 0x868 0x2 0x0
--#define MX6Q_PAD_ENET_RXD0__SPDIF_OUT             0x1e4 0x4f8 0x000 0x3 0x0
--#define MX6Q_PAD_ENET_RXD0__GPIO1_IO27            0x1e4 0x4f8 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_TX_EN__ENET_TX_EN           0x1e8 0x4fc 0x000 0x1 0x0
--#define MX6Q_PAD_ENET_TX_EN__ESAI_TX3_RX2         0x1e8 0x4fc 0x880 0x2 0x0
--#define MX6Q_PAD_ENET_TX_EN__GPIO1_IO28           0x1e8 0x4fc 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_TXD1__MLB_CLK               0x1ec 0x500 0x900 0x0 0x0
--#define MX6Q_PAD_ENET_TXD1__ENET_TX_DATA1         0x1ec 0x500 0x000 0x1 0x0
--#define MX6Q_PAD_ENET_TXD1__ESAI_TX2_RX3          0x1ec 0x500 0x87c 0x2 0x0
--#define MX6Q_PAD_ENET_TXD1__ENET_1588_EVENT0_IN   0x1ec 0x500 0x000 0x4 0x0
--#define MX6Q_PAD_ENET_TXD1__GPIO1_IO29            0x1ec 0x500 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_TXD0__ENET_TX_DATA0         0x1f0 0x504 0x000 0x1 0x0
--#define MX6Q_PAD_ENET_TXD0__ESAI_TX4_RX1          0x1f0 0x504 0x884 0x2 0x0
--#define MX6Q_PAD_ENET_TXD0__GPIO1_IO30            0x1f0 0x504 0x000 0x5 0x0
--#define MX6Q_PAD_ENET_MDC__MLB_DATA               0x1f4 0x508 0x904 0x0 0x0
--#define MX6Q_PAD_ENET_MDC__ENET_MDC               0x1f4 0x508 0x000 0x1 0x0
--#define MX6Q_PAD_ENET_MDC__ESAI_TX5_RX0           0x1f4 0x508 0x888 0x2 0x0
--#define MX6Q_PAD_ENET_MDC__ENET_1588_EVENT1_IN    0x1f4 0x508 0x000 0x4 0x0
--#define MX6Q_PAD_ENET_MDC__GPIO1_IO31             0x1f4 0x508 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_COL0__ECSPI1_SCLK            0x1f8 0x5c8 0x7f4 0x0 0x2
--#define MX6Q_PAD_KEY_COL0__ENET_RX_DATA3          0x1f8 0x5c8 0x854 0x1 0x1
--#define MX6Q_PAD_KEY_COL0__AUD5_TXC               0x1f8 0x5c8 0x7dc 0x2 0x1
--#define MX6Q_PAD_KEY_COL0__KEY_COL0               0x1f8 0x5c8 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_COL0__UART4_TX_DATA          0x1f8 0x5c8 0x000 0x4 0x0
--#define MX6Q_PAD_KEY_COL0__UART4_RX_DATA          0x1f8 0x5c8 0x938 0x4 0x0
--#define MX6Q_PAD_KEY_COL0__GPIO4_IO06             0x1f8 0x5c8 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_COL0__DCIC1_OUT              0x1f8 0x5c8 0x000 0x6 0x0
--#define MX6Q_PAD_KEY_ROW0__ECSPI1_MOSI            0x1fc 0x5cc 0x7fc 0x0 0x2
--#define MX6Q_PAD_KEY_ROW0__ENET_TX_DATA3          0x1fc 0x5cc 0x000 0x1 0x0
--#define MX6Q_PAD_KEY_ROW0__AUD5_TXD               0x1fc 0x5cc 0x7d0 0x2 0x1
--#define MX6Q_PAD_KEY_ROW0__KEY_ROW0               0x1fc 0x5cc 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_ROW0__UART4_RX_DATA          0x1fc 0x5cc 0x938 0x4 0x1
--#define MX6Q_PAD_KEY_ROW0__UART4_TX_DATA          0x1fc 0x5cc 0x000 0x4 0x0
--#define MX6Q_PAD_KEY_ROW0__GPIO4_IO07             0x1fc 0x5cc 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_ROW0__DCIC2_OUT              0x1fc 0x5cc 0x000 0x6 0x0
--#define MX6Q_PAD_KEY_COL1__ECSPI1_MISO            0x200 0x5d0 0x7f8 0x0 0x2
--#define MX6Q_PAD_KEY_COL1__ENET_MDIO              0x200 0x5d0 0x840 0x1 0x1
--#define MX6Q_PAD_KEY_COL1__AUD5_TXFS              0x200 0x5d0 0x7e0 0x2 0x1
--#define MX6Q_PAD_KEY_COL1__KEY_COL1               0x200 0x5d0 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_COL1__UART5_TX_DATA          0x200 0x5d0 0x000 0x4 0x0
--#define MX6Q_PAD_KEY_COL1__UART5_RX_DATA          0x200 0x5d0 0x940 0x4 0x0
--#define MX6Q_PAD_KEY_COL1__GPIO4_IO08             0x200 0x5d0 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_COL1__SD1_VSELECT            0x200 0x5d0 0x000 0x6 0x0
--#define MX6Q_PAD_KEY_ROW1__ECSPI1_SS0             0x204 0x5d4 0x800 0x0 0x2
--#define MX6Q_PAD_KEY_ROW1__ENET_COL               0x204 0x5d4 0x000 0x1 0x0
--#define MX6Q_PAD_KEY_ROW1__AUD5_RXD               0x204 0x5d4 0x7cc 0x2 0x1
--#define MX6Q_PAD_KEY_ROW1__KEY_ROW1               0x204 0x5d4 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_ROW1__UART5_RX_DATA          0x204 0x5d4 0x940 0x4 0x1
--#define MX6Q_PAD_KEY_ROW1__UART5_TX_DATA          0x204 0x5d4 0x000 0x4 0x0
--#define MX6Q_PAD_KEY_ROW1__GPIO4_IO09             0x204 0x5d4 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_ROW1__SD2_VSELECT            0x204 0x5d4 0x000 0x6 0x0
--#define MX6Q_PAD_KEY_COL2__ECSPI1_SS1             0x208 0x5d8 0x804 0x0 0x2
--#define MX6Q_PAD_KEY_COL2__ENET_RX_DATA2          0x208 0x5d8 0x850 0x1 0x1
--#define MX6Q_PAD_KEY_COL2__FLEXCAN1_TX            0x208 0x5d8 0x000 0x2 0x0
--#define MX6Q_PAD_KEY_COL2__KEY_COL2               0x208 0x5d8 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_COL2__ENET_MDC               0x208 0x5d8 0x000 0x4 0x0
--#define MX6Q_PAD_KEY_COL2__GPIO4_IO10             0x208 0x5d8 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_COL2__USB_H1_PWR_CTL_WAKE    0x208 0x5d8 0x000 0x6 0x0
--#define MX6Q_PAD_KEY_ROW2__ECSPI1_SS2             0x20c 0x5dc 0x808 0x0 0x1
--#define MX6Q_PAD_KEY_ROW2__ENET_TX_DATA2          0x20c 0x5dc 0x000 0x1 0x0
--#define MX6Q_PAD_KEY_ROW2__FLEXCAN1_RX            0x20c 0x5dc 0x7e4 0x2 0x0
--#define MX6Q_PAD_KEY_ROW2__KEY_ROW2               0x20c 0x5dc 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_ROW2__SD2_VSELECT            0x20c 0x5dc 0x000 0x4 0x0
--#define MX6Q_PAD_KEY_ROW2__GPIO4_IO11             0x20c 0x5dc 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_ROW2__HDMI_TX_CEC_LINE       0x20c 0x5dc 0x88c 0x6 0x1
--#define MX6Q_PAD_KEY_COL3__ECSPI1_SS3             0x210 0x5e0 0x80c 0x0 0x1
--#define MX6Q_PAD_KEY_COL3__ENET_CRS               0x210 0x5e0 0x000 0x1 0x0
--#define MX6Q_PAD_KEY_COL3__HDMI_TX_DDC_SCL        0x210 0x5e0 0x890 0x2 0x1
--#define MX6Q_PAD_KEY_COL3__KEY_COL3               0x210 0x5e0 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_COL3__I2C2_SCL               0x210 0x5e0 0x8a0 0x4 0x1
--#define MX6Q_PAD_KEY_COL3__GPIO4_IO12             0x210 0x5e0 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_COL3__SPDIF_IN               0x210 0x5e0 0x914 0x6 0x2
--#define MX6Q_PAD_KEY_ROW3__ASRC_EXT_CLK           0x214 0x5e4 0x7b0 0x1 0x0
--#define MX6Q_PAD_KEY_ROW3__HDMI_TX_DDC_SDA        0x214 0x5e4 0x894 0x2 0x1
--#define MX6Q_PAD_KEY_ROW3__KEY_ROW3               0x214 0x5e4 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_ROW3__I2C2_SDA               0x214 0x5e4 0x8a4 0x4 0x1
--#define MX6Q_PAD_KEY_ROW3__GPIO4_IO13             0x214 0x5e4 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_ROW3__SD1_VSELECT            0x214 0x5e4 0x000 0x6 0x0
--#define MX6Q_PAD_KEY_COL4__FLEXCAN2_TX            0x218 0x5e8 0x000 0x0 0x0
--#define MX6Q_PAD_KEY_COL4__IPU1_SISG4             0x218 0x5e8 0x000 0x1 0x0
--#define MX6Q_PAD_KEY_COL4__USB_OTG_OC             0x218 0x5e8 0x944 0x2 0x1
--#define MX6Q_PAD_KEY_COL4__KEY_COL4               0x218 0x5e8 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_COL4__UART5_RTS_B            0x218 0x5e8 0x93c 0x4 0x0
--#define MX6Q_PAD_KEY_COL4__UART5_CTS_B            0x218 0x5e8 0x000 0x4 0x0
--#define MX6Q_PAD_KEY_COL4__GPIO4_IO14             0x218 0x5e8 0x000 0x5 0x0
--#define MX6Q_PAD_KEY_ROW4__FLEXCAN2_RX            0x21c 0x5ec 0x7e8 0x0 0x0
--#define MX6Q_PAD_KEY_ROW4__IPU1_SISG5             0x21c 0x5ec 0x000 0x1 0x0
--#define MX6Q_PAD_KEY_ROW4__USB_OTG_PWR            0x21c 0x5ec 0x000 0x2 0x0
--#define MX6Q_PAD_KEY_ROW4__KEY_ROW4               0x21c 0x5ec 0x000 0x3 0x0
--#define MX6Q_PAD_KEY_ROW4__UART5_CTS_B            0x21c 0x5ec 0x000 0x4 0x0
--#define MX6Q_PAD_KEY_ROW4__UART5_RTS_B            0x21c 0x5ec 0x93c 0x4 0x1
--#define MX6Q_PAD_KEY_ROW4__GPIO4_IO15             0x21c 0x5ec 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_0__CCM_CLKO1                0x220 0x5f0 0x000 0x0 0x0
--#define MX6Q_PAD_GPIO_0__KEY_COL5                 0x220 0x5f0 0x8e8 0x2 0x0
--#define MX6Q_PAD_GPIO_0__ASRC_EXT_CLK             0x220 0x5f0 0x7b0 0x3 0x1
--#define MX6Q_PAD_GPIO_0__EPIT1_OUT                0x220 0x5f0 0x000 0x4 0x0
--#define MX6Q_PAD_GPIO_0__GPIO1_IO00               0x220 0x5f0 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_0__USB_H1_PWR               0x220 0x5f0 0x000 0x6 0x0
--#define MX6Q_PAD_GPIO_0__SNVS_VIO_5               0x220 0x5f0 0x000 0x7 0x0
--#define MX6Q_PAD_GPIO_1__ESAI_RX_CLK              0x224 0x5f4 0x86c 0x0 0x1
--#define MX6Q_PAD_GPIO_1__WDOG2_B                  0x224 0x5f4 0x000 0x1 0x0
--#define MX6Q_PAD_GPIO_1__KEY_ROW5                 0x224 0x5f4 0x8f4 0x2 0x0
--#define MX6Q_PAD_GPIO_1__USB_OTG_ID               0x224 0x5f4 0x000 0x3 0x0
--#define MX6Q_PAD_GPIO_1__PWM2_OUT                 0x224 0x5f4 0x000 0x4 0x0
--#define MX6Q_PAD_GPIO_1__GPIO1_IO01               0x224 0x5f4 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_1__SD1_CD_B                 0x224 0x5f4 0x000 0x6 0x0
--#define MX6Q_PAD_GPIO_9__ESAI_RX_FS               0x228 0x5f8 0x85c 0x0 0x1
--#define MX6Q_PAD_GPIO_9__WDOG1_B                  0x228 0x5f8 0x000 0x1 0x0
--#define MX6Q_PAD_GPIO_9__KEY_COL6                 0x228 0x5f8 0x8ec 0x2 0x0
--#define MX6Q_PAD_GPIO_9__CCM_REF_EN_B             0x228 0x5f8 0x000 0x3 0x0
--#define MX6Q_PAD_GPIO_9__PWM1_OUT                 0x228 0x5f8 0x000 0x4 0x0
--#define MX6Q_PAD_GPIO_9__GPIO1_IO09               0x228 0x5f8 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_9__SD1_WP                   0x228 0x5f8 0x94c 0x6 0x1
--#define MX6Q_PAD_GPIO_3__ESAI_RX_HF_CLK           0x22c 0x5fc 0x864 0x0 0x1
--#define MX6Q_PAD_GPIO_3__I2C3_SCL                 0x22c 0x5fc 0x8a8 0x2 0x1
--#define MX6Q_PAD_GPIO_3__XTALOSC_REF_CLK_24M      0x22c 0x5fc 0x000 0x3 0x0
--#define MX6Q_PAD_GPIO_3__CCM_CLKO2                0x22c 0x5fc 0x000 0x4 0x0
--#define MX6Q_PAD_GPIO_3__GPIO1_IO03               0x22c 0x5fc 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_3__USB_H1_OC                0x22c 0x5fc 0x948 0x6 0x1
--#define MX6Q_PAD_GPIO_3__MLB_CLK                  0x22c 0x5fc 0x900 0x7 0x1
--#define MX6Q_PAD_GPIO_6__ESAI_TX_CLK              0x230 0x600 0x870 0x0 0x1
--#define MX6Q_PAD_GPIO_6__I2C3_SDA                 0x230 0x600 0x8ac 0x2 0x1
--#define MX6Q_PAD_GPIO_6__GPIO1_IO06               0x230 0x600 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_6__SD2_LCTL                 0x230 0x600 0x000 0x6 0x0
--#define MX6Q_PAD_GPIO_6__MLB_SIG                  0x230 0x600 0x908 0x7 0x1
--#define MX6Q_PAD_GPIO_2__ESAI_TX_FS               0x234 0x604 0x860 0x0 0x1
--#define MX6Q_PAD_GPIO_2__KEY_ROW6                 0x234 0x604 0x8f8 0x2 0x1
--#define MX6Q_PAD_GPIO_2__GPIO1_IO02               0x234 0x604 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_2__SD2_WP                   0x234 0x604 0x000 0x6 0x0
--#define MX6Q_PAD_GPIO_2__MLB_DATA                 0x234 0x604 0x904 0x7 0x1
--#define MX6Q_PAD_GPIO_4__ESAI_TX_HF_CLK           0x238 0x608 0x868 0x0 0x1
--#define MX6Q_PAD_GPIO_4__KEY_COL7                 0x238 0x608 0x8f0 0x2 0x1
--#define MX6Q_PAD_GPIO_4__GPIO1_IO04               0x238 0x608 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_4__SD2_CD_B                 0x238 0x608 0x000 0x6 0x0
--#define MX6Q_PAD_GPIO_5__ESAI_TX2_RX3             0x23c 0x60c 0x87c 0x0 0x1
--#define MX6Q_PAD_GPIO_5__KEY_ROW7                 0x23c 0x60c 0x8fc 0x2 0x1
--#define MX6Q_PAD_GPIO_5__CCM_CLKO1                0x23c 0x60c 0x000 0x3 0x0
--#define MX6Q_PAD_GPIO_5__GPIO1_IO05               0x23c 0x60c 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_5__I2C3_SCL                 0x23c 0x60c 0x8a8 0x6 0x2
--#define MX6Q_PAD_GPIO_5__ARM_EVENTI               0x23c 0x60c 0x000 0x7 0x0
--#define MX6Q_PAD_GPIO_7__ESAI_TX4_RX1             0x240 0x610 0x884 0x0 0x1
--#define MX6Q_PAD_GPIO_7__ECSPI5_RDY               0x240 0x610 0x000 0x1 0x0
--#define MX6Q_PAD_GPIO_7__EPIT1_OUT                0x240 0x610 0x000 0x2 0x0
--#define MX6Q_PAD_GPIO_7__FLEXCAN1_TX              0x240 0x610 0x000 0x3 0x0
--#define MX6Q_PAD_GPIO_7__UART2_TX_DATA            0x240 0x610 0x000 0x4 0x0
--#define MX6Q_PAD_GPIO_7__UART2_RX_DATA            0x240 0x610 0x928 0x4 0x2
--#define MX6Q_PAD_GPIO_7__GPIO1_IO07               0x240 0x610 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_7__SPDIF_LOCK               0x240 0x610 0x000 0x6 0x0
--#define MX6Q_PAD_GPIO_7__USB_OTG_HOST_MODE        0x240 0x610 0x000 0x7 0x0
--#define MX6Q_PAD_GPIO_8__ESAI_TX5_RX0             0x244 0x614 0x888 0x0 0x1
--#define MX6Q_PAD_GPIO_8__XTALOSC_REF_CLK_32K      0x244 0x614 0x000 0x1 0x0
--#define MX6Q_PAD_GPIO_8__EPIT2_OUT                0x244 0x614 0x000 0x2 0x0
--#define MX6Q_PAD_GPIO_8__FLEXCAN1_RX              0x244 0x614 0x7e4 0x3 0x1
--#define MX6Q_PAD_GPIO_8__UART2_RX_DATA            0x244 0x614 0x928 0x4 0x3
--#define MX6Q_PAD_GPIO_8__UART2_TX_DATA            0x244 0x614 0x000 0x4 0x0
--#define MX6Q_PAD_GPIO_8__GPIO1_IO08               0x244 0x614 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_8__SPDIF_SR_CLK             0x244 0x614 0x000 0x6 0x0
--#define MX6Q_PAD_GPIO_8__USB_OTG_PWR_CTL_WAKE     0x244 0x614 0x000 0x7 0x0
--#define MX6Q_PAD_GPIO_16__ESAI_TX3_RX2            0x248 0x618 0x880 0x0 0x1
--#define MX6Q_PAD_GPIO_16__ENET_1588_EVENT2_IN     0x248 0x618 0x000 0x1 0x0
--#define MX6Q_PAD_GPIO_16__ENET_REF_CLK            0x248 0x618 0x83c 0x2 0x1
--#define MX6Q_PAD_GPIO_16__SD1_LCTL                0x248 0x618 0x000 0x3 0x0
--#define MX6Q_PAD_GPIO_16__SPDIF_IN                0x248 0x618 0x914 0x4 0x3
--#define MX6Q_PAD_GPIO_16__GPIO7_IO11              0x248 0x618 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_16__I2C3_SDA                0x248 0x618 0x8ac 0x6 0x2
--#define MX6Q_PAD_GPIO_16__JTAG_DE_B               0x248 0x618 0x000 0x7 0x0
--#define MX6Q_PAD_GPIO_17__ESAI_TX0                0x24c 0x61c 0x874 0x0 0x0
--#define MX6Q_PAD_GPIO_17__ENET_1588_EVENT3_IN     0x24c 0x61c 0x000 0x1 0x0
--#define MX6Q_PAD_GPIO_17__CCM_PMIC_READY          0x24c 0x61c 0x7f0 0x2 0x1
--#define MX6Q_PAD_GPIO_17__SDMA_EXT_EVENT0         0x24c 0x61c 0x90c 0x3 0x1
--#define MX6Q_PAD_GPIO_17__SPDIF_OUT               0x24c 0x61c 0x000 0x4 0x0
--#define MX6Q_PAD_GPIO_17__GPIO7_IO12              0x24c 0x61c 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_18__ESAI_TX1                0x250 0x620 0x878 0x0 0x0
--#define MX6Q_PAD_GPIO_18__ENET_RX_CLK             0x250 0x620 0x844 0x1 0x1
--#define MX6Q_PAD_GPIO_18__SD3_VSELECT             0x250 0x620 0x000 0x2 0x0
--#define MX6Q_PAD_GPIO_18__SDMA_EXT_EVENT1         0x250 0x620 0x910 0x3 0x1
--#define MX6Q_PAD_GPIO_18__ASRC_EXT_CLK            0x250 0x620 0x7b0 0x4 0x2
--#define MX6Q_PAD_GPIO_18__GPIO7_IO13              0x250 0x620 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_18__SNVS_VIO_5_CTL          0x250 0x620 0x000 0x6 0x0
--#define MX6Q_PAD_GPIO_19__KEY_COL5                0x254 0x624 0x8e8 0x0 0x1
--#define MX6Q_PAD_GPIO_19__ENET_1588_EVENT0_OUT    0x254 0x624 0x000 0x1 0x0
--#define MX6Q_PAD_GPIO_19__SPDIF_OUT               0x254 0x624 0x000 0x2 0x0
--#define MX6Q_PAD_GPIO_19__CCM_CLKO1               0x254 0x624 0x000 0x3 0x0
--#define MX6Q_PAD_GPIO_19__ECSPI1_RDY              0x254 0x624 0x000 0x4 0x0
--#define MX6Q_PAD_GPIO_19__GPIO4_IO05              0x254 0x624 0x000 0x5 0x0
--#define MX6Q_PAD_GPIO_19__ENET_TX_ER              0x254 0x624 0x000 0x6 0x0
--#define MX6Q_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK    0x258 0x628 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_PIXCLK__GPIO5_IO18          0x258 0x628 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_PIXCLK__ARM_EVENTO          0x258 0x628 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC       0x25c 0x62c 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_MCLK__CCM_CLKO1             0x25c 0x62c 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_MCLK__GPIO5_IO19            0x25c 0x62c 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_MCLK__ARM_TRACE_CTL         0x25c 0x62c 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN  0x260 0x630 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DATA_EN__EIM_DATA00         0x260 0x630 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DATA_EN__GPIO5_IO20         0x260 0x630 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DATA_EN__ARM_TRACE_CLK      0x260 0x630 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC      0x264 0x634 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_VSYNC__EIM_DATA01           0x264 0x634 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_VSYNC__GPIO5_IO21           0x264 0x634 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_VSYNC__ARM_TRACE00          0x264 0x634 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT4__IPU1_CSI0_DATA04      0x268 0x638 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT4__EIM_DATA02            0x268 0x638 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT4__ECSPI1_SCLK           0x268 0x638 0x7f4 0x2 0x3
--#define MX6Q_PAD_CSI0_DAT4__KEY_COL5              0x268 0x638 0x8e8 0x3 0x2
--#define MX6Q_PAD_CSI0_DAT4__AUD3_TXC              0x268 0x638 0x000 0x4 0x0
--#define MX6Q_PAD_CSI0_DAT4__GPIO5_IO22            0x268 0x638 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT4__ARM_TRACE01           0x268 0x638 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT5__IPU1_CSI0_DATA05      0x26c 0x63c 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT5__EIM_DATA03            0x26c 0x63c 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT5__ECSPI1_MOSI           0x26c 0x63c 0x7fc 0x2 0x3
--#define MX6Q_PAD_CSI0_DAT5__KEY_ROW5              0x26c 0x63c 0x8f4 0x3 0x1
--#define MX6Q_PAD_CSI0_DAT5__AUD3_TXD              0x26c 0x63c 0x000 0x4 0x0
--#define MX6Q_PAD_CSI0_DAT5__GPIO5_IO23            0x26c 0x63c 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT5__ARM_TRACE02           0x26c 0x63c 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT6__IPU1_CSI0_DATA06      0x270 0x640 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT6__EIM_DATA04            0x270 0x640 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT6__ECSPI1_MISO           0x270 0x640 0x7f8 0x2 0x3
--#define MX6Q_PAD_CSI0_DAT6__KEY_COL6              0x270 0x640 0x8ec 0x3 0x1
--#define MX6Q_PAD_CSI0_DAT6__AUD3_TXFS             0x270 0x640 0x000 0x4 0x0
--#define MX6Q_PAD_CSI0_DAT6__GPIO5_IO24            0x270 0x640 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT6__ARM_TRACE03           0x270 0x640 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT7__IPU1_CSI0_DATA07      0x274 0x644 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT7__EIM_DATA05            0x274 0x644 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT7__ECSPI1_SS0            0x274 0x644 0x800 0x2 0x3
--#define MX6Q_PAD_CSI0_DAT7__KEY_ROW6              0x274 0x644 0x8f8 0x3 0x2
--#define MX6Q_PAD_CSI0_DAT7__AUD3_RXD              0x274 0x644 0x000 0x4 0x0
--#define MX6Q_PAD_CSI0_DAT7__GPIO5_IO25            0x274 0x644 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT7__ARM_TRACE04           0x274 0x644 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT8__IPU1_CSI0_DATA08      0x278 0x648 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT8__EIM_DATA06            0x278 0x648 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT8__ECSPI2_SCLK           0x278 0x648 0x810 0x2 0x2
--#define MX6Q_PAD_CSI0_DAT8__KEY_COL7              0x278 0x648 0x8f0 0x3 0x2
--#define MX6Q_PAD_CSI0_DAT8__I2C1_SDA              0x278 0x648 0x89c 0x4 0x1
--#define MX6Q_PAD_CSI0_DAT8__GPIO5_IO26            0x278 0x648 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT8__ARM_TRACE05           0x278 0x648 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT9__IPU1_CSI0_DATA09      0x27c 0x64c 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT9__EIM_DATA07            0x27c 0x64c 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT9__ECSPI2_MOSI           0x27c 0x64c 0x818 0x2 0x2
--#define MX6Q_PAD_CSI0_DAT9__KEY_ROW7              0x27c 0x64c 0x8fc 0x3 0x2
--#define MX6Q_PAD_CSI0_DAT9__I2C1_SCL              0x27c 0x64c 0x898 0x4 0x1
--#define MX6Q_PAD_CSI0_DAT9__GPIO5_IO27            0x27c 0x64c 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT9__ARM_TRACE06           0x27c 0x64c 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT10__IPU1_CSI0_DATA10     0x280 0x650 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT10__AUD3_RXC             0x280 0x650 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT10__ECSPI2_MISO          0x280 0x650 0x814 0x2 0x2
--#define MX6Q_PAD_CSI0_DAT10__UART1_TX_DATA        0x280 0x650 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT10__UART1_RX_DATA        0x280 0x650 0x920 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT10__GPIO5_IO28           0x280 0x650 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT10__ARM_TRACE07          0x280 0x650 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT11__IPU1_CSI0_DATA11     0x284 0x654 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT11__AUD3_RXFS            0x284 0x654 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT11__ECSPI2_SS0           0x284 0x654 0x81c 0x2 0x2
--#define MX6Q_PAD_CSI0_DAT11__UART1_RX_DATA        0x284 0x654 0x920 0x3 0x1
--#define MX6Q_PAD_CSI0_DAT11__UART1_TX_DATA        0x284 0x654 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT11__GPIO5_IO29           0x284 0x654 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT11__ARM_TRACE08          0x284 0x654 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT12__IPU1_CSI0_DATA12     0x288 0x658 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT12__EIM_DATA08           0x288 0x658 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT12__UART4_TX_DATA        0x288 0x658 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT12__UART4_RX_DATA        0x288 0x658 0x938 0x3 0x2
--#define MX6Q_PAD_CSI0_DAT12__GPIO5_IO30           0x288 0x658 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT12__ARM_TRACE09          0x288 0x658 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT13__IPU1_CSI0_DATA13     0x28c 0x65c 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT13__EIM_DATA09           0x28c 0x65c 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT13__UART4_RX_DATA        0x28c 0x65c 0x938 0x3 0x3
--#define MX6Q_PAD_CSI0_DAT13__UART4_TX_DATA        0x28c 0x65c 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT13__GPIO5_IO31           0x28c 0x65c 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT13__ARM_TRACE10          0x28c 0x65c 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT14__IPU1_CSI0_DATA14     0x290 0x660 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT14__EIM_DATA10           0x290 0x660 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT14__UART5_TX_DATA        0x290 0x660 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT14__UART5_RX_DATA        0x290 0x660 0x940 0x3 0x2
--#define MX6Q_PAD_CSI0_DAT14__GPIO6_IO00           0x290 0x660 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT14__ARM_TRACE11          0x290 0x660 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT15__IPU1_CSI0_DATA15     0x294 0x664 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT15__EIM_DATA11           0x294 0x664 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT15__UART5_RX_DATA        0x294 0x664 0x940 0x3 0x3
--#define MX6Q_PAD_CSI0_DAT15__UART5_TX_DATA        0x294 0x664 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT15__GPIO6_IO01           0x294 0x664 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT15__ARM_TRACE12          0x294 0x664 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT16__IPU1_CSI0_DATA16     0x298 0x668 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT16__EIM_DATA12           0x298 0x668 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT16__UART4_RTS_B          0x298 0x668 0x934 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT16__UART4_CTS_B          0x298 0x668 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT16__GPIO6_IO02           0x298 0x668 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT16__ARM_TRACE13          0x298 0x668 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT17__IPU1_CSI0_DATA17     0x29c 0x66c 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT17__EIM_DATA13           0x29c 0x66c 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT17__UART4_CTS_B          0x29c 0x66c 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT17__UART4_RTS_B          0x29c 0x66c 0x934 0x3 0x1
--#define MX6Q_PAD_CSI0_DAT17__GPIO6_IO03           0x29c 0x66c 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT17__ARM_TRACE14          0x29c 0x66c 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT18__IPU1_CSI0_DATA18     0x2a0 0x670 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT18__EIM_DATA14           0x2a0 0x670 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT18__UART5_RTS_B          0x2a0 0x670 0x93c 0x3 0x2
--#define MX6Q_PAD_CSI0_DAT18__UART5_CTS_B          0x2a0 0x670 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT18__GPIO6_IO04           0x2a0 0x670 0x000 0x5 0x0
--#define MX6Q_PAD_CSI0_DAT18__ARM_TRACE15          0x2a0 0x670 0x000 0x7 0x0
--#define MX6Q_PAD_CSI0_DAT19__IPU1_CSI0_DATA19     0x2a4 0x674 0x000 0x0 0x0
--#define MX6Q_PAD_CSI0_DAT19__EIM_DATA15           0x2a4 0x674 0x000 0x1 0x0
--#define MX6Q_PAD_CSI0_DAT19__UART5_CTS_B          0x2a4 0x674 0x000 0x3 0x0
--#define MX6Q_PAD_CSI0_DAT19__UART5_RTS_B          0x2a4 0x674 0x93c 0x3 0x3
--#define MX6Q_PAD_CSI0_DAT19__GPIO6_IO05           0x2a4 0x674 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_DAT7__SD3_DATA7              0x2a8 0x690 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_DAT7__UART1_TX_DATA          0x2a8 0x690 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_DAT7__UART1_RX_DATA          0x2a8 0x690 0x920 0x1 0x2
--#define MX6Q_PAD_SD3_DAT7__GPIO6_IO17             0x2a8 0x690 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_DAT6__SD3_DATA6              0x2ac 0x694 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_DAT6__UART1_RX_DATA          0x2ac 0x694 0x920 0x1 0x3
--#define MX6Q_PAD_SD3_DAT6__UART1_TX_DATA          0x2ac 0x694 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_DAT6__GPIO6_IO18             0x2ac 0x694 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_DAT5__SD3_DATA5              0x2b0 0x698 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_DAT5__UART2_TX_DATA          0x2b0 0x698 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_DAT5__UART2_RX_DATA          0x2b0 0x698 0x928 0x1 0x4
--#define MX6Q_PAD_SD3_DAT5__GPIO7_IO00             0x2b0 0x698 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_DAT4__SD3_DATA4              0x2b4 0x69c 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_DAT4__UART2_RX_DATA          0x2b4 0x69c 0x928 0x1 0x5
--#define MX6Q_PAD_SD3_DAT4__UART2_TX_DATA          0x2b4 0x69c 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_DAT4__GPIO7_IO01             0x2b4 0x69c 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_CMD__SD3_CMD                 0x2b8 0x6a0 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_CMD__UART2_CTS_B             0x2b8 0x6a0 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_CMD__UART2_RTS_B             0x2b8 0x6a0 0x924 0x1 0x2
--#define MX6Q_PAD_SD3_CMD__FLEXCAN1_TX             0x2b8 0x6a0 0x000 0x2 0x0
--#define MX6Q_PAD_SD3_CMD__GPIO7_IO02              0x2b8 0x6a0 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_CLK__SD3_CLK                 0x2bc 0x6a4 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_CLK__UART2_RTS_B             0x2bc 0x6a4 0x924 0x1 0x3
--#define MX6Q_PAD_SD3_CLK__UART2_CTS_B             0x2bc 0x6a4 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_CLK__FLEXCAN1_RX             0x2bc 0x6a4 0x7e4 0x2 0x2
--#define MX6Q_PAD_SD3_CLK__GPIO7_IO03              0x2bc 0x6a4 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_DAT0__SD3_DATA0              0x2c0 0x6a8 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_DAT0__UART1_CTS_B            0x2c0 0x6a8 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_DAT0__UART1_RTS_B            0x2c0 0x6a8 0x91c 0x1 0x2
--#define MX6Q_PAD_SD3_DAT0__FLEXCAN2_TX            0x2c0 0x6a8 0x000 0x2 0x0
--#define MX6Q_PAD_SD3_DAT0__GPIO7_IO04             0x2c0 0x6a8 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_DAT1__SD3_DATA1              0x2c4 0x6ac 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_DAT1__UART1_RTS_B            0x2c4 0x6ac 0x91c 0x1 0x3
--#define MX6Q_PAD_SD3_DAT1__UART1_CTS_B            0x2c4 0x6ac 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_DAT1__FLEXCAN2_RX            0x2c4 0x6ac 0x7e8 0x2 0x1
--#define MX6Q_PAD_SD3_DAT1__GPIO7_IO05             0x2c4 0x6ac 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_DAT2__SD3_DATA2              0x2c8 0x6b0 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_DAT2__GPIO7_IO06             0x2c8 0x6b0 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_DAT3__SD3_DATA3              0x2cc 0x6b4 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_DAT3__UART3_CTS_B            0x2cc 0x6b4 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_DAT3__UART3_RTS_B            0x2cc 0x6b4 0x92c 0x1 0x4
--#define MX6Q_PAD_SD3_DAT3__GPIO7_IO07             0x2cc 0x6b4 0x000 0x5 0x0
--#define MX6Q_PAD_SD3_RST__SD3_RESET               0x2d0 0x6b8 0x000 0x0 0x0
--#define MX6Q_PAD_SD3_RST__UART3_RTS_B             0x2d0 0x6b8 0x92c 0x1 0x5
--#define MX6Q_PAD_SD3_RST__UART3_CTS_B             0x2d0 0x6b8 0x000 0x1 0x0
--#define MX6Q_PAD_SD3_RST__GPIO7_IO08              0x2d0 0x6b8 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_CLE__NAND_CLE              0x2d4 0x6bc 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_CLE__IPU2_SISG4            0x2d4 0x6bc 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_CLE__GPIO6_IO07            0x2d4 0x6bc 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_ALE__NAND_ALE              0x2d8 0x6c0 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_ALE__SD4_RESET             0x2d8 0x6c0 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_ALE__GPIO6_IO08            0x2d8 0x6c0 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_WP_B__NAND_WP_B            0x2dc 0x6c4 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_WP_B__IPU2_SISG5           0x2dc 0x6c4 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_WP_B__GPIO6_IO09           0x2dc 0x6c4 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_RB0__NAND_READY_B          0x2e0 0x6c8 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_RB0__IPU2_DI0_PIN01        0x2e0 0x6c8 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_RB0__GPIO6_IO10            0x2e0 0x6c8 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_CS0__NAND_CE0_B            0x2e4 0x6cc 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_CS0__GPIO6_IO11            0x2e4 0x6cc 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_CS1__NAND_CE1_B            0x2e8 0x6d0 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_CS1__SD4_VSELECT           0x2e8 0x6d0 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_CS1__SD3_VSELECT           0x2e8 0x6d0 0x000 0x2 0x0
--#define MX6Q_PAD_NANDF_CS1__GPIO6_IO14            0x2e8 0x6d0 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_CS2__NAND_CE2_B            0x2ec 0x6d4 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_CS2__IPU1_SISG0            0x2ec 0x6d4 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_CS2__ESAI_TX0              0x2ec 0x6d4 0x874 0x2 0x1
--#define MX6Q_PAD_NANDF_CS2__EIM_CRE               0x2ec 0x6d4 0x000 0x3 0x0
--#define MX6Q_PAD_NANDF_CS2__CCM_CLKO2             0x2ec 0x6d4 0x000 0x4 0x0
--#define MX6Q_PAD_NANDF_CS2__GPIO6_IO15            0x2ec 0x6d4 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_CS2__IPU2_SISG0            0x2ec 0x6d4 0x000 0x6 0x0
--#define MX6Q_PAD_NANDF_CS3__NAND_CE3_B            0x2f0 0x6d8 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_CS3__IPU1_SISG1            0x2f0 0x6d8 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_CS3__ESAI_TX1              0x2f0 0x6d8 0x878 0x2 0x1
--#define MX6Q_PAD_NANDF_CS3__EIM_ADDR26            0x2f0 0x6d8 0x000 0x3 0x0
--#define MX6Q_PAD_NANDF_CS3__GPIO6_IO16            0x2f0 0x6d8 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_CS3__IPU2_SISG1            0x2f0 0x6d8 0x000 0x6 0x0
--#define MX6Q_PAD_SD4_CMD__SD4_CMD                 0x2f4 0x6dc 0x000 0x0 0x0
--#define MX6Q_PAD_SD4_CMD__NAND_RE_B               0x2f4 0x6dc 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_CMD__UART3_TX_DATA           0x2f4 0x6dc 0x000 0x2 0x0
--#define MX6Q_PAD_SD4_CMD__UART3_RX_DATA           0x2f4 0x6dc 0x930 0x2 0x2
--#define MX6Q_PAD_SD4_CMD__GPIO7_IO09              0x2f4 0x6dc 0x000 0x5 0x0
--#define MX6Q_PAD_SD4_CLK__SD4_CLK                 0x2f8 0x6e0 0x000 0x0 0x0
--#define MX6Q_PAD_SD4_CLK__NAND_WE_B               0x2f8 0x6e0 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_CLK__UART3_RX_DATA           0x2f8 0x6e0 0x930 0x2 0x3
--#define MX6Q_PAD_SD4_CLK__UART3_TX_DATA           0x2f8 0x6e0 0x000 0x2 0x0
--#define MX6Q_PAD_SD4_CLK__GPIO7_IO10              0x2f8 0x6e0 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_D0__NAND_DATA00            0x2fc 0x6e4 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_D0__SD1_DATA4              0x2fc 0x6e4 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_D0__GPIO2_IO00             0x2fc 0x6e4 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_D1__NAND_DATA01            0x300 0x6e8 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_D1__SD1_DATA5              0x300 0x6e8 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_D1__GPIO2_IO01             0x300 0x6e8 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_D2__NAND_DATA02            0x304 0x6ec 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_D2__SD1_DATA6              0x304 0x6ec 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_D2__GPIO2_IO02             0x304 0x6ec 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_D3__NAND_DATA03            0x308 0x6f0 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_D3__SD1_DATA7              0x308 0x6f0 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_D3__GPIO2_IO03             0x308 0x6f0 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_D4__NAND_DATA04            0x30c 0x6f4 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_D4__SD2_DATA4              0x30c 0x6f4 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_D4__GPIO2_IO04             0x30c 0x6f4 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_D5__NAND_DATA05            0x310 0x6f8 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_D5__SD2_DATA5              0x310 0x6f8 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_D5__GPIO2_IO05             0x310 0x6f8 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_D6__NAND_DATA06            0x314 0x6fc 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_D6__SD2_DATA6              0x314 0x6fc 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_D6__GPIO2_IO06             0x314 0x6fc 0x000 0x5 0x0
--#define MX6Q_PAD_NANDF_D7__NAND_DATA07            0x318 0x700 0x000 0x0 0x0
--#define MX6Q_PAD_NANDF_D7__SD2_DATA7              0x318 0x700 0x000 0x1 0x0
--#define MX6Q_PAD_NANDF_D7__GPIO2_IO07             0x318 0x700 0x000 0x5 0x0
--#define MX6Q_PAD_SD4_DAT0__SD4_DATA0              0x31c 0x704 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_DAT0__NAND_DQS               0x31c 0x704 0x000 0x2 0x0
--#define MX6Q_PAD_SD4_DAT0__GPIO2_IO08             0x31c 0x704 0x000 0x5 0x0
--#define MX6Q_PAD_SD4_DAT1__SD4_DATA1              0x320 0x708 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_DAT1__PWM3_OUT               0x320 0x708 0x000 0x2 0x0
--#define MX6Q_PAD_SD4_DAT1__GPIO2_IO09             0x320 0x708 0x000 0x5 0x0
--#define MX6Q_PAD_SD4_DAT2__SD4_DATA2              0x324 0x70c 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_DAT2__PWM4_OUT               0x324 0x70c 0x000 0x2 0x0
--#define MX6Q_PAD_SD4_DAT2__GPIO2_IO10             0x324 0x70c 0x000 0x5 0x0
--#define MX6Q_PAD_SD4_DAT3__SD4_DATA3              0x328 0x710 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_DAT3__GPIO2_IO11             0x328 0x710 0x000 0x5 0x0
--#define MX6Q_PAD_SD4_DAT4__SD4_DATA4              0x32c 0x714 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_DAT4__UART2_RX_DATA          0x32c 0x714 0x928 0x2 0x6
--#define MX6Q_PAD_SD4_DAT4__UART2_TX_DATA          0x32c 0x714 0x000 0x2 0x0
--#define MX6Q_PAD_SD4_DAT4__GPIO2_IO12             0x32c 0x714 0x000 0x5 0x0
--#define MX6Q_PAD_SD4_DAT5__SD4_DATA5              0x330 0x718 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_DAT5__UART2_RTS_B            0x330 0x718 0x924 0x2 0x4
--#define MX6Q_PAD_SD4_DAT5__UART2_CTS_B            0x330 0x718 0x000 0x2 0x0
--#define MX6Q_PAD_SD4_DAT5__GPIO2_IO13             0x330 0x718 0x000 0x5 0x0
--#define MX6Q_PAD_SD4_DAT6__SD4_DATA6              0x334 0x71c 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_DAT6__UART2_CTS_B            0x334 0x71c 0x000 0x2 0x0
--#define MX6Q_PAD_SD4_DAT6__UART2_RTS_B            0x334 0x71c 0x924 0x2 0x5
--#define MX6Q_PAD_SD4_DAT6__GPIO2_IO14             0x334 0x71c 0x000 0x5 0x0
--#define MX6Q_PAD_SD4_DAT7__SD4_DATA7              0x338 0x720 0x000 0x1 0x0
--#define MX6Q_PAD_SD4_DAT7__UART2_TX_DATA          0x338 0x720 0x000 0x2 0x0
--#define MX6Q_PAD_SD4_DAT7__UART2_RX_DATA          0x338 0x720 0x928 0x2 0x7
--#define MX6Q_PAD_SD4_DAT7__GPIO2_IO15             0x338 0x720 0x000 0x5 0x0
--#define MX6Q_PAD_SD1_DAT1__SD1_DATA1              0x33c 0x724 0x000 0x0 0x0
--#define MX6Q_PAD_SD1_DAT1__ECSPI5_SS0             0x33c 0x724 0x834 0x1 0x1
--#define MX6Q_PAD_SD1_DAT1__PWM3_OUT               0x33c 0x724 0x000 0x2 0x0
--#define MX6Q_PAD_SD1_DAT1__GPT_CAPTURE2           0x33c 0x724 0x000 0x3 0x0
--#define MX6Q_PAD_SD1_DAT1__GPIO1_IO17             0x33c 0x724 0x000 0x5 0x0
--#define MX6Q_PAD_SD1_DAT0__SD1_DATA0              0x340 0x728 0x000 0x0 0x0
--#define MX6Q_PAD_SD1_DAT0__ECSPI5_MISO            0x340 0x728 0x82c 0x1 0x1
--#define MX6Q_PAD_SD1_DAT0__GPT_CAPTURE1           0x340 0x728 0x000 0x3 0x0
--#define MX6Q_PAD_SD1_DAT0__GPIO1_IO16             0x340 0x728 0x000 0x5 0x0
--#define MX6Q_PAD_SD1_DAT3__SD1_DATA3              0x344 0x72c 0x000 0x0 0x0
--#define MX6Q_PAD_SD1_DAT3__ECSPI5_SS2             0x344 0x72c 0x000 0x1 0x0
--#define MX6Q_PAD_SD1_DAT3__GPT_COMPARE3           0x344 0x72c 0x000 0x2 0x0
--#define MX6Q_PAD_SD1_DAT3__PWM1_OUT               0x344 0x72c 0x000 0x3 0x0
--#define MX6Q_PAD_SD1_DAT3__WDOG2_B                0x344 0x72c 0x000 0x4 0x0
--#define MX6Q_PAD_SD1_DAT3__GPIO1_IO21             0x344 0x72c 0x000 0x5 0x0
--#define MX6Q_PAD_SD1_DAT3__WDOG2_RESET_B_DEB      0x344 0x72c 0x000 0x6 0x0
--#define MX6Q_PAD_SD1_CMD__SD1_CMD                 0x348 0x730 0x000 0x0 0x0
--#define MX6Q_PAD_SD1_CMD__ECSPI5_MOSI             0x348 0x730 0x830 0x1 0x0
--#define MX6Q_PAD_SD1_CMD__PWM4_OUT                0x348 0x730 0x000 0x2 0x0
--#define MX6Q_PAD_SD1_CMD__GPT_COMPARE1            0x348 0x730 0x000 0x3 0x0
--#define MX6Q_PAD_SD1_CMD__GPIO1_IO18              0x348 0x730 0x000 0x5 0x0
--#define MX6Q_PAD_SD1_DAT2__SD1_DATA2              0x34c 0x734 0x000 0x0 0x0
--#define MX6Q_PAD_SD1_DAT2__ECSPI5_SS1             0x34c 0x734 0x838 0x1 0x1
--#define MX6Q_PAD_SD1_DAT2__GPT_COMPARE2           0x34c 0x734 0x000 0x2 0x0
--#define MX6Q_PAD_SD1_DAT2__PWM2_OUT               0x34c 0x734 0x000 0x3 0x0
--#define MX6Q_PAD_SD1_DAT2__WDOG1_B                0x34c 0x734 0x000 0x4 0x0
--#define MX6Q_PAD_SD1_DAT2__GPIO1_IO19             0x34c 0x734 0x000 0x5 0x0
--#define MX6Q_PAD_SD1_DAT2__WDOG1_RESET_B_DEB      0x34c 0x734 0x000 0x6 0x0
--#define MX6Q_PAD_SD1_CLK__SD1_CLK                 0x350 0x738 0x000 0x0 0x0
--#define MX6Q_PAD_SD1_CLK__ECSPI5_SCLK             0x350 0x738 0x828 0x1 0x0
--#define MX6Q_PAD_SD1_CLK__GPT_CLKIN               0x350 0x738 0x000 0x3 0x0
--#define MX6Q_PAD_SD1_CLK__GPIO1_IO20              0x350 0x738 0x000 0x5 0x0
--#define MX6Q_PAD_SD2_CLK__SD2_CLK                 0x354 0x73c 0x000 0x0 0x0
--#define MX6Q_PAD_SD2_CLK__ECSPI5_SCLK             0x354 0x73c 0x828 0x1 0x1
--#define MX6Q_PAD_SD2_CLK__KEY_COL5                0x354 0x73c 0x8e8 0x2 0x3
--#define MX6Q_PAD_SD2_CLK__AUD4_RXFS               0x354 0x73c 0x7c0 0x3 0x1
--#define MX6Q_PAD_SD2_CLK__GPIO1_IO10              0x354 0x73c 0x000 0x5 0x0
--#define MX6Q_PAD_SD2_CMD__SD2_CMD                 0x358 0x740 0x000 0x0 0x0
--#define MX6Q_PAD_SD2_CMD__ECSPI5_MOSI             0x358 0x740 0x830 0x1 0x1
--#define MX6Q_PAD_SD2_CMD__KEY_ROW5                0x358 0x740 0x8f4 0x2 0x2
--#define MX6Q_PAD_SD2_CMD__AUD4_RXC                0x358 0x740 0x7bc 0x3 0x1
--#define MX6Q_PAD_SD2_CMD__GPIO1_IO11              0x358 0x740 0x000 0x5 0x0
--#define MX6Q_PAD_SD2_DAT3__SD2_DATA3              0x35c 0x744 0x000 0x0 0x0
--#define MX6Q_PAD_SD2_DAT3__ECSPI5_SS3             0x35c 0x744 0x000 0x1 0x0
--#define MX6Q_PAD_SD2_DAT3__KEY_COL6               0x35c 0x744 0x8ec 0x2 0x2
--#define MX6Q_PAD_SD2_DAT3__AUD4_TXC               0x35c 0x744 0x7c4 0x3 0x1
--#define MX6Q_PAD_SD2_DAT3__GPIO1_IO12             0x35c 0x744 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_DAT1__SD2_DATA1              0x04c 0x360 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_DAT1__ECSPI5_SS0             0x04c 0x360 0x834 0x1 0x0
-+#define MX6QDL_PAD_SD2_DAT1__EIM_CS2_B              0x04c 0x360 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD2_DAT1__AUD4_TXFS              0x04c 0x360 0x7c8 0x3 0x0
-+#define MX6QDL_PAD_SD2_DAT1__KEY_COL7               0x04c 0x360 0x8f0 0x4 0x0
-+#define MX6QDL_PAD_SD2_DAT1__GPIO1_IO14             0x04c 0x360 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_DAT2__SD2_DATA2              0x050 0x364 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_DAT2__ECSPI5_SS1             0x050 0x364 0x838 0x1 0x0
-+#define MX6QDL_PAD_SD2_DAT2__EIM_CS3_B              0x050 0x364 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD2_DAT2__AUD4_TXD               0x050 0x364 0x7b8 0x3 0x0
-+#define MX6QDL_PAD_SD2_DAT2__KEY_ROW6               0x050 0x364 0x8f8 0x4 0x0
-+#define MX6QDL_PAD_SD2_DAT2__GPIO1_IO13             0x050 0x364 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_DAT0__SD2_DATA0              0x054 0x368 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_DAT0__ECSPI5_MISO            0x054 0x368 0x82c 0x1 0x0
-+#define MX6QDL_PAD_SD2_DAT0__AUD4_RXD               0x054 0x368 0x7b4 0x3 0x0
-+#define MX6QDL_PAD_SD2_DAT0__KEY_ROW7               0x054 0x368 0x8fc 0x4 0x0
-+#define MX6QDL_PAD_SD2_DAT0__GPIO1_IO15             0x054 0x368 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_DAT0__DCIC2_OUT              0x054 0x368 0x000 0x6 0x0
-+#define MX6QDL_PAD_RGMII_TXC__USB_H2_DATA           0x058 0x36c 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TXC__RGMII_TXC             0x058 0x36c 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TXC__SPDIF_EXT_CLK         0x058 0x36c 0x918 0x2 0x0
-+#define MX6QDL_PAD_RGMII_TXC__GPIO6_IO19            0x058 0x36c 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TXC__XTALOSC_REF_CLK_24M   0x058 0x36c 0x000 0x7 0x0
-+#define MX6QDL_PAD_RGMII_TD0__HSI_TX_READY          0x05c 0x370 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TD0__RGMII_TD0             0x05c 0x370 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TD0__GPIO6_IO20            0x05c 0x370 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TD1__HSI_RX_FLAG           0x060 0x374 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TD1__RGMII_TD1             0x060 0x374 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TD1__GPIO6_IO21            0x060 0x374 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TD2__HSI_RX_DATA           0x064 0x378 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TD2__RGMII_TD2             0x064 0x378 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TD2__GPIO6_IO22            0x064 0x378 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TD3__HSI_RX_WAKE           0x068 0x37c 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TD3__RGMII_TD3             0x068 0x37c 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TD3__GPIO6_IO23            0x068 0x37c 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RX_CTL__USB_H3_DATA        0x06c 0x380 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL       0x06c 0x380 0x858 0x1 0x0
-+#define MX6QDL_PAD_RGMII_RX_CTL__GPIO6_IO24         0x06c 0x380 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RD0__HSI_RX_READY          0x070 0x384 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RD0__RGMII_RD0             0x070 0x384 0x848 0x1 0x0
-+#define MX6QDL_PAD_RGMII_RD0__GPIO6_IO25            0x070 0x384 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TX_CTL__USB_H2_STROBE      0x074 0x388 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL       0x074 0x388 0x000 0x1 0x0
-+#define MX6QDL_PAD_RGMII_TX_CTL__GPIO6_IO26         0x074 0x388 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_TX_CTL__ENET_REF_CLK       0x074 0x388 0x83c 0x7 0x0
-+#define MX6QDL_PAD_RGMII_RD1__HSI_TX_FLAG           0x078 0x38c 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RD1__RGMII_RD1             0x078 0x38c 0x84c 0x1 0x0
-+#define MX6QDL_PAD_RGMII_RD1__GPIO6_IO27            0x078 0x38c 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RD2__HSI_TX_DATA           0x07c 0x390 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RD2__RGMII_RD2             0x07c 0x390 0x850 0x1 0x0
-+#define MX6QDL_PAD_RGMII_RD2__GPIO6_IO28            0x07c 0x390 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RD3__HSI_TX_WAKE           0x080 0x394 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RD3__RGMII_RD3             0x080 0x394 0x854 0x1 0x0
-+#define MX6QDL_PAD_RGMII_RD3__GPIO6_IO29            0x080 0x394 0x000 0x5 0x0
-+#define MX6QDL_PAD_RGMII_RXC__USB_H3_STROBE         0x084 0x398 0x000 0x0 0x0
-+#define MX6QDL_PAD_RGMII_RXC__RGMII_RXC             0x084 0x398 0x844 0x1 0x0
-+#define MX6QDL_PAD_RGMII_RXC__GPIO6_IO30            0x084 0x398 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A25__EIM_ADDR25              0x088 0x39c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A25__ECSPI4_SS1              0x088 0x39c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A25__ECSPI2_RDY              0x088 0x39c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_A25__IPU1_DI1_PIN12          0x088 0x39c 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_A25__IPU1_DI0_D1_CS          0x088 0x39c 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_A25__GPIO5_IO02              0x088 0x39c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A25__HDMI_TX_CEC_LINE        0x088 0x39c 0x88c 0x6 0x0
-+#define MX6QDL_PAD_EIM_EB2__EIM_EB2_B               0x08c 0x3a0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_EB2__ECSPI1_SS0              0x08c 0x3a0 0x800 0x1 0x0
-+#define MX6QDL_PAD_EIM_EB2__IPU2_CSI1_DATA19        0x08c 0x3a0 0x8d4 0x3 0x0
-+#define MX6QDL_PAD_EIM_EB2__HDMI_TX_DDC_SCL         0x08c 0x3a0 0x890 0x4 0x0
-+#define MX6QDL_PAD_EIM_EB2__GPIO2_IO30              0x08c 0x3a0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_EB2__I2C2_SCL                0x08c 0x3a0 0x8a0 0x6 0x0
-+#define MX6QDL_PAD_EIM_EB2__SRC_BOOT_CFG30          0x08c 0x3a0 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D16__EIM_DATA16              0x090 0x3a4 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D16__ECSPI1_SCLK             0x090 0x3a4 0x7f4 0x1 0x0
-+#define MX6QDL_PAD_EIM_D16__IPU1_DI0_PIN05          0x090 0x3a4 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D16__IPU2_CSI1_DATA18        0x090 0x3a4 0x8d0 0x3 0x0
-+#define MX6QDL_PAD_EIM_D16__HDMI_TX_DDC_SDA         0x090 0x3a4 0x894 0x4 0x0
-+#define MX6QDL_PAD_EIM_D16__GPIO3_IO16              0x090 0x3a4 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D16__I2C2_SDA                0x090 0x3a4 0x8a4 0x6 0x0
-+#define MX6QDL_PAD_EIM_D17__EIM_DATA17              0x094 0x3a8 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D17__ECSPI1_MISO             0x094 0x3a8 0x7f8 0x1 0x0
-+#define MX6QDL_PAD_EIM_D17__IPU1_DI0_PIN06          0x094 0x3a8 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D17__IPU2_CSI1_PIXCLK        0x094 0x3a8 0x8e0 0x3 0x0
-+#define MX6QDL_PAD_EIM_D17__DCIC1_OUT               0x094 0x3a8 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D17__GPIO3_IO17              0x094 0x3a8 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D17__I2C3_SCL                0x094 0x3a8 0x8a8 0x6 0x0
-+#define MX6QDL_PAD_EIM_D18__EIM_DATA18              0x098 0x3ac 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D18__ECSPI1_MOSI             0x098 0x3ac 0x7fc 0x1 0x0
-+#define MX6QDL_PAD_EIM_D18__IPU1_DI0_PIN07          0x098 0x3ac 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D18__IPU2_CSI1_DATA17        0x098 0x3ac 0x8cc 0x3 0x0
-+#define MX6QDL_PAD_EIM_D18__IPU1_DI1_D0_CS          0x098 0x3ac 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D18__GPIO3_IO18              0x098 0x3ac 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D18__I2C3_SDA                0x098 0x3ac 0x8ac 0x6 0x0
-+#define MX6QDL_PAD_EIM_D19__EIM_DATA19              0x09c 0x3b0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D19__ECSPI1_SS1              0x09c 0x3b0 0x804 0x1 0x0
-+#define MX6QDL_PAD_EIM_D19__IPU1_DI0_PIN08          0x09c 0x3b0 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D19__IPU2_CSI1_DATA16        0x09c 0x3b0 0x8c8 0x3 0x0
-+#define MX6QDL_PAD_EIM_D19__UART1_CTS_B             0x09c 0x3b0 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D19__UART1_RTS_B             0x09c 0x3b0 0x91c 0x4 0x0
-+#define MX6QDL_PAD_EIM_D19__GPIO3_IO19              0x09c 0x3b0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D19__EPIT1_OUT               0x09c 0x3b0 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D20__EIM_DATA20              0x0a0 0x3b4 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D20__ECSPI4_SS0              0x0a0 0x3b4 0x824 0x1 0x0
-+#define MX6QDL_PAD_EIM_D20__IPU1_DI0_PIN16          0x0a0 0x3b4 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D20__IPU2_CSI1_DATA15        0x0a0 0x3b4 0x8c4 0x3 0x0
-+#define MX6QDL_PAD_EIM_D20__UART1_RTS_B             0x0a0 0x3b4 0x91c 0x4 0x1
-+#define MX6QDL_PAD_EIM_D20__UART1_CTS_B             0x0a0 0x3b4 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D20__GPIO3_IO20              0x0a0 0x3b4 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D20__EPIT2_OUT               0x0a0 0x3b4 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D21__EIM_DATA21              0x0a4 0x3b8 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D21__ECSPI4_SCLK             0x0a4 0x3b8 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D21__IPU1_DI0_PIN17          0x0a4 0x3b8 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D21__IPU2_CSI1_DATA11        0x0a4 0x3b8 0x8b4 0x3 0x0
-+#define MX6QDL_PAD_EIM_D21__USB_OTG_OC              0x0a4 0x3b8 0x944 0x4 0x0
-+#define MX6QDL_PAD_EIM_D21__GPIO3_IO21              0x0a4 0x3b8 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D21__I2C1_SCL                0x0a4 0x3b8 0x898 0x6 0x0
-+#define MX6QDL_PAD_EIM_D21__SPDIF_IN                0x0a4 0x3b8 0x914 0x7 0x0
-+#define MX6QDL_PAD_EIM_D22__EIM_DATA22              0x0a8 0x3bc 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D22__ECSPI4_MISO             0x0a8 0x3bc 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D22__IPU1_DI0_PIN01          0x0a8 0x3bc 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D22__IPU2_CSI1_DATA10        0x0a8 0x3bc 0x8b0 0x3 0x0
-+#define MX6QDL_PAD_EIM_D22__USB_OTG_PWR             0x0a8 0x3bc 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D22__GPIO3_IO22              0x0a8 0x3bc 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D22__SPDIF_OUT               0x0a8 0x3bc 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D23__EIM_DATA23              0x0ac 0x3c0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D23__IPU1_DI0_D0_CS          0x0ac 0x3c0 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D23__UART3_CTS_B             0x0ac 0x3c0 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D23__UART3_RTS_B             0x0ac 0x3c0 0x92c 0x2 0x0
-+#define MX6QDL_PAD_EIM_D23__UART1_DCD_B             0x0ac 0x3c0 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_D23__IPU2_CSI1_DATA_EN       0x0ac 0x3c0 0x8d8 0x4 0x0
-+#define MX6QDL_PAD_EIM_D23__GPIO3_IO23              0x0ac 0x3c0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D23__IPU1_DI1_PIN02          0x0ac 0x3c0 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D23__IPU1_DI1_PIN14          0x0ac 0x3c0 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_EB3__EIM_EB3_B               0x0b0 0x3c4 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_EB3__ECSPI4_RDY              0x0b0 0x3c4 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_EB3__UART3_RTS_B             0x0b0 0x3c4 0x92c 0x2 0x1
-+#define MX6QDL_PAD_EIM_EB3__UART3_CTS_B             0x0b0 0x3c4 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_EB3__UART1_RI_B              0x0b0 0x3c4 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_EB3__IPU2_CSI1_HSYNC         0x0b0 0x3c4 0x8dc 0x4 0x0
-+#define MX6QDL_PAD_EIM_EB3__GPIO2_IO31              0x0b0 0x3c4 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_EB3__IPU1_DI1_PIN03          0x0b0 0x3c4 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_EB3__SRC_BOOT_CFG31          0x0b0 0x3c4 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D24__EIM_DATA24              0x0b4 0x3c8 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D24__ECSPI4_SS2              0x0b4 0x3c8 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D24__UART3_TX_DATA           0x0b4 0x3c8 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D24__UART3_RX_DATA           0x0b4 0x3c8 0x930 0x2 0x0
-+#define MX6QDL_PAD_EIM_D24__ECSPI1_SS2              0x0b4 0x3c8 0x808 0x3 0x0
-+#define MX6QDL_PAD_EIM_D24__ECSPI2_SS2              0x0b4 0x3c8 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D24__GPIO3_IO24              0x0b4 0x3c8 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D24__AUD5_RXFS               0x0b4 0x3c8 0x7d8 0x6 0x0
-+#define MX6QDL_PAD_EIM_D24__UART1_DTR_B             0x0b4 0x3c8 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D25__EIM_DATA25              0x0b8 0x3cc 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D25__ECSPI4_SS3              0x0b8 0x3cc 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D25__UART3_RX_DATA           0x0b8 0x3cc 0x930 0x2 0x1
-+#define MX6QDL_PAD_EIM_D25__UART3_TX_DATA           0x0b8 0x3cc 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D25__ECSPI1_SS3              0x0b8 0x3cc 0x80c 0x3 0x0
-+#define MX6QDL_PAD_EIM_D25__ECSPI2_SS3              0x0b8 0x3cc 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D25__GPIO3_IO25              0x0b8 0x3cc 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D25__AUD5_RXC                0x0b8 0x3cc 0x7d4 0x6 0x0
-+#define MX6QDL_PAD_EIM_D25__UART1_DSR_B             0x0b8 0x3cc 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D26__EIM_DATA26              0x0bc 0x3d0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU1_DI1_PIN11          0x0bc 0x3d0 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU1_CSI0_DATA01        0x0bc 0x3d0 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU2_CSI1_DATA14        0x0bc 0x3d0 0x8c0 0x3 0x0
-+#define MX6QDL_PAD_EIM_D26__UART2_TX_DATA           0x0bc 0x3d0 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D26__UART2_RX_DATA           0x0bc 0x3d0 0x928 0x4 0x0
-+#define MX6QDL_PAD_EIM_D26__GPIO3_IO26              0x0bc 0x3d0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU1_SISG2              0x0bc 0x3d0 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D26__IPU1_DISP1_DATA22       0x0bc 0x3d0 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D27__EIM_DATA27              0x0c0 0x3d4 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU1_DI1_PIN13          0x0c0 0x3d4 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU1_CSI0_DATA00        0x0c0 0x3d4 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU2_CSI1_DATA13        0x0c0 0x3d4 0x8bc 0x3 0x0
-+#define MX6QDL_PAD_EIM_D27__UART2_RX_DATA           0x0c0 0x3d4 0x928 0x4 0x1
-+#define MX6QDL_PAD_EIM_D27__UART2_TX_DATA           0x0c0 0x3d4 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D27__GPIO3_IO27              0x0c0 0x3d4 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU1_SISG3              0x0c0 0x3d4 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D27__IPU1_DISP1_DATA23       0x0c0 0x3d4 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D28__EIM_DATA28              0x0c4 0x3d8 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D28__I2C1_SDA                0x0c4 0x3d8 0x89c 0x1 0x0
-+#define MX6QDL_PAD_EIM_D28__ECSPI4_MOSI             0x0c4 0x3d8 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D28__IPU2_CSI1_DATA12        0x0c4 0x3d8 0x8b8 0x3 0x0
-+#define MX6QDL_PAD_EIM_D28__UART2_CTS_B             0x0c4 0x3d8 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D28__UART2_RTS_B             0x0c4 0x3d8 0x924 0x4 0x0
-+#define MX6QDL_PAD_EIM_D28__UART2_DTE_CTS_B         0x0c4 0x3d8 0x924 0x4 0x0
-+#define MX6QDL_PAD_EIM_D28__UART2_DTE_RTS_B         0x0c4 0x3d8 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D28__GPIO3_IO28              0x0c4 0x3d8 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D28__IPU1_EXT_TRIG           0x0c4 0x3d8 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_D28__IPU1_DI0_PIN13          0x0c4 0x3d8 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D29__EIM_DATA29              0x0c8 0x3dc 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D29__IPU1_DI1_PIN15          0x0c8 0x3dc 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D29__ECSPI4_SS0              0x0c8 0x3dc 0x824 0x2 0x1
-+#define MX6QDL_PAD_EIM_D29__UART2_RTS_B             0x0c8 0x3dc 0x924 0x4 0x1
-+#define MX6QDL_PAD_EIM_D29__UART2_CTS_B             0x0c8 0x3dc 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D29__UART2_DTE_RTS_B         0x0c8 0x3dc 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D29__UART2_DTE_CTS_B         0x0c8 0x3dc 0x924 0x4 0x1
-+#define MX6QDL_PAD_EIM_D29__GPIO3_IO29              0x0c8 0x3dc 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D29__IPU2_CSI1_VSYNC         0x0c8 0x3dc 0x8e4 0x6 0x0
-+#define MX6QDL_PAD_EIM_D29__IPU1_DI0_PIN14          0x0c8 0x3dc 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_D30__EIM_DATA30              0x0cc 0x3e0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D30__IPU1_DISP1_DATA21       0x0cc 0x3e0 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D30__IPU1_DI0_PIN11          0x0cc 0x3e0 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D30__IPU1_CSI0_DATA03        0x0cc 0x3e0 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_D30__UART3_CTS_B             0x0cc 0x3e0 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D30__UART3_RTS_B             0x0cc 0x3e0 0x92c 0x4 0x2
-+#define MX6QDL_PAD_EIM_D30__GPIO3_IO30              0x0cc 0x3e0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D30__USB_H1_OC               0x0cc 0x3e0 0x948 0x6 0x0
-+#define MX6QDL_PAD_EIM_D31__EIM_DATA31              0x0d0 0x3e4 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_D31__IPU1_DISP1_DATA20       0x0d0 0x3e4 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_D31__IPU1_DI0_PIN12          0x0d0 0x3e4 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_D31__IPU1_CSI0_DATA02        0x0d0 0x3e4 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_D31__UART3_RTS_B             0x0d0 0x3e4 0x92c 0x4 0x3
-+#define MX6QDL_PAD_EIM_D31__UART3_CTS_B             0x0d0 0x3e4 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_D31__GPIO3_IO31              0x0d0 0x3e4 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_D31__USB_H1_PWR              0x0d0 0x3e4 0x000 0x6 0x0
-+#define MX6QDL_PAD_EIM_A24__EIM_ADDR24              0x0d4 0x3e8 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A24__IPU1_DISP1_DATA19       0x0d4 0x3e8 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A24__IPU2_CSI1_DATA19        0x0d4 0x3e8 0x8d4 0x2 0x1
-+#define MX6QDL_PAD_EIM_A24__IPU2_SISG2              0x0d4 0x3e8 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_A24__IPU1_SISG2              0x0d4 0x3e8 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_A24__GPIO5_IO04              0x0d4 0x3e8 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A24__SRC_BOOT_CFG24          0x0d4 0x3e8 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A23__EIM_ADDR23              0x0d8 0x3ec 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A23__IPU1_DISP1_DATA18       0x0d8 0x3ec 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A23__IPU2_CSI1_DATA18        0x0d8 0x3ec 0x8d0 0x2 0x1
-+#define MX6QDL_PAD_EIM_A23__IPU2_SISG3              0x0d8 0x3ec 0x000 0x3 0x0
-+#define MX6QDL_PAD_EIM_A23__IPU1_SISG3              0x0d8 0x3ec 0x000 0x4 0x0
-+#define MX6QDL_PAD_EIM_A23__GPIO6_IO06              0x0d8 0x3ec 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A23__SRC_BOOT_CFG23          0x0d8 0x3ec 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A22__EIM_ADDR22              0x0dc 0x3f0 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A22__IPU1_DISP1_DATA17       0x0dc 0x3f0 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A22__IPU2_CSI1_DATA17        0x0dc 0x3f0 0x8cc 0x2 0x1
-+#define MX6QDL_PAD_EIM_A22__GPIO2_IO16              0x0dc 0x3f0 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A22__SRC_BOOT_CFG22          0x0dc 0x3f0 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A21__EIM_ADDR21              0x0e0 0x3f4 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A21__IPU1_DISP1_DATA16       0x0e0 0x3f4 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A21__IPU2_CSI1_DATA16        0x0e0 0x3f4 0x8c8 0x2 0x1
-+#define MX6QDL_PAD_EIM_A21__GPIO2_IO17              0x0e0 0x3f4 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A21__SRC_BOOT_CFG21          0x0e0 0x3f4 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A20__EIM_ADDR20              0x0e4 0x3f8 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A20__IPU1_DISP1_DATA15       0x0e4 0x3f8 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A20__IPU2_CSI1_DATA15        0x0e4 0x3f8 0x8c4 0x2 0x1
-+#define MX6QDL_PAD_EIM_A20__GPIO2_IO18              0x0e4 0x3f8 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A20__SRC_BOOT_CFG20          0x0e4 0x3f8 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A19__EIM_ADDR19              0x0e8 0x3fc 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A19__IPU1_DISP1_DATA14       0x0e8 0x3fc 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A19__IPU2_CSI1_DATA14        0x0e8 0x3fc 0x8c0 0x2 0x1
-+#define MX6QDL_PAD_EIM_A19__GPIO2_IO19              0x0e8 0x3fc 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A19__SRC_BOOT_CFG19          0x0e8 0x3fc 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A18__EIM_ADDR18              0x0ec 0x400 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A18__IPU1_DISP1_DATA13       0x0ec 0x400 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A18__IPU2_CSI1_DATA13        0x0ec 0x400 0x8bc 0x2 0x1
-+#define MX6QDL_PAD_EIM_A18__GPIO2_IO20              0x0ec 0x400 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A18__SRC_BOOT_CFG18          0x0ec 0x400 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A17__EIM_ADDR17              0x0f0 0x404 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A17__IPU1_DISP1_DATA12       0x0f0 0x404 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A17__IPU2_CSI1_DATA12        0x0f0 0x404 0x8b8 0x2 0x1
-+#define MX6QDL_PAD_EIM_A17__GPIO2_IO21              0x0f0 0x404 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A17__SRC_BOOT_CFG17          0x0f0 0x404 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_A16__EIM_ADDR16              0x0f4 0x408 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_A16__IPU1_DI1_DISP_CLK       0x0f4 0x408 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_A16__IPU2_CSI1_PIXCLK        0x0f4 0x408 0x8e0 0x2 0x1
-+#define MX6QDL_PAD_EIM_A16__GPIO2_IO22              0x0f4 0x408 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_A16__SRC_BOOT_CFG16          0x0f4 0x408 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_CS0__EIM_CS0_B               0x0f8 0x40c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_CS0__IPU1_DI1_PIN05          0x0f8 0x40c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_CS0__ECSPI2_SCLK             0x0f8 0x40c 0x810 0x2 0x0
-+#define MX6QDL_PAD_EIM_CS0__GPIO2_IO23              0x0f8 0x40c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_CS1__EIM_CS1_B               0x0fc 0x410 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_CS1__IPU1_DI1_PIN06          0x0fc 0x410 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_CS1__ECSPI2_MOSI             0x0fc 0x410 0x818 0x2 0x0
-+#define MX6QDL_PAD_EIM_CS1__GPIO2_IO24              0x0fc 0x410 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_OE__EIM_OE_B                 0x100 0x414 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_OE__IPU1_DI1_PIN07           0x100 0x414 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_OE__ECSPI2_MISO              0x100 0x414 0x814 0x2 0x0
-+#define MX6QDL_PAD_EIM_OE__GPIO2_IO25               0x100 0x414 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_RW__EIM_RW                   0x104 0x418 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_RW__IPU1_DI1_PIN08           0x104 0x418 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_RW__ECSPI2_SS0               0x104 0x418 0x81c 0x2 0x0
-+#define MX6QDL_PAD_EIM_RW__GPIO2_IO26               0x104 0x418 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_RW__SRC_BOOT_CFG29           0x104 0x418 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_LBA__EIM_LBA_B               0x108 0x41c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_LBA__IPU1_DI1_PIN17          0x108 0x41c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_LBA__ECSPI2_SS1              0x108 0x41c 0x820 0x2 0x0
-+#define MX6QDL_PAD_EIM_LBA__GPIO2_IO27              0x108 0x41c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_LBA__SRC_BOOT_CFG26          0x108 0x41c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_EB0__EIM_EB0_B               0x10c 0x420 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_EB0__IPU1_DISP1_DATA11       0x10c 0x420 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_EB0__IPU2_CSI1_DATA11        0x10c 0x420 0x8b4 0x2 0x1
-+#define MX6QDL_PAD_EIM_EB0__CCM_PMIC_READY          0x10c 0x420 0x7f0 0x4 0x0
-+#define MX6QDL_PAD_EIM_EB0__GPIO2_IO28              0x10c 0x420 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_EB0__SRC_BOOT_CFG27          0x10c 0x420 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_EB1__EIM_EB1_B               0x110 0x424 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_EB1__IPU1_DISP1_DATA10       0x110 0x424 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_EB1__IPU2_CSI1_DATA10        0x110 0x424 0x8b0 0x2 0x1
-+#define MX6QDL_PAD_EIM_EB1__GPIO2_IO29              0x110 0x424 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_EB1__SRC_BOOT_CFG28          0x110 0x424 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA0__EIM_AD00                0x114 0x428 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA0__IPU1_DISP1_DATA09       0x114 0x428 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA0__IPU2_CSI1_DATA09        0x114 0x428 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA0__GPIO3_IO00              0x114 0x428 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA0__SRC_BOOT_CFG00          0x114 0x428 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA1__EIM_AD01                0x118 0x42c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA1__IPU1_DISP1_DATA08       0x118 0x42c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA1__IPU2_CSI1_DATA08        0x118 0x42c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA1__GPIO3_IO01              0x118 0x42c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA1__SRC_BOOT_CFG01          0x118 0x42c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA2__EIM_AD02                0x11c 0x430 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA2__IPU1_DISP1_DATA07       0x11c 0x430 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA2__IPU2_CSI1_DATA07        0x11c 0x430 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA2__GPIO3_IO02              0x11c 0x430 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA2__SRC_BOOT_CFG02          0x11c 0x430 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA3__EIM_AD03                0x120 0x434 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA3__IPU1_DISP1_DATA06       0x120 0x434 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA3__IPU2_CSI1_DATA06        0x120 0x434 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA3__GPIO3_IO03              0x120 0x434 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA3__SRC_BOOT_CFG03          0x120 0x434 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA4__EIM_AD04                0x124 0x438 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA4__IPU1_DISP1_DATA05       0x124 0x438 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA4__IPU2_CSI1_DATA05        0x124 0x438 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA4__GPIO3_IO04              0x124 0x438 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA4__SRC_BOOT_CFG04          0x124 0x438 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA5__EIM_AD05                0x128 0x43c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA5__IPU1_DISP1_DATA04       0x128 0x43c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA5__IPU2_CSI1_DATA04        0x128 0x43c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA5__GPIO3_IO05              0x128 0x43c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA5__SRC_BOOT_CFG05          0x128 0x43c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA6__EIM_AD06                0x12c 0x440 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA6__IPU1_DISP1_DATA03       0x12c 0x440 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA6__IPU2_CSI1_DATA03        0x12c 0x440 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA6__GPIO3_IO06              0x12c 0x440 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA6__SRC_BOOT_CFG06          0x12c 0x440 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA7__EIM_AD07                0x130 0x444 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA7__IPU1_DISP1_DATA02       0x130 0x444 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA7__IPU2_CSI1_DATA02        0x130 0x444 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA7__GPIO3_IO07              0x130 0x444 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA7__SRC_BOOT_CFG07          0x130 0x444 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA8__EIM_AD08                0x134 0x448 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA8__IPU1_DISP1_DATA01       0x134 0x448 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA8__IPU2_CSI1_DATA01        0x134 0x448 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA8__GPIO3_IO08              0x134 0x448 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA8__SRC_BOOT_CFG08          0x134 0x448 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA9__EIM_AD09                0x138 0x44c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA9__IPU1_DISP1_DATA00       0x138 0x44c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA9__IPU2_CSI1_DATA00        0x138 0x44c 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA9__GPIO3_IO09              0x138 0x44c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA9__SRC_BOOT_CFG09          0x138 0x44c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA10__EIM_AD10               0x13c 0x450 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA10__IPU1_DI1_PIN15         0x13c 0x450 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA10__IPU2_CSI1_DATA_EN      0x13c 0x450 0x8d8 0x2 0x1
-+#define MX6QDL_PAD_EIM_DA10__GPIO3_IO10             0x13c 0x450 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA10__SRC_BOOT_CFG10         0x13c 0x450 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA11__EIM_AD11               0x140 0x454 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA11__IPU1_DI1_PIN02         0x140 0x454 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA11__IPU2_CSI1_HSYNC        0x140 0x454 0x8dc 0x2 0x1
-+#define MX6QDL_PAD_EIM_DA11__GPIO3_IO11             0x140 0x454 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA11__SRC_BOOT_CFG11         0x140 0x454 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA12__EIM_AD12               0x144 0x458 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA12__IPU1_DI1_PIN03         0x144 0x458 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA12__IPU2_CSI1_VSYNC        0x144 0x458 0x8e4 0x2 0x1
-+#define MX6QDL_PAD_EIM_DA12__GPIO3_IO12             0x144 0x458 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA12__SRC_BOOT_CFG12         0x144 0x458 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA13__EIM_AD13               0x148 0x45c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA13__IPU1_DI1_D0_CS         0x148 0x45c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA13__GPIO3_IO13             0x148 0x45c 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA13__SRC_BOOT_CFG13         0x148 0x45c 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA14__EIM_AD14               0x14c 0x460 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA14__IPU1_DI1_D1_CS         0x14c 0x460 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA14__GPIO3_IO14             0x14c 0x460 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA14__SRC_BOOT_CFG14         0x14c 0x460 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_DA15__EIM_AD15               0x150 0x464 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_DA15__IPU1_DI1_PIN01         0x150 0x464 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_DA15__IPU1_DI1_PIN04         0x150 0x464 0x000 0x2 0x0
-+#define MX6QDL_PAD_EIM_DA15__GPIO3_IO15             0x150 0x464 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_DA15__SRC_BOOT_CFG15         0x150 0x464 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_WAIT__EIM_WAIT_B             0x154 0x468 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_WAIT__EIM_DTACK_B            0x154 0x468 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_WAIT__GPIO5_IO00             0x154 0x468 0x000 0x5 0x0
-+#define MX6QDL_PAD_EIM_WAIT__SRC_BOOT_CFG25         0x154 0x468 0x000 0x7 0x0
-+#define MX6QDL_PAD_EIM_BCLK__EIM_BCLK               0x158 0x46c 0x000 0x0 0x0
-+#define MX6QDL_PAD_EIM_BCLK__IPU1_DI1_PIN16         0x158 0x46c 0x000 0x1 0x0
-+#define MX6QDL_PAD_EIM_BCLK__GPIO6_IO31             0x158 0x46c 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK  0x15c 0x470 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_DISP_CLK__IPU2_DI0_DISP_CLK  0x15c 0x470 0x000 0x1 0x0
-+#define MX6QDL_PAD_DI0_DISP_CLK__GPIO4_IO16         0x15c 0x470 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_PIN15__IPU1_DI0_PIN15        0x160 0x474 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_PIN15__IPU2_DI0_PIN15        0x160 0x474 0x000 0x1 0x0
-+#define MX6QDL_PAD_DI0_PIN15__AUD6_TXC              0x160 0x474 0x000 0x2 0x0
-+#define MX6QDL_PAD_DI0_PIN15__GPIO4_IO17            0x160 0x474 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_PIN2__IPU1_DI0_PIN02         0x164 0x478 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_PIN2__IPU2_DI0_PIN02         0x164 0x478 0x000 0x1 0x0
-+#define MX6QDL_PAD_DI0_PIN2__AUD6_TXD               0x164 0x478 0x000 0x2 0x0
-+#define MX6QDL_PAD_DI0_PIN2__GPIO4_IO18             0x164 0x478 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_PIN3__IPU1_DI0_PIN03         0x168 0x47c 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_PIN3__IPU2_DI0_PIN03         0x168 0x47c 0x000 0x1 0x0
-+#define MX6QDL_PAD_DI0_PIN3__AUD6_TXFS              0x168 0x47c 0x000 0x2 0x0
-+#define MX6QDL_PAD_DI0_PIN3__GPIO4_IO19             0x168 0x47c 0x000 0x5 0x0
-+#define MX6QDL_PAD_DI0_PIN4__IPU1_DI0_PIN04         0x16c 0x480 0x000 0x0 0x0
-+#define MX6QDL_PAD_DI0_PIN4__IPU2_DI0_PIN04         0x16c 0x480 0x000 0x1 0x0
-+#define MX6QDL_PAD_DI0_PIN4__AUD6_RXD               0x16c 0x480 0x000 0x2 0x0
-+#define MX6QDL_PAD_DI0_PIN4__SD1_WP                 0x16c 0x480 0x94c 0x3 0x0
-+#define MX6QDL_PAD_DI0_PIN4__GPIO4_IO20             0x16c 0x480 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00    0x170 0x484 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT0__IPU2_DISP0_DATA00    0x170 0x484 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK          0x170 0x484 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT0__GPIO4_IO21           0x170 0x484 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01    0x174 0x488 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT1__IPU2_DISP0_DATA01    0x174 0x488 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI          0x174 0x488 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT1__GPIO4_IO22           0x174 0x488 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02    0x178 0x48c 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT2__IPU2_DISP0_DATA02    0x178 0x48c 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO          0x178 0x48c 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT2__GPIO4_IO23           0x178 0x48c 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03    0x17c 0x490 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT3__IPU2_DISP0_DATA03    0x17c 0x490 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT3__ECSPI3_SS0           0x17c 0x490 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT3__GPIO4_IO24           0x17c 0x490 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04    0x180 0x494 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT4__IPU2_DISP0_DATA04    0x180 0x494 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT4__ECSPI3_SS1           0x180 0x494 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25           0x180 0x494 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05    0x184 0x498 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__IPU2_DISP0_DATA05    0x184 0x498 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__ECSPI3_SS2           0x184 0x498 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__AUD6_RXFS            0x184 0x498 0x000 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT5__GPIO4_IO26           0x184 0x498 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06    0x188 0x49c 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__IPU2_DISP0_DATA06    0x188 0x49c 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__ECSPI3_SS3           0x188 0x49c 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__AUD6_RXC             0x188 0x49c 0x000 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT6__GPIO4_IO27           0x188 0x49c 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07    0x18c 0x4a0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT7__IPU2_DISP0_DATA07    0x18c 0x4a0 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT7__ECSPI3_RDY           0x18c 0x4a0 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT7__GPIO4_IO28           0x18c 0x4a0 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08    0x190 0x4a4 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__IPU2_DISP0_DATA08    0x190 0x4a4 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__PWM1_OUT             0x190 0x4a4 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__WDOG1_B              0x190 0x4a4 0x000 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT8__GPIO4_IO29           0x190 0x4a4 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09    0x194 0x4a8 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__IPU2_DISP0_DATA09    0x194 0x4a8 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__PWM2_OUT             0x194 0x4a8 0x000 0x2 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__WDOG2_B              0x194 0x4a8 0x000 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT9__GPIO4_IO30           0x194 0x4a8 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10   0x198 0x4ac 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT10__IPU2_DISP0_DATA10   0x198 0x4ac 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT10__GPIO4_IO31          0x198 0x4ac 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11   0x19c 0x4b0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT11__IPU2_DISP0_DATA11   0x19c 0x4b0 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT11__GPIO5_IO05          0x19c 0x4b0 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12   0x1a0 0x4b4 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT12__IPU2_DISP0_DATA12   0x1a0 0x4b4 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT12__GPIO5_IO06          0x1a0 0x4b4 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13   0x1a4 0x4b8 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT13__IPU2_DISP0_DATA13   0x1a4 0x4b8 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT13__AUD5_RXFS           0x1a4 0x4b8 0x7d8 0x3 0x1
-+#define MX6QDL_PAD_DISP0_DAT13__GPIO5_IO07          0x1a4 0x4b8 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14   0x1a8 0x4bc 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT14__IPU2_DISP0_DATA14   0x1a8 0x4bc 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT14__AUD5_RXC            0x1a8 0x4bc 0x7d4 0x3 0x1
-+#define MX6QDL_PAD_DISP0_DAT14__GPIO5_IO08          0x1a8 0x4bc 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15   0x1ac 0x4c0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT15__IPU2_DISP0_DATA15   0x1ac 0x4c0 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT15__ECSPI1_SS1          0x1ac 0x4c0 0x804 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT15__ECSPI2_SS1          0x1ac 0x4c0 0x820 0x3 0x1
-+#define MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09          0x1ac 0x4c0 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16   0x1b0 0x4c4 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__IPU2_DISP0_DATA16   0x1b0 0x4c4 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__ECSPI2_MOSI         0x1b0 0x4c4 0x818 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT16__AUD5_TXC            0x1b0 0x4c4 0x7dc 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__SDMA_EXT_EVENT0     0x1b0 0x4c4 0x90c 0x4 0x0
-+#define MX6QDL_PAD_DISP0_DAT16__GPIO5_IO10          0x1b0 0x4c4 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17   0x1b4 0x4c8 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__IPU2_DISP0_DATA17   0x1b4 0x4c8 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__ECSPI2_MISO         0x1b4 0x4c8 0x814 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT17__AUD5_TXD            0x1b4 0x4c8 0x7d0 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__SDMA_EXT_EVENT1     0x1b4 0x4c8 0x910 0x4 0x0
-+#define MX6QDL_PAD_DISP0_DAT17__GPIO5_IO11          0x1b4 0x4c8 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18   0x1b8 0x4cc 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__IPU2_DISP0_DATA18   0x1b8 0x4cc 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__ECSPI2_SS0          0x1b8 0x4cc 0x81c 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT18__AUD5_TXFS           0x1b8 0x4cc 0x7e0 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__AUD4_RXFS           0x1b8 0x4cc 0x7c0 0x4 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__GPIO5_IO12          0x1b8 0x4cc 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT18__EIM_CS2_B           0x1b8 0x4cc 0x000 0x7 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19   0x1bc 0x4d0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__IPU2_DISP0_DATA19   0x1bc 0x4d0 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__ECSPI2_SCLK         0x1bc 0x4d0 0x810 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT19__AUD5_RXD            0x1bc 0x4d0 0x7cc 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__AUD4_RXC            0x1bc 0x4d0 0x7bc 0x4 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__GPIO5_IO13          0x1bc 0x4d0 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT19__EIM_CS3_B           0x1bc 0x4d0 0x000 0x7 0x0
-+#define MX6QDL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20   0x1c0 0x4d4 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT20__IPU2_DISP0_DATA20   0x1c0 0x4d4 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT20__ECSPI1_SCLK         0x1c0 0x4d4 0x7f4 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT20__AUD4_TXC            0x1c0 0x4d4 0x7c4 0x3 0x0
-+#define MX6QDL_PAD_DISP0_DAT20__GPIO5_IO14          0x1c0 0x4d4 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21   0x1c4 0x4d8 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT21__IPU2_DISP0_DATA21   0x1c4 0x4d8 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT21__ECSPI1_MOSI         0x1c4 0x4d8 0x7fc 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT21__AUD4_TXD            0x1c4 0x4d8 0x7b8 0x3 0x1
-+#define MX6QDL_PAD_DISP0_DAT21__GPIO5_IO15          0x1c4 0x4d8 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22   0x1c8 0x4dc 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT22__IPU2_DISP0_DATA22   0x1c8 0x4dc 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT22__ECSPI1_MISO         0x1c8 0x4dc 0x7f8 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT22__AUD4_TXFS           0x1c8 0x4dc 0x7c8 0x3 0x1
-+#define MX6QDL_PAD_DISP0_DAT22__GPIO5_IO16          0x1c8 0x4dc 0x000 0x5 0x0
-+#define MX6QDL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23   0x1cc 0x4e0 0x000 0x0 0x0
-+#define MX6QDL_PAD_DISP0_DAT23__IPU2_DISP0_DATA23   0x1cc 0x4e0 0x000 0x1 0x0
-+#define MX6QDL_PAD_DISP0_DAT23__ECSPI1_SS0          0x1cc 0x4e0 0x800 0x2 0x1
-+#define MX6QDL_PAD_DISP0_DAT23__AUD4_RXD            0x1cc 0x4e0 0x7b4 0x3 0x1
-+#define MX6QDL_PAD_DISP0_DAT23__GPIO5_IO17          0x1cc 0x4e0 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_MDIO__ENET_MDIO             0x1d0 0x4e4 0x840 0x1 0x0
-+#define MX6QDL_PAD_ENET_MDIO__ESAI_RX_CLK           0x1d0 0x4e4 0x86c 0x2 0x0
-+#define MX6QDL_PAD_ENET_MDIO__ENET_1588_EVENT1_OUT  0x1d0 0x4e4 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_MDIO__GPIO1_IO22            0x1d0 0x4e4 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_MDIO__SPDIF_LOCK            0x1d0 0x4e4 0x000 0x6 0x0
-+#define MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK        0x1d4 0x4e8 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_REF_CLK__ESAI_RX_FS         0x1d4 0x4e8 0x85c 0x2 0x0
-+#define MX6QDL_PAD_ENET_REF_CLK__GPIO1_IO23         0x1d4 0x4e8 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_REF_CLK__SPDIF_SR_CLK       0x1d4 0x4e8 0x000 0x6 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID           0x1d8 0x4ec 0x000 0x0 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__ENET_RX_ER           0x1d8 0x4ec 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__ESAI_RX_HF_CLK       0x1d8 0x4ec 0x864 0x2 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__SPDIF_IN             0x1d8 0x4ec 0x914 0x3 0x1
-+#define MX6QDL_PAD_ENET_RX_ER__ENET_1588_EVENT2_OUT 0x1d8 0x4ec 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_RX_ER__GPIO1_IO24           0x1d8 0x4ec 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN          0x1dc 0x4f0 0x858 0x1 0x1
-+#define MX6QDL_PAD_ENET_CRS_DV__ESAI_TX_CLK         0x1dc 0x4f0 0x870 0x2 0x0
-+#define MX6QDL_PAD_ENET_CRS_DV__SPDIF_EXT_CLK       0x1dc 0x4f0 0x918 0x3 0x1
-+#define MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25          0x1dc 0x4f0 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_RXD1__MLB_SIG               0x1e0 0x4f4 0x908 0x0 0x0
-+#define MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1         0x1e0 0x4f4 0x84c 0x1 0x1
-+#define MX6QDL_PAD_ENET_RXD1__ESAI_TX_FS            0x1e0 0x4f4 0x860 0x2 0x0
-+#define MX6QDL_PAD_ENET_RXD1__ENET_1588_EVENT3_OUT  0x1e0 0x4f4 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_RXD1__GPIO1_IO26            0x1e0 0x4f4 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0         0x1e4 0x4f8 0x848 0x1 0x1
-+#define MX6QDL_PAD_ENET_RXD0__ESAI_TX_HF_CLK        0x1e4 0x4f8 0x868 0x2 0x0
-+#define MX6QDL_PAD_ENET_RXD0__SPDIF_OUT             0x1e4 0x4f8 0x000 0x3 0x0
-+#define MX6QDL_PAD_ENET_RXD0__GPIO1_IO27            0x1e4 0x4f8 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN           0x1e8 0x4fc 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_TX_EN__ESAI_TX3_RX2         0x1e8 0x4fc 0x880 0x2 0x0
-+#define MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28           0x1e8 0x4fc 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_TXD1__MLB_CLK               0x1ec 0x500 0x900 0x0 0x0
-+#define MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1         0x1ec 0x500 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_TXD1__ESAI_TX2_RX3          0x1ec 0x500 0x87c 0x2 0x0
-+#define MX6QDL_PAD_ENET_TXD1__ENET_1588_EVENT0_IN   0x1ec 0x500 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_TXD1__GPIO1_IO29            0x1ec 0x500 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0         0x1f0 0x504 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_TXD0__ESAI_TX4_RX1          0x1f0 0x504 0x884 0x2 0x0
-+#define MX6QDL_PAD_ENET_TXD0__GPIO1_IO30            0x1f0 0x504 0x000 0x5 0x0
-+#define MX6QDL_PAD_ENET_MDC__MLB_DATA               0x1f4 0x508 0x904 0x0 0x0
-+#define MX6QDL_PAD_ENET_MDC__ENET_MDC               0x1f4 0x508 0x000 0x1 0x0
-+#define MX6QDL_PAD_ENET_MDC__ESAI_TX5_RX0           0x1f4 0x508 0x888 0x2 0x0
-+#define MX6QDL_PAD_ENET_MDC__ENET_1588_EVENT1_IN    0x1f4 0x508 0x000 0x4 0x0
-+#define MX6QDL_PAD_ENET_MDC__GPIO1_IO31             0x1f4 0x508 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_COL0__ECSPI1_SCLK            0x1f8 0x5c8 0x7f4 0x0 0x2
-+#define MX6QDL_PAD_KEY_COL0__ENET_RX_DATA3          0x1f8 0x5c8 0x854 0x1 0x1
-+#define MX6QDL_PAD_KEY_COL0__AUD5_TXC               0x1f8 0x5c8 0x7dc 0x2 0x1
-+#define MX6QDL_PAD_KEY_COL0__KEY_COL0               0x1f8 0x5c8 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL0__UART4_TX_DATA          0x1f8 0x5c8 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL0__UART4_RX_DATA          0x1f8 0x5c8 0x938 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL0__GPIO4_IO06             0x1f8 0x5c8 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_COL0__DCIC1_OUT              0x1f8 0x5c8 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_ROW0__ECSPI1_MOSI            0x1fc 0x5cc 0x7fc 0x0 0x2
-+#define MX6QDL_PAD_KEY_ROW0__ENET_TX_DATA3          0x1fc 0x5cc 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_ROW0__AUD5_TXD               0x1fc 0x5cc 0x7d0 0x2 0x1
-+#define MX6QDL_PAD_KEY_ROW0__KEY_ROW0               0x1fc 0x5cc 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA          0x1fc 0x5cc 0x938 0x4 0x1
-+#define MX6QDL_PAD_KEY_ROW0__UART4_TX_DATA          0x1fc 0x5cc 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_ROW0__GPIO4_IO07             0x1fc 0x5cc 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW0__DCIC2_OUT              0x1fc 0x5cc 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_COL1__ECSPI1_MISO            0x200 0x5d0 0x7f8 0x0 0x2
-+#define MX6QDL_PAD_KEY_COL1__ENET_MDIO              0x200 0x5d0 0x840 0x1 0x1
-+#define MX6QDL_PAD_KEY_COL1__AUD5_TXFS              0x200 0x5d0 0x7e0 0x2 0x1
-+#define MX6QDL_PAD_KEY_COL1__KEY_COL1               0x200 0x5d0 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL1__UART5_TX_DATA          0x200 0x5d0 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL1__UART5_RX_DATA          0x200 0x5d0 0x940 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL1__GPIO4_IO08             0x200 0x5d0 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_COL1__SD1_VSELECT            0x200 0x5d0 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_ROW1__ECSPI1_SS0             0x204 0x5d4 0x800 0x0 0x2
-+#define MX6QDL_PAD_KEY_ROW1__ENET_COL               0x204 0x5d4 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_ROW1__AUD5_RXD               0x204 0x5d4 0x7cc 0x2 0x1
-+#define MX6QDL_PAD_KEY_ROW1__KEY_ROW1               0x204 0x5d4 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA          0x204 0x5d4 0x940 0x4 0x1
-+#define MX6QDL_PAD_KEY_ROW1__UART5_TX_DATA          0x204 0x5d4 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_ROW1__GPIO4_IO09             0x204 0x5d4 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW1__SD2_VSELECT            0x204 0x5d4 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_COL2__ECSPI1_SS1             0x208 0x5d8 0x804 0x0 0x2
-+#define MX6QDL_PAD_KEY_COL2__ENET_RX_DATA2          0x208 0x5d8 0x850 0x1 0x1
-+#define MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX            0x208 0x5d8 0x000 0x2 0x0
-+#define MX6QDL_PAD_KEY_COL2__KEY_COL2               0x208 0x5d8 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL2__ENET_MDC               0x208 0x5d8 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL2__GPIO4_IO10             0x208 0x5d8 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_COL2__USB_H1_PWR_CTL_WAKE    0x208 0x5d8 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_ROW2__ECSPI1_SS2             0x20c 0x5dc 0x808 0x0 0x1
-+#define MX6QDL_PAD_KEY_ROW2__ENET_TX_DATA2          0x20c 0x5dc 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX            0x20c 0x5dc 0x7e4 0x2 0x0
-+#define MX6QDL_PAD_KEY_ROW2__KEY_ROW2               0x20c 0x5dc 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW2__SD2_VSELECT            0x20c 0x5dc 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_ROW2__GPIO4_IO11             0x20c 0x5dc 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE       0x20c 0x5dc 0x88c 0x6 0x1
-+#define MX6QDL_PAD_KEY_COL3__ECSPI1_SS3             0x210 0x5e0 0x80c 0x0 0x1
-+#define MX6QDL_PAD_KEY_COL3__ENET_CRS               0x210 0x5e0 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_COL3__HDMI_TX_DDC_SCL        0x210 0x5e0 0x890 0x2 0x1
-+#define MX6QDL_PAD_KEY_COL3__KEY_COL3               0x210 0x5e0 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL3__I2C2_SCL               0x210 0x5e0 0x8a0 0x4 0x1
-+#define MX6QDL_PAD_KEY_COL3__GPIO4_IO12             0x210 0x5e0 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_COL3__SPDIF_IN               0x210 0x5e0 0x914 0x6 0x2
-+#define MX6QDL_PAD_KEY_ROW3__ASRC_EXT_CLK           0x214 0x5e4 0x7b0 0x1 0x0
-+#define MX6QDL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA        0x214 0x5e4 0x894 0x2 0x1
-+#define MX6QDL_PAD_KEY_ROW3__KEY_ROW3               0x214 0x5e4 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW3__I2C2_SDA               0x214 0x5e4 0x8a4 0x4 0x1
-+#define MX6QDL_PAD_KEY_ROW3__GPIO4_IO13             0x214 0x5e4 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW3__SD1_VSELECT            0x214 0x5e4 0x000 0x6 0x0
-+#define MX6QDL_PAD_KEY_COL4__FLEXCAN2_TX            0x218 0x5e8 0x000 0x0 0x0
-+#define MX6QDL_PAD_KEY_COL4__IPU1_SISG4             0x218 0x5e8 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_COL4__USB_OTG_OC             0x218 0x5e8 0x944 0x2 0x1
-+#define MX6QDL_PAD_KEY_COL4__KEY_COL4               0x218 0x5e8 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_COL4__UART5_RTS_B            0x218 0x5e8 0x93c 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL4__UART5_CTS_B            0x218 0x5e8 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_COL4__GPIO4_IO14             0x218 0x5e8 0x000 0x5 0x0
-+#define MX6QDL_PAD_KEY_ROW4__FLEXCAN2_RX            0x21c 0x5ec 0x7e8 0x0 0x0
-+#define MX6QDL_PAD_KEY_ROW4__IPU1_SISG5             0x21c 0x5ec 0x000 0x1 0x0
-+#define MX6QDL_PAD_KEY_ROW4__USB_OTG_PWR            0x21c 0x5ec 0x000 0x2 0x0
-+#define MX6QDL_PAD_KEY_ROW4__KEY_ROW4               0x21c 0x5ec 0x000 0x3 0x0
-+#define MX6QDL_PAD_KEY_ROW4__UART5_CTS_B            0x21c 0x5ec 0x000 0x4 0x0
-+#define MX6QDL_PAD_KEY_ROW4__UART5_RTS_B            0x21c 0x5ec 0x93c 0x4 0x1
-+#define MX6QDL_PAD_KEY_ROW4__GPIO4_IO15             0x21c 0x5ec 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_0__CCM_CLKO1                0x220 0x5f0 0x000 0x0 0x0
-+#define MX6QDL_PAD_GPIO_0__KEY_COL5                 0x220 0x5f0 0x8e8 0x2 0x0
-+#define MX6QDL_PAD_GPIO_0__ASRC_EXT_CLK             0x220 0x5f0 0x7b0 0x3 0x1
-+#define MX6QDL_PAD_GPIO_0__EPIT1_OUT                0x220 0x5f0 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_0__GPIO1_IO00               0x220 0x5f0 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_0__USB_H1_PWR               0x220 0x5f0 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_0__SNVS_VIO_5               0x220 0x5f0 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_1__ESAI_RX_CLK              0x224 0x5f4 0x86c 0x0 0x1
-+#define MX6QDL_PAD_GPIO_1__WDOG2_B                  0x224 0x5f4 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_1__KEY_ROW5                 0x224 0x5f4 0x8f4 0x2 0x0
-+#define MX6QDL_PAD_GPIO_1__USB_OTG_ID               0x224 0x5f4 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_1__PWM2_OUT                 0x224 0x5f4 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_1__GPIO1_IO01               0x224 0x5f4 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_1__SD1_CD_B                 0x224 0x5f4 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_9__ESAI_RX_FS               0x228 0x5f8 0x85c 0x0 0x1
-+#define MX6QDL_PAD_GPIO_9__WDOG1_B                  0x228 0x5f8 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_9__KEY_COL6                 0x228 0x5f8 0x8ec 0x2 0x0
-+#define MX6QDL_PAD_GPIO_9__CCM_REF_EN_B             0x228 0x5f8 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_9__PWM1_OUT                 0x228 0x5f8 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_9__GPIO1_IO09               0x228 0x5f8 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_9__SD1_WP                   0x228 0x5f8 0x94c 0x6 0x1
-+#define MX6QDL_PAD_GPIO_3__ESAI_RX_HF_CLK           0x22c 0x5fc 0x864 0x0 0x1
-+#define MX6QDL_PAD_GPIO_3__I2C3_SCL                 0x22c 0x5fc 0x8a8 0x2 0x1
-+#define MX6QDL_PAD_GPIO_3__XTALOSC_REF_CLK_24M      0x22c 0x5fc 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_3__CCM_CLKO2                0x22c 0x5fc 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_3__GPIO1_IO03               0x22c 0x5fc 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_3__USB_H1_OC                0x22c 0x5fc 0x948 0x6 0x1
-+#define MX6QDL_PAD_GPIO_3__MLB_CLK                  0x22c 0x5fc 0x900 0x7 0x1
-+#define MX6QDL_PAD_GPIO_6__ESAI_TX_CLK              0x230 0x600 0x870 0x0 0x1
-+#define MX6QDL_PAD_GPIO_6__I2C3_SDA                 0x230 0x600 0x8ac 0x2 0x1
-+#define MX6QDL_PAD_GPIO_6__GPIO1_IO06               0x230 0x600 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_6__SD2_LCTL                 0x230 0x600 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_6__MLB_SIG                  0x230 0x600 0x908 0x7 0x1
-+#define MX6QDL_PAD_GPIO_2__ESAI_TX_FS               0x234 0x604 0x860 0x0 0x1
-+#define MX6QDL_PAD_GPIO_2__KEY_ROW6                 0x234 0x604 0x8f8 0x2 0x1
-+#define MX6QDL_PAD_GPIO_2__GPIO1_IO02               0x234 0x604 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_2__SD2_WP                   0x234 0x604 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_2__MLB_DATA                 0x234 0x604 0x904 0x7 0x1
-+#define MX6QDL_PAD_GPIO_4__ESAI_TX_HF_CLK           0x238 0x608 0x868 0x0 0x1
-+#define MX6QDL_PAD_GPIO_4__KEY_COL7                 0x238 0x608 0x8f0 0x2 0x1
-+#define MX6QDL_PAD_GPIO_4__GPIO1_IO04               0x238 0x608 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_4__SD2_CD_B                 0x238 0x608 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_5__ESAI_TX2_RX3             0x23c 0x60c 0x87c 0x0 0x1
-+#define MX6QDL_PAD_GPIO_5__KEY_ROW7                 0x23c 0x60c 0x8fc 0x2 0x1
-+#define MX6QDL_PAD_GPIO_5__CCM_CLKO1                0x23c 0x60c 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_5__GPIO1_IO05               0x23c 0x60c 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_5__I2C3_SCL                 0x23c 0x60c 0x8a8 0x6 0x2
-+#define MX6QDL_PAD_GPIO_5__ARM_EVENTI               0x23c 0x60c 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_7__ESAI_TX4_RX1             0x240 0x610 0x884 0x0 0x1
-+#define MX6QDL_PAD_GPIO_7__ECSPI5_RDY               0x240 0x610 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_7__EPIT1_OUT                0x240 0x610 0x000 0x2 0x0
-+#define MX6QDL_PAD_GPIO_7__FLEXCAN1_TX              0x240 0x610 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_7__UART2_TX_DATA            0x240 0x610 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_7__UART2_RX_DATA            0x240 0x610 0x928 0x4 0x2
-+#define MX6QDL_PAD_GPIO_7__GPIO1_IO07               0x240 0x610 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_7__SPDIF_LOCK               0x240 0x610 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_7__USB_OTG_HOST_MODE        0x240 0x610 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_8__ESAI_TX5_RX0             0x244 0x614 0x888 0x0 0x1
-+#define MX6QDL_PAD_GPIO_8__XTALOSC_REF_CLK_32K      0x244 0x614 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_8__EPIT2_OUT                0x244 0x614 0x000 0x2 0x0
-+#define MX6QDL_PAD_GPIO_8__FLEXCAN1_RX              0x244 0x614 0x7e4 0x3 0x1
-+#define MX6QDL_PAD_GPIO_8__UART2_RX_DATA            0x244 0x614 0x928 0x4 0x3
-+#define MX6QDL_PAD_GPIO_8__UART2_TX_DATA            0x244 0x614 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_8__GPIO1_IO08               0x244 0x614 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_8__SPDIF_SR_CLK             0x244 0x614 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_8__USB_OTG_PWR_CTL_WAKE     0x244 0x614 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_16__ESAI_TX3_RX2            0x248 0x618 0x880 0x0 0x1
-+#define MX6QDL_PAD_GPIO_16__ENET_1588_EVENT2_IN     0x248 0x618 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_16__ENET_REF_CLK            0x248 0x618 0x83c 0x2 0x1
-+#define MX6QDL_PAD_GPIO_16__SD1_LCTL                0x248 0x618 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_16__SPDIF_IN                0x248 0x618 0x914 0x4 0x3
-+#define MX6QDL_PAD_GPIO_16__GPIO7_IO11              0x248 0x618 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_16__I2C3_SDA                0x248 0x618 0x8ac 0x6 0x2
-+#define MX6QDL_PAD_GPIO_16__JTAG_DE_B               0x248 0x618 0x000 0x7 0x0
-+#define MX6QDL_PAD_GPIO_17__ESAI_TX0                0x24c 0x61c 0x874 0x0 0x0
-+#define MX6QDL_PAD_GPIO_17__ENET_1588_EVENT3_IN     0x24c 0x61c 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_17__CCM_PMIC_READY          0x24c 0x61c 0x7f0 0x2 0x1
-+#define MX6QDL_PAD_GPIO_17__SDMA_EXT_EVENT0         0x24c 0x61c 0x90c 0x3 0x1
-+#define MX6QDL_PAD_GPIO_17__SPDIF_OUT               0x24c 0x61c 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_17__GPIO7_IO12              0x24c 0x61c 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_18__ESAI_TX1                0x250 0x620 0x878 0x0 0x0
-+#define MX6QDL_PAD_GPIO_18__ENET_RX_CLK             0x250 0x620 0x844 0x1 0x1
-+#define MX6QDL_PAD_GPIO_18__SD3_VSELECT             0x250 0x620 0x000 0x2 0x0
-+#define MX6QDL_PAD_GPIO_18__SDMA_EXT_EVENT1         0x250 0x620 0x910 0x3 0x1
-+#define MX6QDL_PAD_GPIO_18__ASRC_EXT_CLK            0x250 0x620 0x7b0 0x4 0x2
-+#define MX6QDL_PAD_GPIO_18__GPIO7_IO13              0x250 0x620 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_18__SNVS_VIO_5_CTL          0x250 0x620 0x000 0x6 0x0
-+#define MX6QDL_PAD_GPIO_19__KEY_COL5                0x254 0x624 0x8e8 0x0 0x1
-+#define MX6QDL_PAD_GPIO_19__ENET_1588_EVENT0_OUT    0x254 0x624 0x000 0x1 0x0
-+#define MX6QDL_PAD_GPIO_19__SPDIF_OUT               0x254 0x624 0x000 0x2 0x0
-+#define MX6QDL_PAD_GPIO_19__CCM_CLKO1               0x254 0x624 0x000 0x3 0x0
-+#define MX6QDL_PAD_GPIO_19__ECSPI1_RDY              0x254 0x624 0x000 0x4 0x0
-+#define MX6QDL_PAD_GPIO_19__GPIO4_IO05              0x254 0x624 0x000 0x5 0x0
-+#define MX6QDL_PAD_GPIO_19__ENET_TX_ER              0x254 0x624 0x000 0x6 0x0
-+#define MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK    0x258 0x628 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_PIXCLK__GPIO5_IO18          0x258 0x628 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_PIXCLK__ARM_EVENTO          0x258 0x628 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC       0x25c 0x62c 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_MCLK__CCM_CLKO1             0x25c 0x62c 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_MCLK__GPIO5_IO19            0x25c 0x62c 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_MCLK__ARM_TRACE_CTL         0x25c 0x62c 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN  0x260 0x630 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DATA_EN__EIM_DATA00         0x260 0x630 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DATA_EN__GPIO5_IO20         0x260 0x630 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DATA_EN__ARM_TRACE_CLK      0x260 0x630 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC      0x264 0x634 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_VSYNC__EIM_DATA01           0x264 0x634 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_VSYNC__GPIO5_IO21           0x264 0x634 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_VSYNC__ARM_TRACE00          0x264 0x634 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__IPU1_CSI0_DATA04      0x268 0x638 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__EIM_DATA02            0x268 0x638 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__ECSPI1_SCLK           0x268 0x638 0x7f4 0x2 0x3
-+#define MX6QDL_PAD_CSI0_DAT4__KEY_COL5              0x268 0x638 0x8e8 0x3 0x2
-+#define MX6QDL_PAD_CSI0_DAT4__AUD3_TXC              0x268 0x638 0x000 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__GPIO5_IO22            0x268 0x638 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT4__ARM_TRACE01           0x268 0x638 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__IPU1_CSI0_DATA05      0x26c 0x63c 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__EIM_DATA03            0x26c 0x63c 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__ECSPI1_MOSI           0x26c 0x63c 0x7fc 0x2 0x3
-+#define MX6QDL_PAD_CSI0_DAT5__KEY_ROW5              0x26c 0x63c 0x8f4 0x3 0x1
-+#define MX6QDL_PAD_CSI0_DAT5__AUD3_TXD              0x26c 0x63c 0x000 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__GPIO5_IO23            0x26c 0x63c 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT5__ARM_TRACE02           0x26c 0x63c 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__IPU1_CSI0_DATA06      0x270 0x640 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__EIM_DATA04            0x270 0x640 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__ECSPI1_MISO           0x270 0x640 0x7f8 0x2 0x3
-+#define MX6QDL_PAD_CSI0_DAT6__KEY_COL6              0x270 0x640 0x8ec 0x3 0x1
-+#define MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS             0x270 0x640 0x000 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__GPIO5_IO24            0x270 0x640 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT6__ARM_TRACE03           0x270 0x640 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__IPU1_CSI0_DATA07      0x274 0x644 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__EIM_DATA05            0x274 0x644 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__ECSPI1_SS0            0x274 0x644 0x800 0x2 0x3
-+#define MX6QDL_PAD_CSI0_DAT7__KEY_ROW6              0x274 0x644 0x8f8 0x3 0x2
-+#define MX6QDL_PAD_CSI0_DAT7__AUD3_RXD              0x274 0x644 0x000 0x4 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__GPIO5_IO25            0x274 0x644 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT7__ARM_TRACE04           0x274 0x644 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__IPU1_CSI0_DATA08      0x278 0x648 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__EIM_DATA06            0x278 0x648 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__ECSPI2_SCLK           0x278 0x648 0x810 0x2 0x2
-+#define MX6QDL_PAD_CSI0_DAT8__KEY_COL7              0x278 0x648 0x8f0 0x3 0x2
-+#define MX6QDL_PAD_CSI0_DAT8__I2C1_SDA              0x278 0x648 0x89c 0x4 0x1
-+#define MX6QDL_PAD_CSI0_DAT8__GPIO5_IO26            0x278 0x648 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT8__ARM_TRACE05           0x278 0x648 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__IPU1_CSI0_DATA09      0x27c 0x64c 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__EIM_DATA07            0x27c 0x64c 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__ECSPI2_MOSI           0x27c 0x64c 0x818 0x2 0x2
-+#define MX6QDL_PAD_CSI0_DAT9__KEY_ROW7              0x27c 0x64c 0x8fc 0x3 0x2
-+#define MX6QDL_PAD_CSI0_DAT9__I2C1_SCL              0x27c 0x64c 0x898 0x4 0x1
-+#define MX6QDL_PAD_CSI0_DAT9__GPIO5_IO27            0x27c 0x64c 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT9__ARM_TRACE06           0x27c 0x64c 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__IPU1_CSI0_DATA10     0x280 0x650 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__AUD3_RXC             0x280 0x650 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__ECSPI2_MISO          0x280 0x650 0x814 0x2 0x2
-+#define MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA        0x280 0x650 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__UART1_RX_DATA        0x280 0x650 0x920 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__GPIO5_IO28           0x280 0x650 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT10__ARM_TRACE07          0x280 0x650 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__IPU1_CSI0_DATA11     0x284 0x654 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__AUD3_RXFS            0x284 0x654 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__ECSPI2_SS0           0x284 0x654 0x81c 0x2 0x2
-+#define MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA        0x284 0x654 0x920 0x3 0x1
-+#define MX6QDL_PAD_CSI0_DAT11__UART1_TX_DATA        0x284 0x654 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__GPIO5_IO29           0x284 0x654 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT11__ARM_TRACE08          0x284 0x654 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12     0x288 0x658 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__EIM_DATA08           0x288 0x658 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__UART4_TX_DATA        0x288 0x658 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__UART4_RX_DATA        0x288 0x658 0x938 0x3 0x2
-+#define MX6QDL_PAD_CSI0_DAT12__GPIO5_IO30           0x288 0x658 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT12__ARM_TRACE09          0x288 0x658 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13     0x28c 0x65c 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__EIM_DATA09           0x28c 0x65c 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__UART4_RX_DATA        0x28c 0x65c 0x938 0x3 0x3
-+#define MX6QDL_PAD_CSI0_DAT13__UART4_TX_DATA        0x28c 0x65c 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__GPIO5_IO31           0x28c 0x65c 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT13__ARM_TRACE10          0x28c 0x65c 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14     0x290 0x660 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__EIM_DATA10           0x290 0x660 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__UART5_TX_DATA        0x290 0x660 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__UART5_RX_DATA        0x290 0x660 0x940 0x3 0x2
-+#define MX6QDL_PAD_CSI0_DAT14__GPIO6_IO00           0x290 0x660 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT14__ARM_TRACE11          0x290 0x660 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15     0x294 0x664 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__EIM_DATA11           0x294 0x664 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__UART5_RX_DATA        0x294 0x664 0x940 0x3 0x3
-+#define MX6QDL_PAD_CSI0_DAT15__UART5_TX_DATA        0x294 0x664 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__GPIO6_IO01           0x294 0x664 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT15__ARM_TRACE12          0x294 0x664 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16     0x298 0x668 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__EIM_DATA12           0x298 0x668 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__UART4_RTS_B          0x298 0x668 0x934 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__UART4_CTS_B          0x298 0x668 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__GPIO6_IO02           0x298 0x668 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT16__ARM_TRACE13          0x298 0x668 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17     0x29c 0x66c 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__EIM_DATA13           0x29c 0x66c 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__UART4_CTS_B          0x29c 0x66c 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__UART4_RTS_B          0x29c 0x66c 0x934 0x3 0x1
-+#define MX6QDL_PAD_CSI0_DAT17__GPIO6_IO03           0x29c 0x66c 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT17__ARM_TRACE14          0x29c 0x66c 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18     0x2a0 0x670 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__EIM_DATA14           0x2a0 0x670 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__UART5_RTS_B          0x2a0 0x670 0x93c 0x3 0x2
-+#define MX6QDL_PAD_CSI0_DAT18__UART5_CTS_B          0x2a0 0x670 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__GPIO6_IO04           0x2a0 0x670 0x000 0x5 0x0
-+#define MX6QDL_PAD_CSI0_DAT18__ARM_TRACE15          0x2a0 0x670 0x000 0x7 0x0
-+#define MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19     0x2a4 0x674 0x000 0x0 0x0
-+#define MX6QDL_PAD_CSI0_DAT19__EIM_DATA15           0x2a4 0x674 0x000 0x1 0x0
-+#define MX6QDL_PAD_CSI0_DAT19__UART5_CTS_B          0x2a4 0x674 0x000 0x3 0x0
-+#define MX6QDL_PAD_CSI0_DAT19__UART5_RTS_B          0x2a4 0x674 0x93c 0x3 0x3
-+#define MX6QDL_PAD_CSI0_DAT19__GPIO6_IO05           0x2a4 0x674 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT7__SD3_DATA7              0x2a8 0x690 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA          0x2a8 0x690 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT7__UART1_RX_DATA          0x2a8 0x690 0x920 0x1 0x2
-+#define MX6QDL_PAD_SD3_DAT7__GPIO6_IO17             0x2a8 0x690 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT6__SD3_DATA6              0x2ac 0x694 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA          0x2ac 0x694 0x920 0x1 0x3
-+#define MX6QDL_PAD_SD3_DAT6__UART1_TX_DATA          0x2ac 0x694 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT6__GPIO6_IO18             0x2ac 0x694 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT5__SD3_DATA5              0x2b0 0x698 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT5__UART2_TX_DATA          0x2b0 0x698 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT5__UART2_RX_DATA          0x2b0 0x698 0x928 0x1 0x4
-+#define MX6QDL_PAD_SD3_DAT5__GPIO7_IO00             0x2b0 0x698 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT4__SD3_DATA4              0x2b4 0x69c 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT4__UART2_RX_DATA          0x2b4 0x69c 0x928 0x1 0x5
-+#define MX6QDL_PAD_SD3_DAT4__UART2_TX_DATA          0x2b4 0x69c 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT4__GPIO7_IO01             0x2b4 0x69c 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_CMD__SD3_CMD                 0x2b8 0x6a0 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_CMD__UART2_CTS_B             0x2b8 0x6a0 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_CMD__UART2_RTS_B             0x2b8 0x6a0 0x924 0x1 0x2
-+#define MX6QDL_PAD_SD3_CMD__FLEXCAN1_TX             0x2b8 0x6a0 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD3_CMD__GPIO7_IO02              0x2b8 0x6a0 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_CLK__SD3_CLK                 0x2bc 0x6a4 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_CLK__UART2_RTS_B             0x2bc 0x6a4 0x924 0x1 0x3
-+#define MX6QDL_PAD_SD3_CLK__UART2_CTS_B             0x2bc 0x6a4 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_CLK__FLEXCAN1_RX             0x2bc 0x6a4 0x7e4 0x2 0x2
-+#define MX6QDL_PAD_SD3_CLK__GPIO7_IO03              0x2bc 0x6a4 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT0__SD3_DATA0              0x2c0 0x6a8 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT0__UART1_CTS_B            0x2c0 0x6a8 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT0__UART1_RTS_B            0x2c0 0x6a8 0x91c 0x1 0x2
-+#define MX6QDL_PAD_SD3_DAT0__FLEXCAN2_TX            0x2c0 0x6a8 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD3_DAT0__GPIO7_IO04             0x2c0 0x6a8 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT1__SD3_DATA1              0x2c4 0x6ac 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT1__UART1_RTS_B            0x2c4 0x6ac 0x91c 0x1 0x3
-+#define MX6QDL_PAD_SD3_DAT1__UART1_CTS_B            0x2c4 0x6ac 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT1__FLEXCAN2_RX            0x2c4 0x6ac 0x7e8 0x2 0x1
-+#define MX6QDL_PAD_SD3_DAT1__GPIO7_IO05             0x2c4 0x6ac 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT2__SD3_DATA2              0x2c8 0x6b0 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT2__GPIO7_IO06             0x2c8 0x6b0 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_DAT3__SD3_DATA3              0x2cc 0x6b4 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_DAT3__UART3_CTS_B            0x2cc 0x6b4 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_DAT3__UART3_RTS_B            0x2cc 0x6b4 0x92c 0x1 0x4
-+#define MX6QDL_PAD_SD3_DAT3__GPIO7_IO07             0x2cc 0x6b4 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD3_RST__SD3_RESET               0x2d0 0x6b8 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD3_RST__UART3_RTS_B             0x2d0 0x6b8 0x92c 0x1 0x5
-+#define MX6QDL_PAD_SD3_RST__UART3_CTS_B             0x2d0 0x6b8 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD3_RST__GPIO7_IO08              0x2d0 0x6b8 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CLE__NAND_CLE              0x2d4 0x6bc 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CLE__IPU2_SISG4            0x2d4 0x6bc 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_CLE__GPIO6_IO07            0x2d4 0x6bc 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_ALE__NAND_ALE              0x2d8 0x6c0 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_ALE__SD4_RESET             0x2d8 0x6c0 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_ALE__GPIO6_IO08            0x2d8 0x6c0 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_WP_B__NAND_WP_B            0x2dc 0x6c4 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_WP_B__IPU2_SISG5           0x2dc 0x6c4 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_WP_B__GPIO6_IO09           0x2dc 0x6c4 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_RB0__NAND_READY_B          0x2e0 0x6c8 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_RB0__IPU2_DI0_PIN01        0x2e0 0x6c8 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_RB0__GPIO6_IO10            0x2e0 0x6c8 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS0__NAND_CE0_B            0x2e4 0x6cc 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CS0__GPIO6_IO11            0x2e4 0x6cc 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS1__NAND_CE1_B            0x2e8 0x6d0 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CS1__SD4_VSELECT           0x2e8 0x6d0 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_CS1__SD3_VSELECT           0x2e8 0x6d0 0x000 0x2 0x0
-+#define MX6QDL_PAD_NANDF_CS1__GPIO6_IO14            0x2e8 0x6d0 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS2__NAND_CE2_B            0x2ec 0x6d4 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CS2__IPU1_SISG0            0x2ec 0x6d4 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_CS2__ESAI_TX0              0x2ec 0x6d4 0x874 0x2 0x1
-+#define MX6QDL_PAD_NANDF_CS2__EIM_CRE               0x2ec 0x6d4 0x000 0x3 0x0
-+#define MX6QDL_PAD_NANDF_CS2__CCM_CLKO2             0x2ec 0x6d4 0x000 0x4 0x0
-+#define MX6QDL_PAD_NANDF_CS2__GPIO6_IO15            0x2ec 0x6d4 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS2__IPU2_SISG0            0x2ec 0x6d4 0x000 0x6 0x0
-+#define MX6QDL_PAD_NANDF_CS3__NAND_CE3_B            0x2f0 0x6d8 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_CS3__IPU1_SISG1            0x2f0 0x6d8 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_CS3__ESAI_TX1              0x2f0 0x6d8 0x878 0x2 0x1
-+#define MX6QDL_PAD_NANDF_CS3__EIM_ADDR26            0x2f0 0x6d8 0x000 0x3 0x0
-+#define MX6QDL_PAD_NANDF_CS3__GPIO6_IO16            0x2f0 0x6d8 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_CS3__IPU2_SISG1            0x2f0 0x6d8 0x000 0x6 0x0
-+#define MX6QDL_PAD_SD4_CMD__SD4_CMD                 0x2f4 0x6dc 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD4_CMD__NAND_RE_B               0x2f4 0x6dc 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_CMD__UART3_TX_DATA           0x2f4 0x6dc 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_CMD__UART3_RX_DATA           0x2f4 0x6dc 0x930 0x2 0x2
-+#define MX6QDL_PAD_SD4_CMD__GPIO7_IO09              0x2f4 0x6dc 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_CLK__SD4_CLK                 0x2f8 0x6e0 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD4_CLK__NAND_WE_B               0x2f8 0x6e0 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_CLK__UART3_RX_DATA           0x2f8 0x6e0 0x930 0x2 0x3
-+#define MX6QDL_PAD_SD4_CLK__UART3_TX_DATA           0x2f8 0x6e0 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_CLK__GPIO7_IO10              0x2f8 0x6e0 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D0__NAND_DATA00            0x2fc 0x6e4 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D0__SD1_DATA4              0x2fc 0x6e4 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D0__GPIO2_IO00             0x2fc 0x6e4 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D1__NAND_DATA01            0x300 0x6e8 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D1__SD1_DATA5              0x300 0x6e8 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D1__GPIO2_IO01             0x300 0x6e8 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D2__NAND_DATA02            0x304 0x6ec 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D2__SD1_DATA6              0x304 0x6ec 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D2__GPIO2_IO02             0x304 0x6ec 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D3__NAND_DATA03            0x308 0x6f0 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D3__SD1_DATA7              0x308 0x6f0 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D3__GPIO2_IO03             0x308 0x6f0 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D4__NAND_DATA04            0x30c 0x6f4 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D4__SD2_DATA4              0x30c 0x6f4 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D4__GPIO2_IO04             0x30c 0x6f4 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D5__NAND_DATA05            0x310 0x6f8 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D5__SD2_DATA5              0x310 0x6f8 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D5__GPIO2_IO05             0x310 0x6f8 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D6__NAND_DATA06            0x314 0x6fc 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D6__SD2_DATA6              0x314 0x6fc 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D6__GPIO2_IO06             0x314 0x6fc 0x000 0x5 0x0
-+#define MX6QDL_PAD_NANDF_D7__NAND_DATA07            0x318 0x700 0x000 0x0 0x0
-+#define MX6QDL_PAD_NANDF_D7__SD2_DATA7              0x318 0x700 0x000 0x1 0x0
-+#define MX6QDL_PAD_NANDF_D7__GPIO2_IO07             0x318 0x700 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT0__SD4_DATA0              0x31c 0x704 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT0__NAND_DQS               0x31c 0x704 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT0__GPIO2_IO08             0x31c 0x704 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT1__SD4_DATA1              0x320 0x708 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT1__PWM3_OUT               0x320 0x708 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT1__GPIO2_IO09             0x320 0x708 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT2__SD4_DATA2              0x324 0x70c 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT2__PWM4_OUT               0x324 0x70c 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT2__GPIO2_IO10             0x324 0x70c 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT3__SD4_DATA3              0x328 0x710 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT3__GPIO2_IO11             0x328 0x710 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT4__SD4_DATA4              0x32c 0x714 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT4__UART2_RX_DATA          0x32c 0x714 0x928 0x2 0x6
-+#define MX6QDL_PAD_SD4_DAT4__UART2_TX_DATA          0x32c 0x714 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT4__GPIO2_IO12             0x32c 0x714 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT5__SD4_DATA5              0x330 0x718 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT5__UART2_RTS_B            0x330 0x718 0x924 0x2 0x4
-+#define MX6QDL_PAD_SD4_DAT5__UART2_CTS_B            0x330 0x718 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT5__GPIO2_IO13             0x330 0x718 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT6__SD4_DATA6              0x334 0x71c 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT6__UART2_CTS_B            0x334 0x71c 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT6__UART2_RTS_B            0x334 0x71c 0x924 0x2 0x5
-+#define MX6QDL_PAD_SD4_DAT6__GPIO2_IO14             0x334 0x71c 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD4_DAT7__SD4_DATA7              0x338 0x720 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD4_DAT7__UART2_TX_DATA          0x338 0x720 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD4_DAT7__UART2_RX_DATA          0x338 0x720 0x928 0x2 0x7
-+#define MX6QDL_PAD_SD4_DAT7__GPIO2_IO15             0x338 0x720 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT1__SD1_DATA1              0x33c 0x724 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_DAT1__ECSPI5_SS0             0x33c 0x724 0x834 0x1 0x1
-+#define MX6QDL_PAD_SD1_DAT1__PWM3_OUT               0x33c 0x724 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD1_DAT1__GPT_CAPTURE2           0x33c 0x724 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_DAT1__GPIO1_IO17             0x33c 0x724 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT0__SD1_DATA0              0x340 0x728 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_DAT0__ECSPI5_MISO            0x340 0x728 0x82c 0x1 0x1
-+#define MX6QDL_PAD_SD1_DAT0__GPT_CAPTURE1           0x340 0x728 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_DAT0__GPIO1_IO16             0x340 0x728 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT3__SD1_DATA3              0x344 0x72c 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_DAT3__ECSPI5_SS2             0x344 0x72c 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD1_DAT3__GPT_COMPARE3           0x344 0x72c 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD1_DAT3__PWM1_OUT               0x344 0x72c 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_DAT3__WDOG2_B                0x344 0x72c 0x000 0x4 0x0
-+#define MX6QDL_PAD_SD1_DAT3__GPIO1_IO21             0x344 0x72c 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT3__WDOG2_RESET_B_DEB      0x344 0x72c 0x000 0x6 0x0
-+#define MX6QDL_PAD_SD1_CMD__SD1_CMD                 0x348 0x730 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_CMD__ECSPI5_MOSI             0x348 0x730 0x830 0x1 0x0
-+#define MX6QDL_PAD_SD1_CMD__PWM4_OUT                0x348 0x730 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD1_CMD__GPT_COMPARE1            0x348 0x730 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_CMD__GPIO1_IO18              0x348 0x730 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT2__SD1_DATA2              0x34c 0x734 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_DAT2__ECSPI5_SS1             0x34c 0x734 0x838 0x1 0x1
-+#define MX6QDL_PAD_SD1_DAT2__GPT_COMPARE2           0x34c 0x734 0x000 0x2 0x0
-+#define MX6QDL_PAD_SD1_DAT2__PWM2_OUT               0x34c 0x734 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_DAT2__WDOG1_B                0x34c 0x734 0x000 0x4 0x0
-+#define MX6QDL_PAD_SD1_DAT2__GPIO1_IO19             0x34c 0x734 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD1_DAT2__WDOG1_RESET_B_DEB      0x34c 0x734 0x000 0x6 0x0
-+#define MX6QDL_PAD_SD1_CLK__SD1_CLK                 0x350 0x738 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD1_CLK__ECSPI5_SCLK             0x350 0x738 0x828 0x1 0x0
-+#define MX6QDL_PAD_SD1_CLK__GPT_CLKIN               0x350 0x738 0x000 0x3 0x0
-+#define MX6QDL_PAD_SD1_CLK__GPIO1_IO20              0x350 0x738 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_CLK__SD2_CLK                 0x354 0x73c 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_CLK__ECSPI5_SCLK             0x354 0x73c 0x828 0x1 0x1
-+#define MX6QDL_PAD_SD2_CLK__KEY_COL5                0x354 0x73c 0x8e8 0x2 0x3
-+#define MX6QDL_PAD_SD2_CLK__AUD4_RXFS               0x354 0x73c 0x7c0 0x3 0x1
-+#define MX6QDL_PAD_SD2_CLK__GPIO1_IO10              0x354 0x73c 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_CMD__SD2_CMD                 0x358 0x740 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_CMD__ECSPI5_MOSI             0x358 0x740 0x830 0x1 0x1
-+#define MX6QDL_PAD_SD2_CMD__KEY_ROW5                0x358 0x740 0x8f4 0x2 0x2
-+#define MX6QDL_PAD_SD2_CMD__AUD4_RXC                0x358 0x740 0x7bc 0x3 0x1
-+#define MX6QDL_PAD_SD2_CMD__GPIO1_IO11              0x358 0x740 0x000 0x5 0x0
-+#define MX6QDL_PAD_SD2_DAT3__SD2_DATA3              0x35c 0x744 0x000 0x0 0x0
-+#define MX6QDL_PAD_SD2_DAT3__ECSPI5_SS3             0x35c 0x744 0x000 0x1 0x0
-+#define MX6QDL_PAD_SD2_DAT3__KEY_COL6               0x35c 0x744 0x8ec 0x2 0x2
-+#define MX6QDL_PAD_SD2_DAT3__AUD4_TXC               0x35c 0x744 0x7c4 0x3 0x1
-+#define MX6QDL_PAD_SD2_DAT3__GPIO1_IO12             0x35c 0x744 0x000 0x5 0x0
- #endif /* __DTS_IMX6Q_PINFUNC_H */
-diff --git a/arch/arm/boot/dts/imx6q-sabreauto.dts b/arch/arm/boot/dts/imx6q-sabreauto.dts
-index 49d6f28..334b924 100644
---- a/arch/arm/boot/dts/imx6q-sabreauto.dts
-+++ b/arch/arm/boot/dts/imx6q-sabreauto.dts
-@@ -20,16 +20,6 @@
-       compatible = "fsl,imx6q-sabreauto", "fsl,imx6q";
- };
--&iomuxc {
--      pinctrl-names = "default";
--      pinctrl-0 = <&pinctrl_hog>;
--
--      hog {
--              pinctrl_hog: hoggrp {
--                      fsl,pins = <
--                              MX6Q_PAD_NANDF_CS2__GPIO6_IO15 0x80000000
--                              MX6Q_PAD_SD2_DAT2__GPIO1_IO13  0x80000000
--                      >;
--              };
--      };
-+&sata {
-+      status = "okay";
- };
-diff --git a/arch/arm/boot/dts/imx6q-sabrelite.dts b/arch/arm/boot/dts/imx6q-sabrelite.dts
-index 6a00066..3530280 100644
---- a/arch/arm/boot/dts/imx6q-sabrelite.dts
-+++ b/arch/arm/boot/dts/imx6q-sabrelite.dts
-@@ -65,6 +65,10 @@
-       };
- };
-+&sata {
-+      status = "okay";
-+};
-+
- &ecspi1 {
-       fsl,spi-num-chipselects = <1>;
-       cs-gpios = <&gpio3 19 0>;
-@@ -91,14 +95,14 @@
-       hog {
-               pinctrl_hog: hoggrp {
-                       fsl,pins = <
--                              MX6Q_PAD_NANDF_D6__GPIO2_IO06 0x80000000
--                              MX6Q_PAD_NANDF_D7__GPIO2_IO07 0x80000000
--                              MX6Q_PAD_EIM_D19__GPIO3_IO19  0x80000000
--                              MX6Q_PAD_EIM_D22__GPIO3_IO22  0x80000000
--                              MX6Q_PAD_EIM_D23__GPIO3_IO23  0x80000000
--                              MX6Q_PAD_SD3_DAT5__GPIO7_IO00 0x80000000
--                              MX6Q_PAD_SD3_DAT4__GPIO7_IO01 0x1f0b0
--                              MX6Q_PAD_GPIO_0__CCM_CLKO1    0x80000000
-+                              MX6QDL_PAD_NANDF_D6__GPIO2_IO06 0x80000000
-+                              MX6QDL_PAD_NANDF_D7__GPIO2_IO07 0x80000000
-+                              MX6QDL_PAD_EIM_D19__GPIO3_IO19  0x80000000
-+                              MX6QDL_PAD_EIM_D22__GPIO3_IO22  0x80000000
-+                              MX6QDL_PAD_EIM_D23__GPIO3_IO23  0x80000000
-+                              MX6QDL_PAD_SD3_DAT5__GPIO7_IO00 0x80000000
-+                              MX6QDL_PAD_SD3_DAT4__GPIO7_IO01 0x1f0b0
-+                              MX6QDL_PAD_GPIO_0__CCM_CLKO1    0x80000000
-                       >;
-               };
-       };
-@@ -163,7 +167,7 @@
-       codec: sgtl5000@0a {
-               compatible = "fsl,sgtl5000";
-               reg = <0x0a>;
--              clocks = <&clks 169>;
-+              clocks = <&clks 201>;
-               VDDA-supply = <&reg_2p5v>;
-               VDDIO-supply = <&reg_3p3v>;
-       };
-diff --git a/arch/arm/boot/dts/imx6q-sabresd.dts b/arch/arm/boot/dts/imx6q-sabresd.dts
-index 4420513..9cbdfe7 100644
---- a/arch/arm/boot/dts/imx6q-sabresd.dts
-+++ b/arch/arm/boot/dts/imx6q-sabresd.dts
-@@ -20,20 +20,6 @@
-       compatible = "fsl,imx6q-sabresd", "fsl,imx6q";
- };
--&iomuxc {
--      pinctrl-names = "default";
--      pinctrl-0 = <&pinctrl_hog>;
--
--      hog {
--              pinctrl_hog: hoggrp {
--                      fsl,pins = <
--                              MX6Q_PAD_GPIO_4__GPIO1_IO04   0x80000000
--                              MX6Q_PAD_GPIO_5__GPIO1_IO05   0x80000000
--                              MX6Q_PAD_NANDF_D0__GPIO2_IO00 0x80000000
--                              MX6Q_PAD_NANDF_D1__GPIO2_IO01 0x80000000
--                              MX6Q_PAD_NANDF_D2__GPIO2_IO02 0x80000000
--                              MX6Q_PAD_NANDF_D3__GPIO2_IO03 0x80000000
--                      >;
--              };
--      };
-+&sata {
-+      status = "okay";
- };
-diff --git a/arch/arm/boot/dts/imx6q-wandboard.dts b/arch/arm/boot/dts/imx6q-wandboard.dts
-new file mode 100644
-index 0000000..36be17f
---- /dev/null
-+++ b/arch/arm/boot/dts/imx6q-wandboard.dts
-@@ -0,0 +1,26 @@
-+/*
-+ * Copyright 2013 Freescale Semiconductor, Inc.
-+ *
-+ * Author: Fabio Estevam <fabio.estevam@freescale.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+/dts-v1/;
-+#include "imx6q.dtsi"
-+#include "imx6qdl-wandboard.dtsi"
-+
-+/ {
-+      model = "Wandboard i.MX6 Quad Board";
-+      compatible = "wand,imx6q-wandboard", "fsl,imx6q";
-+
-+      memory {
-+              reg = <0x10000000 0x80000000>;
-+      };
-+};
-+
-+&sata {
-+      status = "okay";
-+};
-diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
-index dc54a72..f024ef2 100644
---- a/arch/arm/boot/dts/imx6q.dtsi
-+++ b/arch/arm/boot/dts/imx6q.dtsi
-@@ -8,8 +8,8 @@
-  *
-  */
--#include "imx6qdl.dtsi"
- #include "imx6q-pinfunc.h"
-+#include "imx6qdl.dtsi"
- / {
-       cpus {
-@@ -61,6 +61,12 @@
-       };
-       soc {
-+              ocram: sram@00900000 {
-+                      compatible = "mmio-sram";
-+                      reg = <0x00900000 0x40000>;
-+                      clocks = <&clks 142>;
-+              };
-+
-               aips-bus@02000000 { /* AIPS1 */
-                       spba-bus@02000000 {
-                               ecspi5: ecspi@02018000 {
-@@ -77,261 +83,54 @@
-                       iomuxc: iomuxc@020e0000 {
-                               compatible = "fsl,imx6q-iomuxc";
--                              reg = <0x020e0000 0x4000>;
--                              /* shared pinctrl settings */
--                              audmux {
--                                      pinctrl_audmux_1: audmux-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_SD2_DAT0__AUD4_RXD  0x80000000
--                                                      MX6Q_PAD_SD2_DAT3__AUD4_TXC  0x80000000
--                                                      MX6Q_PAD_SD2_DAT2__AUD4_TXD  0x80000000
--                                                      MX6Q_PAD_SD2_DAT1__AUD4_TXFS 0x80000000
--                                              >;
--                                      };
--
--                                      pinctrl_audmux_2: audmux-2 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_CSI0_DAT7__AUD3_RXD  0x80000000
--                                                      MX6Q_PAD_CSI0_DAT4__AUD3_TXC  0x80000000
--                                                      MX6Q_PAD_CSI0_DAT5__AUD3_TXD  0x80000000
--                                                      MX6Q_PAD_CSI0_DAT6__AUD3_TXFS 0x80000000
--                                              >;
--                                      };
--                              };
--
--                              ecspi1 {
--                                      pinctrl_ecspi1_1: ecspi1grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_EIM_D17__ECSPI1_MISO 0x100b1
--                                                      MX6Q_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
--                                                      MX6Q_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
--                                              >;
--                                      };
--                              };
--
--                              ecspi3 {
--                                      pinctrl_ecspi3_1: ecspi3grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_DISP0_DAT2__ECSPI3_MISO 0x100b1
--                                                      MX6Q_PAD_DISP0_DAT1__ECSPI3_MOSI 0x100b1
--                                                      MX6Q_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1
--                                              >;
--                                      };
--                              };
--
--                              enet {
--                                      pinctrl_enet_1: enetgrp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_ENET_MDIO__ENET_MDIO       0x1b0b0
--                                                      MX6Q_PAD_ENET_MDC__ENET_MDC         0x1b0b0
--                                                      MX6Q_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
--                                                      MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0
--                                                      MX6Q_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
--                                                      MX6Q_PAD_GPIO_16__ENET_REF_CLK      0x4001b0a8
--                                              >;
--                                      };
--
--                                      pinctrl_enet_2: enetgrp-2 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_KEY_COL1__ENET_MDIO        0x1b0b0
--                                                      MX6Q_PAD_KEY_COL2__ENET_MDC         0x1b0b0
--                                                      MX6Q_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0
--                                                      MX6Q_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
--                                                      MX6Q_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0
--                                                      MX6Q_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0
--                                                      MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
--                                              >;
--                                      };
--                              };
--
--                              gpmi-nand {
--                                      pinctrl_gpmi_nand_1: gpmi-nand-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_NANDF_CLE__NAND_CLE     0xb0b1
--                                                      MX6Q_PAD_NANDF_ALE__NAND_ALE     0xb0b1
--                                                      MX6Q_PAD_NANDF_WP_B__NAND_WP_B   0xb0b1
--                                                      MX6Q_PAD_NANDF_RB0__NAND_READY_B 0xb000
--                                                      MX6Q_PAD_NANDF_CS0__NAND_CE0_B   0xb0b1
--                                                      MX6Q_PAD_NANDF_CS1__NAND_CE1_B   0xb0b1
--                                                      MX6Q_PAD_NANDF_CS2__NAND_CE2_B   0xb0b1
--                                                      MX6Q_PAD_NANDF_CS3__NAND_CE3_B   0xb0b1
--                                                      MX6Q_PAD_SD4_CMD__NAND_RE_B      0xb0b1
--                                                      MX6Q_PAD_SD4_CLK__NAND_WE_B      0xb0b1
--                                                      MX6Q_PAD_NANDF_D0__NAND_DATA00   0xb0b1
--                                                      MX6Q_PAD_NANDF_D1__NAND_DATA01   0xb0b1
--                                                      MX6Q_PAD_NANDF_D2__NAND_DATA02   0xb0b1
--                                                      MX6Q_PAD_NANDF_D3__NAND_DATA03   0xb0b1
--                                                      MX6Q_PAD_NANDF_D4__NAND_DATA04   0xb0b1
--                                                      MX6Q_PAD_NANDF_D5__NAND_DATA05   0xb0b1
--                                                      MX6Q_PAD_NANDF_D6__NAND_DATA06   0xb0b1
--                                                      MX6Q_PAD_NANDF_D7__NAND_DATA07   0xb0b1
--                                                      MX6Q_PAD_SD4_DAT0__NAND_DQS      0x00b1
--                                              >;
--                                      };
--                              };
--
--                              i2c1 {
--                                      pinctrl_i2c1_1: i2c1grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
--                                                      MX6Q_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
--                                              >;
--                                      };
--                              };
--
--                              i2c2 {
--                                      pinctrl_i2c2_1: i2c2grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1
--                                                      MX6Q_PAD_EIM_D16__I2C2_SDA 0x4001b8b1
--                                              >;
--                                      };
--                              };
--
--                              i2c3 {
--                                      pinctrl_i2c3_1: i2c3grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_EIM_D17__I2C3_SCL 0x4001b8b1
--                                                      MX6Q_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
--                                              >;
--                                      };
--                              };
--
--                              uart1 {
--                                      pinctrl_uart1_1: uart1grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
--                                                      MX6Q_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
--                                              >;
--                                      };
--                              };
--
--                              uart2 {
--                                      pinctrl_uart2_1: uart2grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
--                                                      MX6Q_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
--                                              >;
--                                      };
--                              };
--
--                              uart4 {
--                                      pinctrl_uart4_1: uart4grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
--                                                      MX6Q_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
--                                              >;
--                                      };
--                              };
--
--                              usbotg {
--                                      pinctrl_usbotg_1: usbotggrp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_GPIO_1__USB_OTG_ID 0x17059
--                                              >;
--                                      };
--
--                                      pinctrl_usbotg_2: usbotggrp-2 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
--                                              >;
--                                      };
--                              };
--
--                              usdhc2 {
--                                      pinctrl_usdhc2_1: usdhc2grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_SD2_CMD__SD2_CMD    0x17059
--                                                      MX6Q_PAD_SD2_CLK__SD2_CLK    0x10059
--                                                      MX6Q_PAD_SD2_DAT0__SD2_DATA0 0x17059
--                                                      MX6Q_PAD_SD2_DAT1__SD2_DATA1 0x17059
--                                                      MX6Q_PAD_SD2_DAT2__SD2_DATA2 0x17059
--                                                      MX6Q_PAD_SD2_DAT3__SD2_DATA3 0x17059
--                                                      MX6Q_PAD_NANDF_D4__SD2_DATA4 0x17059
--                                                      MX6Q_PAD_NANDF_D5__SD2_DATA5 0x17059
--                                                      MX6Q_PAD_NANDF_D6__SD2_DATA6 0x17059
--                                                      MX6Q_PAD_NANDF_D7__SD2_DATA7 0x17059
--                                              >;
--                                      };
--                              };
--
--                              usdhc3 {
--                                      pinctrl_usdhc3_1: usdhc3grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_SD3_CMD__SD3_CMD    0x17059
--                                                      MX6Q_PAD_SD3_CLK__SD3_CLK    0x10059
--                                                      MX6Q_PAD_SD3_DAT0__SD3_DATA0 0x17059
--                                                      MX6Q_PAD_SD3_DAT1__SD3_DATA1 0x17059
--                                                      MX6Q_PAD_SD3_DAT2__SD3_DATA2 0x17059
--                                                      MX6Q_PAD_SD3_DAT3__SD3_DATA3 0x17059
--                                                      MX6Q_PAD_SD3_DAT4__SD3_DATA4 0x17059
--                                                      MX6Q_PAD_SD3_DAT5__SD3_DATA5 0x17059
--                                                      MX6Q_PAD_SD3_DAT6__SD3_DATA6 0x17059
--                                                      MX6Q_PAD_SD3_DAT7__SD3_DATA7 0x17059
--                                              >;
--                                      };
--
--                                      pinctrl_usdhc3_2: usdhc3grp-2 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_SD3_CMD__SD3_CMD    0x17059
--                                                      MX6Q_PAD_SD3_CLK__SD3_CLK    0x10059
--                                                      MX6Q_PAD_SD3_DAT0__SD3_DATA0 0x17059
--                                                      MX6Q_PAD_SD3_DAT1__SD3_DATA1 0x17059
--                                                      MX6Q_PAD_SD3_DAT2__SD3_DATA2 0x17059
--                                                      MX6Q_PAD_SD3_DAT3__SD3_DATA3 0x17059
--                                              >;
--                                      };
--                              };
--
--                              usdhc4 {
--                                      pinctrl_usdhc4_1: usdhc4grp-1 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_SD4_CMD__SD4_CMD    0x17059
--                                                      MX6Q_PAD_SD4_CLK__SD4_CLK    0x10059
--                                                      MX6Q_PAD_SD4_DAT0__SD4_DATA0 0x17059
--                                                      MX6Q_PAD_SD4_DAT1__SD4_DATA1 0x17059
--                                                      MX6Q_PAD_SD4_DAT2__SD4_DATA2 0x17059
--                                                      MX6Q_PAD_SD4_DAT3__SD4_DATA3 0x17059
--                                                      MX6Q_PAD_SD4_DAT4__SD4_DATA4 0x17059
--                                                      MX6Q_PAD_SD4_DAT5__SD4_DATA5 0x17059
--                                                      MX6Q_PAD_SD4_DAT6__SD4_DATA6 0x17059
--                                                      MX6Q_PAD_SD4_DAT7__SD4_DATA7 0x17059
--                                              >;
--                                      };
--
--                                      pinctrl_usdhc4_2: usdhc4grp-2 {
--                                              fsl,pins = <
--                                                      MX6Q_PAD_SD4_CMD__SD4_CMD    0x17059
--                                                      MX6Q_PAD_SD4_CLK__SD4_CLK    0x10059
--                                                      MX6Q_PAD_SD4_DAT0__SD4_DATA0 0x17059
--                                                      MX6Q_PAD_SD4_DAT1__SD4_DATA1 0x17059
--                                                      MX6Q_PAD_SD4_DAT2__SD4_DATA2 0x17059
--                                                      MX6Q_PAD_SD4_DAT3__SD4_DATA3 0x17059
-+                              ipu2 {
-+                                      pinctrl_ipu2_1: ipu2grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_DI0_DISP_CLK__IPU2_DI0_DISP_CLK 0x10
-+                                                      MX6QDL_PAD_DI0_PIN15__IPU2_DI0_PIN15       0x10
-+                                                      MX6QDL_PAD_DI0_PIN2__IPU2_DI0_PIN02        0x10
-+                                                      MX6QDL_PAD_DI0_PIN3__IPU2_DI0_PIN03        0x10
-+                                                      MX6QDL_PAD_DI0_PIN4__IPU2_DI0_PIN04        0x80000000
-+                                                      MX6QDL_PAD_DISP0_DAT0__IPU2_DISP0_DATA00   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT1__IPU2_DISP0_DATA01   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT2__IPU2_DISP0_DATA02   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT3__IPU2_DISP0_DATA03   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT4__IPU2_DISP0_DATA04   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT5__IPU2_DISP0_DATA05   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT6__IPU2_DISP0_DATA06   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT7__IPU2_DISP0_DATA07   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT8__IPU2_DISP0_DATA08   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT9__IPU2_DISP0_DATA09   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT10__IPU2_DISP0_DATA10  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT11__IPU2_DISP0_DATA11  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT12__IPU2_DISP0_DATA12  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT13__IPU2_DISP0_DATA13  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT14__IPU2_DISP0_DATA14  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT15__IPU2_DISP0_DATA15  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT16__IPU2_DISP0_DATA16  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT17__IPU2_DISP0_DATA17  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT18__IPU2_DISP0_DATA18  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT19__IPU2_DISP0_DATA19  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT20__IPU2_DISP0_DATA20  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT21__IPU2_DISP0_DATA21  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT22__IPU2_DISP0_DATA22  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT23__IPU2_DISP0_DATA23  0x10
-                                               >;
-                                       };
-                               };
-                       };
-               };
-+              sata: sata@02200000 {
-+                      compatible = "fsl,imx6q-ahci";
-+                      reg = <0x02200000 0x4000>;
-+                      interrupts = <0 39 0x04>;
-+                      clocks =  <&clks 154>, <&clks 187>, <&clks 105>;
-+                      clock-names = "sata", "sata_ref", "ahb";
-+                      status = "disabled";
-+              };
-+
-               ipu2: ipu@02800000 {
-                       #crtc-cells = <1>;
-                       compatible = "fsl,imx6q-ipu";
-diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
-index 4d237cf..1cbbc51 100644
---- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
-+++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
-@@ -16,6 +16,22 @@
-       };
- };
-+&ecspi1 {
-+      fsl,spi-num-chipselects = <1>;
-+      cs-gpios = <&gpio3 19 0>;
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_ecspi1_1 &pinctrl_ecspi1_sabreauto>;
-+      status = "disabled"; /* pin conflict with WEIM NOR */
-+
-+      flash: m25p80@0 {
-+              #address-cells = <1>;
-+              #size-cells = <1>;
-+              compatible = "st,m25p32";
-+              spi-max-frequency = <20000000>;
-+              reg = <0>;
-+      };
-+};
-+
- &fec {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_enet_2>;
-@@ -23,6 +39,34 @@
-       status = "okay";
- };
-+&gpmi {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_gpmi_nand_1>;
-+      status = "okay";
-+};
-+
-+&iomuxc {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_hog>;
-+
-+      hog {
-+              pinctrl_hog: hoggrp {
-+                      fsl,pins = <
-+                              MX6QDL_PAD_NANDF_CS2__GPIO6_IO15 0x80000000
-+                              MX6QDL_PAD_SD2_DAT2__GPIO1_IO13  0x80000000
-+                      >;
-+              };
-+      };
-+
-+      ecspi1 {
-+              pinctrl_ecspi1_sabreauto: ecspi1-sabreauto {
-+                      fsl,pins = <
-+                              MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x80000000
-+                      >;
-+              };
-+      };
-+};
-+
- &uart4 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_uart4_1>;
-@@ -36,3 +80,22 @@
-       wp-gpios = <&gpio1 13 0>;
-       status = "okay";
- };
-+
-+&weim {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_weim_nor_1 &pinctrl_weim_cs0_1>;
-+      #address-cells = <2>;
-+      #size-cells = <1>;
-+      ranges = <0 0 0x08000000 0x08000000>;
-+      status = "disabled"; /* pin conflict with SPI NOR */
-+
-+      nor@0,0 {
-+              compatible = "cfi-flash";
-+              reg = <0 0 0x02000000>;
-+              #address-cells = <1>;
-+              #size-cells = <1>;
-+              bank-width = <2>;
-+              fsl,weim-cs-timing = <0x00620081 0x00000001 0x1c022000
-+                              0x0000c000 0x1404a38e 0x00000000>;
-+      };
-+};
-diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
-index e21f6a8..39eafc2 100644
---- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
-+++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi
-@@ -26,6 +26,22 @@
-                       gpio = <&gpio3 22 0>;
-                       enable-active-high;
-               };
-+
-+              reg_usb_h1_vbus: usb_h1_vbus {
-+                      compatible = "regulator-fixed";
-+                      regulator-name = "usb_h1_vbus";
-+                      regulator-min-microvolt = <5000000>;
-+                      regulator-max-microvolt = <5000000>;
-+                      gpio = <&gpio1 29 0>;
-+                      enable-active-high;
-+              };
-+
-+              reg_audio: wm8962_supply {
-+                      compatible = "regulator-fixed";
-+                      regulator-name = "wm8962-supply";
-+                      gpio = <&gpio4 10 0>;
-+                      enable-active-high;
-+              };
-       };
-       gpio-keys {
-@@ -34,15 +50,58 @@
-               volume-up {
-                       label = "Volume Up";
-                       gpios = <&gpio1 4 0>;
-+                      gpio-key,wakeup;
-                       linux,code = <115>; /* KEY_VOLUMEUP */
-               };
-               volume-down {
-                       label = "Volume Down";
-                       gpios = <&gpio1 5 0>;
-+                      gpio-key,wakeup;
-                       linux,code = <114>; /* KEY_VOLUMEDOWN */
-               };
-       };
-+
-+      sound {
-+              compatible = "fsl,imx6q-sabresd-wm8962",
-+                         "fsl,imx-audio-wm8962";
-+              model = "wm8962-audio";
-+              ssi-controller = <&ssi2>;
-+              audio-codec = <&codec>;
-+              audio-routing =
-+                      "Headphone Jack", "HPOUTL",
-+                      "Headphone Jack", "HPOUTR",
-+                      "Ext Spk", "SPKOUTL",
-+                      "Ext Spk", "SPKOUTR",
-+                      "MICBIAS", "AMIC",
-+                      "IN3R", "MICBIAS",
-+                      "DMIC", "MICBIAS",
-+                      "DMICDAT", "DMIC";
-+              mux-int-port = <2>;
-+              mux-ext-port = <3>;
-+      };
-+};
-+
-+&audmux {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_audmux_2>;
-+      status = "okay";
-+};
-+
-+&ecspi1 {
-+      fsl,spi-num-chipselects = <1>;
-+      cs-gpios = <&gpio4 9 0>;
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_ecspi1_2>;
-+      status = "okay";
-+
-+      flash: m25p80@0 {
-+              #address-cells = <1>;
-+              #size-cells = <1>;
-+              compatible = "st,m25p32";
-+              spi-max-frequency = <20000000>;
-+              reg = <0>;
-+      };
- };
- &fec {
-@@ -52,6 +111,102 @@
-       status = "okay";
- };
-+&i2c1 {
-+      clock-frequency = <100000>;
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_i2c1_2>;
-+      status = "okay";
-+
-+      codec: wm8962@1a {
-+              compatible = "wlf,wm8962";
-+              reg = <0x1a>;
-+              clocks = <&clks 201>;
-+              DCVDD-supply = <&reg_audio>;
-+              DBVDD-supply = <&reg_audio>;
-+              AVDD-supply = <&reg_audio>;
-+              CPVDD-supply = <&reg_audio>;
-+              MICVDD-supply = <&reg_audio>;
-+              PLLVDD-supply = <&reg_audio>;
-+              SPKVDD1-supply = <&reg_audio>;
-+              SPKVDD2-supply = <&reg_audio>;
-+              gpio-cfg = <
-+                      0x0000 /* 0:Default */
-+                      0x0000 /* 1:Default */
-+                      0x0013 /* 2:FN_DMICCLK */
-+                      0x0000 /* 3:Default */
-+                      0x8014 /* 4:FN_DMICCDAT */
-+                      0x0000 /* 5:Default */
-+              >;
-+       };
-+};
-+
-+&i2c3 {
-+      clock-frequency = <100000>;
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_i2c3_2>;
-+      status = "okay";
-+
-+      egalax_ts@04 {
-+              compatible = "eeti,egalax_ts";
-+              reg = <0x04>;
-+              interrupt-parent = <&gpio6>;
-+              interrupts = <7 2>;
-+              wakeup-gpios = <&gpio6 7 0>;
-+      };
-+};
-+
-+&iomuxc {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_hog>;
-+
-+      hog {
-+              pinctrl_hog: hoggrp {
-+                      fsl,pins = <
-+                              MX6QDL_PAD_GPIO_4__GPIO1_IO04   0x80000000
-+                              MX6QDL_PAD_GPIO_5__GPIO1_IO05   0x80000000
-+                              MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000
-+                              MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000
-+                              MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000
-+                              MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x80000000
-+                              MX6QDL_PAD_GPIO_0__CCM_CLKO1    0x130b0
-+                              MX6QDL_PAD_NANDF_CLE__GPIO6_IO07 0x80000000
-+                              MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000
-+                              MX6QDL_PAD_EIM_D22__GPIO3_IO22  0x80000000
-+                      >;
-+              };
-+      };
-+};
-+
-+&ldb {
-+      status = "okay";
-+
-+      lvds-channel@1 {
-+              fsl,data-mapping = "spwg";
-+              fsl,data-width = <18>;
-+              status = "okay";
-+
-+              display-timings {
-+                      native-mode = <&timing0>;
-+                      timing0: hsd100pxn1 {
-+                              clock-frequency = <65000000>;
-+                              hactive = <1024>;
-+                              vactive = <768>;
-+                              hback-porch = <220>;
-+                              hfront-porch = <40>;
-+                              vback-porch = <21>;
-+                              vfront-porch = <7>;
-+                              hsync-len = <60>;
-+                              vsync-len = <10>;
-+                      };
-+              };
-+      };
-+};
-+
-+&ssi2 {
-+      fsl,mode = "i2s-slave";
-+      status = "okay";
-+};
-+
- &uart1 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_uart1_1>;
-@@ -59,6 +214,7 @@
- };
- &usbh1 {
-+      vbus-supply = <&reg_usb_h1_vbus>;
-       status = "okay";
- };
-diff --git a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-new file mode 100644
-index 0000000..a55113e
---- /dev/null
-+++ b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-@@ -0,0 +1,137 @@
-+/*
-+ * Copyright 2013 Freescale Semiconductor, Inc.
-+ *
-+ * Author: Fabio Estevam <fabio.estevam@freescale.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+/ {
-+      regulators {
-+              compatible = "simple-bus";
-+
-+              reg_2p5v: 2p5v {
-+                      compatible = "regulator-fixed";
-+                      regulator-name = "2P5V";
-+                      regulator-min-microvolt = <2500000>;
-+                      regulator-max-microvolt = <2500000>;
-+                      regulator-always-on;
-+              };
-+
-+              reg_3p3v: 3p3v {
-+                      compatible = "regulator-fixed";
-+                      regulator-name = "3P3V";
-+                      regulator-min-microvolt = <3300000>;
-+                      regulator-max-microvolt = <3300000>;
-+                      regulator-always-on;
-+              };
-+      };
-+
-+      sound {
-+              compatible = "fsl,imx6-wandboard-sgtl5000",
-+                           "fsl,imx-audio-sgtl5000";
-+              model = "imx6-wandboard-sgtl5000";
-+              ssi-controller = <&ssi1>;
-+              audio-codec = <&codec>;
-+              audio-routing =
-+                      "MIC_IN", "Mic Jack",
-+                      "Mic Jack", "Mic Bias",
-+                      "Headphone Jack", "HP_OUT";
-+              mux-int-port = <1>;
-+              mux-ext-port = <3>;
-+      };
-+};
-+
-+&audmux {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_audmux_2>;
-+      status = "okay";
-+};
-+
-+&i2c2 {
-+      clock-frequency = <100000>;
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_i2c2_2>;
-+      status = "okay";
-+
-+      codec: sgtl5000@0a {
-+              compatible = "fsl,sgtl5000";
-+              reg = <0x0a>;
-+              clocks = <&clks 201>;
-+              VDDA-supply = <&reg_2p5v>;
-+              VDDIO-supply = <&reg_3p3v>;
-+      };
-+};
-+
-+&iomuxc {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_hog>;
-+
-+      hog {
-+              pinctrl_hog: hoggrp {
-+                      fsl,pins = <
-+                              MX6QDL_PAD_GPIO_0__CCM_CLKO1     0x130b0
-+                              MX6QDL_PAD_GPIO_2__GPIO1_IO02    0x80000000
-+                              MX6QDL_PAD_EIM_DA9__GPIO3_IO09   0x80000000
-+                              MX6QDL_PAD_EIM_EB1__GPIO2_IO29   0x80000000 /* WL_REF_ON */
-+                              MX6QDL_PAD_EIM_A25__GPIO5_IO02   0x80000000 /* WL_RST_N */
-+                              MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000 /* WL_REG_ON */
-+                              MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 /* WL_HOST_WAKE */
-+                              MX6QDL_PAD_ENET_TXD0__GPIO1_IO30 0x80000000 /* WL_WAKE */
-+                      >;
-+              };
-+      };
-+};
-+
-+&fec {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_enet_1>;
-+      phy-mode = "rgmii";
-+      status = "okay";
-+};
-+
-+&ssi1 {
-+      fsl,mode = "i2s-slave";
-+      status = "okay";
-+};
-+
-+&uart1 {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_uart1_1>;
-+      status = "okay";
-+};
-+
-+&uart3 {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_uart3_2>;
-+      fsl,uart-has-rtscts;
-+      status = "okay";
-+};
-+
-+&usbh1 {
-+      status = "okay";
-+};
-+
-+&usdhc1 {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_usdhc1_2>;
-+      cd-gpios = <&gpio1 2 0>;
-+      status = "okay";
-+};
-+
-+&usdhc2 {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_usdhc2_2>;
-+      non-removable;
-+      status = "okay";
-+};
-+
-+&usdhc3 {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_usdhc3_2>;
-+      cd-gpios = <&gpio3 9 0>;
-+      status = "okay";
-+};
-diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
-index 9e8296e..ccd55c2 100644
---- a/arch/arm/boot/dts/imx6qdl.dtsi
-+++ b/arch/arm/boot/dts/imx6qdl.dtsi
-@@ -14,11 +14,6 @@
- / {
-       aliases {
--              serial0 = &uart1;
--              serial1 = &uart2;
--              serial2 = &uart3;
--              serial3 = &uart4;
--              serial4 = &uart5;
-               gpio0 = &gpio1;
-               gpio1 = &gpio2;
-               gpio2 = &gpio3;
-@@ -26,6 +21,18 @@
-               gpio4 = &gpio5;
-               gpio5 = &gpio6;
-               gpio6 = &gpio7;
-+              i2c0 = &i2c1;
-+              i2c1 = &i2c2;
-+              i2c2 = &i2c3;
-+              serial0 = &uart1;
-+              serial1 = &uart2;
-+              serial2 = &uart3;
-+              serial3 = &uart4;
-+              serial4 = &uart5;
-+              spi0 = &ecspi1;
-+              spi1 = &ecspi2;
-+              spi2 = &ecspi3;
-+              spi3 = &ecspi4;
-       };
-       intc: interrupt-controller@00a01000 {
-@@ -81,15 +88,14 @@
-                       #size-cells = <1>;
-                       reg = <0x00112000 0x2000>, <0x00114000 0x2000>;
-                       reg-names = "gpmi-nand", "bch";
--                      interrupts = <0 13 0x04>, <0 15 0x04>;
--                      interrupt-names = "gpmi-dma", "bch";
-+                      interrupts = <0 15 0x04>;
-+                      interrupt-names = "bch";
-                       clocks = <&clks 152>, <&clks 153>, <&clks 151>,
-                                <&clks 150>, <&clks 149>;
-                       clock-names = "gpmi_io", "gpmi_apb", "gpmi_bch",
-                                     "gpmi_bch_apb", "per1_bch";
-                       dmas = <&dma_apbh 0>;
-                       dma-names = "rx-tx";
--                      fsl,gpmi-dma-channel = <0>;
-                       status = "disabled";
-               };
-@@ -106,6 +112,8 @@
-                       interrupts = <0 92 0x04>;
-                       cache-unified;
-                       cache-level = <2>;
-+                      arm,tag-latency = <4 2 3>;
-+                      arm,data-latency = <4 2 3>;
-               };
-               pmu {
-@@ -182,6 +190,8 @@
-                                       interrupts = <0 26 0x04>;
-                                       clocks = <&clks 160>, <&clks 161>;
-                                       clock-names = "ipg", "per";
-+                                      dmas = <&sdma 25 4 0>, <&sdma 26 4 0>;
-+                                      dma-names = "rx", "tx";
-                                       status = "disabled";
-                               };
-@@ -195,6 +205,9 @@
-                                       reg = <0x02028000 0x4000>;
-                                       interrupts = <0 46 0x04>;
-                                       clocks = <&clks 178>;
-+                                      dmas = <&sdma 37 1 0>,
-+                                             <&sdma 38 1 0>;
-+                                      dma-names = "rx", "tx";
-                                       fsl,fifo-depth = <15>;
-                                       fsl,ssi-dma-events = <38 37>;
-                                       status = "disabled";
-@@ -205,6 +218,9 @@
-                                       reg = <0x0202c000 0x4000>;
-                                       interrupts = <0 47 0x04>;
-                                       clocks = <&clks 179>;
-+                                      dmas = <&sdma 41 1 0>,
-+                                             <&sdma 42 1 0>;
-+                                      dma-names = "rx", "tx";
-                                       fsl,fifo-depth = <15>;
-                                       fsl,ssi-dma-events = <42 41>;
-                                       status = "disabled";
-@@ -215,6 +231,9 @@
-                                       reg = <0x02030000 0x4000>;
-                                       interrupts = <0 48 0x04>;
-                                       clocks = <&clks 180>;
-+                                      dmas = <&sdma 45 1 0>,
-+                                             <&sdma 46 1 0>;
-+                                      dma-names = "rx", "tx";
-                                       fsl,fifo-depth = <15>;
-                                       fsl,ssi-dma-events = <46 45>;
-                                       status = "disabled";
-@@ -276,17 +295,23 @@
-                       };
-                       can1: flexcan@02090000 {
-+                              compatible = "fsl,imx6q-flexcan";
-                               reg = <0x02090000 0x4000>;
-                               interrupts = <0 110 0x04>;
-+                              clocks = <&clks 108>, <&clks 109>;
-+                              clock-names = "ipg", "per";
-                       };
-                       can2: flexcan@02094000 {
-+                              compatible = "fsl,imx6q-flexcan";
-                               reg = <0x02094000 0x4000>;
-                               interrupts = <0 111 0x04>;
-+                              clocks = <&clks 110>, <&clks 111>;
-+                              clock-names = "ipg", "per";
-                       };
-                       gpt: gpt@02098000 {
--                              compatible = "fsl,imx6q-gpt";
-+                              compatible = "fsl,imx6q-gpt", "fsl,imx31-gpt";
-                               reg = <0x02098000 0x4000>;
-                               interrupts = <0 55 0x04>;
-                               clocks = <&clks 119>, <&clks 120>;
-@@ -489,6 +514,13 @@
-                               };
-                       };
-+                      tempmon: tempmon {
-+                              compatible = "fsl,imx6q-tempmon";
-+                              interrupts = <0 49 0x04>;
-+                              fsl,tempmon = <&anatop>;
-+                              fsl,tempmon-data = <&ocotp>;
-+                      };
-+
-                       usbphy1: usbphy@020c9000 {
-                               compatible = "fsl,imx6q-usbphy", "fsl,imx23-usbphy";
-                               reg = <0x020c9000 0x1000>;
-@@ -544,6 +576,713 @@
-                               reg = <0x020e0000 0x38>;
-                       };
-+                      iomuxc: iomuxc@020e0000 {
-+                              compatible = "fsl,imx6dl-iomuxc", "fsl,imx6q-iomuxc";
-+                              reg = <0x020e0000 0x4000>;
-+
-+                              audmux {
-+                                      pinctrl_audmux_1: audmux-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD2_DAT0__AUD4_RXD  0x80000000
-+                                                      MX6QDL_PAD_SD2_DAT3__AUD4_TXC  0x80000000
-+                                                      MX6QDL_PAD_SD2_DAT2__AUD4_TXD  0x80000000
-+                                                      MX6QDL_PAD_SD2_DAT1__AUD4_TXFS 0x80000000
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_audmux_2: audmux-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_CSI0_DAT7__AUD3_RXD  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT4__AUD3_TXC  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT5__AUD3_TXD  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT6__AUD3_TXFS 0x80000000
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_audmux_3: audmux-3 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_DISP0_DAT16__AUD5_TXC  0x80000000
-+                                                      MX6QDL_PAD_DISP0_DAT18__AUD5_TXFS 0x80000000
-+                                                      MX6QDL_PAD_DISP0_DAT19__AUD5_RXD  0x80000000
-+                                              >;
-+                                      };
-+                              };
-+
-+                              ecspi1 {
-+                                      pinctrl_ecspi1_1: ecspi1grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_D17__ECSPI1_MISO 0x100b1
-+                                                      MX6QDL_PAD_EIM_D18__ECSPI1_MOSI 0x100b1
-+                                                      MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_ecspi1_2: ecspi1grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_KEY_COL1__ECSPI1_MISO 0x100b1
-+                                                      MX6QDL_PAD_KEY_ROW0__ECSPI1_MOSI 0x100b1
-+                                                      MX6QDL_PAD_KEY_COL0__ECSPI1_SCLK 0x100b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              ecspi3 {
-+                                      pinctrl_ecspi3_1: ecspi3grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_DISP0_DAT2__ECSPI3_MISO 0x100b1
-+                                                      MX6QDL_PAD_DISP0_DAT1__ECSPI3_MOSI 0x100b1
-+                                                      MX6QDL_PAD_DISP0_DAT0__ECSPI3_SCLK 0x100b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              enet {
-+                                      pinctrl_enet_1: enetgrp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_ENET_MDIO__ENET_MDIO       0x1b0b0
-+                                                      MX6QDL_PAD_ENET_MDC__ENET_MDC         0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
-+                                                      MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
-+                                                      MX6QDL_PAD_GPIO_16__ENET_REF_CLK      0x4001b0a8
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_enet_2: enetgrp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_KEY_COL1__ENET_MDIO        0x1b0b0
-+                                                      MX6QDL_PAD_KEY_COL2__ENET_MDC         0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
-+                                                      MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_enet_3: enetgrp-3 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_ENET_MDIO__ENET_MDIO       0x1b0b0
-+                                                      MX6QDL_PAD_ENET_MDC__ENET_MDC         0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TXC__RGMII_TXC       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD0__RGMII_TD0       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD1__RGMII_TD1       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD2__RGMII_TD2       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TD3__RGMII_TD3       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_TX_CTL__RGMII_TX_CTL 0x1b0b0
-+                                                      MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK  0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RXC__RGMII_RXC       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD0__RGMII_RD0       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD1__RGMII_RD1       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD2__RGMII_RD2       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RD3__RGMII_RD3       0x1b0b0
-+                                                      MX6QDL_PAD_RGMII_RX_CTL__RGMII_RX_CTL 0x1b0b0
-+                                                      MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN     0x1b0b0
-+                                              >;
-+                                      };
-+                              };
-+
-+                              esai {
-+                                      pinctrl_esai_1: esaigrp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_ENET_RXD0__ESAI_TX_HF_CLK 0x1b030
-+                                                      MX6QDL_PAD_ENET_CRS_DV__ESAI_TX_CLK  0x1b030
-+                                                      MX6QDL_PAD_ENET_RXD1__ESAI_TX_FS     0x1b030
-+                                                      MX6QDL_PAD_ENET_TX_EN__ESAI_TX3_RX2  0x1b030
-+                                                      MX6QDL_PAD_ENET_TXD1__ESAI_TX2_RX3   0x1b030
-+                                                      MX6QDL_PAD_ENET_TXD0__ESAI_TX4_RX1   0x1b030
-+                                                      MX6QDL_PAD_ENET_MDC__ESAI_TX5_RX0    0x1b030
-+                                                      MX6QDL_PAD_NANDF_CS2__ESAI_TX0       0x1b030
-+                                                      MX6QDL_PAD_NANDF_CS3__ESAI_TX1       0x1b030
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_esai_2: esaigrp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_ENET_CRS_DV__ESAI_TX_CLK 0x1b030
-+                                                      MX6QDL_PAD_ENET_RXD1__ESAI_TX_FS    0x1b030
-+                                                      MX6QDL_PAD_ENET_TX_EN__ESAI_TX3_RX2 0x1b030
-+                                                      MX6QDL_PAD_GPIO_5__ESAI_TX2_RX3     0x1b030
-+                                                      MX6QDL_PAD_ENET_TXD0__ESAI_TX4_RX1  0x1b030
-+                                                      MX6QDL_PAD_ENET_MDC__ESAI_TX5_RX0   0x1b030
-+                                                      MX6QDL_PAD_GPIO_17__ESAI_TX0        0x1b030
-+                                                      MX6QDL_PAD_NANDF_CS3__ESAI_TX1      0x1b030
-+                                                      MX6QDL_PAD_ENET_MDIO__ESAI_RX_CLK   0x1b030
-+                                                      MX6QDL_PAD_GPIO_9__ESAI_RX_FS       0x1b030
-+                                              >;
-+                                      };
-+                              };
-+
-+                              flexcan1 {
-+                                      pinctrl_flexcan1_1: flexcan1grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x80000000
-+                                                      MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX 0x80000000
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_flexcan1_2: flexcan1grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_GPIO_7__FLEXCAN1_TX   0x80000000
-+                                                      MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX 0x80000000
-+                                              >;
-+                                      };
-+                              };
-+
-+                              flexcan2 {
-+                                      pinctrl_flexcan2_1: flexcan2grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_KEY_COL4__FLEXCAN2_TX 0x80000000
-+                                                      MX6QDL_PAD_KEY_ROW4__FLEXCAN2_RX 0x80000000
-+                                              >;
-+                                      };
-+                              };
-+
-+                              gpmi-nand {
-+                                      pinctrl_gpmi_nand_1: gpmi-nand-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_NANDF_CLE__NAND_CLE     0xb0b1
-+                                                      MX6QDL_PAD_NANDF_ALE__NAND_ALE     0xb0b1
-+                                                      MX6QDL_PAD_NANDF_WP_B__NAND_WP_B   0xb0b1
-+                                                      MX6QDL_PAD_NANDF_RB0__NAND_READY_B 0xb000
-+                                                      MX6QDL_PAD_NANDF_CS0__NAND_CE0_B   0xb0b1
-+                                                      MX6QDL_PAD_NANDF_CS1__NAND_CE1_B   0xb0b1
-+                                                      MX6QDL_PAD_SD4_CMD__NAND_RE_B      0xb0b1
-+                                                      MX6QDL_PAD_SD4_CLK__NAND_WE_B      0xb0b1
-+                                                      MX6QDL_PAD_NANDF_D0__NAND_DATA00   0xb0b1
-+                                                      MX6QDL_PAD_NANDF_D1__NAND_DATA01   0xb0b1
-+                                                      MX6QDL_PAD_NANDF_D2__NAND_DATA02   0xb0b1
-+                                                      MX6QDL_PAD_NANDF_D3__NAND_DATA03   0xb0b1
-+                                                      MX6QDL_PAD_NANDF_D4__NAND_DATA04   0xb0b1
-+                                                      MX6QDL_PAD_NANDF_D5__NAND_DATA05   0xb0b1
-+                                                      MX6QDL_PAD_NANDF_D6__NAND_DATA06   0xb0b1
-+                                                      MX6QDL_PAD_NANDF_D7__NAND_DATA07   0xb0b1
-+                                                      MX6QDL_PAD_SD4_DAT0__NAND_DQS      0x00b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              hdmi_hdcp {
-+                                      pinctrl_hdmi_hdcp_1: hdmihdcpgrp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_KEY_COL3__HDMI_TX_DDC_SCL 0x4001b8b1
-+                                                      MX6QDL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_hdmi_hdcp_2: hdmihdcpgrp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_EB2__HDMI_TX_DDC_SCL 0x4001b8b1
-+                                                      MX6QDL_PAD_EIM_D16__HDMI_TX_DDC_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_hdmi_hdcp_3: hdmihdcpgrp-3 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_EB2__HDMI_TX_DDC_SCL  0x4001b8b1
-+                                                      MX6QDL_PAD_KEY_ROW3__HDMI_TX_DDC_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              hdmi_cec {
-+                                      pinctrl_hdmi_cec_1: hdmicecgrp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_A25__HDMI_TX_CEC_LINE 0x1f8b0
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_hdmi_cec_2: hdmicecgrp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0
-+                                              >;
-+                                      };
-+                              };
-+
-+                              i2c1 {
-+                                      pinctrl_i2c1_1: i2c1grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1
-+                                                      MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_i2c1_2: i2c1grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_CSI0_DAT8__I2C1_SDA 0x4001b8b1
-+                                                      MX6QDL_PAD_CSI0_DAT9__I2C1_SCL 0x4001b8b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              i2c2 {
-+                                      pinctrl_i2c2_1: i2c2grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_EB2__I2C2_SCL 0x4001b8b1
-+                                                      MX6QDL_PAD_EIM_D16__I2C2_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_i2c2_2: i2c2grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1
-+                                                      MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_i2c2_3: i2c2grp-3 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_EB2__I2C2_SCL  0x4001b8b1
-+                                                      MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              i2c3 {
-+                                      pinctrl_i2c3_1: i2c3grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_D17__I2C3_SCL 0x4001b8b1
-+                                                      MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_i2c3_2: i2c3grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
-+                                                      MX6QDL_PAD_GPIO_6__I2C3_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_i2c3_3: i2c3grp-3 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_GPIO_5__I2C3_SCL  0x4001b8b1
-+                                                      MX6QDL_PAD_GPIO_16__I2C3_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_i2c3_4: i2c3grp-4 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_GPIO_3__I2C3_SCL  0x4001b8b1
-+                                                      MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              ipu1 {
-+                                      pinctrl_ipu1_1: ipu1grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_DI0_DISP_CLK__IPU1_DI0_DISP_CLK 0x10
-+                                                      MX6QDL_PAD_DI0_PIN15__IPU1_DI0_PIN15       0x10
-+                                                      MX6QDL_PAD_DI0_PIN2__IPU1_DI0_PIN02        0x10
-+                                                      MX6QDL_PAD_DI0_PIN3__IPU1_DI0_PIN03        0x10
-+                                                      MX6QDL_PAD_DI0_PIN4__IPU1_DI0_PIN04        0x80000000
-+                                                      MX6QDL_PAD_DISP0_DAT0__IPU1_DISP0_DATA00   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT1__IPU1_DISP0_DATA01   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT2__IPU1_DISP0_DATA02   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT3__IPU1_DISP0_DATA03   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT4__IPU1_DISP0_DATA04   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT5__IPU1_DISP0_DATA05   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT6__IPU1_DISP0_DATA06   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT7__IPU1_DISP0_DATA07   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT8__IPU1_DISP0_DATA08   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT9__IPU1_DISP0_DATA09   0x10
-+                                                      MX6QDL_PAD_DISP0_DAT10__IPU1_DISP0_DATA10  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT11__IPU1_DISP0_DATA11  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT12__IPU1_DISP0_DATA12  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT13__IPU1_DISP0_DATA13  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT14__IPU1_DISP0_DATA14  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT15__IPU1_DISP0_DATA15  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT16__IPU1_DISP0_DATA16  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT17__IPU1_DISP0_DATA17  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT18__IPU1_DISP0_DATA18  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT19__IPU1_DISP0_DATA19  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT20__IPU1_DISP0_DATA20  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT21__IPU1_DISP0_DATA21  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT22__IPU1_DISP0_DATA22  0x10
-+                                                      MX6QDL_PAD_DISP0_DAT23__IPU1_DISP0_DATA23  0x10
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_ipu1_2: ipu1grp-2 { /* parallel camera */
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12    0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13    0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14    0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15    0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16    0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17    0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18    0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19    0x80000000
-+                                                      MX6QDL_PAD_CSI0_DATA_EN__IPU1_CSI0_DATA_EN 0x80000000
-+                                                      MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK   0x80000000
-+                                                      MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC      0x80000000
-+                                                      MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC     0x80000000
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_ipu1_3: ipu1grp-3 { /* parallel port 16-bit */
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_CSI0_DAT4__IPU1_CSI0_DATA04   0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT5__IPU1_CSI0_DATA05   0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT6__IPU1_CSI0_DATA06   0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT7__IPU1_CSI0_DATA07   0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT8__IPU1_CSI0_DATA08   0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT9__IPU1_CSI0_DATA09   0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT10__IPU1_CSI0_DATA10  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT11__IPU1_CSI0_DATA11  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT13__IPU1_CSI0_DATA13  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT14__IPU1_CSI0_DATA14  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT15__IPU1_CSI0_DATA15  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT16__IPU1_CSI0_DATA16  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT17__IPU1_CSI0_DATA17  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT18__IPU1_CSI0_DATA18  0x80000000
-+                                                      MX6QDL_PAD_CSI0_DAT19__IPU1_CSI0_DATA19  0x80000000
-+                                                      MX6QDL_PAD_CSI0_PIXCLK__IPU1_CSI0_PIXCLK 0x80000000
-+                                                      MX6QDL_PAD_CSI0_MCLK__IPU1_CSI0_HSYNC    0x80000000
-+                                                      MX6QDL_PAD_CSI0_VSYNC__IPU1_CSI0_VSYNC   0x80000000
-+                                              >;
-+                                      };
-+                              };
-+
-+                              mlb {
-+                                      pinctrl_mlb_1: mlbgrp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_GPIO_3__MLB_CLK  0x71
-+                                                      MX6QDL_PAD_GPIO_6__MLB_SIG  0x71
-+                                                      MX6QDL_PAD_GPIO_2__MLB_DATA 0x71
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_mlb_2: mlbgrp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_ENET_TXD1__MLB_CLK 0x71
-+                                                      MX6QDL_PAD_GPIO_6__MLB_SIG    0x71
-+                                                      MX6QDL_PAD_GPIO_2__MLB_DATA   0x71
-+                                              >;
-+                                      };
-+                              };
-+
-+                              pwm0 {
-+                                      pinctrl_pwm0_1: pwm0grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              pwm3 {
-+                                      pinctrl_pwm3_1: pwm3grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD4_DAT1__PWM3_OUT 0x1b0b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              spdif {
-+                                      pinctrl_spdif_1: spdifgrp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_KEY_COL3__SPDIF_IN 0x1b0b0
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_spdif_2: spdifgrp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_GPIO_16__SPDIF_IN  0x1b0b0
-+                                                      MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x1b0b0
-+                                              >;
-+                                      };
-+                              };
-+
-+                              uart1 {
-+                                      pinctrl_uart1_1: uart1grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
-+                                                      MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              uart2 {
-+                                      pinctrl_uart2_1: uart2grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_D26__UART2_TX_DATA 0x1b0b1
-+                                                      MX6QDL_PAD_EIM_D27__UART2_RX_DATA 0x1b0b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_uart2_2: uart2grp-2 { /* DTE mode */
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_D26__UART2_RX_DATA   0x1b0b1
-+                                                      MX6QDL_PAD_EIM_D27__UART2_TX_DATA   0x1b0b1
-+                                                      MX6QDL_PAD_EIM_D28__UART2_DTE_CTS_B 0x1b0b1
-+                                                      MX6QDL_PAD_EIM_D29__UART2_DTE_RTS_B 0x1b0b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              uart3 {
-+                                      pinctrl_uart3_1: uart3grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD4_CLK__UART3_RX_DATA 0x1b0b1
-+                                                      MX6QDL_PAD_SD4_CMD__UART3_TX_DATA 0x1b0b1
-+                                                      MX6QDL_PAD_EIM_D30__UART3_CTS_B   0x1b0b1
-+                                                      MX6QDL_PAD_EIM_EB3__UART3_RTS_B   0x1b0b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_uart3_2: uart3grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1
-+                                                      MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1
-+                                                      MX6QDL_PAD_EIM_D23__UART3_CTS_B   0x1b0b1
-+                                                      MX6QDL_PAD_EIM_EB3__UART3_RTS_B   0x1b0b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              uart4 {
-+                                      pinctrl_uart4_1: uart4grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_KEY_COL0__UART4_TX_DATA 0x1b0b1
-+                                                      MX6QDL_PAD_KEY_ROW0__UART4_RX_DATA 0x1b0b1
-+                                              >;
-+                                      };
-+                              };
-+
-+                              usbotg {
-+                                      pinctrl_usbotg_1: usbotggrp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x17059
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_usbotg_2: usbotggrp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_ENET_RX_ER__USB_OTG_ID 0x17059
-+                                              >;
-+                                      };
-+                              };
-+
-+                              usbh2 {
-+                                      pinctrl_usbh2_1: usbh2grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_RGMII_TXC__USB_H2_DATA      0x40013030
-+                                                      MX6QDL_PAD_RGMII_TX_CTL__USB_H2_STROBE 0x40013030
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_usbh2_2: usbh2grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_RGMII_TX_CTL__USB_H2_STROBE 0x40017030
-+                                              >;
-+                                      };
-+                              };
-+
-+                              usbh3 {
-+                                      pinctrl_usbh3_1: usbh3grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_RGMII_RX_CTL__USB_H3_DATA 0x40013030
-+                                                      MX6QDL_PAD_RGMII_RXC__USB_H3_STROBE  0x40013030
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_usbh3_2: usbh3grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_RGMII_RXC__USB_H3_STROBE 0x40017030
-+                                              >;
-+                                      };
-+                              };
-+
-+                              usdhc1 {
-+                                      pinctrl_usdhc1_1: usdhc1grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD1_CMD__SD1_CMD    0x17059
-+                                                      MX6QDL_PAD_SD1_CLK__SD1_CLK    0x10059
-+                                                      MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059
-+                                                      MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059
-+                                                      MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059
-+                                                      MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059
-+                                                      MX6QDL_PAD_NANDF_D0__SD1_DATA4 0x17059
-+                                                      MX6QDL_PAD_NANDF_D1__SD1_DATA5 0x17059
-+                                                      MX6QDL_PAD_NANDF_D2__SD1_DATA6 0x17059
-+                                                      MX6QDL_PAD_NANDF_D3__SD1_DATA7 0x17059
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_usdhc1_2: usdhc1grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD1_CMD__SD1_CMD    0x17059
-+                                                      MX6QDL_PAD_SD1_CLK__SD1_CLK    0x10059
-+                                                      MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059
-+                                                      MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059
-+                                                      MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059
-+                                                      MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059
-+                                              >;
-+                                      };
-+                              };
-+
-+                              usdhc2 {
-+                                      pinctrl_usdhc2_1: usdhc2grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD2_CMD__SD2_CMD    0x17059
-+                                                      MX6QDL_PAD_SD2_CLK__SD2_CLK    0x10059
-+                                                      MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
-+                                                      MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
-+                                                      MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
-+                                                      MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
-+                                                      MX6QDL_PAD_NANDF_D4__SD2_DATA4 0x17059
-+                                                      MX6QDL_PAD_NANDF_D5__SD2_DATA5 0x17059
-+                                                      MX6QDL_PAD_NANDF_D6__SD2_DATA6 0x17059
-+                                                      MX6QDL_PAD_NANDF_D7__SD2_DATA7 0x17059
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_usdhc2_2: usdhc2grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD2_CMD__SD2_CMD    0x17059
-+                                                      MX6QDL_PAD_SD2_CLK__SD2_CLK    0x10059
-+                                                      MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059
-+                                                      MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059
-+                                                      MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059
-+                                                      MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059
-+                                              >;
-+                                      };
-+                              };
-+
-+                              usdhc3 {
-+                                      pinctrl_usdhc3_1: usdhc3grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD3_CMD__SD3_CMD    0x17059
-+                                                      MX6QDL_PAD_SD3_CLK__SD3_CLK    0x10059
-+                                                      MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT4__SD3_DATA4 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT5__SD3_DATA5 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT6__SD3_DATA6 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT7__SD3_DATA7 0x17059
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_usdhc3_2: usdhc3grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD3_CMD__SD3_CMD    0x17059
-+                                                      MX6QDL_PAD_SD3_CLK__SD3_CLK    0x10059
-+                                                      MX6QDL_PAD_SD3_DAT0__SD3_DATA0 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT1__SD3_DATA1 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT2__SD3_DATA2 0x17059
-+                                                      MX6QDL_PAD_SD3_DAT3__SD3_DATA3 0x17059
-+                                              >;
-+                                      };
-+                              };
-+
-+                              usdhc4 {
-+                                      pinctrl_usdhc4_1: usdhc4grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD4_CMD__SD4_CMD    0x17059
-+                                                      MX6QDL_PAD_SD4_CLK__SD4_CLK    0x10059
-+                                                      MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT4__SD4_DATA4 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT5__SD4_DATA5 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT6__SD4_DATA6 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT7__SD4_DATA7 0x17059
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_usdhc4_2: usdhc4grp-2 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_SD4_CMD__SD4_CMD    0x17059
-+                                                      MX6QDL_PAD_SD4_CLK__SD4_CLK    0x10059
-+                                                      MX6QDL_PAD_SD4_DAT0__SD4_DATA0 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT1__SD4_DATA1 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT2__SD4_DATA2 0x17059
-+                                                      MX6QDL_PAD_SD4_DAT3__SD4_DATA3 0x17059
-+                                              >;
-+                                      };
-+                              };
-+
-+                              weim {
-+                                      pinctrl_weim_cs0_1: weim_cs0grp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_CS0__EIM_CS0_B   0xb0b1
-+                                              >;
-+                                      };
-+
-+                                      pinctrl_weim_nor_1: weim_norgrp-1 {
-+                                              fsl,pins = <
-+                                                      MX6QDL_PAD_EIM_OE__EIM_OE_B     0xb0b1
-+                                                      MX6QDL_PAD_EIM_RW__EIM_RW       0xb0b1
-+                                                      MX6QDL_PAD_EIM_WAIT__EIM_WAIT_B 0xb060
-+                                                      /* data */
-+                                                      MX6QDL_PAD_EIM_D16__EIM_DATA16 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D17__EIM_DATA17 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D18__EIM_DATA18 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D19__EIM_DATA19 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D20__EIM_DATA20 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D21__EIM_DATA21 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D22__EIM_DATA22 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D23__EIM_DATA23 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D24__EIM_DATA24 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D25__EIM_DATA25 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D26__EIM_DATA26 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D27__EIM_DATA27 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D28__EIM_DATA28 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D29__EIM_DATA29 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D30__EIM_DATA30 0x1b0b0
-+                                                      MX6QDL_PAD_EIM_D31__EIM_DATA31 0x1b0b0
-+                                                      /* address */
-+                                                      MX6QDL_PAD_EIM_A23__EIM_ADDR23 0xb0b1
-+                                                      MX6QDL_PAD_EIM_A22__EIM_ADDR22 0xb0b1
-+                                                      MX6QDL_PAD_EIM_A21__EIM_ADDR21 0xb0b1
-+                                                      MX6QDL_PAD_EIM_A20__EIM_ADDR20 0xb0b1
-+                                                      MX6QDL_PAD_EIM_A19__EIM_ADDR19 0xb0b1
-+                                                      MX6QDL_PAD_EIM_A18__EIM_ADDR18 0xb0b1
-+                                                      MX6QDL_PAD_EIM_A17__EIM_ADDR17 0xb0b1
-+                                                      MX6QDL_PAD_EIM_A16__EIM_ADDR16 0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA15__EIM_AD15  0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA14__EIM_AD14  0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA13__EIM_AD13  0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA12__EIM_AD12  0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA11__EIM_AD11  0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA10__EIM_AD10  0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA9__EIM_AD09   0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA8__EIM_AD08   0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA7__EIM_AD07   0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA6__EIM_AD06   0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA5__EIM_AD05   0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA4__EIM_AD04   0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA3__EIM_AD03   0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA2__EIM_AD02   0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA1__EIM_AD01   0xb0b1
-+                                                      MX6QDL_PAD_EIM_DA0__EIM_AD00   0xb0b1
-+                                              >;
-+                                      };
-+                              };
-+                      };
-+
-                       ldb: ldb@020e0008 {
-                               #address-cells = <1>;
-                               #size-cells = <0>;
-@@ -553,13 +1292,11 @@
-                               lvds-channel@0 {
-                                       reg = <0>;
--                                      crtcs = <&ipu1 0>;
-                                       status = "disabled";
-                               };
-                               lvds-channel@1 {
-                                       reg = <1>;
--                                      crtcs = <&ipu1 1>;
-                                       status = "disabled";
-                               };
-                       };
-@@ -580,6 +1317,7 @@
-                               interrupts = <0 2 0x04>;
-                               clocks = <&clks 155>, <&clks 155>;
-                               clock-names = "ipg", "ahb";
-+                              #dma-cells = <3>;
-                               fsl,sdma-ram-script-name = "imx/sdma/sdma-imx6q.bin";
-                       };
-               };
-@@ -638,7 +1376,7 @@
-                               status = "disabled";
-                       };
--                      usbmisc: usbmisc: usbmisc@02184800 {
-+                      usbmisc: usbmisc@02184800 {
-                               #index-cells = <1>;
-                               compatible = "fsl,imx6q-usbmisc";
-                               reg = <0x02184800 0x200>;
-@@ -742,21 +1480,18 @@
-                               reg = <0x021b4000 0x4000>;
-                       };
--                      weim@021b8000 {
-+                      weim: weim@021b8000 {
-+                              compatible = "fsl,imx6q-weim";
-                               reg = <0x021b8000 0x4000>;
-                               interrupts = <0 14 0x04>;
-+                              clocks = <&clks 196>;
-                       };
--                      ocotp@021bc000 {
--                              compatible = "fsl,imx6q-ocotp";
-+                      ocotp: ocotp@021bc000 {
-+                              compatible = "fsl,imx6q-ocotp", "syscon";
-                               reg = <0x021bc000 0x4000>;
-                       };
--                      ocotp@021c0000 {
--                              reg = <0x021c0000 0x4000>;
--                              interrupts = <0 21 0x04>;
--                      };
--
-                       tzasc@021d0000 { /* TZASC1 */
-                               reg = <0x021d0000 0x4000>;
-                               interrupts = <0 108 0x04>;
-@@ -792,6 +1527,8 @@
-                               interrupts = <0 27 0x04>;
-                               clocks = <&clks 160>, <&clks 161>;
-                               clock-names = "ipg", "per";
-+                              dmas = <&sdma 27 4 0>, <&sdma 28 4 0>;
-+                              dma-names = "rx", "tx";
-                               status = "disabled";
-                       };
-@@ -801,6 +1538,8 @@
-                               interrupts = <0 28 0x04>;
-                               clocks = <&clks 160>, <&clks 161>;
-                               clock-names = "ipg", "per";
-+                              dmas = <&sdma 29 4 0>, <&sdma 30 4 0>;
-+                              dma-names = "rx", "tx";
-                               status = "disabled";
-                       };
-@@ -810,6 +1549,8 @@
-                               interrupts = <0 29 0x04>;
-                               clocks = <&clks 160>, <&clks 161>;
-                               clock-names = "ipg", "per";
-+                              dmas = <&sdma 31 4 0>, <&sdma 32 4 0>;
-+                              dma-names = "rx", "tx";
-                               status = "disabled";
-                       };
-@@ -819,6 +1560,8 @@
-                               interrupts = <0 30 0x04>;
-                               clocks = <&clks 160>, <&clks 161>;
-                               clock-names = "ipg", "per";
-+                              dmas = <&sdma 33 4 0>, <&sdma 34 4 0>;
-+                              dma-names = "rx", "tx";
-                               status = "disabled";
-                       };
-               };
diff --git a/src/patches/kernel/wandboard/dts/0002-ARM-dts-imx6qdl-wandboard-add-gpio-lines-to-wandboar.patch b/src/patches/kernel/wandboard/dts/0002-ARM-dts-imx6qdl-wandboard-add-gpio-lines-to-wandboar.patch
deleted file mode 100644 (file)
index 009db26..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-From df41a18b5ac1401c96dcbce99baa50e339494eba Mon Sep 17 00:00:00 2001
-From: Mike Panetta <panetta.mike@gmail.com>
-Date: Tue, 30 Jul 2013 20:33:26 -0400
-Subject: [PATCH 2/5] ARM: dts: imx6qdl-wandboard: add gpio lines to wandboard
-
-Signed-off-by: Mike Panetta <panetta.mike@gmail.com>
----
- arch/arm/boot/dts/imx6qdl-wandboard.dtsi | 17 +++++++++++++++++
- 1 file changed, 17 insertions(+)
-
-diff --git a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-index 35f5479..a302e95 100644
---- a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-+++ b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-@@ -92,6 +92,23 @@
-                       >;
-               };
-       };
-+
-+      gpio {
-+              pinctrl_gpio: gpiogrp {
-+                      fsl,pins = <
-+                              MX6QDL_PAD_EIM_DA12__GPIO3_IO12   0x80000000 /* GPIO3_12 EDM pin 255 */
-+                              MX6QDL_PAD_EIM_DA11__GPIO3_IO11   0x80000000 /* GPIO3_11 EDM pin 256 */
-+                              MX6QDL_PAD_EIM_DA10__GPIO3_IO10   0x80000000 /* GPIO3_10 EDM pin 257 */
-+                              MX6QDL_PAD_EIM_D27__GPIO3_IO27    0x80000000 /* GPIO3_27 EDM pin 258 */
-+                              MX6QDL_PAD_EIM_D26__GPIO3_IO26    0x80000000 /* GPIO3_26 EDM pin 259 */
-+                              MX6QDL_PAD_EIM_BCLK__GPIO6_IO31   0x80000000 /* GPIO6_31 EDM pin 260 */
-+                              MX6QDL_PAD_EIM_DA8__GPIO3_IO08    0x80000000 /* GPIO3_8  EDM pin 261 */
-+                              MX6QDL_PAD_ENET_RX_ER__GPIO1_IO24 0x80000000 /* GPIO1_24 EDM pin 262 */
-+                              MX6QDL_PAD_GPIO_19__GPIO4_IO05    0x80000000 /* GPIO4_5  EDM pin 263 */
-+                              MX6QDL_PAD_SD3_RST__GPIO7_IO08    0x80000000 /* GPIO7_8  EDM pin 264 */
-+                      >;
-+              };
-+      };
- };
- &fec {
--- 
-1.8.4.rc3
-
diff --git a/src/patches/kernel/wandboard/dts/0003-ARM-dts-imx6qdl-wandboard-Add-support-for-i2c1.patch b/src/patches/kernel/wandboard/dts/0003-ARM-dts-imx6qdl-wandboard-Add-support-for-i2c1.patch
deleted file mode 100644 (file)
index 7c4e5dd..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-From aefbac1e9377311240656ae5061346acb8612e1b Mon Sep 17 00:00:00 2001
-From: Michael Panetta <panetta.mike@gmail.com>
-Date: Tue, 6 Aug 2013 21:32:50 -0400
-Subject: [PATCH 3/5] ARM: dts: imx6qdl-wandboard: Add support for i2c1.
-
-This patch adds support for i2c1 to the wandboard common dtsi file.
-
-Signed-off-by: Michael Panetta <panetta.mike@gmail.com>
----
- arch/arm/boot/dts/imx6qdl-wandboard.dtsi | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-index a302e95..d429c0b 100644
---- a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-+++ b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-@@ -58,6 +58,13 @@
-       status = "okay";
- };
-+&i2c1 {
-+      clock-frequency = <100000>;
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_i2c1_1>;
-+      status = "okay";
-+};
-+
- &i2c2 {
-       clock-frequency = <100000>;
-       pinctrl-names = "default";
--- 
-1.8.4.rc3
-
diff --git a/src/patches/kernel/wandboard/dts/0004-ARM-dts-wandboard-add-binding-for-wand-rfkill-driver.patch b/src/patches/kernel/wandboard/dts/0004-ARM-dts-wandboard-add-binding-for-wand-rfkill-driver.patch
deleted file mode 100644 (file)
index 54bb388..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-From 1305ac7e9308dcd59c3acc205bc95097cad87ed5 Mon Sep 17 00:00:00 2001
-From: Vladimir Ermakov <vooon341@gmail.com>
-Date: Fri, 16 Aug 2013 06:52:26 +0400
-Subject: [PATCH 5/5] ARM: dts: wandboard: add binding for wand-rfkill driver
-
-Required gpios pincontrol selected in hog. Add binding only.
-Disabled non-removable, because after unblocking need to redetect SDIO device.
-
-Signed-off-by: Vladimir Ermakov <vooon341@gmail.com>
----
- arch/arm/boot/dts/imx6qdl-wandboard.dtsi | 18 +++++++++++++++++-
- 1 file changed, 17 insertions(+), 1 deletion(-)
-
-diff --git a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-index 737805b..c1ef3bd 100644
---- a/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-+++ b/arch/arm/boot/dts/imx6qdl-wandboard.dtsi
-@@ -50,6 +50,22 @@
-               spdif-controller = <&spdif>;
-               spdif-out;
-       };
-+
-+      rfkill {
-+              compatible = "wand,imx6qdl-wandboard-rfkill";
-+              pinctrl-names = "default";
-+              pinctrl-0 = <>;
-+
-+              bluetooth-on = <&gpio3 13 0>;
-+              bluetooth-wake = <&gpio3 14 0>;
-+              bluetooth-host-wake = <&gpio3 15 0>;
-+
-+              wifi-ref-on = <&gpio2 29 0>;
-+              wifi-rst-n = <&gpio5 2 0>;
-+              wifi-reg-on = <&gpio1 26 0>;
-+              wifi-host-wake = <&gpio1 29 0>;
-+              wifi-wake = <&gpio1 30 0>;
-+      };
- };
- &audmux {
-@@ -175,7 +191,7 @@
- &usdhc2 {
-       pinctrl-names = "default";
-       pinctrl-0 = <&pinctrl_usdhc2_2>;
--      non-removable;
-+      //non-removable;
-       status = "okay";
- };
--- 
-1.8.4.rc3
-
diff --git a/src/patches/kernel/wandboard/dts/0005-ARM-dts-imx6qdl-add-pcie-device-node.patch b/src/patches/kernel/wandboard/dts/0005-ARM-dts-imx6qdl-add-pcie-device-node.patch
deleted file mode 100644 (file)
index e78d9ba..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-From 3a57291fa4ca7f7647d826f5b47082ef306d839f Mon Sep 17 00:00:00 2001
-From: Sean Cross <xobs@kosagi.com>
-Date: Thu, 26 Sep 2013 10:51:09 +0800
-Subject: [PATCH] ARM: dts: imx6qdl: add pcie device node
-
-Add pcie device node for imx6qdl.
-
-Signed-off-by: Sean Cross <xobs@kosagi.com>
-Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
----
- arch/arm/boot/dts/imx6qdl.dtsi | 16 ++++++++++++++++
- 1 file changed, 16 insertions(+)
-
---- a/arch/arm/boot/dts/imx6qdl.dtsi
-+++ b/arch/arm/boot/dts/imx6qdl.dtsi
-@@ -108,6 +108,22 @@
-                       cache-level = <2>;
-               };
-+              pcie: pcie@0x01000000 {
-+                      compatible = "fsl,imx6q-pcie", "snps,dw-pcie";
-+                      reg = <0x01ffc000 0x4000>; /* DBI */
-+                      #address-cells = <3>;
-+                      #size-cells = <2>;
-+                      device_type = "pci";
-+                      ranges = <0x00000800 0 0x01f00000 0x01f00000 0 0x00080000 /* configuration space */
-+                                0x81000000 0 0          0x01f80000 0 0x00010000 /* downstream I/O */
-+                                0x82000000 0 0x01000000 0x01000000 0 0x00f00000>; /* non-prefetchable memory */
-+                      num-lanes = <1>;
-+                      interrupts = <0 123 0x04>;
-+                      clocks = <&clks 189>, <&clks 187>, <&clks 206>, <&clks 144>;
-+                      clock-names = "pcie_ref_125m", "sata_ref_100m", "lvds_gate", "pcie_axi";
-+                      status = "disabled";
-+              };
-+
-               pmu {
-                       compatible = "arm,cortex-a9-pmu";
-                       interrupts = <0 94 0x04>;
diff --git a/src/patches/kernel/wandboard/imx/0001-i2c-imx-retry-on-NAK.patch b/src/patches/kernel/wandboard/imx/0001-i2c-imx-retry-on-NAK.patch
deleted file mode 100644 (file)
index e876c6e..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-From: Tim Harvey <tharvey@gateworks.com>
-Subject: [PATCH] i2c: imx: retry on NAK
-
-In case of busy i2c try again to get ACK.
-
-Signed-off-by: Tim Harvey <tharvey@gateworks.com>
-Tested-by: Luka Perkov <luka@openwrt.org>
----
- drivers/i2c/busses/i2c-imx.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
---- a/drivers/i2c/busses/i2c-imx.c
-+++ b/drivers/i2c/busses/i2c-imx.c
-@@ -62,6 +62,7 @@
- /* Default value */
- #define IMX_I2C_BIT_RATE      100000  /* 100kHz */
-+#define IMX_I2C_MAX_RETRIES   3       /* number of retries to attempt */
- /* IMX I2C registers */
- #define IMX_I2C_IADR  0x00    /* i2c slave address */
-@@ -198,7 +199,7 @@ static int i2c_imx_acked(struct imx_i2c_
- {
-       if (readb(i2c_imx->base + IMX_I2C_I2SR) & I2SR_RXAK) {
-               dev_dbg(&i2c_imx->adapter.dev, "<%s> No ACK\n", __func__);
--              return -EIO;  /* No ACK */
-+              return -EAGAIN; /* try again */
-       }
-       dev_dbg(&i2c_imx->adapter.dev, "<%s> ACK received\n", __func__);
-@@ -533,6 +534,7 @@ static int __init i2c_imx_probe(struct p
-       i2c_imx->adapter.dev.parent     = &pdev->dev;
-       i2c_imx->adapter.nr             = pdev->id;
-       i2c_imx->adapter.dev.of_node    = pdev->dev.of_node;
-+      i2c_imx->adapter.retries        = IMX_I2C_MAX_RETRIES;
-       i2c_imx->base                   = base;
-       pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
diff --git a/src/patches/kernel/wandboard/imx/0002-i.MX6-Wandboard-add-CKO1-clock-output.patch b/src/patches/kernel/wandboard/imx/0002-i.MX6-Wandboard-add-CKO1-clock-output.patch
deleted file mode 100644 (file)
index b24c7ad..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-From fc69065e84165aef5ba7a837d9d2e668bd03b146 Mon Sep 17 00:00:00 2001
-From: Vladimir Ermakov <vooon341@gmail.com>
-Date: Wed, 10 Jul 2013 03:03:51 +0400
-Subject: [PATCH 7/8] i.MX6 Wandboard add CKO1 clock output
-
-stgl5000 uses clock from imx CKO1 pad.
-
-Signed-off-by: Vladimir Ermakov <vooon341@gmail.com>
----
- arch/arm/mach-imx/mach-imx6q.c |    3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
-index 5536fd8..bf9a30b 100644
---- a/arch/arm/mach-imx/mach-imx6q.c
-+++ b/arch/arm/mach-imx/mach-imx6q.c
-@@ -166,6 +166,9 @@ static void __init imx6q_init_machine(void)
-       if (of_machine_is_compatible("fsl,imx6q-sabrelite"))
-               imx6q_sabrelite_init();
-+      if (of_machine_is_compatible("wand,imx6q-wandboard"))
-+              imx6q_sabrelite_cko1_setup();
-+
-       of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
-       imx_anatop_init();
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/wandboard/imx/0003-thermal-add-imx-thermal-driver-support.patch b/src/patches/kernel/wandboard/imx/0003-thermal-add-imx-thermal-driver-support.patch
deleted file mode 100644 (file)
index a0a7cec..0000000
+++ /dev/null
@@ -1,489 +0,0 @@
-From 744af645bfdb0bfe73fa28df06da48783f85e6a9 Mon Sep 17 00:00:00 2001
-From: Shawn Guo <shawn.guo@linaro.org>
-Date: Mon, 24 Jun 2013 14:30:44 +0800
-Subject: [PATCH 5/5] thermal: add imx thermal driver support
-
-This is based on the initial imx thermal work done by
-Rob Lee <rob.lee@linaro.org> (Not sure if the email address is still
-valid).  Since he is no longer interested in the work and I have
-rewritten a significant amount of the code, I just took the authorship
-over from him.
-
-It adds the imx thermal support using Temperature Monitor (TEMPMON)
-block found on some Freescale i.MX SoCs.  The driver uses syscon regmap
-interface to access TEMPMON control registers and calibration data, and
-supports cpufreq as the cooling device.
-
-Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
----
- .../devicetree/bindings/thermal/imx-thermal.txt    |   17 +
- drivers/thermal/Kconfig                            |   11 +
- drivers/thermal/Makefile                           |    1 +
- drivers/thermal/imx_thermal.c                      |  397 ++++++++++++++++++++
- 4 files changed, 426 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/thermal/imx-thermal.txt
- create mode 100644 drivers/thermal/imx_thermal.c
-
-diff --git a/Documentation/devicetree/bindings/thermal/imx-thermal.txt b/Documentation/devicetree/bindings/thermal/imx-thermal.txt
-new file mode 100644
-index 0000000..541c25e
---- /dev/null
-+++ b/Documentation/devicetree/bindings/thermal/imx-thermal.txt
-@@ -0,0 +1,17 @@
-+* Temperature Monitor (TEMPMON) on Freescale i.MX SoCs
-+
-+Required properties:
-+- compatible : "fsl,imx6q-thermal"
-+- fsl,tempmon : phandle pointer to system controller that contains TEMPMON
-+  control registers, e.g. ANATOP on imx6q.
-+- fsl,tempmon-data : phandle pointer to fuse controller that contains TEMPMON
-+  calibration data, e.g. OCOTP on imx6q.  The details about calibration data
-+  can be found in SoC Reference Manual.
-+
-+Example:
-+
-+tempmon {
-+      compatible = "fsl,imx6q-tempmon";
-+      fsl,tempmon = <&anatop>;
-+      fsl,tempmon-data = <&ocotp>;
-+};
-diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
-index 5e3c025..e91d78f 100644
---- a/drivers/thermal/Kconfig
-+++ b/drivers/thermal/Kconfig
-@@ -91,6 +91,17 @@ config THERMAL_EMULATION
-         because userland can easily disable the thermal policy by simply
-         flooding this sysfs node with low temperature values.
-+config IMX_THERMAL
-+      tristate "Temperature sensor driver for Freescale i.MX SoCs"
-+      depends on CPU_THERMAL
-+      depends on MFD_SYSCON
-+      depends on OF
-+      help
-+        Support for Temperature Monitor (TEMPMON) found on Freescale i.MX SoCs.
-+        It supports one critical trip point and one passive trip point.  The
-+        cpufreq is used as the cooling device to throttle CPUs when the
-+        passive trip is crossed.
-+
- config SPEAR_THERMAL
-       bool "SPEAr thermal sensor driver"
-       depends on PLAT_SPEAR
-diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
-index c054d41..6910b2d 100644
---- a/drivers/thermal/Makefile
-+++ b/drivers/thermal/Makefile
-@@ -21,6 +21,7 @@ obj-$(CONFIG_EXYNOS_THERMAL) += exynos_thermal.o
- obj-$(CONFIG_DOVE_THERMAL)    += dove_thermal.o
- obj-$(CONFIG_DB8500_THERMAL)  += db8500_thermal.o
- obj-$(CONFIG_ARMADA_THERMAL)  += armada_thermal.o
-+obj-$(CONFIG_IMX_THERMAL)     += imx_thermal.o
- obj-$(CONFIG_DB8500_CPUFREQ_COOLING)  += db8500_cpufreq_cooling.o
- obj-$(CONFIG_INTEL_POWERCLAMP)        += intel_powerclamp.o
-diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
-new file mode 100644
-index 0000000..d16c33c
---- /dev/null
-+++ b/drivers/thermal/imx_thermal.c
-@@ -0,0 +1,397 @@
-+/*
-+ * Copyright 2013 Freescale Semiconductor, Inc.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/cpu_cooling.h>
-+#include <linux/cpufreq.h>
-+#include <linux/delay.h>
-+#include <linux/device.h>
-+#include <linux/init.h>
-+#include <linux/io.h>
-+#include <linux/kernel.h>
-+#include <linux/mfd/syscon.h>
-+#include <linux/module.h>
-+#include <linux/of.h>
-+#include <linux/platform_device.h>
-+#include <linux/regmap.h>
-+#include <linux/slab.h>
-+#include <linux/thermal.h>
-+#include <linux/types.h>
-+
-+#define REG_SET               0x4
-+#define REG_CLR               0x8
-+#define REG_TOG               0xc
-+
-+#define MISC0                         0x0150
-+#define MISC0_REFTOP_SELBIASOFF               (1 << 3)
-+
-+#define TEMPSENSE0                    0x0180
-+#define TEMPSENSE0_TEMP_CNT_SHIFT     8
-+#define TEMPSENSE0_TEMP_CNT_MASK      (0xfff << TEMPSENSE0_TEMP_CNT_SHIFT)
-+#define TEMPSENSE0_FINISHED           (1 << 2)
-+#define TEMPSENSE0_MEASURE_TEMP               (1 << 1)
-+#define TEMPSENSE0_POWER_DOWN         (1 << 0)
-+
-+#define TEMPSENSE1                    0x0190
-+#define TEMPSENSE1_MEASURE_FREQ               0xffff
-+
-+#define OCOTP_ANA1                    0x04e0
-+
-+/* The driver supports 1 passive trip point and 1 critical trip point */
-+enum imx_thermal_trip {
-+      IMX_TRIP_PASSIVE,
-+      IMX_TRIP_CRITICAL,
-+      IMX_TRIP_NUM,
-+};
-+
-+/*
-+ * It defines the temperature in millicelsius for passive trip point
-+ * that will trigger cooling action when crossed.
-+ */
-+#define IMX_TEMP_PASSIVE              85000
-+
-+/*
-+ * The maximum die temperature on imx parts is 105C, let's give some cushion
-+ * for noise and possible temperature rise between measurements.
-+ */
-+#define IMX_TEMP_CRITICAL             100000
-+
-+#define IMX_POLLING_DELAY             2000 /* millisecond */
-+#define IMX_PASSIVE_DELAY             1000
-+
-+struct imx_thermal_data {
-+      struct thermal_zone_device *tz;
-+      struct thermal_cooling_device *cdev;
-+      enum thermal_device_mode mode;
-+      struct regmap *tempmon;
-+      int c1, c2; /* See formula in imx_get_sensor_data() */
-+};
-+
-+static int imx_get_temp(struct thermal_zone_device *tz, unsigned long *temp)
-+{
-+      struct imx_thermal_data *data = tz->devdata;
-+      struct regmap *map = data->tempmon;
-+      static unsigned long last_temp;
-+      unsigned int n_meas;
-+      u32 val;
-+
-+      /*
-+       * Every time we measure the temperature, we will power on the
-+       * temperature sensor, enable measurements, take a reading,
-+       * disable measurements, power off the temperature sensor.
-+       */
-+      regmap_write(map, TEMPSENSE0 + REG_CLR, TEMPSENSE0_POWER_DOWN);
-+      regmap_write(map, TEMPSENSE0 + REG_SET, TEMPSENSE0_MEASURE_TEMP);
-+
-+      /*
-+       * According to the temp sensor designers, it may require up to ~17us
-+       * to complete a measurement.
-+       */
-+      usleep_range(20, 50);
-+
-+      regmap_read(map, TEMPSENSE0, &val);
-+      regmap_write(map, TEMPSENSE0 + REG_CLR, TEMPSENSE0_MEASURE_TEMP);
-+      regmap_write(map, TEMPSENSE0 + REG_SET, TEMPSENSE0_POWER_DOWN);
-+
-+      if ((val & TEMPSENSE0_FINISHED) == 0) {
-+              dev_dbg(&tz->device, "temp measurement never finished\n");
-+              return -EAGAIN;
-+      }
-+
-+      n_meas = (val & TEMPSENSE0_TEMP_CNT_MASK) >> TEMPSENSE0_TEMP_CNT_SHIFT;
-+
-+      /* See imx_get_sensor_data() for formula derivation */
-+      *temp = data->c2 + data->c1 * n_meas;
-+
-+      if (*temp != last_temp) {
-+              dev_dbg(&tz->device, "millicelsius: %ld\n", *temp);
-+              last_temp = *temp;
-+      }
-+
-+      return 0;
-+}
-+
-+static int imx_get_mode(struct thermal_zone_device *tz,
-+                      enum thermal_device_mode *mode)
-+{
-+      struct imx_thermal_data *data = tz->devdata;
-+
-+      *mode = data->mode;
-+
-+      return 0;
-+}
-+
-+static int imx_set_mode(struct thermal_zone_device *tz,
-+                      enum thermal_device_mode mode)
-+{
-+      struct imx_thermal_data *data = tz->devdata;
-+
-+      if (mode == THERMAL_DEVICE_ENABLED) {
-+              tz->polling_delay = IMX_POLLING_DELAY;
-+              tz->passive_delay = IMX_PASSIVE_DELAY;
-+      } else {
-+              tz->polling_delay = 0;
-+              tz->passive_delay = 0;
-+      }
-+
-+      data->mode = mode;
-+      thermal_zone_device_update(tz);
-+
-+      return 0;
-+}
-+
-+static int imx_get_trip_type(struct thermal_zone_device *tz, int trip,
-+                           enum thermal_trip_type *type)
-+{
-+      *type = (trip == IMX_TRIP_PASSIVE) ? THERMAL_TRIP_PASSIVE :
-+                                           THERMAL_TRIP_CRITICAL;
-+      return 0;
-+}
-+
-+static int imx_get_crit_temp(struct thermal_zone_device *tz,
-+                           unsigned long *temp)
-+{
-+      *temp = IMX_TEMP_CRITICAL;
-+      return 0;
-+}
-+
-+static int imx_get_trip_temp(struct thermal_zone_device *tz, int trip,
-+                           unsigned long *temp)
-+{
-+      *temp = (trip == IMX_TRIP_PASSIVE) ? IMX_TEMP_PASSIVE :
-+                                           IMX_TEMP_CRITICAL;
-+      return 0;
-+}
-+
-+static int imx_bind(struct thermal_zone_device *tz,
-+                  struct thermal_cooling_device *cdev)
-+{
-+      int ret;
-+
-+      ret = thermal_zone_bind_cooling_device(tz, IMX_TRIP_PASSIVE, cdev,
-+                                             THERMAL_NO_LIMIT,
-+                                             THERMAL_NO_LIMIT);
-+      if (ret) {
-+              dev_err(&tz->device,
-+                      "binding zone %s with cdev %s failed:%d\n",
-+                      tz->type, cdev->type, ret);
-+              return ret;
-+      }
-+
-+      return 0;
-+}
-+
-+static int imx_unbind(struct thermal_zone_device *tz,
-+                    struct thermal_cooling_device *cdev)
-+{
-+      int ret;
-+
-+      ret = thermal_zone_unbind_cooling_device(tz, IMX_TRIP_PASSIVE, cdev);
-+      if (ret) {
-+              dev_err(&tz->device,
-+                      "unbinding zone %s with cdev %s failed:%d\n",
-+                      tz->type, cdev->type, ret);
-+              return ret;
-+      }
-+
-+      return 0;
-+}
-+
-+static const struct thermal_zone_device_ops imx_tz_ops = {
-+      .bind = imx_bind,
-+      .unbind = imx_unbind,
-+      .get_temp = imx_get_temp,
-+      .get_mode = imx_get_mode,
-+      .set_mode = imx_set_mode,
-+      .get_trip_type = imx_get_trip_type,
-+      .get_trip_temp = imx_get_trip_temp,
-+      .get_crit_temp = imx_get_crit_temp,
-+};
-+
-+static int imx_get_sensor_data(struct platform_device *pdev)
-+{
-+      struct imx_thermal_data *data = platform_get_drvdata(pdev);
-+      struct regmap *map;
-+      int t1, t2, n1, n2;
-+      int ret;
-+      u32 val;
-+
-+      map = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
-+                                            "fsl,tempmon-data");
-+      if (IS_ERR(map)) {
-+              ret = PTR_ERR(map);
-+              dev_err(&pdev->dev, "failed to get sensor regmap: %d\n", ret);
-+              return ret;
-+      }
-+
-+      ret = regmap_read(map, OCOTP_ANA1, &val);
-+      if (ret) {
-+              dev_err(&pdev->dev, "failed to read sensor data: %d\n", ret);
-+              return ret;
-+      }
-+
-+      if (val == 0 || val == ~0) {
-+              dev_err(&pdev->dev, "invalid sensor calibration data\n");
-+              return -EINVAL;
-+      }
-+
-+      /*
-+       * Sensor data layout:
-+       *   [31:20] - sensor value @ 25C
-+       *    [19:8] - sensor value of hot
-+       *     [7:0] - hot temperature value
-+       */
-+      n1 = val >> 20;
-+      n2 = (val & 0xfff00) >> 8;
-+      t2 = val & 0xff;
-+      t1 = 25; /* t1 always 25C */
-+
-+      /*
-+       * Derived from linear interpolation,
-+       * Tmeas = T2 + (Nmeas - N2) * (T1 - T2) / (N1 - N2)
-+       * We want to reduce this down to the minimum computation necessary
-+       * for each temperature read.  Also, we want Tmeas in millicelsius
-+       * and we don't want to lose precision from integer division. So...
-+       * milli_Tmeas = 1000 * T2 + 1000 * (Nmeas - N2) * (T1 - T2) / (N1 - N2)
-+       * Let constant c1 = 1000 * (T1 - T2) / (N1 - N2)
-+       * milli_Tmeas = (1000 * T2) + c1 * (Nmeas - N2)
-+       * milli_Tmeas = (1000 * T2) + (c1 * Nmeas) - (c1 * N2)
-+       * Let constant c2 = (1000 * T2) - (c1 * N2)
-+       * milli_Tmeas = c2 + (c1 * Nmeas)
-+       */
-+      data->c1 = 1000 * (t1 - t2) / (n1 - n2);
-+      data->c2 = 1000 * t2 - data->c1 * n2;
-+
-+      return 0;
-+}
-+
-+static int imx_thermal_probe(struct platform_device *pdev)
-+{
-+      struct imx_thermal_data *data;
-+      struct cpumask clip_cpus;
-+      struct regmap *map;
-+      int ret;
-+
-+      data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
-+      if (!data)
-+              return -ENOMEM;
-+
-+      map = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "fsl,tempmon");
-+      if (IS_ERR(map)) {
-+              ret = PTR_ERR(map);
-+              dev_err(&pdev->dev, "failed to get tempmon regmap: %d\n", ret);
-+              return ret;
-+      }
-+      data->tempmon = map;
-+
-+      platform_set_drvdata(pdev, data);
-+
-+      ret = imx_get_sensor_data(pdev);
-+      if (ret) {
-+              dev_err(&pdev->dev, "failed to get sensor data\n");
-+              return ret;
-+      }
-+
-+      /* Make sure sensor is in known good state for measurements */
-+      regmap_write(map, TEMPSENSE0 + REG_CLR, TEMPSENSE0_POWER_DOWN);
-+      regmap_write(map, TEMPSENSE0 + REG_CLR, TEMPSENSE0_MEASURE_TEMP);
-+      regmap_write(map, TEMPSENSE1 + REG_CLR, TEMPSENSE1_MEASURE_FREQ);
-+      regmap_write(map, MISC0 + REG_SET, MISC0_REFTOP_SELBIASOFF);
-+      regmap_write(map, TEMPSENSE0 + REG_SET, TEMPSENSE0_POWER_DOWN);
-+
-+      cpumask_set_cpu(0, &clip_cpus);
-+      data->cdev = cpufreq_cooling_register(&clip_cpus);
-+      if (IS_ERR(data->cdev)) {
-+              ret = PTR_ERR(data->cdev);
-+              dev_err(&pdev->dev,
-+                      "failed to register cpufreq cooling device: %d\n", ret);
-+              return ret;
-+      }
-+
-+      data->tz = thermal_zone_device_register("imx_thermal_zone",
-+                                              IMX_TRIP_NUM, 0, data,
-+                                              &imx_tz_ops, NULL,
-+                                              IMX_PASSIVE_DELAY,
-+                                              IMX_POLLING_DELAY);
-+      if (IS_ERR(data->tz)) {
-+              ret = PTR_ERR(data->tz);
-+              dev_err(&pdev->dev,
-+                      "failed to register thermal zone device %d\n", ret);
-+              cpufreq_cooling_unregister(data->cdev);
-+              return ret;
-+      }
-+
-+      data->mode = THERMAL_DEVICE_ENABLED;
-+
-+      return 0;
-+}
-+
-+static int imx_thermal_remove(struct platform_device *pdev)
-+{
-+      struct imx_thermal_data *data = platform_get_drvdata(pdev);
-+
-+      thermal_zone_device_unregister(data->tz);
-+      cpufreq_cooling_unregister(data->cdev);
-+
-+      return 0;
-+}
-+
-+#ifdef CONFIG_PM_SLEEP
-+static int imx_thermal_suspend(struct device *dev)
-+{
-+      struct imx_thermal_data *data = dev_get_drvdata(dev);
-+      struct regmap *map = data->tempmon;
-+      u32 val;
-+
-+      regmap_read(map, TEMPSENSE0, &val);
-+      if ((val & TEMPSENSE0_POWER_DOWN) == 0) {
-+              /*
-+               * If a measurement is taking place, wait for a long enough
-+               * time for it to finish, and then check again.  If it still
-+               * does not finish, something must go wrong.
-+               */
-+              udelay(50);
-+              regmap_read(map, TEMPSENSE0, &val);
-+              if ((val & TEMPSENSE0_POWER_DOWN) == 0)
-+                      return -ETIMEDOUT;
-+      }
-+
-+      return 0;
-+}
-+
-+static int imx_thermal_resume(struct device *dev)
-+{
-+      /* Nothing to do for now */
-+      return 0;
-+}
-+#endif
-+
-+static SIMPLE_DEV_PM_OPS(imx_thermal_pm_ops,
-+                       imx_thermal_suspend, imx_thermal_resume);
-+
-+static const struct of_device_id of_imx_thermal_match[] = {
-+      { .compatible = "fsl,imx6q-tempmon", },
-+      { /* end */ }
-+};
-+
-+static struct platform_driver imx_thermal = {
-+      .driver = {
-+              .name   = "imx_thermal",
-+              .owner  = THIS_MODULE,
-+              .pm     = &imx_thermal_pm_ops,
-+              .of_match_table = of_imx_thermal_match,
-+      },
-+      .probe          = imx_thermal_probe,
-+      .remove         = imx_thermal_remove,
-+};
-+module_platform_driver(imx_thermal);
-+
-+MODULE_AUTHOR("Freescale Semiconductor, Inc.");
-+MODULE_DESCRIPTION("Thermal driver for Freescale i.MX SoCs");
-+MODULE_LICENSE("GPL v2");
-+MODULE_ALIAS("platform:imx-thermal");
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/wandboard/imx/0004-ARM-i.MX6-Wandboard-add-wifi-bt-rfkill-driver.patch b/src/patches/kernel/wandboard/imx/0004-ARM-i.MX6-Wandboard-add-wifi-bt-rfkill-driver.patch
deleted file mode 100644 (file)
index 993b1d7..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-From adf0f7b7d7c0083dd936fe46423b89e974f8df12 Mon Sep 17 00:00:00 2001
-From: Vladimir Ermakov <vooon341@gmail.com>
-Date: Wed, 10 Jul 2013 03:06:54 +0400
-Subject: [PATCH] ARM i.MX6 Wandboard add wifi+bt rfkill driver
-
-BRCM WiFi module requires initialization for control gpio;
-Additional provides rfkill funcs.
-
-v2: fix wrong probe func in driver struct
-v3: add imx6qdl compatible
-
-Signed-off-by: Vladimir Ermakov <vooon341@gmail.com>
----
- arch/arm/mach-imx/devices/Kconfig       |   6 +
- arch/arm/mach-imx/devices/Makefile      |   1 +
- arch/arm/mach-imx/devices/wand-rfkill.c | 290 ++++++++++++++++++++++++++++++++
- 3 files changed, 297 insertions(+)
- create mode 100644 arch/arm/mach-imx/devices/wand-rfkill.c
-
-diff --git a/arch/arm/mach-imx/devices/Kconfig b/arch/arm/mach-imx/devices/Kconfig
-index 68c74fb..a0adf75 100644
---- a/arch/arm/mach-imx/devices/Kconfig
-+++ b/arch/arm/mach-imx/devices/Kconfig
-@@ -85,3 +85,9 @@ config IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
- config IMX_HAVE_PLATFORM_SPI_IMX
-       bool
-+
-+config WAND_RFKILL
-+      tristate "Wandboard RF Kill support"
-+      depends on SOC_IMX6Q
-+      default m
-+      select RFKILL
-diff --git a/arch/arm/mach-imx/devices/Makefile b/arch/arm/mach-imx/devices/Makefile
-index 67416fb..b2aded5 100644
---- a/arch/arm/mach-imx/devices/Makefile
-+++ b/arch/arm/mach-imx/devices/Makefile
-@@ -30,3 +30,4 @@ obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_W1) += platform-mxc_w1.o
- obj-$(CONFIG_IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX) += platform-sdhci-esdhc-imx.o
- obj-$(CONFIG_IMX_HAVE_PLATFORM_SPI_IMX) +=  platform-spi_imx.o
- obj-$(CONFIG_IMX_HAVE_PLATFORM_MX2_EMMA) += platform-mx2-emma.o
-+obj-$(CONFIG_WAND_RFKILL) += wand-rfkill.o
-diff --git a/arch/arm/mach-imx/devices/wand-rfkill.c b/arch/arm/mach-imx/devices/wand-rfkill.c
-new file mode 100644
-index 0000000..da7ef9f
---- /dev/null
-+++ b/arch/arm/mach-imx/devices/wand-rfkill.c
-@@ -0,0 +1,290 @@
-+/*
-+ * arch/arm/mach-imx/devices/wand-rfkill.c
-+ *
-+ * Copyright (C) 2013 Vladimir Ermakov <vooon341@gmail.com>
-+ *
-+ * based on net/rfkill/rfkill-gpio.c
-+ *
-+ * This software is licensed under the terms of the GNU General Public
-+ * License version 2, as published by the Free Software Foundation, and
-+ * may be copied, distributed, and modified under those terms.
-+ *
-+ * 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.
-+ *
-+ */
-+
-+#include <linux/of.h>
-+#include <linux/of_gpio.h>
-+#include <linux/of_device.h>
-+#include <linux/pinctrl/consumer.h>
-+#include <linux/platform_device.h>
-+#include <linux/rfkill.h>
-+#include <linux/delay.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+
-+
-+struct wand_rfkill_data {
-+      struct rfkill *rfkill_dev;
-+      int shutdown_gpio;
-+      const char *shutdown_name;
-+};
-+
-+static int wand_rfkill_set_block(void *data, bool blocked)
-+{
-+      struct wand_rfkill_data *rfkill = data;
-+
-+      pr_debug("wandboard-rfkill: set block %d\n", blocked);
-+
-+      if (blocked) {
-+              if (gpio_is_valid(rfkill->shutdown_gpio))
-+                      gpio_direction_output(rfkill->shutdown_gpio, 0);
-+      } else {
-+              if (gpio_is_valid(rfkill->shutdown_gpio))
-+                      gpio_direction_output(rfkill->shutdown_gpio, 1);
-+      }
-+
-+      return 0;
-+}
-+
-+static const struct rfkill_ops wand_rfkill_ops = {
-+      .set_block = wand_rfkill_set_block,
-+};
-+
-+static int wand_rfkill_wifi_probe(struct device *dev,
-+              struct device_node *np,
-+              struct wand_rfkill_data *rfkill)
-+{
-+      int ret;
-+      int wl_ref_on, wl_rst_n, wl_reg_on, wl_wake, wl_host_wake;
-+
-+      wl_ref_on = of_get_named_gpio(np, "wifi-ref-on", 0);
-+      wl_rst_n = of_get_named_gpio(np, "wifi-rst-n", 0);
-+      wl_reg_on = of_get_named_gpio(np, "wifi-reg-on", 0);
-+      wl_wake = of_get_named_gpio(np, "wifi-wake", 0);
-+      wl_host_wake = of_get_named_gpio(np, "wifi-host-wake", 0);
-+
-+      if (!gpio_is_valid(wl_rst_n) || !gpio_is_valid(wl_ref_on) ||
-+                      !gpio_is_valid(wl_reg_on) || !gpio_is_valid(wl_wake) ||
-+                      !gpio_is_valid(wl_host_wake)) {
-+
-+              dev_err(dev, "incorrect wifi gpios (%d %d %d %d %d)\n",
-+                              wl_rst_n, wl_ref_on, wl_reg_on, wl_wake, wl_host_wake);
-+              return -EINVAL;
-+      }
-+
-+      dev_info(dev, "initialize wifi chip\n");
-+
-+      gpio_request(wl_rst_n, "wl_rst_n");
-+      gpio_direction_output(wl_rst_n, 0);
-+      msleep(11);
-+      gpio_set_value(wl_rst_n, 1);
-+
-+      gpio_request(wl_ref_on, "wl_ref_on");
-+      gpio_direction_output(wl_ref_on, 1);
-+
-+      gpio_request(wl_reg_on, "wl_reg_on");
-+      gpio_direction_output(wl_reg_on, 1);
-+
-+      gpio_request(wl_wake, "wl_wake");
-+      gpio_direction_output(wl_wake, 1);
-+
-+      gpio_request(wl_host_wake, "wl_host_wake");
-+      gpio_direction_input(wl_host_wake);
-+
-+      rfkill->shutdown_name = "wifi_shutdown";
-+      rfkill->shutdown_gpio = wl_wake;
-+
-+      rfkill->rfkill_dev = rfkill_alloc("wifi-rfkill", dev, RFKILL_TYPE_WLAN,
-+                      &wand_rfkill_ops, rfkill);
-+      if (!rfkill->rfkill_dev) {
-+              ret = -ENOMEM;
-+              goto wifi_fail_free_gpio;
-+      }
-+
-+      ret = rfkill_register(rfkill->rfkill_dev);
-+      if (ret < 0)
-+              goto wifi_fail_unregister;
-+
-+      dev_info(dev, "wifi-rfkill registered.\n");
-+
-+      return 0;
-+
-+wifi_fail_unregister:
-+      rfkill_destroy(rfkill->rfkill_dev);
-+wifi_fail_free_gpio:
-+      if (gpio_is_valid(wl_rst_n))     gpio_free(wl_rst_n);
-+      if (gpio_is_valid(wl_ref_on))    gpio_free(wl_ref_on);
-+      if (gpio_is_valid(wl_reg_on))    gpio_free(wl_reg_on);
-+      if (gpio_is_valid(wl_wake))      gpio_free(wl_wake);
-+      if (gpio_is_valid(wl_host_wake)) gpio_free(wl_host_wake);
-+
-+      return ret;
-+}
-+
-+static int wand_rfkill_bt_probe(struct device *dev,
-+              struct device_node *np,
-+              struct wand_rfkill_data *rfkill)
-+{
-+      int ret;
-+      int bt_on, bt_wake, bt_host_wake;
-+
-+      bt_on = of_get_named_gpio(np, "bluetooth-on", 0);
-+      bt_wake = of_get_named_gpio(np, "bluetooth-wake", 0);
-+      bt_host_wake = of_get_named_gpio(np, "bluetooth-host-wake", 0);
-+
-+      if (!gpio_is_valid(bt_on) || !gpio_is_valid(bt_wake) ||
-+                      !gpio_is_valid(bt_host_wake)) {
-+
-+              dev_err(dev, "incorrect bt gpios (%d %d %d)\n",
-+                              bt_on, bt_wake, bt_host_wake);
-+              return -EINVAL;
-+      }
-+
-+      dev_info(dev, "initialize bluetooth chip\n");
-+
-+      gpio_request(bt_on, "bt_on");
-+      gpio_direction_output(bt_on, 0);
-+      msleep(11);
-+      gpio_set_value(bt_on, 1);
-+
-+      gpio_request(bt_wake, "bt_wake");
-+      gpio_direction_output(bt_wake, 1);
-+
-+      gpio_request(bt_host_wake, "bt_host_wake");
-+      gpio_direction_input(bt_host_wake);
-+
-+      rfkill->shutdown_name = "bluetooth_shutdown";
-+      rfkill->shutdown_gpio = bt_wake;
-+
-+      rfkill->rfkill_dev = rfkill_alloc("bluetooth-rfkill", dev, RFKILL_TYPE_BLUETOOTH,
-+                      &wand_rfkill_ops, rfkill);
-+      if (!rfkill->rfkill_dev) {
-+              ret = -ENOMEM;
-+              goto bt_fail_free_gpio;
-+      }
-+
-+      ret = rfkill_register(rfkill->rfkill_dev);
-+      if (ret < 0)
-+              goto bt_fail_unregister;
-+
-+      dev_info(dev, "bluetooth-rfkill registered.\n");
-+
-+      return 0;
-+
-+bt_fail_unregister:
-+      rfkill_destroy(rfkill->rfkill_dev);
-+bt_fail_free_gpio:
-+      if (gpio_is_valid(bt_on))        gpio_free(bt_on);
-+      if (gpio_is_valid(bt_wake))      gpio_free(bt_wake);
-+      if (gpio_is_valid(bt_host_wake)) gpio_free(bt_host_wake);
-+
-+      return ret;
-+}
-+
-+static int wand_rfkill_probe(struct platform_device *pdev)
-+{
-+      struct wand_rfkill_data *rfkill;
-+      struct pinctrl *pinctrl;
-+      int ret;
-+
-+      dev_info(&pdev->dev, "Wandboard rfkill initialization\n");
-+
-+      if (!pdev->dev.of_node) {
-+              dev_err(&pdev->dev, "no device tree node\n");
-+              return -ENODEV;
-+      }
-+
-+      rfkill = kzalloc(sizeof(*rfkill) * 2, GFP_KERNEL);
-+      if (!rfkill)
-+              return -ENOMEM;
-+
-+      pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
-+      if (IS_ERR(pinctrl)) {
-+              int ret = PTR_ERR(pinctrl);
-+              dev_err(&pdev->dev, "failed to get default pinctrl: %d\n", ret);
-+              return ret;
-+      }
-+
-+      /* setup WiFi */
-+      ret = wand_rfkill_wifi_probe(&pdev->dev, pdev->dev.of_node, &rfkill[0]);
-+      if (ret < 0)
-+              goto fail_free_rfkill;
-+
-+      /* setup bluetooth */
-+      ret = wand_rfkill_bt_probe(&pdev->dev, pdev->dev.of_node, &rfkill[1]);
-+      if (ret < 0)
-+              goto fail_unregister_wifi;
-+
-+      platform_set_drvdata(pdev, rfkill);
-+
-+      return 0;
-+
-+fail_unregister_wifi:
-+      if (rfkill[1].rfkill_dev) {
-+              rfkill_unregister(rfkill[1].rfkill_dev);
-+              rfkill_destroy(rfkill[1].rfkill_dev);
-+      }
-+
-+      /* TODO free gpio */
-+
-+fail_free_rfkill:
-+      kfree(rfkill);
-+
-+      return ret;
-+}
-+
-+static int wand_rfkill_remove(struct platform_device *pdev)
-+{
-+      struct wand_rfkill_data *rfkill = platform_get_drvdata(pdev);
-+
-+      dev_info(&pdev->dev, "Module unloading\n");
-+
-+      if (!rfkill)
-+              return 0;
-+
-+      /* WiFi */
-+      if (gpio_is_valid(rfkill[0].shutdown_gpio))
-+              gpio_free(rfkill[0].shutdown_gpio);
-+
-+      rfkill_unregister(rfkill[0].rfkill_dev);
-+      rfkill_destroy(rfkill[0].rfkill_dev);
-+
-+      /* Bt */
-+      if (gpio_is_valid(rfkill[1].shutdown_gpio))
-+              gpio_free(rfkill[1].shutdown_gpio);
-+
-+      rfkill_unregister(rfkill[1].rfkill_dev);
-+      rfkill_destroy(rfkill[1].rfkill_dev);
-+
-+      kfree(rfkill);
-+
-+      return 0;
-+}
-+
-+static struct of_device_id wand_rfkill_match[] = {
-+      { .compatible = "wand,imx6q-wandboard-rfkill", },
-+      { .compatible = "wand,imx6dl-wandboard-rfkill", },
-+      { .compatible = "wand,imx6qdl-wandboard-rfkill", },
-+      {}
-+};
-+
-+static struct platform_driver wand_rfkill_driver = {
-+      .driver = {
-+              .name = "wandboard-rfkill",
-+              .owner = THIS_MODULE,
-+              .of_match_table = of_match_ptr(wand_rfkill_match),
-+      },
-+      .probe = wand_rfkill_probe,
-+      .remove = wand_rfkill_remove
-+};
-+
-+module_platform_driver(wand_rfkill_driver);
-+
-+MODULE_AUTHOR("Vladimir Ermakov <vooon341@gmail.com>");
-+MODULE_DESCRIPTION("Wandboard rfkill driver");
-+MODULE_LICENSE("GPL v2");
--- 
-1.8.4.rc3
-
diff --git a/src/patches/kernel/wandboard/imx/0005-Add-IMX6Q-AHCI-support.patch b/src/patches/kernel/wandboard/imx/0005-Add-IMX6Q-AHCI-support.patch
deleted file mode 100644 (file)
index 912b3be..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-From 8e890a259208dbe3aba6f46f7c3a213269d8f123 Mon Sep 17 00:00:00 2001
-From: Allen Ibara <allen@zee.aero>
-Date: Tue, 4 Dec 2012 20:44:26 -0800
-Subject: [PATCH 2/5] Add IMX6Q AHCI support
-
-Adds ahci_platform bits to make AHCI work on sabrelite IMX6Q board.
-
-Signed-off-by: Allen Ibara <allen@zee.aero>
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
-diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
-index 7a8a284..d324cdf 100644
---- a/drivers/ata/ahci_platform.c
-+++ b/drivers/ata/ahci_platform.c
-@@ -23,6 +23,9 @@
- #include <linux/platform_device.h>
- #include <linux/libata.h>
- #include <linux/ahci_platform.h>
-+#include <linux/of.h>
-+#include <linux/of_device.h>
-+#include <linux/of_gpio.h>
- #include "ahci.h"
- static void ahci_host_stop(struct ata_host *host);
-@@ -30,6 +33,7 @@ static void ahci_host_stop(struct ata_host *host);
- enum ahci_type {
-       AHCI,           /* standard platform ahci */
-       IMX53_AHCI,     /* ahci on i.mx53 */
-+      IMX6Q_AHCI,     /* ahci on i.mx6q */
-       STRICT_AHCI,    /* delayed DMA engine start */
- };
-@@ -41,6 +45,9 @@ static struct platform_device_id ahci_devtype[] = {
-               .name = "imx53-ahci",
-               .driver_data = IMX53_AHCI,
-       }, {
-+              .name = "imx6q-ahci",
-+              .driver_data = IMX53_AHCI,
-+      }, {
-               .name = "strict-ahci",
-               .driver_data = STRICT_AHCI,
-       }, {
-@@ -86,12 +93,24 @@ static struct scsi_host_template ahci_platform_sht = {
-       AHCI_SHT("ahci_platform"),
- };
-+static const struct of_device_id ahci_of_match[] = {
-+      { .compatible = "calxeda,hb-ahci",  .data = &ahci_devtype[AHCI],},
-+      { .compatible = "fsl,imx6q-ahci",   .data = &ahci_devtype[IMX6Q_AHCI],},
-+      { .compatible = "snps,spear-ahci", },
-+      {},
-+};
-+MODULE_DEVICE_TABLE(of, ahci_of_match);
-+
- static int ahci_probe(struct platform_device *pdev)
- {
-       struct device *dev = &pdev->dev;
-       struct ahci_platform_data *pdata = dev_get_platdata(dev);
-+      const struct of_device_id *of_id =
-+                      of_match_device(ahci_of_match, &pdev->dev);
-+      const struct platform_device_id *id_entry = of_id->data;
-       const struct platform_device_id *id = platform_get_device_id(pdev);
--      struct ata_port_info pi = ahci_port_info[id ? id->driver_data : 0];
-+      struct ata_port_info pi = ahci_port_info[id ? id->driver_data : \
-+              id_entry->driver_data];
-       const struct ata_port_info *ppi[] = { &pi, NULL };
-       struct ahci_host_priv *hpriv;
-       struct ata_host *host;
-@@ -325,12 +344,6 @@ disable_unprepare_clk:
- static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_suspend, ahci_resume);
--static const struct of_device_id ahci_of_match[] = {
--      { .compatible = "snps,spear-ahci", },
--      {},
--};
--MODULE_DEVICE_TABLE(of, ahci_of_match);
--
- static struct platform_driver ahci_driver = {
-       .probe = ahci_probe,
-       .remove = ata_platform_remove_one,
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/wandboard/imx/0006-imx-Add-IMX53-AHCI-support.patch b/src/patches/kernel/wandboard/imx/0006-imx-Add-IMX53-AHCI-support.patch
deleted file mode 100644 (file)
index 1b96d8c..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-From 41cc1967181a833c3c5af30682ea85dd01c28ff4 Mon Sep 17 00:00:00 2001
-From: Robert Nelson <robertcnelson@gmail.com>
-Date: Tue, 22 Jan 2013 22:21:03 -0600
-Subject: [PATCH 3/5] imx: Add IMX53 AHCI support
-
-Adds ahci_platform bits to make AHCI work on mx53 qsb board.
-
-Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
----
-
-diff --git a/drivers/ata/ahci_platform.c b/drivers/ata/ahci_platform.c
-index d324cdf..b01eeca 100644
---- a/drivers/ata/ahci_platform.c
-+++ b/drivers/ata/ahci_platform.c
-@@ -95,6 +95,7 @@ static struct scsi_host_template ahci_platform_sht = {
- static const struct of_device_id ahci_of_match[] = {
-       { .compatible = "calxeda,hb-ahci",  .data = &ahci_devtype[AHCI],},
-+      { .compatible = "fsl,imx53-ahci",   .data = &ahci_devtype[IMX53_AHCI],},
-       { .compatible = "fsl,imx6q-ahci",   .data = &ahci_devtype[IMX6Q_AHCI],},
-       { .compatible = "snps,spear-ahci", },
-       {},
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/wandboard/imx/0007-imx6-enable-sata-clk-if-SATA_AHCI_PLATFORM.patch b/src/patches/kernel/wandboard/imx/0007-imx6-enable-sata-clk-if-SATA_AHCI_PLATFORM.patch
deleted file mode 100644 (file)
index d85e3ff..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-From 765561c8c72a46c2177b20d730e061ab2ff8f970 Mon Sep 17 00:00:00 2001
-From: Paolo Pisati <paolo.pisati@canonical.com>
-Date: Thu, 31 Jan 2013 18:33:46 +0100
-Subject: [PATCH 4/5] SAUCE: imx6: enable sata clk if SATA_AHCI_PLATFORM
-
-Clock modifications in 24d340ac "ARM i.MX6: Fix ethernet PLL clocks" broke the
-SATA clk, fix it.
-
-More info: http://www.spinics.net/lists/arm-kernel/msg221503.html
-
-Original-code-from: Shawn Guo <shawn.guo@linaro.org>
-Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
----
- arch/arm/mach-imx/clk-imx6q.c |    3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c
-index 4e3148c..38d707a 100644
---- a/arch/arm/mach-imx/clk-imx6q.c
-+++ b/arch/arm/mach-imx/clk-imx6q.c
-@@ -568,6 +568,9 @@ int __init mx6q_clocks_init(void)
-               clk_prepare_enable(clk[usbphy2_gate]);
-       }
-+      if (IS_ENABLED(CONFIG_SATA_AHCI_PLATFORM))
-+              clk_prepare_enable(clk[sata_ref_100m]);
-+
-       /* Set initial power mode */
-       imx6q_set_lpm(WAIT_CLOCKED);
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/wandboard/imx/0008-ARM-imx6q-update-the-sata-bits-definitions-of-gpr13.patch b/src/patches/kernel/wandboard/imx/0008-ARM-imx6q-update-the-sata-bits-definitions-of-gpr13.patch
deleted file mode 100644 (file)
index 6f6ea69..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-From 371863a788db77e6092d69df17d8884cb0d94270 Mon Sep 17 00:00:00 2001
-From: Richard Zhu <r65037@freescale.com>
-Date: Wed, 24 Jul 2013 06:15:28 +0000
-Subject: [PATCH 1/2] ARM: imx6q: update the sata bits definitions of gpr13
-
-Replace the SATA_PHY_# by the more readable definitons.
-
-tj: Being routed through libata branch to enable implementation of
-    ahci_imx.
-
-Signed-off-by: Richard Zhu <r65037@freescale.com>
-Acked-by: Shawn Guo <shawn.guo@linaro.org>
-Signed-off-by: Tejun Heo <tj@kernel.org>
----
- include/linux/mfd/syscon/imx6q-iomuxc-gpr.h |  121 +++++++++++++++++++--------
- 1 file changed, 84 insertions(+), 37 deletions(-)
-
-diff --git a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
-index b1521e8..b6bdcd6 100644
---- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
-+++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
-@@ -279,41 +279,88 @@
- #define IMX6Q_GPR13_CAN2_STOP_REQ             BIT(29)
- #define IMX6Q_GPR13_CAN1_STOP_REQ             BIT(28)
- #define IMX6Q_GPR13_ENET_STOP_REQ             BIT(27)
--#define IMX6Q_GPR13_SATA_PHY_8_MASK           (0x7 << 24)
--#define IMX6Q_GPR13_SATA_PHY_8_0_5_DB         (0x0 << 24)
--#define IMX6Q_GPR13_SATA_PHY_8_1_0_DB         (0x1 << 24)
--#define IMX6Q_GPR13_SATA_PHY_8_1_5_DB         (0x2 << 24)
--#define IMX6Q_GPR13_SATA_PHY_8_2_0_DB         (0x3 << 24)
--#define IMX6Q_GPR13_SATA_PHY_8_2_5_DB         (0x4 << 24)
--#define IMX6Q_GPR13_SATA_PHY_8_3_0_DB         (0x5 << 24)
--#define IMX6Q_GPR13_SATA_PHY_8_3_5_DB         (0x6 << 24)
--#define IMX6Q_GPR13_SATA_PHY_8_4_0_DB         (0x7 << 24)
--#define IMX6Q_GPR13_SATA_PHY_7_MASK           (0x1f << 19)
--#define IMX6Q_GPR13_SATA_PHY_7_SATA1I         (0x10 << 19)
--#define IMX6Q_GPR13_SATA_PHY_7_SATA1M         (0x10 << 19)
--#define IMX6Q_GPR13_SATA_PHY_7_SATA1X         (0x1a << 19)
--#define IMX6Q_GPR13_SATA_PHY_7_SATA2I         (0x12 << 19)
--#define IMX6Q_GPR13_SATA_PHY_7_SATA2M         (0x12 << 19)
--#define IMX6Q_GPR13_SATA_PHY_7_SATA2X         (0x1a << 19)
--#define IMX6Q_GPR13_SATA_PHY_6_MASK           (0x7 << 16)
--#define IMX6Q_GPR13_SATA_SPEED_MASK           BIT(15)
--#define IMX6Q_GPR13_SATA_SPEED_1P5G           0x0
--#define IMX6Q_GPR13_SATA_SPEED_3P0G           BIT(15)
--#define IMX6Q_GPR13_SATA_PHY_5                        BIT(14)
--#define IMX6Q_GPR13_SATA_PHY_4_MASK           (0x7 << 11)
--#define IMX6Q_GPR13_SATA_PHY_4_16_16          (0x0 << 11)
--#define IMX6Q_GPR13_SATA_PHY_4_14_16          (0x1 << 11)
--#define IMX6Q_GPR13_SATA_PHY_4_12_16          (0x2 << 11)
--#define IMX6Q_GPR13_SATA_PHY_4_10_16          (0x3 << 11)
--#define IMX6Q_GPR13_SATA_PHY_4_9_16           (0x4 << 11)
--#define IMX6Q_GPR13_SATA_PHY_4_8_16           (0x5 << 11)
--#define IMX6Q_GPR13_SATA_PHY_3_MASK           (0xf << 7)
--#define IMX6Q_GPR13_SATA_PHY_3_OFF            0x7
--#define IMX6Q_GPR13_SATA_PHY_2_MASK           (0x1f << 2)
--#define IMX6Q_GPR13_SATA_PHY_2_OFF            0x2
--#define IMX6Q_GPR13_SATA_PHY_1_MASK           (0x3 << 0)
--#define IMX6Q_GPR13_SATA_PHY_1_FAST           (0x0 << 0)
--#define IMX6Q_GPR13_SATA_PHY_1_MED            (0x1 << 0)
--#define IMX6Q_GPR13_SATA_PHY_1_SLOW           (0x2 << 0)
--
-+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK               (0x7 << 24)
-+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_0_5_DB     (0x0 << 24)
-+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_1_0_DB     (0x1 << 24)
-+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_1_5_DB     (0x2 << 24)
-+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_2_0_DB     (0x3 << 24)
-+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_2_5_DB     (0x4 << 24)
-+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB     (0x5 << 24)
-+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_3_5_DB     (0x6 << 24)
-+#define IMX6Q_GPR13_SATA_RX_EQ_VAL_4_0_DB     (0x7 << 24)
-+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_MASK      (0x1f << 19)
-+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA1I    (0x10 << 19)
-+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA1M    (0x10 << 19)
-+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA1X    (0x1a << 19)
-+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2I    (0x12 << 19)
-+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M    (0x12 << 19)
-+#define IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2X    (0x1a << 19)
-+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_MASK    (0x7 << 16)
-+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_1P_1F   (0x0 << 16)
-+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_2F   (0x1 << 16)
-+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_1P_4F   (0x2 << 16)
-+#define IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F   (0x3 << 16)
-+#define IMX6Q_GPR13_SATA_SPD_MODE_MASK                BIT(15)
-+#define IMX6Q_GPR13_SATA_SPD_MODE_1P5G                0x0
-+#define IMX6Q_GPR13_SATA_SPD_MODE_3P0G                BIT(15)
-+#define IMX6Q_GPR13_SATA_MPLL_SS_EN           BIT(14)
-+#define IMX6Q_GPR13_SATA_TX_ATTEN_MASK                (0x7 << 11)
-+#define IMX6Q_GPR13_SATA_TX_ATTEN_16_16               (0x0 << 11)
-+#define IMX6Q_GPR13_SATA_TX_ATTEN_14_16               (0x1 << 11)
-+#define IMX6Q_GPR13_SATA_TX_ATTEN_12_16               (0x2 << 11)
-+#define IMX6Q_GPR13_SATA_TX_ATTEN_10_16               (0x3 << 11)
-+#define IMX6Q_GPR13_SATA_TX_ATTEN_9_16                (0x4 << 11)
-+#define IMX6Q_GPR13_SATA_TX_ATTEN_8_16                (0x5 << 11)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_MASK                (0xf << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_0_00_DB     (0x0 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_0_37_DB     (0x1 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_0_74_DB     (0x2 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_1_11_DB     (0x3 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_1_48_DB     (0x4 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_1_85_DB     (0x5 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_2_22_DB     (0x6 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_2_59_DB     (0x7 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_2_96_DB     (0x8 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB     (0x9 << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_3_70_DB     (0xa << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_4_07_DB     (0xb << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_4_44_DB     (0xc << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_4_81_DB     (0xd << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_5_28_DB     (0xe << 7)
-+#define IMX6Q_GPR13_SATA_TX_BOOST_5_75_DB     (0xf << 7)
-+#define IMX6Q_GPR13_SATA_TX_LVL_MASK          (0x1f << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_0_937_V               (0x00 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_0_947_V               (0x01 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_0_957_V               (0x02 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_0_966_V               (0x03 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_0_976_V               (0x04 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_0_986_V               (0x05 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_0_996_V               (0x06 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_005_V               (0x07 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_015_V               (0x08 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_025_V               (0x09 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_035_V               (0x0a << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_045_V               (0x0b << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_054_V               (0x0c << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_064_V               (0x0d << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_074_V               (0x0e << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_084_V               (0x0f << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_094_V               (0x10 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_104_V               (0x11 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_113_V               (0x12 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_123_V               (0x13 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_133_V               (0x14 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_143_V               (0x15 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_152_V               (0x16 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_162_V               (0x17 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_172_V               (0x18 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_182_V               (0x19 << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_191_V               (0x1a << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_201_V               (0x1b << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_211_V               (0x1c << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_221_V               (0x1d << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_230_V               (0x1e << 2)
-+#define IMX6Q_GPR13_SATA_TX_LVL_1_240_V               (0x1f << 2)
-+#define IMX6Q_GPR13_SATA_MPLL_CLK_EN          BIT(1)
-+#define IMX6Q_GPR13_SATA_TX_EDGE_RATE         BIT(0)
- #endif /* __LINUX_IMX6Q_IOMUXC_GPR_H */
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/wandboard/imx/0009-ahci_imx-add-ahci-sata-support-on-imx-platforms.patch b/src/patches/kernel/wandboard/imx/0009-ahci_imx-add-ahci-sata-support-on-imx-platforms.patch
deleted file mode 100644 (file)
index 758476a..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-From 093f4fdd74f29031d79be747c65b95fb16601a92 Mon Sep 17 00:00:00 2001
-From: Richard Zhu <r65037@freescale.com>
-Date: Wed, 24 Jul 2013 06:15:29 +0000
-Subject: [PATCH 2/2] ahci_imx: add ahci sata support on imx platforms
-
-imx6q contains one Synopsys AHCI SATA controller, But it can't share
-ahci_platform driver with other controllers because there are some
-misalignments of the generic AHCI controller - the bits definitions of
-the HBA registers, the Vendor Specific registers, the AHCI PHY clock
-and the AHCI signals adjustment window(GPR13 register).
-
- - CAP_SSS(bit20) of the HOST_CAP is writable, default value is '0',
-   should be configured to be '1'
-
- - bit0 (only one AHCI SATA port on imx6q) of the HOST_PORTS_IMPL
-   should be set to be '1'.(default 0)
-
- - One Vendor Specific register HOST_TIMER1MS(offset:0xe0) should be
-   configured regarding to the frequency of AHB bus clock.
-
- - Configurations of the AHCI PHY clock, and the signal parameters of
-   the GPR13
-
-Setup its own ahci sata driver, contained the imx6q specific
-initialized codes, re-use the generic ahci_platform driver, and keep
-the generic ahci_platform driver clean as much as possible.
-
-tj: patch description reformatted
-
-Signed-off-by: Richard Zhu <r65037@freescale.com>
-Reviewed-by: Shawn Guo <shawn.guo@linaro.org>
-Signed-off-by: Tejun Heo <tj@kernel.org>
----
- drivers/ata/Kconfig    |    9 ++
- drivers/ata/Makefile   |    1 +
- drivers/ata/ahci_imx.c |  236 ++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 246 insertions(+)
- create mode 100644 drivers/ata/ahci_imx.c
-
-diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
-index 80dc988..cbf7a16 100644
---- a/drivers/ata/Kconfig
-+++ b/drivers/ata/Kconfig
-@@ -97,6 +97,15 @@ config SATA_AHCI_PLATFORM
-         If unsure, say N.
-+config AHCI_IMX
-+      tristate "Freescale i.MX AHCI SATA support"
-+      depends on SATA_AHCI_PLATFORM
-+      help
-+        This option enables support for the Freescale i.MX SoC's
-+        onboard AHCI SATA.
-+
-+        If unsure, say N.
-+
- config SATA_FSL
-       tristate "Freescale 3.0Gbps SATA support"
-       depends on FSL_SOC
-diff --git a/drivers/ata/Makefile b/drivers/ata/Makefile
-index c04d0fd..46518c6 100644
---- a/drivers/ata/Makefile
-+++ b/drivers/ata/Makefile
-@@ -10,6 +10,7 @@ obj-$(CONFIG_SATA_INIC162X)  += sata_inic162x.o
- obj-$(CONFIG_SATA_SIL24)      += sata_sil24.o
- obj-$(CONFIG_SATA_DWC)                += sata_dwc_460ex.o
- obj-$(CONFIG_SATA_HIGHBANK)   += sata_highbank.o libahci.o
-+obj-$(CONFIG_AHCI_IMX)                += ahci_imx.o
- # SFF w/ custom DMA
- obj-$(CONFIG_PDC_ADMA)                += pdc_adma.o
-diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c
-new file mode 100644
-index 0000000..58debb0
---- /dev/null
-+++ b/drivers/ata/ahci_imx.c
-@@ -0,0 +1,236 @@
-+/*
-+ * Freescale IMX AHCI SATA platform driver
-+ * Copyright 2013 Freescale Semiconductor, Inc.
-+ *
-+ * based on the AHCI SATA platform driver by Jeff Garzik and Anton Vorontsov
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms and conditions of the GNU General Public License,
-+ * version 2, as published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope 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, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/regmap.h>
-+#include <linux/ahci_platform.h>
-+#include <linux/of_device.h>
-+#include <linux/mfd/syscon.h>
-+#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
-+#include "ahci.h"
-+
-+enum {
-+      HOST_TIMER1MS = 0xe0, /* Timer 1-ms */
-+};
-+
-+struct imx_ahci_priv {
-+      struct platform_device *ahci_pdev;
-+      struct clk *sata_ref_clk;
-+      struct clk *ahb_clk;
-+      struct regmap *gpr;
-+};
-+
-+static int imx6q_sata_init(struct device *dev, void __iomem *mmio)
-+{
-+      int ret = 0;
-+      unsigned int reg_val;
-+      struct imx_ahci_priv *imxpriv = dev_get_drvdata(dev->parent);
-+
-+      imxpriv->gpr =
-+              syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
-+      if (IS_ERR(imxpriv->gpr)) {
-+              dev_err(dev, "failed to find fsl,imx6q-iomux-gpr regmap\n");
-+              return PTR_ERR(imxpriv->gpr);
-+      }
-+
-+      ret = clk_prepare_enable(imxpriv->sata_ref_clk);
-+      if (ret < 0) {
-+              dev_err(dev, "prepare-enable sata_ref clock err:%d\n", ret);
-+              return ret;
-+      }
-+
-+      /*
-+       * set PHY Paremeters, two steps to configure the GPR13,
-+       * one write for rest of parameters, mask of first write
-+       * is 0x07fffffd, and the other one write for setting
-+       * the mpll_clk_en.
-+       */
-+      regmap_update_bits(imxpriv->gpr, 0x34, IMX6Q_GPR13_SATA_RX_EQ_VAL_MASK
-+                      | IMX6Q_GPR13_SATA_RX_LOS_LVL_MASK
-+                      | IMX6Q_GPR13_SATA_RX_DPLL_MODE_MASK
-+                      | IMX6Q_GPR13_SATA_SPD_MODE_MASK
-+                      | IMX6Q_GPR13_SATA_MPLL_SS_EN
-+                      | IMX6Q_GPR13_SATA_TX_ATTEN_MASK
-+                      | IMX6Q_GPR13_SATA_TX_BOOST_MASK
-+                      | IMX6Q_GPR13_SATA_TX_LVL_MASK
-+                      | IMX6Q_GPR13_SATA_TX_EDGE_RATE
-+                      , IMX6Q_GPR13_SATA_RX_EQ_VAL_3_0_DB
-+                      | IMX6Q_GPR13_SATA_RX_LOS_LVL_SATA2M
-+                      | IMX6Q_GPR13_SATA_RX_DPLL_MODE_2P_4F
-+                      | IMX6Q_GPR13_SATA_SPD_MODE_3P0G
-+                      | IMX6Q_GPR13_SATA_MPLL_SS_EN
-+                      | IMX6Q_GPR13_SATA_TX_ATTEN_9_16
-+                      | IMX6Q_GPR13_SATA_TX_BOOST_3_33_DB
-+                      | IMX6Q_GPR13_SATA_TX_LVL_1_025_V);
-+      regmap_update_bits(imxpriv->gpr, 0x34, IMX6Q_GPR13_SATA_MPLL_CLK_EN,
-+                      IMX6Q_GPR13_SATA_MPLL_CLK_EN);
-+      usleep_range(100, 200);
-+
-+      /*
-+       * Configure the HWINIT bits of the HOST_CAP and HOST_PORTS_IMPL,
-+       * and IP vendor specific register HOST_TIMER1MS.
-+       * Configure CAP_SSS (support stagered spin up).
-+       * Implement the port0.
-+       * Get the ahb clock rate, and configure the TIMER1MS register.
-+       */
-+      reg_val = readl(mmio + HOST_CAP);
-+      if (!(reg_val & HOST_CAP_SSS)) {
-+              reg_val |= HOST_CAP_SSS;
-+              writel(reg_val, mmio + HOST_CAP);
-+      }
-+      reg_val = readl(mmio + HOST_PORTS_IMPL);
-+      if (!(reg_val & 0x1)) {
-+              reg_val |= 0x1;
-+              writel(reg_val, mmio + HOST_PORTS_IMPL);
-+      }
-+
-+      reg_val = clk_get_rate(imxpriv->ahb_clk) / 1000;
-+      writel(reg_val, mmio + HOST_TIMER1MS);
-+
-+      return 0;
-+}
-+
-+static void imx6q_sata_exit(struct device *dev)
-+{
-+      struct imx_ahci_priv *imxpriv =  dev_get_drvdata(dev->parent);
-+
-+      regmap_update_bits(imxpriv->gpr, 0x34, IMX6Q_GPR13_SATA_MPLL_CLK_EN,
-+                      !IMX6Q_GPR13_SATA_MPLL_CLK_EN);
-+      clk_disable_unprepare(imxpriv->sata_ref_clk);
-+}
-+
-+static struct ahci_platform_data imx6q_sata_pdata = {
-+      .init = imx6q_sata_init,
-+      .exit = imx6q_sata_exit,
-+};
-+
-+static const struct of_device_id imx_ahci_of_match[] = {
-+      { .compatible = "fsl,imx6q-ahci", .data = &imx6q_sata_pdata},
-+      {},
-+};
-+MODULE_DEVICE_TABLE(of, imx_ahci_of_match);
-+
-+static int imx_ahci_probe(struct platform_device *pdev)
-+{
-+      struct device *dev = &pdev->dev;
-+      struct resource *mem, *irq, res[2];
-+      const struct of_device_id *of_id;
-+      const struct ahci_platform_data *pdata = NULL;
-+      struct imx_ahci_priv *imxpriv;
-+      struct device *ahci_dev;
-+      struct platform_device *ahci_pdev;
-+      int ret;
-+
-+      imxpriv = devm_kzalloc(dev, sizeof(*imxpriv), GFP_KERNEL);
-+      if (!imxpriv) {
-+              dev_err(dev, "can't alloc ahci_host_priv\n");
-+              return -ENOMEM;
-+      }
-+
-+      ahci_pdev = platform_device_alloc("ahci", -1);
-+      if (!ahci_pdev)
-+              return -ENODEV;
-+
-+      ahci_dev = &ahci_pdev->dev;
-+      ahci_dev->parent = dev;
-+
-+      imxpriv->ahb_clk = devm_clk_get(dev, "ahb");
-+      if (IS_ERR(imxpriv->ahb_clk)) {
-+              dev_err(dev, "can't get ahb clock.\n");
-+              ret = PTR_ERR(imxpriv->ahb_clk);
-+              goto err_out;
-+      }
-+
-+      imxpriv->sata_ref_clk = devm_clk_get(dev, "sata_ref");
-+      if (IS_ERR(imxpriv->sata_ref_clk)) {
-+              dev_err(dev, "can't get sata_ref clock.\n");
-+              ret = PTR_ERR(imxpriv->sata_ref_clk);
-+              goto err_out;
-+      }
-+
-+      imxpriv->ahci_pdev = ahci_pdev;
-+      platform_set_drvdata(pdev, imxpriv);
-+
-+      of_id = of_match_device(imx_ahci_of_match, dev);
-+      if (of_id) {
-+              pdata = of_id->data;
-+      } else {
-+              ret = -EINVAL;
-+              goto err_out;
-+      }
-+
-+      mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-+      if (!mem || !irq) {
-+              dev_err(dev, "no mmio/irq resource\n");
-+              ret = -ENOMEM;
-+              goto err_out;
-+      }
-+
-+      res[0] = *mem;
-+      res[1] = *irq;
-+
-+      ahci_dev->coherent_dma_mask = DMA_BIT_MASK(32);
-+      ahci_dev->dma_mask = &ahci_dev->coherent_dma_mask;
-+      ahci_dev->of_node = dev->of_node;
-+
-+      ret = platform_device_add_resources(ahci_pdev, res, 2);
-+      if (ret)
-+              goto err_out;
-+
-+      ret = platform_device_add_data(ahci_pdev, pdata, sizeof(*pdata));
-+      if (ret)
-+              goto err_out;
-+
-+      ret = platform_device_add(ahci_pdev);
-+      if (ret) {
-+err_out:
-+              platform_device_put(ahci_pdev);
-+              return ret;
-+      }
-+
-+      return 0;
-+}
-+
-+static int imx_ahci_remove(struct platform_device *pdev)
-+{
-+      struct imx_ahci_priv *imxpriv = platform_get_drvdata(pdev);
-+      struct platform_device *ahci_pdev = imxpriv->ahci_pdev;
-+
-+      platform_device_unregister(ahci_pdev);
-+      return 0;
-+}
-+
-+static struct platform_driver imx_ahci_driver = {
-+      .probe = imx_ahci_probe,
-+      .remove = imx_ahci_remove,
-+      .driver = {
-+              .name = "ahci-imx",
-+              .owner = THIS_MODULE,
-+              .of_match_table = imx_ahci_of_match,
-+      },
-+};
-+module_platform_driver(imx_ahci_driver);
-+
-+MODULE_DESCRIPTION("Freescale i.MX AHCI SATA platform driver");
-+MODULE_AUTHOR("Richard Zhu <Hong-Xing.Zhu@freescale.com>");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("ahci:imx");
--- 
-1.7.10.4
-
diff --git a/src/patches/kernel/wandboard/imx/0010-ahci_imx-depend-on-CONFIG_MFD_SYSCON.patch b/src/patches/kernel/wandboard/imx/0010-ahci_imx-depend-on-CONFIG_MFD_SYSCON.patch
deleted file mode 100644 (file)
index 86e7d8f..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-From: Tejun Heo <tj@kernel.org>
-Subject: [PATCH] ahci_imx: depend on CONFIG_MFD_SYSCON
-
-ahci_imx makes use of regmap but the dependency wasn't specified in
-Kconfig leading build failures if CONFIG_AHCI_IMX is enabled but
-CONFIG_MFD_SYSCON is not.  Add the Kconfig dependency.
-
-Signed-off-by: Tejun Heo <tj@kernel.org>
-Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
----
- drivers/ata/Kconfig | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/ata/Kconfig
-+++ b/drivers/ata/Kconfig
-@@ -99,7 +99,7 @@ config SATA_AHCI_PLATFORM
- config AHCI_IMX
-       tristate "Freescale i.MX AHCI SATA support"
--      depends on SATA_AHCI_PLATFORM
-+      depends on SATA_AHCI_PLATFORM && MFD_SYSCON
-       help
-         This option enables support for the Freescale i.MX SoC's
-         onboard AHCI SATA.
diff --git a/src/patches/kernel/wandboard/imx/0011-add-pcie-designware.patch b/src/patches/kernel/wandboard/imx/0011-add-pcie-designware.patch
deleted file mode 100644 (file)
index 3d865d3..0000000
+++ /dev/null
@@ -1,636 +0,0 @@
---- /dev/null  2013-12-09 21:30:35.000000000 +0000
-+++ drivers/pci/host/pcie-designware.h 2013-09-20 01:59:32.000000000 +0000
-@@ -0,0 +1,65 @@
-+/*
-+ * Synopsys Designware PCIe host controller driver
-+ *
-+ * Copyright (C) 2013 Samsung Electronics Co., Ltd.
-+ *            http://www.samsung.com
-+ *
-+ * Author: Jingoo Han <jg1.han@samsung.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+struct pcie_port_info {
-+      u32             cfg0_size;
-+      u32             cfg1_size;
-+      u32             io_size;
-+      u32             mem_size;
-+      phys_addr_t     io_bus_addr;
-+      phys_addr_t     mem_bus_addr;
-+};
-+
-+struct pcie_port {
-+      struct device           *dev;
-+      u8                      root_bus_nr;
-+      void __iomem            *dbi_base;
-+      u64                     cfg0_base;
-+      void __iomem            *va_cfg0_base;
-+      u64                     cfg1_base;
-+      void __iomem            *va_cfg1_base;
-+      u64                     io_base;
-+      u64                     mem_base;
-+      spinlock_t              conf_lock;
-+      struct resource         cfg;
-+      struct resource         io;
-+      struct resource         mem;
-+      struct pcie_port_info   config;
-+      int                     irq;
-+      u32                     lanes;
-+      struct pcie_host_ops    *ops;
-+};
-+
-+struct pcie_host_ops {
-+      void (*readl_rc)(struct pcie_port *pp,
-+                      void __iomem *dbi_base, u32 *val);
-+      void (*writel_rc)(struct pcie_port *pp,
-+                      u32 val, void __iomem *dbi_base);
-+      int (*rd_own_conf)(struct pcie_port *pp, int where, int size, u32 *val);
-+      int (*wr_own_conf)(struct pcie_port *pp, int where, int size, u32 val);
-+      int (*link_up)(struct pcie_port *pp);
-+      void (*host_init)(struct pcie_port *pp);
-+};
-+
-+extern unsigned long global_io_offset;
-+
-+int cfg_read(void __iomem *addr, int where, int size, u32 *val);
-+int cfg_write(void __iomem *addr, int where, int size, u32 val);
-+int dw_pcie_wr_own_conf(struct pcie_port *pp, int where, int size, u32 val);
-+int dw_pcie_rd_own_conf(struct pcie_port *pp, int where, int size, u32 *val);
-+int dw_pcie_link_up(struct pcie_port *pp);
-+void dw_pcie_setup_rc(struct pcie_port *pp);
-+int dw_pcie_host_init(struct pcie_port *pp);
-+int dw_pcie_setup(int nr, struct pci_sys_data *sys);
-+struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys);
-+int dw_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
---- /dev/null  2013-12-09 21:30:35.000000000 +0000
-+++ drivers/pci/host/pcie-designware.c 2013-09-20 01:59:32.000000000 +0000
-@@ -0,0 +1,565 @@
-+/*
-+ * Synopsys Designware PCIe host controller driver
-+ *
-+ * Copyright (C) 2013 Samsung Electronics Co., Ltd.
-+ *            http://www.samsung.com
-+ *
-+ * Author: Jingoo Han <jg1.han@samsung.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/of_address.h>
-+#include <linux/pci.h>
-+#include <linux/pci_regs.h>
-+#include <linux/types.h>
-+
-+#include "pcie-designware.h"
-+
-+/* Synopsis specific PCIE configuration registers */
-+#define PCIE_PORT_LINK_CONTROL                0x710
-+#define PORT_LINK_MODE_MASK           (0x3f << 16)
-+#define PORT_LINK_MODE_1_LANES                (0x1 << 16)
-+#define PORT_LINK_MODE_2_LANES                (0x3 << 16)
-+#define PORT_LINK_MODE_4_LANES                (0x7 << 16)
-+
-+#define PCIE_LINK_WIDTH_SPEED_CONTROL 0x80C
-+#define PORT_LOGIC_SPEED_CHANGE               (0x1 << 17)
-+#define PORT_LOGIC_LINK_WIDTH_MASK    (0x1ff << 8)
-+#define PORT_LOGIC_LINK_WIDTH_1_LANES (0x1 << 8)
-+#define PORT_LOGIC_LINK_WIDTH_2_LANES (0x2 << 8)
-+#define PORT_LOGIC_LINK_WIDTH_4_LANES (0x4 << 8)
-+
-+#define PCIE_MSI_ADDR_LO              0x820
-+#define PCIE_MSI_ADDR_HI              0x824
-+#define PCIE_MSI_INTR0_ENABLE         0x828
-+#define PCIE_MSI_INTR0_MASK           0x82C
-+#define PCIE_MSI_INTR0_STATUS         0x830
-+
-+#define PCIE_ATU_VIEWPORT             0x900
-+#define PCIE_ATU_REGION_INBOUND               (0x1 << 31)
-+#define PCIE_ATU_REGION_OUTBOUND      (0x0 << 31)
-+#define PCIE_ATU_REGION_INDEX1                (0x1 << 0)
-+#define PCIE_ATU_REGION_INDEX0                (0x0 << 0)
-+#define PCIE_ATU_CR1                  0x904
-+#define PCIE_ATU_TYPE_MEM             (0x0 << 0)
-+#define PCIE_ATU_TYPE_IO              (0x2 << 0)
-+#define PCIE_ATU_TYPE_CFG0            (0x4 << 0)
-+#define PCIE_ATU_TYPE_CFG1            (0x5 << 0)
-+#define PCIE_ATU_CR2                  0x908
-+#define PCIE_ATU_ENABLE                       (0x1 << 31)
-+#define PCIE_ATU_BAR_MODE_ENABLE      (0x1 << 30)
-+#define PCIE_ATU_LOWER_BASE           0x90C
-+#define PCIE_ATU_UPPER_BASE           0x910
-+#define PCIE_ATU_LIMIT                        0x914
-+#define PCIE_ATU_LOWER_TARGET         0x918
-+#define PCIE_ATU_BUS(x)                       (((x) & 0xff) << 24)
-+#define PCIE_ATU_DEV(x)                       (((x) & 0x1f) << 19)
-+#define PCIE_ATU_FUNC(x)              (((x) & 0x7) << 16)
-+#define PCIE_ATU_UPPER_TARGET         0x91C
-+
-+static struct hw_pci dw_pci;
-+
-+unsigned long global_io_offset;
-+
-+static inline struct pcie_port *sys_to_pcie(struct pci_sys_data *sys)
-+{
-+      return sys->private_data;
-+}
-+
-+int cfg_read(void __iomem *addr, int where, int size, u32 *val)
-+{
-+      *val = readl(addr);
-+
-+      if (size == 1)
-+              *val = (*val >> (8 * (where & 3))) & 0xff;
-+      else if (size == 2)
-+              *val = (*val >> (8 * (where & 3))) & 0xffff;
-+      else if (size != 4)
-+              return PCIBIOS_BAD_REGISTER_NUMBER;
-+
-+      return PCIBIOS_SUCCESSFUL;
-+}
-+
-+int cfg_write(void __iomem *addr, int where, int size, u32 val)
-+{
-+      if (size == 4)
-+              writel(val, addr);
-+      else if (size == 2)
-+              writew(val, addr + (where & 2));
-+      else if (size == 1)
-+              writeb(val, addr + (where & 3));
-+      else
-+              return PCIBIOS_BAD_REGISTER_NUMBER;
-+
-+      return PCIBIOS_SUCCESSFUL;
-+}
-+
-+static inline void dw_pcie_readl_rc(struct pcie_port *pp, u32 reg, u32 *val)
-+{
-+      if (pp->ops->readl_rc)
-+              pp->ops->readl_rc(pp, pp->dbi_base + reg, val);
-+      else
-+              *val = readl(pp->dbi_base + reg);
-+}
-+
-+static inline void dw_pcie_writel_rc(struct pcie_port *pp, u32 val, u32 reg)
-+{
-+      if (pp->ops->writel_rc)
-+              pp->ops->writel_rc(pp, val, pp->dbi_base + reg);
-+      else
-+              writel(val, pp->dbi_base + reg);
-+}
-+
-+int dw_pcie_rd_own_conf(struct pcie_port *pp, int where, int size,
-+                              u32 *val)
-+{
-+      int ret;
-+
-+      if (pp->ops->rd_own_conf)
-+              ret = pp->ops->rd_own_conf(pp, where, size, val);
-+      else
-+              ret = cfg_read(pp->dbi_base + (where & ~0x3), where, size, val);
-+
-+      return ret;
-+}
-+
-+int dw_pcie_wr_own_conf(struct pcie_port *pp, int where, int size,
-+                              u32 val)
-+{
-+      int ret;
-+
-+      if (pp->ops->wr_own_conf)
-+              ret = pp->ops->wr_own_conf(pp, where, size, val);
-+      else
-+              ret = cfg_write(pp->dbi_base + (where & ~0x3), where, size,
-+                              val);
-+
-+      return ret;
-+}
-+
-+int dw_pcie_link_up(struct pcie_port *pp)
-+{
-+      if (pp->ops->link_up)
-+              return pp->ops->link_up(pp);
-+      else
-+              return 0;
-+}
-+
-+int __init dw_pcie_host_init(struct pcie_port *pp)
-+{
-+      struct device_node *np = pp->dev->of_node;
-+      struct of_pci_range range;
-+      struct of_pci_range_parser parser;
-+      u32 val;
-+
-+      if (of_pci_range_parser_init(&parser, np)) {
-+              dev_err(pp->dev, "missing ranges property\n");
-+              return -EINVAL;
-+      }
-+
-+      /* Get the I/O and memory ranges from DT */
-+      for_each_of_pci_range(&parser, &range) {
-+              unsigned long restype = range.flags & IORESOURCE_TYPE_BITS;
-+              if (restype == IORESOURCE_IO) {
-+                      of_pci_range_to_resource(&range, np, &pp->io);
-+                      pp->io.name = "I/O";
-+                      pp->io.start = max_t(resource_size_t,
-+                                           PCIBIOS_MIN_IO,
-+                                           range.pci_addr + global_io_offset);
-+                      pp->io.end = min_t(resource_size_t,
-+                                         IO_SPACE_LIMIT,
-+                                         range.pci_addr + range.size
-+                                         + global_io_offset);
-+                      pp->config.io_size = resource_size(&pp->io);
-+                      pp->config.io_bus_addr = range.pci_addr;
-+              }
-+              if (restype == IORESOURCE_MEM) {
-+                      of_pci_range_to_resource(&range, np, &pp->mem);
-+                      pp->mem.name = "MEM";
-+                      pp->config.mem_size = resource_size(&pp->mem);
-+                      pp->config.mem_bus_addr = range.pci_addr;
-+              }
-+              if (restype == 0) {
-+                      of_pci_range_to_resource(&range, np, &pp->cfg);
-+                      pp->config.cfg0_size = resource_size(&pp->cfg)/2;
-+                      pp->config.cfg1_size = resource_size(&pp->cfg)/2;
-+              }
-+      }
-+
-+      if (!pp->dbi_base) {
-+              pp->dbi_base = devm_ioremap(pp->dev, pp->cfg.start,
-+                                      resource_size(&pp->cfg));
-+              if (!pp->dbi_base) {
-+                      dev_err(pp->dev, "error with ioremap\n");
-+                      return -ENOMEM;
-+              }
-+      }
-+
-+      pp->cfg0_base = pp->cfg.start;
-+      pp->cfg1_base = pp->cfg.start + pp->config.cfg0_size;
-+      pp->io_base = pp->io.start;
-+      pp->mem_base = pp->mem.start;
-+
-+      pp->va_cfg0_base = devm_ioremap(pp->dev, pp->cfg0_base,
-+                                      pp->config.cfg0_size);
-+      if (!pp->va_cfg0_base) {
-+              dev_err(pp->dev, "error with ioremap in function\n");
-+              return -ENOMEM;
-+      }
-+      pp->va_cfg1_base = devm_ioremap(pp->dev, pp->cfg1_base,
-+                                      pp->config.cfg1_size);
-+      if (!pp->va_cfg1_base) {
-+              dev_err(pp->dev, "error with ioremap\n");
-+              return -ENOMEM;
-+      }
-+
-+      if (of_property_read_u32(np, "num-lanes", &pp->lanes)) {
-+              dev_err(pp->dev, "Failed to parse the number of lanes\n");
-+              return -EINVAL;
-+      }
-+
-+      if (pp->ops->host_init)
-+              pp->ops->host_init(pp);
-+
-+      dw_pcie_wr_own_conf(pp, PCI_BASE_ADDRESS_0, 4, 0);
-+
-+      /* program correct class for RC */
-+      dw_pcie_wr_own_conf(pp, PCI_CLASS_DEVICE, 2, PCI_CLASS_BRIDGE_PCI);
-+
-+      dw_pcie_rd_own_conf(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, 4, &val);
-+      val |= PORT_LOGIC_SPEED_CHANGE;
-+      dw_pcie_wr_own_conf(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, 4, val);
-+
-+      dw_pci.nr_controllers = 1;
-+      dw_pci.private_data = (void **)&pp;
-+
-+      pci_common_init(&dw_pci);
-+      pci_assign_unassigned_resources();
-+#ifdef CONFIG_PCI_DOMAINS
-+      dw_pci.domain++;
-+#endif
-+
-+      return 0;
-+}
-+
-+static void dw_pcie_prog_viewport_cfg0(struct pcie_port *pp, u32 busdev)
-+{
-+      /* Program viewport 0 : OUTBOUND : CFG0 */
-+      dw_pcie_writel_rc(pp, PCIE_ATU_REGION_OUTBOUND | PCIE_ATU_REGION_INDEX0,
-+                        PCIE_ATU_VIEWPORT);
-+      dw_pcie_writel_rc(pp, pp->cfg0_base, PCIE_ATU_LOWER_BASE);
-+      dw_pcie_writel_rc(pp, (pp->cfg0_base >> 32), PCIE_ATU_UPPER_BASE);
-+      dw_pcie_writel_rc(pp, pp->cfg0_base + pp->config.cfg0_size - 1,
-+                        PCIE_ATU_LIMIT);
-+      dw_pcie_writel_rc(pp, busdev, PCIE_ATU_LOWER_TARGET);
-+      dw_pcie_writel_rc(pp, 0, PCIE_ATU_UPPER_TARGET);
-+      dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_CFG0, PCIE_ATU_CR1);
-+      dw_pcie_writel_rc(pp, PCIE_ATU_ENABLE, PCIE_ATU_CR2);
-+}
-+
-+static void dw_pcie_prog_viewport_cfg1(struct pcie_port *pp, u32 busdev)
-+{
-+      /* Program viewport 1 : OUTBOUND : CFG1 */
-+      dw_pcie_writel_rc(pp, PCIE_ATU_REGION_OUTBOUND | PCIE_ATU_REGION_INDEX1,
-+                        PCIE_ATU_VIEWPORT);
-+      dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_CFG1, PCIE_ATU_CR1);
-+      dw_pcie_writel_rc(pp, PCIE_ATU_ENABLE, PCIE_ATU_CR2);
-+      dw_pcie_writel_rc(pp, pp->cfg1_base, PCIE_ATU_LOWER_BASE);
-+      dw_pcie_writel_rc(pp, (pp->cfg1_base >> 32), PCIE_ATU_UPPER_BASE);
-+      dw_pcie_writel_rc(pp, pp->cfg1_base + pp->config.cfg1_size - 1,
-+                        PCIE_ATU_LIMIT);
-+      dw_pcie_writel_rc(pp, busdev, PCIE_ATU_LOWER_TARGET);
-+      dw_pcie_writel_rc(pp, 0, PCIE_ATU_UPPER_TARGET);
-+}
-+
-+static void dw_pcie_prog_viewport_mem_outbound(struct pcie_port *pp)
-+{
-+      /* Program viewport 0 : OUTBOUND : MEM */
-+      dw_pcie_writel_rc(pp, PCIE_ATU_REGION_OUTBOUND | PCIE_ATU_REGION_INDEX0,
-+                        PCIE_ATU_VIEWPORT);
-+      dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_MEM, PCIE_ATU_CR1);
-+      dw_pcie_writel_rc(pp, PCIE_ATU_ENABLE, PCIE_ATU_CR2);
-+      dw_pcie_writel_rc(pp, pp->mem_base, PCIE_ATU_LOWER_BASE);
-+      dw_pcie_writel_rc(pp, (pp->mem_base >> 32), PCIE_ATU_UPPER_BASE);
-+      dw_pcie_writel_rc(pp, pp->mem_base + pp->config.mem_size - 1,
-+                        PCIE_ATU_LIMIT);
-+      dw_pcie_writel_rc(pp, pp->config.mem_bus_addr, PCIE_ATU_LOWER_TARGET);
-+      dw_pcie_writel_rc(pp, upper_32_bits(pp->config.mem_bus_addr),
-+                        PCIE_ATU_UPPER_TARGET);
-+}
-+
-+static void dw_pcie_prog_viewport_io_outbound(struct pcie_port *pp)
-+{
-+      /* Program viewport 1 : OUTBOUND : IO */
-+      dw_pcie_writel_rc(pp, PCIE_ATU_REGION_OUTBOUND | PCIE_ATU_REGION_INDEX1,
-+                        PCIE_ATU_VIEWPORT);
-+      dw_pcie_writel_rc(pp, PCIE_ATU_TYPE_IO, PCIE_ATU_CR1);
-+      dw_pcie_writel_rc(pp, PCIE_ATU_ENABLE, PCIE_ATU_CR2);
-+      dw_pcie_writel_rc(pp, pp->io_base, PCIE_ATU_LOWER_BASE);
-+      dw_pcie_writel_rc(pp, (pp->io_base >> 32), PCIE_ATU_UPPER_BASE);
-+      dw_pcie_writel_rc(pp, pp->io_base + pp->config.io_size - 1,
-+                        PCIE_ATU_LIMIT);
-+      dw_pcie_writel_rc(pp, pp->config.io_bus_addr, PCIE_ATU_LOWER_TARGET);
-+      dw_pcie_writel_rc(pp, upper_32_bits(pp->config.io_bus_addr),
-+                        PCIE_ATU_UPPER_TARGET);
-+}
-+
-+static int dw_pcie_rd_other_conf(struct pcie_port *pp, struct pci_bus *bus,
-+              u32 devfn, int where, int size, u32 *val)
-+{
-+      int ret = PCIBIOS_SUCCESSFUL;
-+      u32 address, busdev;
-+
-+      busdev = PCIE_ATU_BUS(bus->number) | PCIE_ATU_DEV(PCI_SLOT(devfn)) |
-+               PCIE_ATU_FUNC(PCI_FUNC(devfn));
-+      address = where & ~0x3;
-+
-+      if (bus->parent->number == pp->root_bus_nr) {
-+              dw_pcie_prog_viewport_cfg0(pp, busdev);
-+              ret = cfg_read(pp->va_cfg0_base + address, where, size, val);
-+              dw_pcie_prog_viewport_mem_outbound(pp);
-+      } else {
-+              dw_pcie_prog_viewport_cfg1(pp, busdev);
-+              ret = cfg_read(pp->va_cfg1_base + address, where, size, val);
-+              dw_pcie_prog_viewport_io_outbound(pp);
-+      }
-+
-+      return ret;
-+}
-+
-+static int dw_pcie_wr_other_conf(struct pcie_port *pp, struct pci_bus *bus,
-+              u32 devfn, int where, int size, u32 val)
-+{
-+      int ret = PCIBIOS_SUCCESSFUL;
-+      u32 address, busdev;
-+
-+      busdev = PCIE_ATU_BUS(bus->number) | PCIE_ATU_DEV(PCI_SLOT(devfn)) |
-+               PCIE_ATU_FUNC(PCI_FUNC(devfn));
-+      address = where & ~0x3;
-+
-+      if (bus->parent->number == pp->root_bus_nr) {
-+              dw_pcie_prog_viewport_cfg0(pp, busdev);
-+              ret = cfg_write(pp->va_cfg0_base + address, where, size, val);
-+              dw_pcie_prog_viewport_mem_outbound(pp);
-+      } else {
-+              dw_pcie_prog_viewport_cfg1(pp, busdev);
-+              ret = cfg_write(pp->va_cfg1_base + address, where, size, val);
-+              dw_pcie_prog_viewport_io_outbound(pp);
-+      }
-+
-+      return ret;
-+}
-+
-+
-+static int dw_pcie_valid_config(struct pcie_port *pp,
-+                              struct pci_bus *bus, int dev)
-+{
-+      /* If there is no link, then there is no device */
-+      if (bus->number != pp->root_bus_nr) {
-+              if (!dw_pcie_link_up(pp))
-+                      return 0;
-+      }
-+
-+      /* access only one slot on each root port */
-+      if (bus->number == pp->root_bus_nr && dev > 0)
-+              return 0;
-+
-+      /*
-+       * do not read more than one device on the bus directly attached
-+       * to RC's (Virtual Bridge's) DS side.
-+       */
-+      if (bus->primary == pp->root_bus_nr && dev > 0)
-+              return 0;
-+
-+      return 1;
-+}
-+
-+static int dw_pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where,
-+                      int size, u32 *val)
-+{
-+      struct pcie_port *pp = sys_to_pcie(bus->sysdata);
-+      unsigned long flags;
-+      int ret;
-+
-+      if (!pp) {
-+              BUG();
-+              return -EINVAL;
-+      }
-+
-+      if (dw_pcie_valid_config(pp, bus, PCI_SLOT(devfn)) == 0) {
-+              *val = 0xffffffff;
-+              return PCIBIOS_DEVICE_NOT_FOUND;
-+      }
-+
-+      spin_lock_irqsave(&pp->conf_lock, flags);
-+      if (bus->number != pp->root_bus_nr)
-+              ret = dw_pcie_rd_other_conf(pp, bus, devfn,
-+                                              where, size, val);
-+      else
-+              ret = dw_pcie_rd_own_conf(pp, where, size, val);
-+      spin_unlock_irqrestore(&pp->conf_lock, flags);
-+
-+      return ret;
-+}
-+
-+static int dw_pcie_wr_conf(struct pci_bus *bus, u32 devfn,
-+                      int where, int size, u32 val)
-+{
-+      struct pcie_port *pp = sys_to_pcie(bus->sysdata);
-+      unsigned long flags;
-+      int ret;
-+
-+      if (!pp) {
-+              BUG();
-+              return -EINVAL;
-+      }
-+
-+      if (dw_pcie_valid_config(pp, bus, PCI_SLOT(devfn)) == 0)
-+              return PCIBIOS_DEVICE_NOT_FOUND;
-+
-+      spin_lock_irqsave(&pp->conf_lock, flags);
-+      if (bus->number != pp->root_bus_nr)
-+              ret = dw_pcie_wr_other_conf(pp, bus, devfn,
-+                                              where, size, val);
-+      else
-+              ret = dw_pcie_wr_own_conf(pp, where, size, val);
-+      spin_unlock_irqrestore(&pp->conf_lock, flags);
-+
-+      return ret;
-+}
-+
-+static struct pci_ops dw_pcie_ops = {
-+      .read = dw_pcie_rd_conf,
-+      .write = dw_pcie_wr_conf,
-+};
-+
-+int dw_pcie_setup(int nr, struct pci_sys_data *sys)
-+{
-+      struct pcie_port *pp;
-+
-+      pp = sys_to_pcie(sys);
-+
-+      if (!pp)
-+              return 0;
-+
-+      if (global_io_offset < SZ_1M && pp->config.io_size > 0) {
-+              sys->io_offset = global_io_offset - pp->config.io_bus_addr;
-+              pci_ioremap_io(sys->io_offset, pp->io.start);
-+              global_io_offset += SZ_64K;
-+              pci_add_resource_offset(&sys->resources, &pp->io,
-+                                      sys->io_offset);
-+      }
-+
-+      sys->mem_offset = pp->mem.start - pp->config.mem_bus_addr;
-+      pci_add_resource_offset(&sys->resources, &pp->mem, sys->mem_offset);
-+
-+      return 1;
-+}
-+
-+struct pci_bus *dw_pcie_scan_bus(int nr, struct pci_sys_data *sys)
-+{
-+      struct pci_bus *bus;
-+      struct pcie_port *pp = sys_to_pcie(sys);
-+
-+      if (pp) {
-+              pp->root_bus_nr = sys->busnr;
-+              bus = pci_scan_root_bus(NULL, sys->busnr, &dw_pcie_ops,
-+                                      sys, &sys->resources);
-+      } else {
-+              bus = NULL;
-+              BUG();
-+      }
-+
-+      return bus;
-+}
-+
-+int dw_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
-+{
-+      struct pcie_port *pp = sys_to_pcie(dev->bus->sysdata);
-+
-+      return pp->irq;
-+}
-+
-+static struct hw_pci dw_pci = {
-+      .setup          = dw_pcie_setup,
-+      .scan           = dw_pcie_scan_bus,
-+      .map_irq        = dw_pcie_map_irq,
-+};
-+
-+void dw_pcie_setup_rc(struct pcie_port *pp)
-+{
-+      struct pcie_port_info *config = &pp->config;
-+      u32 val;
-+      u32 membase;
-+      u32 memlimit;
-+
-+      /* set the number of lines as 4 */
-+      dw_pcie_readl_rc(pp, PCIE_PORT_LINK_CONTROL, &val);
-+      val &= ~PORT_LINK_MODE_MASK;
-+      switch (pp->lanes) {
-+      case 1:
-+              val |= PORT_LINK_MODE_1_LANES;
-+              break;
-+      case 2:
-+              val |= PORT_LINK_MODE_2_LANES;
-+              break;
-+      case 4:
-+              val |= PORT_LINK_MODE_4_LANES;
-+              break;
-+      }
-+      dw_pcie_writel_rc(pp, val, PCIE_PORT_LINK_CONTROL);
-+
-+      /* set link width speed control register */
-+      dw_pcie_readl_rc(pp, PCIE_LINK_WIDTH_SPEED_CONTROL, &val);
-+      val &= ~PORT_LOGIC_LINK_WIDTH_MASK;
-+      switch (pp->lanes) {
-+      case 1:
-+              val |= PORT_LOGIC_LINK_WIDTH_1_LANES;
-+              break;
-+      case 2:
-+              val |= PORT_LOGIC_LINK_WIDTH_2_LANES;
-+              break;
-+      case 4:
-+              val |= PORT_LOGIC_LINK_WIDTH_4_LANES;
-+              break;
-+      }
-+      dw_pcie_writel_rc(pp, val, PCIE_LINK_WIDTH_SPEED_CONTROL);
-+
-+      /* setup RC BARs */
-+      dw_pcie_writel_rc(pp, 0x00000004, PCI_BASE_ADDRESS_0);
-+      dw_pcie_writel_rc(pp, 0x00000004, PCI_BASE_ADDRESS_1);
-+
-+      /* setup interrupt pins */
-+      dw_pcie_readl_rc(pp, PCI_INTERRUPT_LINE, &val);
-+      val &= 0xffff00ff;
-+      val |= 0x00000100;
-+      dw_pcie_writel_rc(pp, val, PCI_INTERRUPT_LINE);
-+
-+      /* setup bus numbers */
-+      dw_pcie_readl_rc(pp, PCI_PRIMARY_BUS, &val);
-+      val &= 0xff000000;
-+      val |= 0x00010100;
-+      dw_pcie_writel_rc(pp, val, PCI_PRIMARY_BUS);
-+
-+      /* setup memory base, memory limit */
-+      membase = ((u32)pp->mem_base & 0xfff00000) >> 16;
-+      memlimit = (config->mem_size + (u32)pp->mem_base) & 0xfff00000;
-+      val = memlimit | membase;
-+      dw_pcie_writel_rc(pp, val, PCI_MEMORY_BASE);
-+
-+      /* setup command register */
-+      dw_pcie_readl_rc(pp, PCI_COMMAND, &val);
-+      val &= 0xffff0000;
-+      val |= PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
-+              PCI_COMMAND_MASTER | PCI_COMMAND_SERR;
-+      dw_pcie_writel_rc(pp, val, PCI_COMMAND);
-+}
-+
-+MODULE_AUTHOR("Jingoo Han <jg1.han@samsung.com>");
-+MODULE_DESCRIPTION("Designware PCIe host controller driver");
-+MODULE_LICENSE("GPL v2");
diff --git a/src/patches/kernel/wandboard/imx/0012-pcie-backport-fixes.patch b/src/patches/kernel/wandboard/imx/0012-pcie-backport-fixes.patch
deleted file mode 100644 (file)
index aef6b05..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/drivers/pci/Kconfig
-+++ b/drivers/pci/Kconfig
-@@ -125,3 +125,5 @@ config PCI_IOAPIC
- config PCI_LABEL
-       def_bool y if (DMI || ACPI)
-       select NLS
-+
-+source "drivers/pci/host/Kconfig"
---- a/drivers/pci/Makefile
-+++ b/drivers/pci/Makefile
-@@ -67,3 +67,6 @@ obj-$(CONFIG_XEN_PCIDEV_FRONTEND) += xen
- obj-$(CONFIG_OF) += of.o
- ccflags-$(CONFIG_PCI_DEBUG) := -DDEBUG
-+
-+# PCI host controller drivers
-+obj-y += host/
diff --git a/src/patches/kernel/wandboard/imx/0013-of-pci-Provide-support-for-parsing-PCI-DT-ranges-pro.patch b/src/patches/kernel/wandboard/imx/0013-of-pci-Provide-support-for-parsing-PCI-DT-ranges-pro.patch
deleted file mode 100644 (file)
index ab20f7f..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-From: Andrew Murray <Andrew.Murray@arm.com>
-Subject: [PATCH] of/pci: Provide support for parsing PCI DT ranges property
-
-This patch factors out common implementation patterns to reduce overall kernel
-code and provide a means for host bridge drivers to directly obtain struct
-resources from the DT's ranges property without relying on architecture specific
-DT handling. This will make it easier to write archiecture independent host bridge
-drivers and mitigate against further duplication of DT parsing code.
-
-This patch can be used in the following way:
-
-       struct of_pci_range_parser parser;
-       struct of_pci_range range;
-
-       if (of_pci_range_parser_init(&parser, np))
-               ; //no ranges property
-
-       for_each_of_pci_range(&parser, &range) {
-
-               /*
-                       directly access properties of the address range, e.g.:
-                       range.pci_space, range.pci_addr, range.cpu_addr,
-                       range.size, range.flags
-
-                       alternatively obtain a struct resource, e.g.:
-                       struct resource res;
-                       of_pci_range_to_resource(&range, np, &res);
-               */
-       }
-
-Additionally the implementation takes care of adjacent ranges and merges them
-into a single range (as was the case with powerpc and microblaze).
-
-Signed-off-by: Andrew Murray <Andrew.Murray@arm.com>
-Signed-off-by: Liviu Dudau <Liviu.Dudau@arm.com>
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-Reviewed-by: Rob Herring <rob.herring@calxeda.com>
-Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-Tested-by: Linus Walleij <linus.walleij@linaro.org>
-Tested-by: Jingoo Han <jg1.han@samsung.com>
-Acked-by: Grant Likely <grant.likely@secretlab.ca>
-Signed-off-by: Jason Cooper <jason@lakedaemon.net>
----
- drivers/of/address.c       | 67 ++++++++++++++++++++++++++++++++++++++++++++++
- include/linux/of_address.h | 48 +++++++++++++++++++++++++++++++++
- 2 files changed, 115 insertions(+)
-
---- a/drivers/of/address.c
-+++ b/drivers/of/address.c
-@@ -231,6 +231,73 @@ int of_pci_address_to_resource(struct de
-       return __of_address_to_resource(dev, addrp, size, flags, NULL, r);
- }
- EXPORT_SYMBOL_GPL(of_pci_address_to_resource);
-+
-+int of_pci_range_parser_init(struct of_pci_range_parser *parser,
-+                              struct device_node *node)
-+{
-+      const int na = 3, ns = 2;
-+      int rlen;
-+
-+      parser->node = node;
-+      parser->pna = of_n_addr_cells(node);
-+      parser->np = parser->pna + na + ns;
-+
-+      parser->range = of_get_property(node, "ranges", &rlen);
-+      if (parser->range == NULL)
-+              return -ENOENT;
-+
-+      parser->end = parser->range + rlen / sizeof(__be32);
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL_GPL(of_pci_range_parser_init);
-+
-+struct of_pci_range *of_pci_range_parser_one(struct of_pci_range_parser *parser,
-+                                              struct of_pci_range *range)
-+{
-+      const int na = 3, ns = 2;
-+
-+      if (!range)
-+              return NULL;
-+
-+      if (!parser->range || parser->range + parser->np > parser->end)
-+              return NULL;
-+
-+      range->pci_space = parser->range[0];
-+      range->flags = of_bus_pci_get_flags(parser->range);
-+      range->pci_addr = of_read_number(parser->range + 1, ns);
-+      range->cpu_addr = of_translate_address(parser->node,
-+                              parser->range + na);
-+      range->size = of_read_number(parser->range + parser->pna + na, ns);
-+
-+      parser->range += parser->np;
-+
-+      /* Now consume following elements while they are contiguous */
-+      while (parser->range + parser->np <= parser->end) {
-+              u32 flags, pci_space;
-+              u64 pci_addr, cpu_addr, size;
-+
-+              pci_space = be32_to_cpup(parser->range);
-+              flags = of_bus_pci_get_flags(parser->range);
-+              pci_addr = of_read_number(parser->range + 1, ns);
-+              cpu_addr = of_translate_address(parser->node,
-+                              parser->range + na);
-+              size = of_read_number(parser->range + parser->pna + na, ns);
-+
-+              if (flags != range->flags)
-+                      break;
-+              if (pci_addr != range->pci_addr + range->size ||
-+                  cpu_addr != range->cpu_addr + range->size)
-+                      break;
-+
-+              range->size += size;
-+              parser->range += parser->np;
-+      }
-+
-+      return range;
-+}
-+EXPORT_SYMBOL_GPL(of_pci_range_parser_one);
-+
- #endif /* CONFIG_PCI */
- /*
---- a/include/linux/of_address.h
-+++ b/include/linux/of_address.h
-@@ -4,6 +4,36 @@
- #include <linux/errno.h>
- #include <linux/of.h>
-+struct of_pci_range_parser {
-+      struct device_node *node;
-+      const __be32 *range;
-+      const __be32 *end;
-+      int np;
-+      int pna;
-+};
-+
-+struct of_pci_range {
-+      u32 pci_space;
-+      u64 pci_addr;
-+      u64 cpu_addr;
-+      u64 size;
-+      u32 flags;
-+};
-+
-+#define for_each_of_pci_range(parser, range) \
-+      for (; of_pci_range_parser_one(parser, range);)
-+
-+static inline void of_pci_range_to_resource(struct of_pci_range *range,
-+                                          struct device_node *np,
-+                                          struct resource *res)
-+{
-+      res->flags = range->flags;
-+      res->start = range->cpu_addr;
-+      res->end = range->cpu_addr + range->size - 1;
-+      res->parent = res->child = res->sibling = NULL;
-+      res->name = np->full_name;
-+}
-+
- #ifdef CONFIG_OF_ADDRESS
- extern u64 of_translate_address(struct device_node *np, const __be32 *addr);
- extern bool of_can_translate_address(struct device_node *dev);
-@@ -27,6 +57,11 @@ static inline unsigned long pci_address_
- #define pci_address_to_pio pci_address_to_pio
- #endif
-+extern int of_pci_range_parser_init(struct of_pci_range_parser *parser,
-+                      struct device_node *node);
-+extern struct of_pci_range *of_pci_range_parser_one(
-+                                      struct of_pci_range_parser *parser,
-+                                      struct of_pci_range *range);
- #else /* CONFIG_OF_ADDRESS */
- #ifndef of_address_to_resource
- static inline int of_address_to_resource(struct device_node *dev, int index,
-@@ -53,6 +88,19 @@ static inline const __be32 *of_get_addre
- {
-       return NULL;
- }
-+
-+static inline int of_pci_range_parser_init(struct of_pci_range_parser *parser,
-+                      struct device_node *node)
-+{
-+      return -1;
-+}
-+
-+static inline struct of_pci_range *of_pci_range_parser_one(
-+                                      struct of_pci_range_parser *parser,
-+                                      struct of_pci_range *range)
-+{
-+      return NULL;
-+}
- #endif /* CONFIG_OF_ADDRESS */
diff --git a/src/patches/kernel/wandboard/imx/0014-ARM-imx6q-Add-PCIe-bits-to-GPR-syscon-definition.patch b/src/patches/kernel/wandboard/imx/0014-ARM-imx6q-Add-PCIe-bits-to-GPR-syscon-definition.patch
deleted file mode 100644 (file)
index 19ca079..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-From: Sean Cross <xobs@kosagi.com>
-Subject: [PATCH 1/2] ARM: imx6q: Add PCIe bits to GPR syscon definition
-
-PCIe requires additional bits be defined for GPR8 and GPR12.
-
-Signed-off-by: Sean Cross <xobs@kosagi.com>
-Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
-Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
----
- include/linux/mfd/syscon/imx6q-iomuxc-gpr.h | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
---- a/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
-+++ b/include/linux/mfd/syscon/imx6q-iomuxc-gpr.h
-@@ -241,6 +241,12 @@
- #define IMX6Q_GPR5_L2_CLK_STOP                        BIT(8)
-+#define IMX6Q_GPR8_TX_SWING_LOW                       (0x7f << 25)
-+#define IMX6Q_GPR8_TX_SWING_FULL              (0x7f << 18)
-+#define IMX6Q_GPR8_TX_DEEMPH_GEN2_6DB         (0x3f << 12)
-+#define IMX6Q_GPR8_TX_DEEMPH_GEN2_3P5DB               (0x3f << 6)
-+#define IMX6Q_GPR8_TX_DEEMPH_GEN1             (0x3f << 0)
-+
- #define IMX6Q_GPR9_TZASC2_BYP                 BIT(1)
- #define IMX6Q_GPR9_TZASC1_BYP                 BIT(0)
-@@ -273,7 +279,9 @@
- #define IMX6Q_GPR12_ARMP_AHB_CLK_EN           BIT(26)
- #define IMX6Q_GPR12_ARMP_ATB_CLK_EN           BIT(25)
- #define IMX6Q_GPR12_ARMP_APB_CLK_EN           BIT(24)
-+#define IMX6Q_GPR12_DEVICE_TYPE                       (0xf << 12)
- #define IMX6Q_GPR12_PCIE_CTL_2                        BIT(10)
-+#define IMX6Q_GPR12_LOS_LEVEL                 (0x1f << 4)
- #define IMX6Q_GPR13_SDMA_STOP_REQ             BIT(30)
- #define IMX6Q_GPR13_CAN2_STOP_REQ             BIT(29)
diff --git a/src/patches/kernel/wandboard/imx/0015-PCI-imx6-Add-support-for-i.MX6-PCIe-controller.patch b/src/patches/kernel/wandboard/imx/0015-PCI-imx6-Add-support-for-i.MX6-PCIe-controller.patch
deleted file mode 100644 (file)
index 599cd0e..0000000
+++ /dev/null
@@ -1,616 +0,0 @@
-Subject: [PATCH 2/2] PCI: imx6: Add support for i.MX6 PCIe controller
-From: Sean Cross <xobs@kosagi.com>
-
-Add support for the PCIe port present on the i.MX6 family of controllers.
-These use the Synopsis Designware core tied to their own PHY.
-
-Signed-off-by: Sean Cross <xobs@kosagi.com>
-Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
-Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
----
- drivers/pci/host/Kconfig                           |   6 +
- drivers/pci/host/Makefile                          |   1 +
- drivers/pci/host/pci-imx6.c                        | 575 +++++++++++++++++++++
- 4 files changed, 588 insertions(+), 1 deletion(-)
- create mode 100644 drivers/pci/host/pci-imx6.c
-
---- /dev/null
-+++ b/drivers/pci/host/Kconfig
-@@ -0,0 +1,13 @@
-+menu "PCI host controller drivers"
-+      depends on PCI
-+
-+config PCIE_DW
-+      bool
-+
-+config PCI_IMX6
-+      bool "Freescale i.MX6 PCIe controller"
-+      depends on SOC_IMX6Q
-+      select PCIEPORTBUS
-+      select PCIE_DW
-+
-+endmenu
---- /dev/null
-+++ b/drivers/pci/host/Makefile
-@@ -0,0 +1,2 @@
-+obj-$(CONFIG_PCIE_DW) += pcie-designware.o
-+obj-$(CONFIG_PCI_IMX6) += pci-imx6.o
---- /dev/null
-+++ b/drivers/pci/host/pci-imx6.c
-@@ -0,0 +1,575 @@
-+/*
-+ * PCIe host controller driver for Freescale i.MX6 SoCs
-+ *
-+ * Copyright (C) 2013 Kosagi
-+ *            http://www.kosagi.com
-+ *
-+ * Author: Sean Cross <xobs@kosagi.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/clk.h>
-+#include <linux/delay.h>
-+#include <linux/gpio.h>
-+#include <linux/kernel.h>
-+#include <linux/mfd/syscon.h>
-+#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
-+#include <linux/module.h>
-+#include <linux/of_gpio.h>
-+#include <linux/pci.h>
-+#include <linux/platform_device.h>
-+#include <linux/regmap.h>
-+#include <linux/resource.h>
-+#include <linux/signal.h>
-+#include <linux/types.h>
-+
-+#include "pcie-designware.h"
-+
-+#define to_imx6_pcie(x)       container_of(x, struct imx6_pcie, pp)
-+
-+struct imx6_pcie {
-+      int                     reset_gpio;
-+      int                     power_on_gpio;
-+      int                     wake_up_gpio;
-+      int                     disable_gpio;
-+      struct clk              *lvds_gate;
-+      struct clk              *sata_ref_100m;
-+      struct clk              *pcie_ref_125m;
-+      struct clk              *pcie_axi;
-+      struct pcie_port        pp;
-+      struct regmap           *iomuxc_gpr;
-+      void __iomem            *mem_base;
-+};
-+
-+/* PCIe Port Logic registers (memory-mapped) */
-+#define PL_OFFSET 0x700
-+#define PCIE_PHY_DEBUG_R0 (PL_OFFSET + 0x28)
-+#define PCIE_PHY_DEBUG_R1 (PL_OFFSET + 0x2c)
-+
-+#define PCIE_PHY_CTRL (PL_OFFSET + 0x114)
-+#define PCIE_PHY_CTRL_DATA_LOC 0
-+#define PCIE_PHY_CTRL_CAP_ADR_LOC 16
-+#define PCIE_PHY_CTRL_CAP_DAT_LOC 17
-+#define PCIE_PHY_CTRL_WR_LOC 18
-+#define PCIE_PHY_CTRL_RD_LOC 19
-+
-+#define PCIE_PHY_STAT (PL_OFFSET + 0x110)
-+#define PCIE_PHY_STAT_ACK_LOC 16
-+
-+/* PHY registers (not memory-mapped) */
-+#define PCIE_PHY_RX_ASIC_OUT 0x100D
-+
-+#define PHY_RX_OVRD_IN_LO 0x1005
-+#define PHY_RX_OVRD_IN_LO_RX_DATA_EN (1 << 5)
-+#define PHY_RX_OVRD_IN_LO_RX_PLL_EN (1 << 3)
-+
-+static int pcie_phy_poll_ack(void __iomem *dbi_base, int exp_val)
-+{
-+      u32 val;
-+      u32 max_iterations = 10;
-+      u32 wait_counter = 0;
-+
-+      do {
-+              val = readl(dbi_base + PCIE_PHY_STAT);
-+              val = (val >> PCIE_PHY_STAT_ACK_LOC) & 0x1;
-+              wait_counter++;
-+
-+              if (val == exp_val)
-+                      return 0;
-+
-+              udelay(1);
-+      } while (wait_counter < max_iterations);
-+
-+      return -ETIMEDOUT;
-+}
-+
-+static int pcie_phy_wait_ack(void __iomem *dbi_base, int addr)
-+{
-+      u32 val;
-+      int ret;
-+
-+      val = addr << PCIE_PHY_CTRL_DATA_LOC;
-+      writel(val, dbi_base + PCIE_PHY_CTRL);
-+
-+      val |= (0x1 << PCIE_PHY_CTRL_CAP_ADR_LOC);
-+      writel(val, dbi_base + PCIE_PHY_CTRL);
-+
-+      ret = pcie_phy_poll_ack(dbi_base, 1);
-+      if (ret)
-+              return ret;
-+
-+      val = addr << PCIE_PHY_CTRL_DATA_LOC;
-+      writel(val, dbi_base + PCIE_PHY_CTRL);
-+
-+      ret = pcie_phy_poll_ack(dbi_base, 0);
-+      if (ret)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+/* Read from the 16-bit PCIe PHY control registers (not memory-mapped) */
-+static int pcie_phy_read(void __iomem *dbi_base, int addr , int *data)
-+{
-+      u32 val, phy_ctl;
-+      int ret;
-+
-+      ret = pcie_phy_wait_ack(dbi_base, addr);
-+      if (ret)
-+              return ret;
-+
-+      /* assert Read signal */
-+      phy_ctl = 0x1 << PCIE_PHY_CTRL_RD_LOC;
-+      writel(phy_ctl, dbi_base + PCIE_PHY_CTRL);
-+
-+      ret = pcie_phy_poll_ack(dbi_base, 1);
-+      if (ret)
-+              return ret;
-+
-+      val = readl(dbi_base + PCIE_PHY_STAT);
-+      *data = val & 0xffff;
-+
-+      /* deassert Read signal */
-+      writel(0x00, dbi_base + PCIE_PHY_CTRL);
-+
-+      ret = pcie_phy_poll_ack(dbi_base, 0);
-+      if (ret)
-+              return ret;
-+
-+      return 0;
-+}
-+
-+static int pcie_phy_write(void __iomem *dbi_base, int addr, int data)
-+{
-+      u32 var;
-+      int ret;
-+
-+      /* write addr */
-+      /* cap addr */
-+      ret = pcie_phy_wait_ack(dbi_base, addr);
-+      if (ret)
-+              return ret;
-+
-+      var = data << PCIE_PHY_CTRL_DATA_LOC;
-+      writel(var, dbi_base + PCIE_PHY_CTRL);
-+
-+      /* capture data */
-+      var |= (0x1 << PCIE_PHY_CTRL_CAP_DAT_LOC);
-+      writel(var, dbi_base + PCIE_PHY_CTRL);
-+
-+      ret = pcie_phy_poll_ack(dbi_base, 1);
-+      if (ret)
-+              return ret;
-+
-+      /* deassert cap data */
-+      var = data << PCIE_PHY_CTRL_DATA_LOC;
-+      writel(var, dbi_base + PCIE_PHY_CTRL);
-+
-+      /* wait for ack de-assertion */
-+      ret = pcie_phy_poll_ack(dbi_base, 0);
-+      if (ret)
-+              return ret;
-+
-+      /* assert wr signal */
-+      var = 0x1 << PCIE_PHY_CTRL_WR_LOC;
-+      writel(var, dbi_base + PCIE_PHY_CTRL);
-+
-+      /* wait for ack */
-+      ret = pcie_phy_poll_ack(dbi_base, 1);
-+      if (ret)
-+              return ret;
-+
-+      /* deassert wr signal */
-+      var = data << PCIE_PHY_CTRL_DATA_LOC;
-+      writel(var, dbi_base + PCIE_PHY_CTRL);
-+
-+      /* wait for ack de-assertion */
-+      ret = pcie_phy_poll_ack(dbi_base, 0);
-+      if (ret)
-+              return ret;
-+
-+      writel(0x0, dbi_base + PCIE_PHY_CTRL);
-+
-+      return 0;
-+}
-+
-+/*  Added for PCI abort handling */
-+static int imx6q_pcie_abort_handler(unsigned long addr,
-+              unsigned int fsr, struct pt_regs *regs)
-+{
-+      /*
-+       * If it was an imprecise abort, then we need to correct the
-+       * return address to be _after_ the instruction.
-+       */
-+      if (fsr & (1 << 10))
-+              regs->ARM_pc += 4;
-+      return 0;
-+}
-+
-+static int imx6_pcie_assert_core_reset(struct pcie_port *pp)
-+{
-+      struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
-+
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
-+                      IMX6Q_GPR1_PCIE_TEST_PD, 1 << 18);
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
-+                      IMX6Q_GPR12_PCIE_CTL_2, 1 << 10);
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
-+                      IMX6Q_GPR1_PCIE_REF_CLK_EN, 0 << 16);
-+
-+      gpio_set_value(imx6_pcie->reset_gpio, 0);
-+      msleep(100);
-+      gpio_set_value(imx6_pcie->reset_gpio, 1);
-+
-+      return 0;
-+}
-+
-+static int imx6_pcie_deassert_core_reset(struct pcie_port *pp)
-+{
-+      struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
-+      int ret;
-+
-+      if (gpio_is_valid(imx6_pcie->power_on_gpio))
-+              gpio_set_value(imx6_pcie->power_on_gpio, 1);
-+
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
-+                      IMX6Q_GPR1_PCIE_TEST_PD, 0 << 18);
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR1,
-+                      IMX6Q_GPR1_PCIE_REF_CLK_EN, 1 << 16);
-+
-+      ret = clk_prepare_enable(imx6_pcie->sata_ref_100m);
-+      if (ret) {
-+              dev_err(pp->dev, "unable to enable sata_ref_100m\n");
-+              goto err_sata_ref;
-+      }
-+
-+      ret = clk_prepare_enable(imx6_pcie->pcie_ref_125m);
-+      if (ret) {
-+              dev_err(pp->dev, "unable to enable pcie_ref_125m\n");
-+              goto err_pcie_ref;
-+      }
-+
-+      ret = clk_prepare_enable(imx6_pcie->lvds_gate);
-+      if (ret) {
-+              dev_err(pp->dev, "unable to enable lvds_gate\n");
-+              goto err_lvds_gate;
-+      }
-+
-+      ret = clk_prepare_enable(imx6_pcie->pcie_axi);
-+      if (ret) {
-+              dev_err(pp->dev, "unable to enable pcie_axi\n");
-+              goto err_pcie_axi;
-+      }
-+
-+      /* allow the clocks to stabilize */
-+      usleep_range(200, 500);
-+
-+      return 0;
-+
-+err_pcie_axi:
-+      clk_disable_unprepare(imx6_pcie->lvds_gate);
-+err_lvds_gate:
-+      clk_disable_unprepare(imx6_pcie->pcie_ref_125m);
-+err_pcie_ref:
-+      clk_disable_unprepare(imx6_pcie->sata_ref_100m);
-+err_sata_ref:
-+      return ret;
-+
-+}
-+
-+static void imx6_pcie_init_phy(struct pcie_port *pp)
-+{
-+      struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
-+
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
-+                      IMX6Q_GPR12_PCIE_CTL_2, 0 << 10);
-+
-+      /* configure constant input signal to the pcie ctrl and phy */
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
-+                      IMX6Q_GPR12_DEVICE_TYPE, PCI_EXP_TYPE_ROOT_PORT << 12);
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
-+                      IMX6Q_GPR12_LOS_LEVEL, 9 << 4);
-+
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
-+                      IMX6Q_GPR8_TX_DEEMPH_GEN1, 0 << 0);
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
-+                      IMX6Q_GPR8_TX_DEEMPH_GEN2_3P5DB, 0 << 6);
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
-+                      IMX6Q_GPR8_TX_DEEMPH_GEN2_6DB, 20 << 12);
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
-+                      IMX6Q_GPR8_TX_SWING_FULL, 127 << 18);
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR8,
-+                      IMX6Q_GPR8_TX_SWING_LOW, 127 << 25);
-+}
-+
-+static void imx6_pcie_host_init(struct pcie_port *pp)
-+{
-+      int count = 0;
-+      struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp);
-+
-+      imx6_pcie_assert_core_reset(pp);
-+
-+      imx6_pcie_init_phy(pp);
-+
-+      imx6_pcie_deassert_core_reset(pp);
-+
-+      dw_pcie_setup_rc(pp);
-+
-+      regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12,
-+                      IMX6Q_GPR12_PCIE_CTL_2, 1 << 10);
-+
-+      while (!dw_pcie_link_up(pp)) {
-+              usleep_range(100, 1000);
-+              count++;
-+              if (count >= 10) {
-+                      dev_err(pp->dev, "phy link never came up\n");
-+                      dev_dbg(pp->dev,
-+                              "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n",
-+                              readl(pp->dbi_base + PCIE_PHY_DEBUG_R0),
-+                              readl(pp->dbi_base + PCIE_PHY_DEBUG_R1));
-+                      break;
-+              }
-+      }
-+
-+      return;
-+}
-+
-+static int imx6_pcie_link_up(struct pcie_port *pp)
-+{
-+      u32 rc, ltssm, rx_valid, temp;
-+
-+      /* link is debug bit 36, debug register 1 starts at bit 32 */
-+      rc = readl(pp->dbi_base + PCIE_PHY_DEBUG_R1) & (0x1 << (36 - 32));
-+      if (rc)
-+              return -EAGAIN;
-+
-+      /*
-+       * From L0, initiate MAC entry to gen2 if EP/RC supports gen2.
-+       * Wait 2ms (LTSSM timeout is 24ms, PHY lock is ~5us in gen2).
-+       * If (MAC/LTSSM.state == Recovery.RcvrLock)
-+       * && (PHY/rx_valid==0) then pulse PHY/rx_reset. Transition
-+       * to gen2 is stuck
-+       */
-+      pcie_phy_read(pp->dbi_base, PCIE_PHY_RX_ASIC_OUT, &rx_valid);
-+      ltssm = readl(pp->dbi_base + PCIE_PHY_DEBUG_R0) & 0x3F;
-+
-+      if (rx_valid & 0x01)
-+              return 0;
-+
-+      if (ltssm != 0x0d)
-+              return 0;
-+
-+      dev_err(pp->dev, "transition to gen2 is stuck, reset PHY!\n");
-+
-+      pcie_phy_read(pp->dbi_base,
-+              PHY_RX_OVRD_IN_LO, &temp);
-+      temp |= (PHY_RX_OVRD_IN_LO_RX_DATA_EN
-+              | PHY_RX_OVRD_IN_LO_RX_PLL_EN);
-+      pcie_phy_write(pp->dbi_base,
-+              PHY_RX_OVRD_IN_LO, temp);
-+
-+      usleep_range(2000, 3000);
-+
-+      pcie_phy_read(pp->dbi_base,
-+              PHY_RX_OVRD_IN_LO, &temp);
-+      temp &= ~(PHY_RX_OVRD_IN_LO_RX_DATA_EN
-+              | PHY_RX_OVRD_IN_LO_RX_PLL_EN);
-+      pcie_phy_write(pp->dbi_base,
-+              PHY_RX_OVRD_IN_LO, temp);
-+
-+      return 0;
-+}
-+
-+static struct pcie_host_ops imx6_pcie_host_ops = {
-+      .link_up = imx6_pcie_link_up,
-+      .host_init = imx6_pcie_host_init,
-+};
-+
-+static int imx6_add_pcie_port(struct pcie_port *pp,
-+                      struct platform_device *pdev)
-+{
-+      int ret;
-+
-+      pp->irq = platform_get_irq(pdev, 0);
-+      if (!pp->irq) {
-+              dev_err(&pdev->dev, "failed to get irq\n");
-+              return -ENODEV;
-+      }
-+
-+      pp->root_bus_nr = -1;
-+      pp->ops = &imx6_pcie_host_ops;
-+
-+      spin_lock_init(&pp->conf_lock);
-+      ret = dw_pcie_host_init(pp);
-+      if (ret) {
-+              dev_err(&pdev->dev, "failed to initialize host\n");
-+              return ret;
-+      }
-+
-+      return 0;
-+}
-+
-+static int __init imx6_pcie_probe(struct platform_device *pdev)
-+{
-+      struct imx6_pcie *imx6_pcie;
-+      struct pcie_port *pp;
-+      struct device_node *np = pdev->dev.of_node;
-+      struct resource *dbi_base;
-+      int ret;
-+
-+      imx6_pcie = devm_kzalloc(&pdev->dev, sizeof(*imx6_pcie), GFP_KERNEL);
-+      if (!imx6_pcie)
-+              return -ENOMEM;
-+
-+      pp = &imx6_pcie->pp;
-+      pp->dev = &pdev->dev;
-+
-+      /* Added for PCI abort handling */
-+      hook_fault_code(16 + 6, imx6q_pcie_abort_handler, SIGBUS, 0,
-+              "imprecise external abort");
-+
-+      dbi_base = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      if (!dbi_base) {
-+              dev_err(&pdev->dev, "dbi_base memory resource not found\n");
-+              return -ENODEV;
-+      }
-+
-+      pp->dbi_base = devm_ioremap_resource(&pdev->dev, dbi_base);
-+      if (IS_ERR(pp->dbi_base)) {
-+              dev_err(&pdev->dev, "unable to remap dbi_base\n");
-+              ret = PTR_ERR(pp->dbi_base);
-+              goto err;
-+      }
-+
-+      /* Fetch GPIOs */
-+      imx6_pcie->reset_gpio = of_get_named_gpio(np, "reset-gpio", 0);
-+      if (!gpio_is_valid(imx6_pcie->reset_gpio)) {
-+              dev_err(&pdev->dev, "no reset-gpio defined\n");
-+              ret = -ENODEV;
-+      }
-+      ret = devm_gpio_request_one(&pdev->dev,
-+                              imx6_pcie->reset_gpio,
-+                              GPIOF_OUT_INIT_LOW,
-+                              "PCIe reset");
-+      if (ret) {
-+              dev_err(&pdev->dev, "unable to get reset gpio\n");
-+              goto err;
-+      }
-+
-+      imx6_pcie->power_on_gpio = of_get_named_gpio(np, "power-on-gpio", 0);
-+      if (gpio_is_valid(imx6_pcie->power_on_gpio)) {
-+              ret = devm_gpio_request_one(&pdev->dev,
-+                                      imx6_pcie->power_on_gpio,
-+                                      GPIOF_OUT_INIT_LOW,
-+                                      "PCIe power enable");
-+              if (ret) {
-+                      dev_err(&pdev->dev, "unable to get power-on gpio\n");
-+                      goto err;
-+              }
-+      }
-+
-+      imx6_pcie->wake_up_gpio = of_get_named_gpio(np, "wake-up-gpio", 0);
-+      if (gpio_is_valid(imx6_pcie->wake_up_gpio)) {
-+              ret = devm_gpio_request_one(&pdev->dev,
-+                                      imx6_pcie->wake_up_gpio,
-+                                      GPIOF_IN,
-+                                      "PCIe wake up");
-+              if (ret) {
-+                      dev_err(&pdev->dev, "unable to get wake-up gpio\n");
-+                      goto err;
-+              }
-+      }
-+
-+      imx6_pcie->disable_gpio = of_get_named_gpio(np, "disable-gpio", 0);
-+      if (gpio_is_valid(imx6_pcie->disable_gpio)) {
-+              ret = devm_gpio_request_one(&pdev->dev,
-+                                      imx6_pcie->disable_gpio,
-+                                      GPIOF_OUT_INIT_HIGH,
-+                                      "PCIe disable endpoint");
-+              if (ret) {
-+                      dev_err(&pdev->dev, "unable to get disable-ep gpio\n");
-+                      goto err;
-+              }
-+      }
-+
-+      /* Fetch clocks */
-+      imx6_pcie->lvds_gate = devm_clk_get(&pdev->dev, "lvds_gate");
-+      if (IS_ERR(imx6_pcie->lvds_gate)) {
-+              dev_err(&pdev->dev,
-+                      "lvds_gate clock select missing or invalid\n");
-+              ret = PTR_ERR(imx6_pcie->lvds_gate);
-+              goto err;
-+      }
-+
-+      imx6_pcie->sata_ref_100m = devm_clk_get(&pdev->dev, "sata_ref_100m");
-+      if (IS_ERR(imx6_pcie->sata_ref_100m)) {
-+              dev_err(&pdev->dev,
-+                      "sata_ref_100m clock source missing or invalid\n");
-+              ret = PTR_ERR(imx6_pcie->sata_ref_100m);
-+              goto err;
-+      }
-+
-+      imx6_pcie->pcie_ref_125m = devm_clk_get(&pdev->dev, "pcie_ref_125m");
-+      if (IS_ERR(imx6_pcie->pcie_ref_125m)) {
-+              dev_err(&pdev->dev,
-+                      "pcie_ref_125m clock source missing or invalid\n");
-+              ret = PTR_ERR(imx6_pcie->pcie_ref_125m);
-+              goto err;
-+      }
-+
-+      imx6_pcie->pcie_axi = devm_clk_get(&pdev->dev, "pcie_axi");
-+      if (IS_ERR(imx6_pcie->pcie_axi)) {
-+              dev_err(&pdev->dev,
-+                      "pcie_axi clock source missing or invalid\n");
-+              ret = PTR_ERR(imx6_pcie->pcie_axi);
-+              goto err;
-+      }
-+
-+      /* Grab GPR config register range */
-+      imx6_pcie->iomuxc_gpr =
-+               syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
-+      if (IS_ERR(imx6_pcie->iomuxc_gpr)) {
-+              dev_err(&pdev->dev, "unable to find iomuxc registers\n");
-+              ret = PTR_ERR(imx6_pcie->iomuxc_gpr);
-+              goto err;
-+      }
-+
-+      ret = imx6_add_pcie_port(pp, pdev);
-+      if (ret < 0)
-+              goto err;
-+
-+      platform_set_drvdata(pdev, imx6_pcie);
-+      return 0;
-+
-+err:
-+      return ret;
-+}
-+
-+static const struct of_device_id imx6_pcie_of_match[] = {
-+      { .compatible = "fsl,imx6q-pcie", },
-+      {},
-+};
-+MODULE_DEVICE_TABLE(of, imx6_pcie_of_match);
-+
-+static struct platform_driver imx6_pcie_driver = {
-+      .driver = {
-+              .name   = "imx6q-pcie",
-+              .owner  = THIS_MODULE,
-+              .of_match_table = of_match_ptr(imx6_pcie_of_match),
-+      },
-+};
-+
-+/* Freescale PCIe driver does not allow module unload */
-+
-+static int __init imx6_pcie_init(void)
-+{
-+      return platform_driver_probe(&imx6_pcie_driver, imx6_pcie_probe);
-+}
-+module_init(imx6_pcie_init);
-+
-+MODULE_AUTHOR("Sean Cross <xobs@kosagi.com>");
-+MODULE_DESCRIPTION("Freescale i.MX6 PCIe host controller driver");
-+MODULE_LICENSE("GPL v2");
diff --git a/src/patches/kernel/wandboard/imx/0016-imx6-pci-tweaks.patch b/src/patches/kernel/wandboard/imx/0016-imx6-pci-tweaks.patch
deleted file mode 100644 (file)
index eda007e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/drivers/pci/host/pci-imx6.c
-+++ b/drivers/pci/host/pci-imx6.c
-@@ -200,12 +200,6 @@ static int pcie_phy_write(void __iomem *
- static int imx6q_pcie_abort_handler(unsigned long addr,
-               unsigned int fsr, struct pt_regs *regs)
- {
--      /*
--       * If it was an imprecise abort, then we need to correct the
--       * return address to be _after_ the instruction.
--       */
--      if (fsr & (1 << 10))
--              regs->ARM_pc += 4;
-       return 0;
- }
-@@ -322,7 +316,7 @@ static void imx6_pcie_host_init(struct p
-                       IMX6Q_GPR12_PCIE_CTL_2, 1 << 10);
-       while (!dw_pcie_link_up(pp)) {
--              usleep_range(100, 1000);
-+              usleep_range(2000, 3000);
-               count++;
-               if (count >= 10) {
-                       dev_err(pp->dev, "phy link never came up\n");
diff --git a/src/patches/kernel/wandboard/imx/0017-ARM-imx-Add-LVDS-general-purpose-clocks-to-i.MX6Q.patch b/src/patches/kernel/wandboard/imx/0017-ARM-imx-Add-LVDS-general-purpose-clocks-to-i.MX6Q.patch
deleted file mode 100644 (file)
index 3f1b6eb..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-From: Sean Cross <xobs@kosagi.com>
-Subject: [PATCH 1/3] ARM: imx: Add LVDS general-purpose clocks to i.MX6Q
-
-The i.MX6 has two general-purpose LVDS clocks that can be driven
-from a variety of sources.  This patch adds a mux and a gate for
-both of these clocks.
-
-Signed-off-by: Sean Cross <xobs@kosagi.com>
-Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
----
- .../devicetree/bindings/clock/imx6q-clock.txt        |  4 ++++
- arch/arm/mach-imx/clk-imx6q.c                        | 20 +++++++++++++++++++-
- 2 files changed, 23 insertions(+), 1 deletion(-)
-
---- a/Documentation/devicetree/bindings/clock/imx6q-clock.txt
-+++ b/Documentation/devicetree/bindings/clock/imx6q-clock.txt
-@@ -208,6 +208,10 @@ clocks and IDs.
-       pll4_post_div           193
-       pll5_post_div           194
-       pll5_video_div          195
-+      lvds1_sel               204
-+      lvds2_sel               205
-+      lvds1_gate              206
-+      lvds2_gate              207
- Examples:
---- a/arch/arm/mach-imx/clk-imx6q.c
-+++ b/arch/arm/mach-imx/clk-imx6q.c
-@@ -205,6 +205,11 @@ static const char *vpu_axi_sels[] = { "a
- static const char *cko1_sels[]        = { "pll3_usb_otg", "pll2_bus", "pll1_sys", "pll5_video_div",
-                                   "dummy", "axi", "enfc", "ipu1_di0", "ipu1_di1", "ipu2_di0",
-                                   "ipu2_di1", "ahb", "ipg", "ipg_per", "ckil", "pll4_post_div", };
-+static const char *lvds_sels[] = {
-+      "dummy", "dummy", "dummy", "dummy", "dummy", "dummy",
-+      "pll4_audio", "pll5_video", "pll8_mlb", "enet_ref",
-+      "pcie_ref", "sata_ref",
-+};
- enum mx6q_clks {
-       dummy, ckil, ckih, osc, pll2_pfd0_352m, pll2_pfd1_594m, pll2_pfd2_396m,
-@@ -238,7 +243,8 @@ enum mx6q_clks {
-       pll4_audio, pll5_video, pll8_mlb, pll7_usb_host, pll6_enet, ssi1_ipg,
-       ssi2_ipg, ssi3_ipg, rom, usbphy1, usbphy2, ldb_di0_div_3_5, ldb_di1_div_3_5,
-       sata_ref, sata_ref_100m, pcie_ref, pcie_ref_125m, enet_ref, usbphy1_gate,
--      usbphy2_gate, pll4_post_div, pll5_post_div, pll5_video_div, clk_max
-+      usbphy2_gate, pll4_post_div, pll5_post_div, pll5_video_div,
-+      lvds1_sel, lvds2_sel, lvds1_gate, lvds2_gate, clk_max
- };
- static struct clk *clk[clk_max];
-@@ -340,6 +346,18 @@ int __init mx6q_clocks_init(void)
-                       base + 0xe0, 0, 2, 0, clk_enet_ref_table,
-                       &imx_ccm_lock);
-+      clk[lvds1_sel] = imx_clk_mux("lvds1_sel", base + 0x160, 0, 5, lvds_sels, ARRAY_SIZE(lvds_sels));
-+      clk[lvds2_sel] = imx_clk_mux("lvds2_sel", base + 0x160, 5, 5, lvds_sels, ARRAY_SIZE(lvds_sels));
-+
-+      /*
-+       * lvds1_gate and lvds2_gate are pseudo-gates.  Both can be
-+       * independently configured as clock inputs or outputs.  We treat
-+       * the "output_enable" bit as a gate, even though it's really just
-+       * enabling clock output.
-+       */
-+      clk[lvds1_gate] = imx_clk_gate("lvds1_gate", "dummy", base + 0x160, 10);
-+      clk[lvds2_gate] = imx_clk_gate("lvds2_gate", "dummy", base + 0x160, 11);
-+
-       /*                                name              parent_name        reg       idx */
-       clk[pll2_pfd0_352m] = imx_clk_pfd("pll2_pfd0_352m", "pll2_bus",     base + 0x100, 0);
-       clk[pll2_pfd1_594m] = imx_clk_pfd("pll2_pfd1_594m", "pll2_bus",     base + 0x100, 1);
diff --git a/src/patches/kernel/wandboard/imx/0018-ARM-imx6q-clock-and-Kconfig-update-for-PCIe-support.patch b/src/patches/kernel/wandboard/imx/0018-ARM-imx6q-clock-and-Kconfig-update-for-PCIe-support.patch
deleted file mode 100644 (file)
index 25f207a..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-From 4f6723e8ff497e35c8f2fb20886fccc533c58cdb Mon Sep 17 00:00:00 2001
-From: Sean Cross <xobs@kosagi.com>
-Date: Thu, 26 Sep 2013 10:45:35 +0800
-Subject: [PATCH] ARM: imx6q: clock and Kconfig update for PCIe support
-
-Update imx6q clock initialization and Kconfig for PCIe support.
-
-Signed-off-by: Sean Cross <xobs@kosagi.com>
-Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
----
- arch/arm/mach-imx/Kconfig     | 2 ++
- arch/arm/mach-imx/clk-imx6q.c | 4 ++++
- 2 files changed, 6 insertions(+)
-
---- a/arch/arm/mach-imx/Kconfig
-+++ b/arch/arm/mach-imx/Kconfig
-@@ -806,6 +806,8 @@ config SOC_IMX6Q
-       select HAVE_IMX_SRC
-       select HAVE_SMP
-       select MFD_SYSCON
-+      select MIGHT_HAVE_PCI
-+      select PCI_DOMAINS if PCI
-       select PINCTRL
-       select PINCTRL_IMX6Q
-       select PL310_ERRATA_588369 if CACHE_PL310
---- a/arch/arm/mach-imx/clk-imx6q.c
-+++ b/arch/arm/mach-imx/clk-imx6q.c
-@@ -586,6 +586,10 @@ int __init mx6q_clocks_init(void)
-               clk_prepare_enable(clk[usbphy2_gate]);
-       }
-+      /* All existing boards with PCIe use LVDS1 */
-+      if (IS_ENABLED(CONFIG_PCI_IMX6))
-+              clk_set_parent(clk[lvds1_sel], clk[sata_ref]);
-+
-       /* Set initial power mode */
-       imx6q_set_lpm(WAIT_CLOCKED);
diff --git a/src/patches/lcd4linux-scaletext-dpf.patch b/src/patches/lcd4linux-scaletext-dpf.patch
deleted file mode 100644 (file)
index c075dc7..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-diff -rupN --exclude=.svn --exclude='*.log' --exclude=Makefile --exclude='*.m4' --exclude='*.in' --exclude=autom4te.cache --exclude='config*' --exclude='*.Po' --exclude='*.sh' lcd4linux/drv_dpf.c lcd4linux.1/drv_dpf.c
---- lcd4linux/drv_dpf.c        2011-11-14 14:41:40.859787820 +0100
-+++ lcd4linux.1/drv_dpf.c      2011-11-13 14:42:58.650315817 +0100
-@@ -160,12 +160,26 @@ static int drv_dpf_start2(const char *se
-       }
-       /* Fixme: provider other fonts someday... */
--      if (XRES != 6 && YRES != 8) {
-+      /* Overridden - we have scaled the textout drawing */
-+/*    if (XRES != 6 && YRES != 8) {
-               error("%s: bad Font '%s' from %s (only 6x8 at the moment)",
-                       Name, s, cfg_source());
-               return -1;
-+      } */
-+
-+      /* we dont want fonts below 6 width */
-+      if (XRES <6) {
-+              error("%s: bad Font '%s' width '%d' using minimum of 6)",
-+                      Name,s,XRES);
-+              XRES = 6;
-       }
-+        /* we dont want fonts below 8 height */
-+        if (YRES <8) {
-+                error("%s: bad Font '%s' height '%d' using minimum of 8)",
-+                        Name,s,YRES);
-+                YRES = 8;
-+        }
-       /* open communication with the display */
-       if (drv_dpf_open(section) < 0) {
-diff -rupN --exclude=.svn --exclude='*.log' --exclude=Makefile --exclude='*.m4' --exclude='*.in' --exclude=autom4te.cache --exclude='config*' --exclude='*.Po' --exclude='*.sh' lcd4linux/drv_generic_graphic.c lcd4linux.1/drv_generic_graphic.c
---- lcd4linux/drv_generic_graphic.c    2011-11-14 14:41:40.614375417 +0100
-+++ lcd4linux.1/drv_generic_graphic.c  2011-11-14 14:58:29.303285793 +0100
-@@ -259,15 +259,18 @@ static void drv_generic_graphic_render(c
-       }
-       for (y = 0; y < YRES; y++) {
--          int mask = 1 << XRES;
-+
-           for (x = 0; x < XRES; x++) {
--              mask >>= 1;
--              if (chr[y] & mask)
--                  drv_generic_graphic_FB[layer][(r + y) * LCOLS + c + x] = fg;
--              else
--                  drv_generic_graphic_FB[layer][(r + y) * LCOLS + c + x] = bg;
-+              int mask = 1 << 6;
-+              mask >>= ((x*6)/(XRES))+1;
-+                if (chr[(y*8)/(YRES)] & mask)
-+                    drv_generic_graphic_FB[layer][(r + y ) * LCOLS + c + x] = fg;
-+                else
-+                    drv_generic_graphic_FB[layer][(r + y ) * LCOLS + c + x] = bg;
-+
-           }
-       }
-+
-       c += XRES;
-       txt++;
-     }
diff --git a/src/patches/libcap-1.10-shared.patch b/src/patches/libcap-1.10-shared.patch
deleted file mode 100644 (file)
index 9272c37..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -ruN libcap-1.10.old/libcap/Makefile libcap-1.10/libcap/Makefile
---- libcap-1.10.old/libcap/Makefile    1999-04-18 00:16:31.000000000 +0200
-+++ libcap-1.10/libcap/Makefile        2004-01-14 10:47:20.000000000 +0100
-@@ -56,12 +56,12 @@
- #     @sed -ne '/^#define[ \t]CAP[_A-Z]\+[ \t]\+[0-9]\+/{s/^#define CAP_\([^ \t]*\)[ \t]*\([^ \t]*\)/  \{ \2, \"\1\" \},/;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;p;}' < /usr/include/linux/capability.h | fgrep -v 0x > cap_names.sed
- $(MINLIBNAME): $(OBJS)
--      $(LD) -soname $(MAJLIBNAME) -x -shared -o $@ $(OBJS)
-+      $(CC) -Wl,-soname,$(MAJLIBNAME) -Wl,-x -shared -o $@ $(OBJS)
-       ln -sf $(MINLIBNAME) $(MAJLIBNAME)
-       ln -sf $(MAJLIBNAME) $(LIBNAME)
- %.o: %.c $(INCLS)
--      $(CC) $(CFLAGS) -c $< -o $@
-+      $(CC) $(CFLAGS) -fpic -c $< -o $@
- install: all
-       mkdir -p -m 0755 $(INCDIR)/sys
diff --git a/src/patches/libcap-1.10-syscall.patch b/src/patches/libcap-1.10-syscall.patch
deleted file mode 100644 (file)
index 6053185..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
---- libcap-1.10.old/libcap/cap_sys.c   2003-08-24 19:03:35.524759616 -0700
-+++ libcap-1.10/libcap/cap_sys.c       2003-08-24 19:03:48.406801248 -0700
-@@ -10,7 +10,7 @@
- #include "libcap.h"
- #define __LIBRARY__
- #include <linux/unistd.h>
--
-+/*
- _syscall2(int, capget,
-         cap_user_header_t, header,
-         cap_user_data_t, data)
-@@ -18,7 +18,7 @@
- _syscall2(int, capset,
-         cap_user_header_t, header,
-         const cap_user_data_t, data)
--
-+*/
- /*
-  * $Log: libcap-1.10-syscall.patch,v $
-  * Revision 1.1  2004/01/14 13:11:39  riddles
-  * Build shared libcap
-  *
-  * Revision 1.2  2003/08/29 06:28:38  cretin
-  * Only add -fPIC for libcap.so objects
-  *
-  * Revision 1.1  2003/08/27 06:10:53  cretin
-  * Added -fPIC for prelink to work, and fixed compile error
-  *
-  * Revision 1.1.1.1  1999/04/17 22:16:31  morgan
---- libcap-1.10.old/Make.Rules Mon May 21 16:22:08 2001
-+++ libcap-1.10/Make.Rules     Mon May 21 16:22:32 2001
-@@ -44,10 +44,10 @@
- CC=gcc
- COPTFLAGS=-O2
- DEBUG=-g #-DDEBUG
--WARNINGS=-ansi -D_POSIX_SOURCE -Wall -Wwrite-strings \
-+WARNINGS=-D_POSIX_SOURCE -Wall -Wwrite-strings \
-         -Wpointer-arith -Wcast-qual -Wcast-align \
-         -Wtraditional -Wstrict-prototypes -Wmissing-prototypes \
--        -Wnested-externs -Winline -Wshadow -pedantic
-+        -Wnested-externs -Winline -Wshadow
- LD=ld
- LDFLAGS=-s #-g
diff --git a/src/patches/libnl-1.1-ULONG_MAX.patch b/src/patches/libnl-1.1-ULONG_MAX.patch
deleted file mode 100644 (file)
index ca3dd40..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- libnl-1.1/include/netlink-local.h.orig     2008-06-08 19:09:20.000000000 +0200
-+++ libnl-1.1/include/netlink-local.h  2008-06-08 19:09:33.000000000 +0200
-@@ -26,6 +26,7 @@
- #include <sys/socket.h>
- #include <inttypes.h>
- #include <assert.h>
-+#include <limits.h>
- #include <arpa/inet.h>
- #include <netdb.h>
-
diff --git a/src/patches/libsigc++-gcc43.patch b/src/patches/libsigc++-gcc43.patch
deleted file mode 100644 (file)
index 528f21e..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-diff -urN libsigc++-2.0-2.0.17.old/sigc++/signal.h libsigc++-2.0-2.0.17/sigc++/signal.h
---- libsigc++-2.0-2.0.17.old/sigc++/signal.h   2005-12-20 08:35:21.000000000 +0000
-+++ libsigc++-2.0-2.0.17/sigc++/signal.h       2008-02-22 00:22:44.000000000 +0000
-@@ -1661,7 +1661,7 @@
-   typedef internal::signal_emit0<T_return, T_accumulator> emitter_type;
-   typedef typename emitter_type::result_type         result_type;
-   typedef slot<T_return>    slot_type;
--  typedef slot_list<slot_type>                       slot_list_type;
-+  typedef sigc::slot_list<slot_type>                       slot_list_type;
-   typedef typename slot_list_type::iterator               iterator;
-   typedef typename slot_list_type::const_iterator         const_iterator;
-   typedef typename slot_list_type::reverse_iterator       reverse_iterator;
-@@ -1770,7 +1770,7 @@
-   typedef internal::signal_emit1<T_return, T_arg1, T_accumulator> emitter_type;
-   typedef typename emitter_type::result_type         result_type;
-   typedef slot<T_return, T_arg1>    slot_type;
--  typedef slot_list<slot_type>                       slot_list_type;
-+  typedef sigc::slot_list<slot_type>                       slot_list_type;
-   typedef typename slot_list_type::iterator               iterator;
-   typedef typename slot_list_type::const_iterator         const_iterator;
-   typedef typename slot_list_type::reverse_iterator       reverse_iterator;
-@@ -1881,7 +1881,7 @@
-   typedef internal::signal_emit2<T_return, T_arg1,T_arg2, T_accumulator> emitter_type;
-   typedef typename emitter_type::result_type         result_type;
-   typedef slot<T_return, T_arg1,T_arg2>    slot_type;
--  typedef slot_list<slot_type>                       slot_list_type;
-+  typedef sigc::slot_list<slot_type>                       slot_list_type;
-   typedef typename slot_list_type::iterator               iterator;
-   typedef typename slot_list_type::const_iterator         const_iterator;
-   typedef typename slot_list_type::reverse_iterator       reverse_iterator;
-@@ -1994,7 +1994,7 @@
-   typedef internal::signal_emit3<T_return, T_arg1,T_arg2,T_arg3, T_accumulator> emitter_type;
-   typedef typename emitter_type::result_type         result_type;
-   typedef slot<T_return, T_arg1,T_arg2,T_arg3>    slot_type;
--  typedef slot_list<slot_type>                       slot_list_type;
-+  typedef sigc::slot_list<slot_type>                       slot_list_type;
-   typedef typename slot_list_type::iterator               iterator;
-   typedef typename slot_list_type::const_iterator         const_iterator;
-   typedef typename slot_list_type::reverse_iterator       reverse_iterator;
-@@ -2109,7 +2109,7 @@
-   typedef internal::signal_emit4<T_return, T_arg1,T_arg2,T_arg3,T_arg4, T_accumulator> emitter_type;
-   typedef typename emitter_type::result_type         result_type;
-   typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4>    slot_type;
--  typedef slot_list<slot_type>                       slot_list_type;
-+  typedef sigc::slot_list<slot_type>                       slot_list_type;
-   typedef typename slot_list_type::iterator               iterator;
-   typedef typename slot_list_type::const_iterator         const_iterator;
-   typedef typename slot_list_type::reverse_iterator       reverse_iterator;
-@@ -2226,7 +2226,7 @@
-   typedef internal::signal_emit5<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5, T_accumulator> emitter_type;
-   typedef typename emitter_type::result_type         result_type;
-   typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5>    slot_type;
--  typedef slot_list<slot_type>                       slot_list_type;
-+  typedef sigc::slot_list<slot_type>                       slot_list_type;
-   typedef typename slot_list_type::iterator               iterator;
-   typedef typename slot_list_type::const_iterator         const_iterator;
-   typedef typename slot_list_type::reverse_iterator       reverse_iterator;
-@@ -2345,7 +2345,7 @@
-   typedef internal::signal_emit6<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6, T_accumulator> emitter_type;
-   typedef typename emitter_type::result_type         result_type;
-   typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6>    slot_type;
--  typedef slot_list<slot_type>                       slot_list_type;
-+  typedef sigc::slot_list<slot_type>                       slot_list_type;
-   typedef typename slot_list_type::iterator               iterator;
-   typedef typename slot_list_type::const_iterator         const_iterator;
-   typedef typename slot_list_type::reverse_iterator       reverse_iterator;
-@@ -2466,7 +2466,7 @@
-   typedef internal::signal_emit7<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7, T_accumulator> emitter_type;
-   typedef typename emitter_type::result_type         result_type;
-   typedef slot<T_return, T_arg1,T_arg2,T_arg3,T_arg4,T_arg5,T_arg6,T_arg7>    slot_type;
--  typedef slot_list<slot_type>                       slot_list_type;
-+  typedef sigc::slot_list<slot_type>                       slot_list_type;
-   typedef typename slot_list_type::iterator               iterator;
-   typedef typename slot_list_type::const_iterator         const_iterator;
-   typedef typename slot_list_type::reverse_iterator       reverse_iterator;
-diff -urN libsigc++-2.0-2.0.17.old/tests/test_copy_invalid_slot.cc libsigc++-2.0-2.0.17/tests/test_copy_invalid_slot.cc
---- libsigc++-2.0-2.0.17.old/tests/test_copy_invalid_slot.cc   2005-05-01 02:00:47.000000000 +0000
-+++ libsigc++-2.0-2.0.17/tests/test_copy_invalid_slot.cc       2008-02-22 00:24:08.000000000 +0000
-@@ -1,4 +1,6 @@
- #include <iostream>
-+#include <cstdlib>
-+#include <cstring>
- #include <sigc++/sigc++.h>
- void Foo(sigc::trackable &t) {}
diff --git a/src/patches/linux-2.6-arm-asm-constraint.patch b/src/patches/linux-2.6-arm-asm-constraint.patch
deleted file mode 100644 (file)
index ac0641e..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-From 398aa66827155ef52bab58bebd24597d90968929 Mon Sep 17 00:00:00 2001
-From: Will Deacon <will.deacon@arm.com>
-Date: Thu, 8 Jul 2010 10:59:16 +0100
-Subject: [PATCH] ARM: 6212/1: atomic ops: add memory constraints to inline
- asm
-
-Currently, the 32-bit and 64-bit atomic operations on ARM do not
-include memory constraints in the inline assembly blocks. In the
-case of barrier-less operations [for example, atomic_add], this
-means that the compiler may constant fold values which have actually
-been modified by a call to an atomic operation.
-
-This issue can be observed in the atomic64_test routine in
-<kernel root>/lib/atomic64_test.c:
-
-00000000 <test_atomic64>:
-   0:  e1a0c00d        mov     ip, sp
-   4:  e92dd830        push    {r4, r5, fp, ip, lr, pc}
-   8:  e24cb004        sub     fp, ip, #4
-   c:  e24dd008        sub     sp, sp, #8
-  10:  e24b3014        sub     r3, fp, #20
-  14:  e30d000d        movw    r0, #53261      ; 0xd00d
-  18:  e3011337        movw    r1, #4919       ; 0x1337
-  1c:  e34c0001        movt    r0, #49153      ; 0xc001
-  20:  e34a1aa3        movt    r1, #43683      ; 0xaaa3
-  24:  e16300f8        strd    r0, [r3, #-8]!
-  28:  e30c0afe        movw    r0, #51966      ; 0xcafe
-  2c:  e30b1eef        movw    r1, #48879      ; 0xbeef
-  30:  e34d0eaf        movt    r0, #57007      ; 0xdeaf
-  34:  e34d1ead        movt    r1, #57005      ; 0xdead
-  38:  e1b34f9f        ldrexd  r4, [r3]
-  3c:  e1a34f90        strexd  r4, r0, [r3]
-  40:  e3340000        teq     r4, #0
-  44:  1afffffb        bne     38 <test_atomic64+0x38>
-  48:  e59f0004        ldr     r0, [pc, #4]    ; 54 <test_atomic64+0x54>
-  4c:  e3a0101e        mov     r1, #30
-  50:  ebfffffe        bl      0 <__bug>
-  54:  00000000        .word   0x00000000
-
-The atomic64_set (0x38-0x44) writes to the atomic64_t, but the
-compiler doesn't see this, assumes the test condition is always
-false and generates an unconditional branch to __bug. The rest of the
-test is optimised away.
-
-This patch adds suitable memory constraints to the atomic operations on ARM
-to ensure that the compiler is informed of the correct data hazards. We have
-to use the "Qo" constraints to avoid hitting the GCC anomaly described at
-http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44492 , where the compiler
-makes assumptions about the writeback in the addressing mode used by the
-inline assembly. These constraints forbid the use of auto{inc,dec} addressing
-modes, so it doesn't matter if we don't use the operand exactly once.
-
-Cc: stable@kernel.org
-Reviewed-by: Nicolas Pitre <nicolas.pitre@linaro.org>
-Signed-off-by: Will Deacon <will.deacon@arm.com>
-Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
----
- arch/arm/include/asm/atomic.h |  132 ++++++++++++++++++++--------------------
- 1 files changed, 66 insertions(+), 66 deletions(-)
-
-diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
-index e9e56c0..7e79503 100644
---- a/arch/arm/include/asm/atomic.h
-+++ b/arch/arm/include/asm/atomic.h
-@@ -40,12 +40,12 @@ static inline void atomic_add(int i, atomic_t *v)
-       int result;
-       __asm__ __volatile__("@ atomic_add\n"
--"1:   ldrex   %0, [%2]\n"
--"     add     %0, %0, %3\n"
--"     strex   %1, %0, [%2]\n"
-+"1:   ldrex   %0, [%3]\n"
-+"     add     %0, %0, %4\n"
-+"     strex   %1, %0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "Ir" (i)
-       : "cc");
- }
-@@ -58,12 +58,12 @@ static inline int atomic_add_return(int i, atomic_t *v)
-       smp_mb();
-       __asm__ __volatile__("@ atomic_add_return\n"
--"1:   ldrex   %0, [%2]\n"
--"     add     %0, %0, %3\n"
--"     strex   %1, %0, [%2]\n"
-+"1:   ldrex   %0, [%3]\n"
-+"     add     %0, %0, %4\n"
-+"     strex   %1, %0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "Ir" (i)
-       : "cc");
-@@ -78,12 +78,12 @@ static inline void atomic_sub(int i, atomic_t *v)
-       int result;
-       __asm__ __volatile__("@ atomic_sub\n"
--"1:   ldrex   %0, [%2]\n"
--"     sub     %0, %0, %3\n"
--"     strex   %1, %0, [%2]\n"
-+"1:   ldrex   %0, [%3]\n"
-+"     sub     %0, %0, %4\n"
-+"     strex   %1, %0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "Ir" (i)
-       : "cc");
- }
-@@ -96,12 +96,12 @@ static inline int atomic_sub_return(int i, atomic_t *v)
-       smp_mb();
-       __asm__ __volatile__("@ atomic_sub_return\n"
--"1:   ldrex   %0, [%2]\n"
--"     sub     %0, %0, %3\n"
--"     strex   %1, %0, [%2]\n"
-+"1:   ldrex   %0, [%3]\n"
-+"     sub     %0, %0, %4\n"
-+"     strex   %1, %0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "Ir" (i)
-       : "cc");
-@@ -118,11 +118,11 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
-       do {
-               __asm__ __volatile__("@ atomic_cmpxchg\n"
--              "ldrex  %1, [%2]\n"
-+              "ldrex  %1, [%3]\n"
-               "mov    %0, #0\n"
--              "teq    %1, %3\n"
--              "strexeq %0, %4, [%2]\n"
--                  : "=&r" (res), "=&r" (oldval)
-+              "teq    %1, %4\n"
-+              "strexeq %0, %5, [%3]\n"
-+                  : "=&r" (res), "=&r" (oldval), "+Qo" (ptr->counter)
-                   : "r" (&ptr->counter), "Ir" (old), "r" (new)
-                   : "cc");
-       } while (res);
-@@ -137,12 +137,12 @@ static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
-       unsigned long tmp, tmp2;
-       __asm__ __volatile__("@ atomic_clear_mask\n"
--"1:   ldrex   %0, [%2]\n"
--"     bic     %0, %0, %3\n"
--"     strex   %1, %0, [%2]\n"
-+"1:   ldrex   %0, [%3]\n"
-+"     bic     %0, %0, %4\n"
-+"     strex   %1, %0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (tmp), "=&r" (tmp2)
-+      : "=&r" (tmp), "=&r" (tmp2), "+Qo" (*addr)
-       : "r" (addr), "Ir" (mask)
-       : "cc");
- }
-@@ -249,7 +249,7 @@ static inline u64 atomic64_read(atomic64_t *v)
-       __asm__ __volatile__("@ atomic64_read\n"
- "     ldrexd  %0, %H0, [%1]"
-       : "=&r" (result)
--      : "r" (&v->counter)
-+      : "r" (&v->counter), "Qo" (v->counter)
-       );
-       return result;
-@@ -260,11 +260,11 @@ static inline void atomic64_set(atomic64_t *v, u64 i)
-       u64 tmp;
-       __asm__ __volatile__("@ atomic64_set\n"
--"1:   ldrexd  %0, %H0, [%1]\n"
--"     strexd  %0, %2, %H2, [%1]\n"
-+"1:   ldrexd  %0, %H0, [%2]\n"
-+"     strexd  %0, %3, %H3, [%2]\n"
- "     teq     %0, #0\n"
- "     bne     1b"
--      : "=&r" (tmp)
-+      : "=&r" (tmp), "=Qo" (v->counter)
-       : "r" (&v->counter), "r" (i)
-       : "cc");
- }
-@@ -275,13 +275,13 @@ static inline void atomic64_add(u64 i, atomic64_t *v)
-       unsigned long tmp;
-       __asm__ __volatile__("@ atomic64_add\n"
--"1:   ldrexd  %0, %H0, [%2]\n"
--"     adds    %0, %0, %3\n"
--"     adc     %H0, %H0, %H3\n"
--"     strexd  %1, %0, %H0, [%2]\n"
-+"1:   ldrexd  %0, %H0, [%3]\n"
-+"     adds    %0, %0, %4\n"
-+"     adc     %H0, %H0, %H4\n"
-+"     strexd  %1, %0, %H0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "r" (i)
-       : "cc");
- }
-@@ -294,13 +294,13 @@ static inline u64 atomic64_add_return(u64 i, atomic64_t *v)
-       smp_mb();
-       __asm__ __volatile__("@ atomic64_add_return\n"
--"1:   ldrexd  %0, %H0, [%2]\n"
--"     adds    %0, %0, %3\n"
--"     adc     %H0, %H0, %H3\n"
--"     strexd  %1, %0, %H0, [%2]\n"
-+"1:   ldrexd  %0, %H0, [%3]\n"
-+"     adds    %0, %0, %4\n"
-+"     adc     %H0, %H0, %H4\n"
-+"     strexd  %1, %0, %H0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "r" (i)
-       : "cc");
-@@ -315,13 +315,13 @@ static inline void atomic64_sub(u64 i, atomic64_t *v)
-       unsigned long tmp;
-       __asm__ __volatile__("@ atomic64_sub\n"
--"1:   ldrexd  %0, %H0, [%2]\n"
--"     subs    %0, %0, %3\n"
--"     sbc     %H0, %H0, %H3\n"
--"     strexd  %1, %0, %H0, [%2]\n"
-+"1:   ldrexd  %0, %H0, [%3]\n"
-+"     subs    %0, %0, %4\n"
-+"     sbc     %H0, %H0, %H4\n"
-+"     strexd  %1, %0, %H0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "r" (i)
-       : "cc");
- }
-@@ -334,13 +334,13 @@ static inline u64 atomic64_sub_return(u64 i, atomic64_t *v)
-       smp_mb();
-       __asm__ __volatile__("@ atomic64_sub_return\n"
--"1:   ldrexd  %0, %H0, [%2]\n"
--"     subs    %0, %0, %3\n"
--"     sbc     %H0, %H0, %H3\n"
--"     strexd  %1, %0, %H0, [%2]\n"
-+"1:   ldrexd  %0, %H0, [%3]\n"
-+"     subs    %0, %0, %4\n"
-+"     sbc     %H0, %H0, %H4\n"
-+"     strexd  %1, %0, %H0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "r" (i)
-       : "cc");
-@@ -358,12 +358,12 @@ static inline u64 atomic64_cmpxchg(atomic64_t *ptr, u64 old, u64 new)
-       do {
-               __asm__ __volatile__("@ atomic64_cmpxchg\n"
--              "ldrexd         %1, %H1, [%2]\n"
-+              "ldrexd         %1, %H1, [%3]\n"
-               "mov            %0, #0\n"
--              "teq            %1, %3\n"
--              "teqeq          %H1, %H3\n"
--              "strexdeq       %0, %4, %H4, [%2]"
--              : "=&r" (res), "=&r" (oldval)
-+              "teq            %1, %4\n"
-+              "teqeq          %H1, %H4\n"
-+              "strexdeq       %0, %5, %H5, [%3]"
-+              : "=&r" (res), "=&r" (oldval), "+Qo" (ptr->counter)
-               : "r" (&ptr->counter), "r" (old), "r" (new)
-               : "cc");
-       } while (res);
-@@ -381,11 +381,11 @@ static inline u64 atomic64_xchg(atomic64_t *ptr, u64 new)
-       smp_mb();
-       __asm__ __volatile__("@ atomic64_xchg\n"
--"1:   ldrexd  %0, %H0, [%2]\n"
--"     strexd  %1, %3, %H3, [%2]\n"
-+"1:   ldrexd  %0, %H0, [%3]\n"
-+"     strexd  %1, %4, %H4, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (ptr->counter)
-       : "r" (&ptr->counter), "r" (new)
-       : "cc");
-@@ -402,16 +402,16 @@ static inline u64 atomic64_dec_if_positive(atomic64_t *v)
-       smp_mb();
-       __asm__ __volatile__("@ atomic64_dec_if_positive\n"
--"1:   ldrexd  %0, %H0, [%2]\n"
-+"1:   ldrexd  %0, %H0, [%3]\n"
- "     subs    %0, %0, #1\n"
- "     sbc     %H0, %H0, #0\n"
- "     teq     %H0, #0\n"
- "     bmi     2f\n"
--"     strexd  %1, %0, %H0, [%2]\n"
-+"     strexd  %1, %0, %H0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b\n"
- "2:"
--      : "=&r" (result), "=&r" (tmp)
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter)
-       : "cc");
-@@ -429,18 +429,18 @@ static inline int atomic64_add_unless(atomic64_t *v, u64 a, u64 u)
-       smp_mb();
-       __asm__ __volatile__("@ atomic64_add_unless\n"
--"1:   ldrexd  %0, %H0, [%3]\n"
--"     teq     %0, %4\n"
--"     teqeq   %H0, %H4\n"
-+"1:   ldrexd  %0, %H0, [%4]\n"
-+"     teq     %0, %5\n"
-+"     teqeq   %H0, %H5\n"
- "     moveq   %1, #0\n"
- "     beq     2f\n"
--"     adds    %0, %0, %5\n"
--"     adc     %H0, %H0, %H5\n"
--"     strexd  %2, %0, %H0, [%3]\n"
-+"     adds    %0, %0, %6\n"
-+"     adc     %H0, %H0, %H6\n"
-+"     strexd  %2, %0, %H0, [%4]\n"
- "     teq     %2, #0\n"
- "     bne     1b\n"
- "2:"
--      : "=&r" (val), "+r" (ret), "=&r" (tmp)
-+      : "=&r" (val), "+r" (ret), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "r" (u), "r" (a)
-       : "cc");
--- 
-1.7.6.2
-
diff --git a/src/patches/linux-2.6-silence-acpi-blacklist.patch b/src/patches/linux-2.6-silence-acpi-blacklist.patch
deleted file mode 100644 (file)
index c5997bb..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -up linux-2.6.26.noarch/drivers/acpi/blacklist.c.jx linux-2.6.26.noarch/drivers/acpi/blacklist.c
---- linux-2.6.26.noarch/drivers/acpi/blacklist.c.jx    2008-07-13 17:51:29.000000000 -0400
-+++ linux-2.6.26.noarch/drivers/acpi/blacklist.c       2008-08-12 14:21:39.000000000 -0400
-@@ -81,18 +81,18 @@ static int __init blacklist_by_year(void
-       /* Doesn't exist? Likely an old system */
-       if (!dmi_get_date(DMI_BIOS_DATE, &year, NULL, NULL)) {
--              printk(KERN_ERR PREFIX "no DMI BIOS year, "
-+              printk(KERN_INFO PREFIX "no DMI BIOS year, "
-                       "acpi=force is required to enable ACPI\n" );
-               return 1;
-       }
-       /* 0? Likely a buggy new BIOS */
-       if (year == 0) {
--              printk(KERN_ERR PREFIX "DMI BIOS year==0, "
-+              printk(KERN_INFO PREFIX "DMI BIOS year==0, "
-                       "assuming ACPI-capable machine\n" );
-               return 0;
-       }
-       if (year < CONFIG_ACPI_BLACKLIST_YEAR) {
--              printk(KERN_ERR PREFIX "BIOS age (%d) fails cutoff (%d), "
-+              printk(KERN_INFO PREFIX "BIOS age (%d) fails cutoff (%d), "
-                      "acpi=force is required to enable ACPI\n",
-                      year, CONFIG_ACPI_BLACKLIST_YEAR);
-               return 1;
diff --git a/src/patches/linux-2.6-vmscan_remove_wait_on_page_writeback.patch b/src/patches/linux-2.6-vmscan_remove_wait_on_page_writeback.patch
deleted file mode 100644 (file)
index 02e9cd1..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
---- linux-next.orig/mm/vmscan.c        2010-07-28 16:22:21.000000000 +0800
-+++ linux-next/mm/vmscan.c     2010-07-28 16:23:35.000000000 +0800
-@@ -324,8 +324,7 @@ typedef enum {
-  * pageout is called by shrink_page_list() for each dirty page.
-  * Calls ->writepage().
-  */
--static pageout_t pageout(struct page *page, struct address_space *mapping,
--                                              enum pageout_io sync_writeback)
-+static pageout_t pageout(struct page *page, struct address_space *mapping)
- {
-       /*
-        * If the page is dirty, only perform writeback if that write
-@@ -384,14 +383,6 @@ static pageout_t pageout(struct page *pa
-                       return PAGE_ACTIVATE;
-               }
--              /*
--               * Wait on writeback if requested to. This happens when
--               * direct reclaiming a large contiguous area and the
--               * first attempt to free a range of pages fails.
--               */
--              if (PageWriteback(page) && sync_writeback == PAGEOUT_IO_SYNC)
--                      wait_on_page_writeback(page);
--
-               if (!PageWriteback(page)) {
-                       /* synchronous write or broken a_ops? */
-                       ClearPageReclaim(page);
-@@ -727,7 +718,7 @@ static unsigned long shrink_page_list(st
-                               goto keep_locked;
-                       /* Page is dirty, try to write it out here */
--                      switch (pageout(page, mapping, sync_writeback)) {
-+                      switch (pageout(page, mapping)) {
-                       case PAGE_KEEP:
-                               goto keep_locked;
-                       case PAGE_ACTIVATE:
-
diff --git a/src/patches/linux-2.6.32-crypto-mv_cesa.patch b/src/patches/linux-2.6.32-crypto-mv_cesa.patch
deleted file mode 100644 (file)
index cc85d52..0000000
+++ /dev/null
@@ -1,647 +0,0 @@
-From 0328ac267564089d9cedfb568f936d30a6debd21 Mon Sep 17 00:00:00 2001
-From: Uri Simchoni <uri@jdland.co.il>
-Date: Thu, 8 Apr 2010 19:25:37 +0300
-Subject: [PATCH] crypto: mv_cesa - Invoke the user callback from a softirq
- context
-
-Invoke the user callback from a softirq context
-
-Signed-off-by: Uri Simchoni <uri@jdland.co.il>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/mv_cesa.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
-index b21ef63..3e60ba9 100644
---- a/drivers/crypto/mv_cesa.c
-+++ b/drivers/crypto/mv_cesa.c
-@@ -275,7 +275,9 @@ static void dequeue_complete_req(void)
-               sg_miter_stop(&cpg->p.dst_sg_it);
-               mv_crypto_algo_completion();
-               cpg->eng_st = ENGINE_IDLE;
-+              local_bh_disable();
-               req->base.complete(&req->base, 0);
-+              local_bh_enable();
-       }
- }
--- 
-1.7.6.5
-From 6bc6fcd609080461682c5cc0a1e3bf4345d6419d Mon Sep 17 00:00:00 2001
-From: Uri Simchoni <uri@jdland.co.il>
-Date: Thu, 8 Apr 2010 19:25:56 +0300
-Subject: [PATCH] crypto: mv_cesa - Remove compiler warning in mv_cesa driver
-
-Remove compiler warning
-
-Signed-off-by: Uri Simchoni <uri@jdland.co.il>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/mv_cesa.c |    1 +
- 1 files changed, 1 insertions(+), 0 deletions(-)
-
-diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
-index 3e60ba9..37d9f06 100644
---- a/drivers/crypto/mv_cesa.c
-+++ b/drivers/crypto/mv_cesa.c
-@@ -178,6 +178,7 @@ static void mv_process_current_q(int first_block)
-               op.config = CFG_OP_CRYPT_ONLY | CFG_ENCM_AES | CFG_ENC_MODE_ECB;
-               break;
-       case COP_AES_CBC:
-+      default:
-               op.config = CFG_OP_CRYPT_ONLY | CFG_ENCM_AES | CFG_ENC_MODE_CBC;
-               op.enc_iv = ENC_IV_POINT(SRAM_DATA_IV) |
-                       ENC_IV_BUF_POINT(SRAM_DATA_IV_BUF);
--- 
-1.7.6.5
-X-Git-Url: http://git.kernelconcepts.de/?p=mv-sheeva.git;a=blobdiff_plain;f=drivers%2Fcrypto%2Fmv_cesa.c;h=018a95ce0c9b0d6e6a13bff1522630799bc445b3;hp=37d9f0688e7575a3e366f6bb9eda5adc5db807b5;hb=f565e67ec1b8f4a95d21550f9b879fe86b4132e0;hpb=6bc6fcd609080461682c5cc0a1e3bf4345d6419d
-
-diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
-index 37d9f06..018a95c 100644
---- a/drivers/crypto/mv_cesa.c
-+++ b/drivers/crypto/mv_cesa.c
-@@ -242,6 +242,8 @@ static void dequeue_complete_req(void)
-       struct ablkcipher_request *req = cpg->cur_req;
-       void *buf;
-       int ret;
-+      int need_copy_len = cpg->p.crypt_len;
-+      int sram_offset = 0;
-       cpg->p.total_req_bytes += cpg->p.crypt_len;
-       do {
-@@ -257,14 +259,16 @@ static void dequeue_complete_req(void)
-               buf = cpg->p.dst_sg_it.addr;
-               buf += cpg->p.dst_start;
--              dst_copy = min(cpg->p.crypt_len, cpg->p.sg_dst_left);
--
--              memcpy(buf, cpg->sram + SRAM_DATA_OUT_START, dst_copy);
-+              dst_copy = min(need_copy_len, cpg->p.sg_dst_left);
-+              memcpy(buf,
-+                     cpg->sram + SRAM_DATA_OUT_START + sram_offset,
-+                     dst_copy);
-+              sram_offset += dst_copy;
-               cpg->p.sg_dst_left -= dst_copy;
--              cpg->p.crypt_len -= dst_copy;
-+              need_copy_len -= dst_copy;
-               cpg->p.dst_start += dst_copy;
--      } while (cpg->p.crypt_len > 0);
-+      } while (need_copy_len > 0);
-       BUG_ON(cpg->eng_st != ENGINE_W_DEQUEUE);
-       if (cpg->p.total_req_bytes < req->nbytes) {
-From 15d4dd3594221f11a7730fcf2d5f9942b96cdd7e Mon Sep 17 00:00:00 2001
-From: Uri Simchoni <uri@jdland.co.il>
-Date: Thu, 8 Apr 2010 19:27:02 +0300
-Subject: [PATCH] crypto: mv_cesa - Fix situations where the src sglist spans
- more data than the request asks for
-
-Fix for situations where the source scatterlist spans more data than the
-request nbytes
-
-Signed-off-by: Uri Simchoni <uri@jdland.co.il>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/mv_cesa.c |   66 ++++++++++++++++++++++++++++++---------------
- 1 files changed, 44 insertions(+), 22 deletions(-)
-
-diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
-index 018a95c..096f9ff 100644
---- a/drivers/crypto/mv_cesa.c
-+++ b/drivers/crypto/mv_cesa.c
-@@ -143,27 +143,45 @@ static int mv_setkey_aes(struct crypto_ablkcipher *cipher, const u8 *key,
-       return 0;
- }
--static void setup_data_in(struct ablkcipher_request *req)
-+static void copy_src_to_buf(struct req_progress *p, char *dbuf, int len)
- {
-       int ret;
--      void *buf;
--
--      if (!cpg->p.sg_src_left) {
--              ret = sg_miter_next(&cpg->p.src_sg_it);
--              BUG_ON(!ret);
--              cpg->p.sg_src_left = cpg->p.src_sg_it.length;
--              cpg->p.src_start = 0;
--      }
-+      void *sbuf;
-+      int copied = 0;
--      cpg->p.crypt_len = min(cpg->p.sg_src_left, cpg->max_req_size);
--
--      buf = cpg->p.src_sg_it.addr;
--      buf += cpg->p.src_start;
-+      while (1) {
-+              if (!p->sg_src_left) {
-+                      ret = sg_miter_next(&p->src_sg_it);
-+                      BUG_ON(!ret);
-+                      p->sg_src_left = p->src_sg_it.length;
-+                      p->src_start = 0;
-+              }
--      memcpy(cpg->sram + SRAM_DATA_IN_START, buf, cpg->p.crypt_len);
-+              sbuf = p->src_sg_it.addr + p->src_start;
-+
-+              if (p->sg_src_left <= len - copied) {
-+                      memcpy(dbuf + copied, sbuf, p->sg_src_left);
-+                      copied += p->sg_src_left;
-+                      p->sg_src_left = 0;
-+                      if (copied >= len)
-+                              break;
-+              } else {
-+                      int copy_len = len - copied;
-+                      memcpy(dbuf + copied, sbuf, copy_len);
-+                      p->src_start += copy_len;
-+                      p->sg_src_left -= copy_len;
-+                      break;
-+              }
-+      }
-+}
--      cpg->p.sg_src_left -= cpg->p.crypt_len;
--      cpg->p.src_start += cpg->p.crypt_len;
-+static void setup_data_in(struct ablkcipher_request *req)
-+{
-+      struct req_progress *p = &cpg->p;
-+      p->crypt_len =
-+          min((int)req->nbytes - p->total_req_bytes, cpg->max_req_size);
-+      copy_src_to_buf(p, cpg->sram + SRAM_DATA_IN_START,
-+                      p->crypt_len);
- }
- static void mv_process_current_q(int first_block)
-@@ -289,12 +307,16 @@ static void dequeue_complete_req(void)
- static int count_sgs(struct scatterlist *sl, unsigned int total_bytes)
- {
-       int i = 0;
--
--      do {
--              total_bytes -= sl[i].length;
--              i++;
--
--      } while (total_bytes > 0);
-+      size_t cur_len;
-+
-+      while (1) {
-+              cur_len = sl[i].length;
-+              ++i;
-+              if (total_bytes > cur_len)
-+                      total_bytes -= cur_len;
-+              else
-+                      break;
-+      }
-       return i;
- }
--- 
-1.7.6.5
-From 3b61a90502481045f56c1c41a2af35ee48ca8b80 Mon Sep 17 00:00:00 2001
-From: Uri Simchoni <uri@jdland.co.il>
-Date: Thu, 8 Apr 2010 19:27:33 +0300
-Subject: [PATCH] crypto: mv_cesa - Enqueue generic async requests
-
-Enqueue generic async requests rather than ablkcipher requests
-in the driver's queue
-
-Signed-off-by: Uri Simchoni <uri@jdland.co.il>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/mv_cesa.c |   43 ++++++++++++++++++++++++-------------------
- 1 files changed, 24 insertions(+), 19 deletions(-)
-
-diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
-index 096f9ff..8891e2e 100644
---- a/drivers/crypto/mv_cesa.c
-+++ b/drivers/crypto/mv_cesa.c
-@@ -39,6 +39,7 @@ enum engine_status {
-  * @sg_src_left:      bytes left in src to process (scatter list)
-  * @src_start:                offset to add to src start position (scatter list)
-  * @crypt_len:                length of current crypt process
-+ * @hw_nbytes:                total bytes to process in hw for this request
-  * @sg_dst_left:      bytes left dst to process in this scatter list
-  * @dst_start:                offset to add to dst start position (scatter list)
-  * @total_req_bytes:  total number of bytes processed (request).
-@@ -55,6 +56,7 @@ struct req_progress {
-       int sg_src_left;
-       int src_start;
-       int crypt_len;
-+      int hw_nbytes;
-       /* dst mostly */
-       int sg_dst_left;
-       int dst_start;
-@@ -71,7 +73,7 @@ struct crypto_priv {
-       spinlock_t lock;
-       struct crypto_queue queue;
-       enum engine_status eng_st;
--      struct ablkcipher_request *cur_req;
-+      struct crypto_async_request *cur_req;
-       struct req_progress p;
-       int max_req_size;
-       int sram_size;
-@@ -175,18 +177,18 @@ static void copy_src_to_buf(struct req_progress *p, char *dbuf, int len)
-       }
- }
--static void setup_data_in(struct ablkcipher_request *req)
-+static void setup_data_in(void)
- {
-       struct req_progress *p = &cpg->p;
-       p->crypt_len =
--          min((int)req->nbytes - p->total_req_bytes, cpg->max_req_size);
-+          min(p->hw_nbytes - p->total_req_bytes, cpg->max_req_size);
-       copy_src_to_buf(p, cpg->sram + SRAM_DATA_IN_START,
-                       p->crypt_len);
- }
- static void mv_process_current_q(int first_block)
- {
--      struct ablkcipher_request *req = cpg->cur_req;
-+      struct ablkcipher_request *req = ablkcipher_request_cast(cpg->cur_req);
-       struct mv_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-       struct mv_req_ctx *req_ctx = ablkcipher_request_ctx(req);
-       struct sec_accel_config op;
-@@ -229,7 +231,7 @@ static void mv_process_current_q(int first_block)
-               ENC_P_DST(SRAM_DATA_OUT_START);
-       op.enc_key_p = SRAM_DATA_KEY_P;
--      setup_data_in(req);
-+      setup_data_in();
-       op.enc_len = cpg->p.crypt_len;
-       memcpy(cpg->sram + SRAM_CONFIG, &op,
-                       sizeof(struct sec_accel_config));
-@@ -246,7 +248,7 @@ static void mv_process_current_q(int first_block)
- static void mv_crypto_algo_completion(void)
- {
--      struct ablkcipher_request *req = cpg->cur_req;
-+      struct ablkcipher_request *req = ablkcipher_request_cast(cpg->cur_req);
-       struct mv_req_ctx *req_ctx = ablkcipher_request_ctx(req);
-       if (req_ctx->op != COP_AES_CBC)
-@@ -257,7 +259,7 @@ static void mv_crypto_algo_completion(void)
- static void dequeue_complete_req(void)
- {
--      struct ablkcipher_request *req = cpg->cur_req;
-+      struct crypto_async_request *req = cpg->cur_req;
-       void *buf;
-       int ret;
-       int need_copy_len = cpg->p.crypt_len;
-@@ -289,7 +291,7 @@ static void dequeue_complete_req(void)
-       } while (need_copy_len > 0);
-       BUG_ON(cpg->eng_st != ENGINE_W_DEQUEUE);
--      if (cpg->p.total_req_bytes < req->nbytes) {
-+      if (cpg->p.total_req_bytes < cpg->p.hw_nbytes) {
-               /* process next scatter list entry */
-               cpg->eng_st = ENGINE_BUSY;
-               mv_process_current_q(0);
-@@ -299,7 +301,7 @@ static void dequeue_complete_req(void)
-               mv_crypto_algo_completion();
-               cpg->eng_st = ENGINE_IDLE;
-               local_bh_disable();
--              req->base.complete(&req->base, 0);
-+              req->complete(req, 0);
-               local_bh_enable();
-       }
- }
-@@ -323,16 +325,19 @@ static int count_sgs(struct scatterlist *sl, unsigned int total_bytes)
- static void mv_enqueue_new_req(struct ablkcipher_request *req)
- {
-+      struct req_progress *p = &cpg->p;
-       int num_sgs;
--      cpg->cur_req = req;
--      memset(&cpg->p, 0, sizeof(struct req_progress));
-+      cpg->cur_req = &req->base;
-+      memset(p, 0, sizeof(struct req_progress));
-+      p->hw_nbytes = req->nbytes;
-       num_sgs = count_sgs(req->src, req->nbytes);
--      sg_miter_start(&cpg->p.src_sg_it, req->src, num_sgs, SG_MITER_FROM_SG);
-+      sg_miter_start(&p->src_sg_it, req->src, num_sgs, SG_MITER_FROM_SG);
-       num_sgs = count_sgs(req->dst, req->nbytes);
--      sg_miter_start(&cpg->p.dst_sg_it, req->dst, num_sgs, SG_MITER_TO_SG);
-+      sg_miter_start(&p->dst_sg_it, req->dst, num_sgs, SG_MITER_TO_SG);
-+
-       mv_process_current_q(1);
- }
-@@ -378,13 +383,13 @@ static int queue_manag(void *data)
-       return 0;
- }
--static int mv_handle_req(struct ablkcipher_request *req)
-+static int mv_handle_req(struct crypto_async_request *req)
- {
-       unsigned long flags;
-       int ret;
-       spin_lock_irqsave(&cpg->lock, flags);
--      ret = ablkcipher_enqueue_request(&cpg->queue, req);
-+      ret = crypto_enqueue_request(&cpg->queue, req);
-       spin_unlock_irqrestore(&cpg->lock, flags);
-       wake_up_process(cpg->queue_th);
-       return ret;
-@@ -397,7 +402,7 @@ static int mv_enc_aes_ecb(struct ablkcipher_request *req)
-       req_ctx->op = COP_AES_ECB;
-       req_ctx->decrypt = 0;
--      return mv_handle_req(req);
-+      return mv_handle_req(&req->base);
- }
- static int mv_dec_aes_ecb(struct ablkcipher_request *req)
-@@ -409,7 +414,7 @@ static int mv_dec_aes_ecb(struct ablkcipher_request *req)
-       req_ctx->decrypt = 1;
-       compute_aes_dec_key(ctx);
--      return mv_handle_req(req);
-+      return mv_handle_req(&req->base);
- }
- static int mv_enc_aes_cbc(struct ablkcipher_request *req)
-@@ -419,7 +424,7 @@ static int mv_enc_aes_cbc(struct ablkcipher_request *req)
-       req_ctx->op = COP_AES_CBC;
-       req_ctx->decrypt = 0;
--      return mv_handle_req(req);
-+      return mv_handle_req(&req->base);
- }
- static int mv_dec_aes_cbc(struct ablkcipher_request *req)
-@@ -431,7 +436,7 @@ static int mv_dec_aes_cbc(struct ablkcipher_request *req)
-       req_ctx->decrypt = 1;
-       compute_aes_dec_key(ctx);
--      return mv_handle_req(req);
-+      return mv_handle_req(&req->base);
- }
- static int mv_cra_init(struct crypto_tfm *tfm)
--- 
-1.7.6.5
-From 7a5f691ef03f4c01d2703b5ec4ddd4c17e645dec Mon Sep 17 00:00:00 2001
-From: Uri Simchoni <uri@jdland.co.il>
-Date: Thu, 8 Apr 2010 19:29:16 +0300
-Subject: [PATCH] crypto: mv_cesa - Rename a variable to a more suitable name
-
-Rename a variable to a more suitable name
-
-Signed-off-by: Uri Simchoni <uri@jdland.co.il>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/mv_cesa.c |   10 +++++-----
- 1 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
-index 8891e2e..4262932 100644
---- a/drivers/crypto/mv_cesa.c
-+++ b/drivers/crypto/mv_cesa.c
-@@ -42,7 +42,7 @@ enum engine_status {
-  * @hw_nbytes:                total bytes to process in hw for this request
-  * @sg_dst_left:      bytes left dst to process in this scatter list
-  * @dst_start:                offset to add to dst start position (scatter list)
-- * @total_req_bytes:  total number of bytes processed (request).
-+ * @hw_processed_bytes:       number of bytes processed by hw (request).
-  *
-  * sg helper are used to iterate over the scatterlist. Since the size of the
-  * SRAM may be less than the scatter size, this struct struct is used to keep
-@@ -60,7 +60,7 @@ struct req_progress {
-       /* dst mostly */
-       int sg_dst_left;
-       int dst_start;
--      int total_req_bytes;
-+      int hw_processed_bytes;
- };
- struct crypto_priv {
-@@ -181,7 +181,7 @@ static void setup_data_in(void)
- {
-       struct req_progress *p = &cpg->p;
-       p->crypt_len =
--          min(p->hw_nbytes - p->total_req_bytes, cpg->max_req_size);
-+          min(p->hw_nbytes - p->hw_processed_bytes, cpg->max_req_size);
-       copy_src_to_buf(p, cpg->sram + SRAM_DATA_IN_START,
-                       p->crypt_len);
- }
-@@ -265,7 +265,7 @@ static void dequeue_complete_req(void)
-       int need_copy_len = cpg->p.crypt_len;
-       int sram_offset = 0;
--      cpg->p.total_req_bytes += cpg->p.crypt_len;
-+      cpg->p.hw_processed_bytes += cpg->p.crypt_len;
-       do {
-               int dst_copy;
-@@ -291,7 +291,7 @@ static void dequeue_complete_req(void)
-       } while (need_copy_len > 0);
-       BUG_ON(cpg->eng_st != ENGINE_W_DEQUEUE);
--      if (cpg->p.total_req_bytes < cpg->p.hw_nbytes) {
-+      if (cpg->p.hw_processed_bytes < cpg->p.hw_nbytes) {
-               /* process next scatter list entry */
-               cpg->eng_st = ENGINE_BUSY;
-               mv_process_current_q(0);
--- 
-1.6.5.GIT
-From a58094ac5f95d6969e5c52ff096d2fd2864542af Mon Sep 17 00:00:00 2001
-From: Uri Simchoni <uri@jdland.co.il>
-Date: Thu, 8 Apr 2010 19:30:19 +0300
-Subject: [PATCH] crypto: mv_cesa - Execute some code via function pointers
- rathr than direct calls
-
-Execute some code via function pointers rathr than direct calls
-(to allow customization in the hashing request)
-
-Signed-off-by: Uri Simchoni <uri@jdland.co.il>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/mv_cesa.c |   13 +++++++++----
- 1 files changed, 9 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
-index 4262932..2b4f07a 100644
---- a/drivers/crypto/mv_cesa.c
-+++ b/drivers/crypto/mv_cesa.c
-@@ -51,6 +51,8 @@ enum engine_status {
- struct req_progress {
-       struct sg_mapping_iter src_sg_it;
-       struct sg_mapping_iter dst_sg_it;
-+      void (*complete) (void);
-+      void (*process) (int is_first);
-       /* src mostly */
-       int sg_src_left;
-@@ -251,6 +253,9 @@ static void mv_crypto_algo_completion(void)
-       struct ablkcipher_request *req = ablkcipher_request_cast(cpg->cur_req);
-       struct mv_req_ctx *req_ctx = ablkcipher_request_ctx(req);
-+      sg_miter_stop(&cpg->p.src_sg_it);
-+      sg_miter_stop(&cpg->p.dst_sg_it);
-+
-       if (req_ctx->op != COP_AES_CBC)
-               return ;
-@@ -294,11 +299,9 @@ static void dequeue_complete_req(void)
-       if (cpg->p.hw_processed_bytes < cpg->p.hw_nbytes) {
-               /* process next scatter list entry */
-               cpg->eng_st = ENGINE_BUSY;
--              mv_process_current_q(0);
-+              cpg->p.process(0);
-       } else {
--              sg_miter_stop(&cpg->p.src_sg_it);
--              sg_miter_stop(&cpg->p.dst_sg_it);
--              mv_crypto_algo_completion();
-+              cpg->p.complete();
-               cpg->eng_st = ENGINE_IDLE;
-               local_bh_disable();
-               req->complete(req, 0);
-@@ -331,6 +334,8 @@ static void mv_enqueue_new_req(struct ablkcipher_request *req)
-       cpg->cur_req = &req->base;
-       memset(p, 0, sizeof(struct req_progress));
-       p->hw_nbytes = req->nbytes;
-+      p->complete = mv_crypto_algo_completion;
-+      p->process = mv_process_current_q;
-       num_sgs = count_sgs(req->src, req->nbytes);
-       sg_miter_start(&p->src_sg_it, req->src, num_sgs, SG_MITER_FROM_SG);
--- 
-1.7.6.5
-X-Git-Url: http://git.kernelconcepts.de/?p=mv-sheeva.git;a=blobdiff_plain;f=drivers%2Fcrypto%2Fmv_cesa.c;h=49a22060fb51a46afff004ddade3dacf378aecd8;hp=2b4f07aa89e8ba7422de65eea027e06daa5f7797;hb=f0d03deaad05d9cc99cd2ee0475c9ecd726c19ae;hpb=a58094ac5f95d6969e5c52ff096d2fd2864542af
-
-diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
-index 2b4f07a..49a2206 100644
---- a/drivers/crypto/mv_cesa.c
-+++ b/drivers/crypto/mv_cesa.c
-@@ -40,6 +40,7 @@ enum engine_status {
-  * @src_start:                offset to add to src start position (scatter list)
-  * @crypt_len:                length of current crypt process
-  * @hw_nbytes:                total bytes to process in hw for this request
-+ * @copy_back:                whether to copy data back (crypt) or not (hash)
-  * @sg_dst_left:      bytes left dst to process in this scatter list
-  * @dst_start:                offset to add to dst start position (scatter list)
-  * @hw_processed_bytes:       number of bytes processed by hw (request).
-@@ -60,6 +61,7 @@ struct req_progress {
-       int crypt_len;
-       int hw_nbytes;
-       /* dst mostly */
-+      int copy_back;
-       int sg_dst_left;
-       int dst_start;
-       int hw_processed_bytes;
-@@ -267,33 +269,35 @@ static void dequeue_complete_req(void)
-       struct crypto_async_request *req = cpg->cur_req;
-       void *buf;
-       int ret;
--      int need_copy_len = cpg->p.crypt_len;
--      int sram_offset = 0;
--
-       cpg->p.hw_processed_bytes += cpg->p.crypt_len;
--      do {
--              int dst_copy;
-+      if (cpg->p.copy_back) {
-+              int need_copy_len = cpg->p.crypt_len;
-+              int sram_offset = 0;
-+              do {
-+                      int dst_copy;
-+
-+                      if (!cpg->p.sg_dst_left) {
-+                              ret = sg_miter_next(&cpg->p.dst_sg_it);
-+                              BUG_ON(!ret);
-+                              cpg->p.sg_dst_left = cpg->p.dst_sg_it.length;
-+                              cpg->p.dst_start = 0;
-+                      }
--              if (!cpg->p.sg_dst_left) {
--                      ret = sg_miter_next(&cpg->p.dst_sg_it);
--                      BUG_ON(!ret);
--                      cpg->p.sg_dst_left = cpg->p.dst_sg_it.length;
--                      cpg->p.dst_start = 0;
--              }
-+                      buf = cpg->p.dst_sg_it.addr;
-+                      buf += cpg->p.dst_start;
--              buf = cpg->p.dst_sg_it.addr;
--              buf += cpg->p.dst_start;
-+                      dst_copy = min(need_copy_len, cpg->p.sg_dst_left);
--              dst_copy = min(need_copy_len, cpg->p.sg_dst_left);
-+                      memcpy(buf,
-+                             cpg->sram + SRAM_DATA_OUT_START + sram_offset,
-+                             dst_copy);
-+                      sram_offset += dst_copy;
-+                      cpg->p.sg_dst_left -= dst_copy;
-+                      need_copy_len -= dst_copy;
-+                      cpg->p.dst_start += dst_copy;
-+              } while (need_copy_len > 0);
-+      }
--              memcpy(buf,
--                     cpg->sram + SRAM_DATA_OUT_START + sram_offset,
--                     dst_copy);
--              sram_offset += dst_copy;
--              cpg->p.sg_dst_left -= dst_copy;
--              need_copy_len -= dst_copy;
--              cpg->p.dst_start += dst_copy;
--      } while (need_copy_len > 0);
-       BUG_ON(cpg->eng_st != ENGINE_W_DEQUEUE);
-       if (cpg->p.hw_processed_bytes < cpg->p.hw_nbytes) {
-@@ -336,6 +340,7 @@ static void mv_enqueue_new_req(struct ablkcipher_request *req)
-       p->hw_nbytes = req->nbytes;
-       p->complete = mv_crypto_algo_completion;
-       p->process = mv_process_current_q;
-+      p->copy_back = 1;
-       num_sgs = count_sgs(req->src, req->nbytes);
-       sg_miter_start(&p->src_sg_it, req->src, num_sgs, SG_MITER_FROM_SG);
-From 0c5c6c4bae8fe9ae3d86b44c332eb1267df1ec99 Mon Sep 17 00:00:00 2001
-From: Uri Simchoni <uri@jdland.co.il>
-Date: Thu, 8 Apr 2010 19:33:26 +0300
-Subject: [PATCH] crypto: mv_cesa - Support processing of data from previous
- requests
-
-Support processing of data from previous requests (as in hashing
-update/final requests).
-
-Signed-off-by: Uri Simchoni <uri@jdland.co.il>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/mv_cesa.c |    8 +++++---
- 1 files changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
-index 49a2206..d0fb10e 100644
---- a/drivers/crypto/mv_cesa.c
-+++ b/drivers/crypto/mv_cesa.c
-@@ -184,10 +184,11 @@ static void copy_src_to_buf(struct req_progress *p, char *dbuf, int len)
- static void setup_data_in(void)
- {
-       struct req_progress *p = &cpg->p;
--      p->crypt_len =
-+      int data_in_sram =
-           min(p->hw_nbytes - p->hw_processed_bytes, cpg->max_req_size);
--      copy_src_to_buf(p, cpg->sram + SRAM_DATA_IN_START,
--                      p->crypt_len);
-+      copy_src_to_buf(p, cpg->sram + SRAM_DATA_IN_START + p->crypt_len,
-+                      data_in_sram - p->crypt_len);
-+      p->crypt_len = data_in_sram;
- }
- static void mv_process_current_q(int first_block)
-@@ -298,6 +299,7 @@ static void dequeue_complete_req(void)
-               } while (need_copy_len > 0);
-       }
-+      cpg->p.crypt_len = 0;
-       BUG_ON(cpg->eng_st != ENGINE_W_DEQUEUE);
-       if (cpg->p.hw_processed_bytes < cpg->p.hw_nbytes) {
--- 
-1.7.6.5
diff --git a/src/patches/linux-2.6.32-imq-test2.patch b/src/patches/linux-2.6.32-imq-test2.patch
deleted file mode 100644 (file)
index 17f85c3..0000000
+++ /dev/null
@@ -1,1462 +0,0 @@
-diff -U 5 -Nr linux-2.6.32/drivers/net/imq.c linux-2.6.32-imq/drivers/net/imq.c
---- linux-2.6.32/drivers/net/imq.c     1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.32-imq/drivers/net/imq.c 2009-12-11 15:08:01.958734740 +0200
-@@ -0,0 +1,632 @@
-+/*
-+ *             Pseudo-driver for the intermediate queue device.
-+ *
-+ *             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.
-+ *
-+ * Authors:    Patrick McHardy, <kaber@trash.net>
-+ *
-+ *            The first version was written by Martin Devera, <devik@cdi.cz>
-+ *
-+ * Credits:    Jan Rafaj <imq2t@cedric.vabo.cz>
-+ *              - Update patch to 2.4.21
-+ *             Sebastian Strollo <sstrollo@nortelnetworks.com>
-+ *              - Fix "Dead-loop on netdevice imq"-issue
-+ *             Marcel Sebek <sebek64@post.cz>
-+ *              - Update to 2.6.2-rc1
-+ *
-+ *           After some time of inactivity there is a group taking care
-+ *           of IMQ again: http://www.linuximq.net
-+ *
-+ *
-+ *           2004/06/30 - New version of IMQ patch to kernels <=2.6.7
-+ *             including the following changes:
-+ *
-+ *           - Correction of ipv6 support "+"s issue (Hasso Tepper)
-+ *           - Correction of imq_init_devs() issue that resulted in
-+ *           kernel OOPS unloading IMQ as module (Norbert Buchmuller)
-+ *           - Addition of functionality to choose number of IMQ devices
-+ *           during kernel config (Andre Correa)
-+ *           - Addition of functionality to choose how IMQ hooks on
-+ *           PRE and POSTROUTING (after or before NAT) (Andre Correa)
-+ *           - Cosmetic corrections (Norbert Buchmuller) (Andre Correa)
-+ *
-+ *
-+ *             2005/12/16 - IMQ versions between 2.6.7 and 2.6.13 were
-+ *             released with almost no problems. 2.6.14-x was released
-+ *             with some important changes: nfcache was removed; After
-+ *             some weeks of trouble we figured out that some IMQ fields
-+ *             in skb were missing in skbuff.c - skb_clone and copy_skb_header.
-+ *             These functions are correctly patched by this new patch version.
-+ *
-+ *             Thanks for all who helped to figure out all the problems with
-+ *             2.6.14.x: Patrick McHardy, Rune Kock, VeNoMouS, Max CtRiX,
-+ *             Kevin Shanahan, Richard Lucassen, Valery Dachev (hopefully
-+ *             I didn't forget anybody). I apologize again for my lack of time.
-+ *
-+ *
-+ *             2008/06/17 - 2.6.25 - Changed imq.c to use qdisc_run() instead 
-+ *             of qdisc_restart() and moved qdisc_run() to tasklet to avoid
-+ *             recursive locking. New initialization routines to fix 'rmmod' not
-+ *             working anymore. Used code from ifb.c. (Jussi Kivilinna)
-+ *
-+ *             2008/08/06 - 2.6.26 - (JK)
-+ *              - Replaced tasklet with 'netif_schedule()'.
-+ *              - Cleaned up and added comments for imq_nf_queue().
-+ *
-+ *             2009/04/12
-+ *              - Add skb_save_cb/skb_restore_cb helper functions for backuping
-+ *                control buffer. This is needed because qdisc-layer on kernels
-+ *                2.6.27 and newer overwrite control buffer. (Jussi Kivilinna)
-+ *              - Add better locking for IMQ device. Hopefully this will solve
-+ *                SMP issues. (Jussi Kivilinna)
-+ *              - Port to 2.6.27
-+ *              - Port to 2.6.28
-+ *              - Port to 2.6.29 + fix rmmod not working
-+ *
-+ *             2009/04/20 - (Jussi Kivilinna)
-+ *              - Use netdevice feature flags to avoid extra packet handling
-+ *                by core networking layer and possibly increase performance.
-+ *
-+ *             2009/09/26 - (Jussi Kivilinna)
-+ *              - Add imq_nf_reinject_lockless to fix deadlock with
-+ *                imq_nf_queue/imq_nf_reinject.
-+ *
-+ *             2009/12/08 - (Jussi Kivilinna)
-+ *              - Port to 2.6.32
-+ *              - Add check for skb->nf_queue_entry==NULL in imq_dev_xmit()
-+ *              - Also add better error checking for skb->nf_queue_entry usage
-+ *
-+ *           Also, many thanks to pablo Sebastian Greco for making the initial
-+ *           patch and to those who helped the testing.
-+ *
-+ *             More info at: http://www.linuximq.net/ (Andre Correa)
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/moduleparam.h>
-+#include <linux/list.h>
-+#include <linux/skbuff.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/if_arp.h>
-+#include <linux/netfilter.h>
-+#include <linux/netfilter_ipv4.h>
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      #include <linux/netfilter_ipv6.h>
-+#endif
-+#include <linux/imq.h>
-+#include <net/pkt_sched.h>
-+#include <net/netfilter/nf_queue.h>
-+
-+static nf_hookfn imq_nf_hook;
-+
-+static struct nf_hook_ops imq_ingress_ipv4 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET,
-+      .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      .priority       = NF_IP_PRI_MANGLE + 1
-+#else
-+      .priority       = NF_IP_PRI_NAT_DST + 1
-+#endif
-+};
-+
-+static struct nf_hook_ops imq_egress_ipv4 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET,
-+      .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+      .priority       = NF_IP_PRI_LAST
-+#else
-+      .priority       = NF_IP_PRI_NAT_SRC - 1
-+#endif
-+};
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+static struct nf_hook_ops imq_ingress_ipv6 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET6,
-+      .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      .priority       = NF_IP6_PRI_MANGLE + 1
-+#else
-+      .priority       = NF_IP6_PRI_NAT_DST + 1
-+#endif
-+};
-+
-+static struct nf_hook_ops imq_egress_ipv6 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET6,
-+      .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+      .priority       = NF_IP6_PRI_LAST
-+#else
-+      .priority       = NF_IP6_PRI_NAT_SRC - 1
-+#endif
-+};
-+#endif
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+static unsigned int numdevs = CONFIG_IMQ_NUM_DEVS;
-+#else
-+static unsigned int numdevs = IMQ_MAX_DEVS;
-+#endif
-+
-+static DEFINE_SPINLOCK(imq_nf_queue_lock);
-+
-+static struct net_device *imq_devs_cache[IMQ_MAX_DEVS];
-+
-+
-+static struct net_device_stats *imq_get_stats(struct net_device *dev)
-+{
-+      return &dev->stats;
-+}
-+
-+/* called for packets kfree'd in qdiscs at places other than enqueue */
-+static void imq_skb_destructor(struct sk_buff *skb)
-+{
-+      struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+      skb->nf_queue_entry = NULL;
-+
-+      if (entry) {
-+              nf_queue_entry_release_refs(entry);
-+              kfree(entry);
-+      }
-+
-+      skb_restore_cb(skb); /* kfree backup */
-+}
-+
-+/* locking not needed when called from imq_nf_queue */
-+static void imq_nf_reinject_lockless(struct nf_queue_entry *entry,
-+                                              unsigned int verdict)
-+{
-+      int status;
-+
-+      if (!entry->next_outfn) {
-+              nf_reinject(entry, verdict);
-+              return;
-+      }
-+
-+      status = entry->next_outfn(entry, entry->next_queuenum);
-+      if (status < 0) {
-+              nf_queue_entry_release_refs(entry);
-+              kfree_skb(entry->skb);
-+              kfree(entry);
-+      }
-+}
-+
-+static void imq_nf_reinject(struct nf_queue_entry *entry, unsigned int verdict)
-+{
-+      int status;
-+
-+      if (!entry->next_outfn) {
-+              spin_lock_bh(&imq_nf_queue_lock);
-+              nf_reinject(entry, verdict);
-+              spin_unlock_bh(&imq_nf_queue_lock);
-+              return;
-+      }
-+
-+      rcu_read_lock();
-+      local_bh_disable();
-+      status = entry->next_outfn(entry, entry->next_queuenum);
-+      local_bh_enable();
-+      if (status < 0) {
-+              nf_queue_entry_release_refs(entry);
-+              kfree_skb(entry->skb);
-+              kfree(entry);
-+      }
-+
-+      rcu_read_unlock();
-+}
-+
-+static netdev_tx_t imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+      skb->nf_queue_entry = NULL;
-+      dev->trans_start = jiffies;
-+
-+      dev->stats.tx_bytes += skb->len;
-+      dev->stats.tx_packets++;
-+
-+      if (entry == NULL) {
-+              /* We don't know what is going on here.. packet is queued for
-+               * imq device, but (probably) not by us.
-+               *
-+               * If this packet was not send here by imq_nf_queue(), then
-+               * skb_save_cb() was not used and skb_free() should not show:
-+               *   WARNING: IMQ: kfree_skb: skb->cb_next:..
-+               * and/or
-+               *   WARNING: IMQ: kfree_skb: skb->nf_queue_entry...
-+               *
-+               * However if this message is shown, then IMQ is somehow broken
-+               * and you should report this to linuximq.net.
-+               */
-+
-+              /* imq_dev_xmit is black hole that eats all packets, report that
-+               * we eat this packet happily and increase dropped counters.
-+               */
-+
-+              dev->stats.tx_dropped++;
-+              dev_kfree_skb(skb);
-+
-+              return NETDEV_TX_OK;
-+      }
-+
-+      skb_restore_cb(skb); /* restore skb->cb */
-+
-+      skb->imq_flags = 0;
-+      skb->destructor = NULL;
-+
-+      imq_nf_reinject(entry, NF_ACCEPT);
-+
-+      return NETDEV_TX_OK;
-+}
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num)
-+{
-+      struct net_device *dev;
-+      struct sk_buff *skb_orig, *skb, *skb_shared;
-+      struct Qdisc *q;
-+      struct netdev_queue *txq;
-+      int users, index;
-+      int retval = -EINVAL;
-+
-+      index = entry->skb->imq_flags & IMQ_F_IFMASK;
-+      if (unlikely(index > numdevs - 1)) {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING
-+                             "IMQ: invalid device specified, highest is %u\n",
-+                             numdevs - 1);
-+              retval = -EINVAL;
-+              goto out;
-+      }
-+
-+      /* check for imq device by index from cache */
-+      dev = imq_devs_cache[index];
-+      if (unlikely(!dev)) {
-+              char buf[8];
-+
-+              /* get device by name and cache result */
-+              snprintf(buf, sizeof(buf), "imq%d", index);
-+              dev = dev_get_by_name(&init_net, buf);
-+              if (!dev) {
-+                      /* not found ?!*/
-+                      BUG();
-+                      retval = -ENODEV;
-+                      goto out;
-+              }
-+
-+              imq_devs_cache[index] = dev;
-+              dev_put(dev);
-+      }
-+
-+      if (unlikely(!(dev->flags & IFF_UP))) {
-+              entry->skb->imq_flags = 0;
-+              imq_nf_reinject_lockless(entry, NF_ACCEPT);
-+              retval = 0;
-+              goto out;
-+      }
-+      dev->last_rx = jiffies;
-+
-+      skb = entry->skb;
-+      skb_orig = NULL;
-+
-+      /* skb has owner? => make clone */
-+      if (unlikely(skb->destructor)) {
-+              skb_orig = skb;
-+              skb = skb_clone(skb, GFP_ATOMIC);
-+              if (!skb) {
-+                      retval = -ENOMEM;
-+                      goto out;
-+              }
-+              entry->skb = skb;
-+      }
-+
-+      skb->nf_queue_entry = entry;
-+
-+      dev->stats.rx_bytes += skb->len;
-+      dev->stats.rx_packets++;
-+
-+      txq = dev_pick_tx(dev, skb);
-+
-+      q = rcu_dereference(txq->qdisc);
-+      if (unlikely(!q->enqueue))
-+              goto packet_not_eaten_by_imq_dev;
-+
-+      spin_lock_bh(qdisc_lock(q));
-+
-+      users = atomic_read(&skb->users);
-+
-+      skb_shared = skb_get(skb); /* increase reference count by one */
-+      skb_save_cb(skb_shared); /* backup skb->cb, as qdisc layer will
-+                                      overwrite it */
-+      qdisc_enqueue_root(skb_shared, q); /* might kfree_skb */
-+
-+      if (likely(atomic_read(&skb_shared->users) == users + 1)) {
-+              kfree_skb(skb_shared); /* decrease reference count by one */
-+
-+              skb->destructor = &imq_skb_destructor;
-+
-+              /* cloned? */
-+              if (skb_orig)
-+                      kfree_skb(skb_orig); /* free original */
-+
-+              spin_unlock_bh(qdisc_lock(q));
-+
-+              /* schedule qdisc dequeue */
-+              __netif_schedule(q);
-+
-+              retval = 0;
-+              goto out;
-+      } else {
-+              skb_restore_cb(skb_shared); /* restore skb->cb */
-+              skb->nf_queue_entry = NULL;
-+              /* qdisc dropped packet and decreased skb reference count of
-+               * skb, so we don't really want to and try refree as that would
-+               * actually destroy the skb. */
-+              spin_unlock_bh(qdisc_lock(q));
-+              goto packet_not_eaten_by_imq_dev;
-+      }
-+
-+packet_not_eaten_by_imq_dev:
-+      /* cloned? restore original */
-+      if (skb_orig) {
-+              kfree_skb(skb);
-+              entry->skb = skb_orig;
-+      }
-+      retval = -1;
-+out:
-+      return retval;
-+}
-+
-+static struct nf_queue_handler nfqh = {
-+      .name  = "imq",
-+      .outfn = imq_nf_queue,
-+};
-+
-+static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff *pskb,
-+                              const struct net_device *indev,
-+                              const struct net_device *outdev,
-+                              int (*okfn)(struct sk_buff *))
-+{
-+      if (pskb->imq_flags & IMQ_F_ENQUEUE)
-+              return NF_QUEUE;
-+
-+      return NF_ACCEPT;
-+}
-+
-+static int imq_close(struct net_device *dev)
-+{
-+      netif_stop_queue(dev);
-+      return 0;
-+}
-+
-+static int imq_open(struct net_device *dev)
-+{
-+      netif_start_queue(dev);
-+      return 0;
-+}
-+
-+static const struct net_device_ops imq_netdev_ops = {
-+      .ndo_open               = imq_open,
-+      .ndo_stop               = imq_close,
-+      .ndo_start_xmit         = imq_dev_xmit,
-+      .ndo_get_stats          = imq_get_stats,
-+};
-+
-+static void imq_setup(struct net_device *dev)
-+{
-+      dev->netdev_ops         = &imq_netdev_ops;
-+      dev->type               = ARPHRD_VOID;
-+      dev->mtu                = 16000;
-+      dev->tx_queue_len       = 11000;
-+      dev->flags              = IFF_NOARP;
-+      dev->features           = NETIF_F_SG | NETIF_F_FRAGLIST |
-+                                NETIF_F_GSO | NETIF_F_HW_CSUM |
-+                                NETIF_F_HIGHDMA;
-+      dev->priv_flags         &= ~IFF_XMIT_DST_RELEASE;
-+}
-+
-+static int imq_validate(struct nlattr *tb[], struct nlattr *data[])
-+{
-+      int ret = 0;
-+
-+      if (tb[IFLA_ADDRESS]) {
-+              if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
-+                      ret = -EINVAL;
-+                      goto end;
-+              }
-+              if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
-+                      ret = -EADDRNOTAVAIL;
-+                      goto end;
-+              }
-+      }
-+      return 0;
-+end:
-+      printk(KERN_WARNING "IMQ: imq_validate failed (%d)\n", ret);
-+      return ret;
-+}
-+
-+static struct rtnl_link_ops imq_link_ops __read_mostly = {
-+      .kind           = "imq",
-+      .priv_size      = 0,
-+      .setup          = imq_setup,
-+      .validate       = imq_validate,
-+};
-+
-+static int __init imq_init_hooks(void)
-+{
-+      int err;
-+
-+      nf_register_queue_imq_handler(&nfqh);
-+
-+      err = nf_register_hook(&imq_ingress_ipv4);
-+      if (err)
-+              goto err1;
-+
-+      err = nf_register_hook(&imq_egress_ipv4);
-+      if (err)
-+              goto err2;
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      err = nf_register_hook(&imq_ingress_ipv6);
-+      if (err)
-+              goto err3;
-+
-+      err = nf_register_hook(&imq_egress_ipv6);
-+      if (err)
-+              goto err4;
-+#endif
-+
-+      return 0;
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+err4:
-+      nf_unregister_hook(&imq_ingress_ipv6);
-+err3:
-+      nf_unregister_hook(&imq_egress_ipv4);
-+#endif
-+err2:
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+err1:
-+      nf_unregister_queue_imq_handler();
-+      return err;
-+}
-+
-+static int __init imq_init_one(int index)
-+{
-+      struct net_device *dev;
-+      int ret;
-+
-+      dev = alloc_netdev(0, "imq%d", imq_setup);
-+      if (!dev)
-+              return -ENOMEM;
-+
-+      ret = dev_alloc_name(dev, dev->name);
-+      if (ret < 0)
-+              goto fail;
-+
-+      dev->rtnl_link_ops = &imq_link_ops;
-+      ret = register_netdevice(dev);
-+      if (ret < 0)
-+              goto fail;
-+
-+      return 0;
-+fail:
-+      free_netdev(dev);
-+      return ret;
-+}
-+
-+static int __init imq_init_devs(void)
-+{
-+      int err, i;
-+
-+      if (numdevs < 1 || numdevs > IMQ_MAX_DEVS) {
-+              printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n",
-+                     IMQ_MAX_DEVS);
-+              return -EINVAL;
-+      }
-+
-+      rtnl_lock();
-+      err = __rtnl_link_register(&imq_link_ops);
-+
-+      for (i = 0; i < numdevs && !err; i++)
-+              err = imq_init_one(i);
-+
-+      if (err) {
-+              __rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+      }
-+      rtnl_unlock();
-+
-+      return err;
-+}
-+
-+static int __init imq_init_module(void)
-+{
-+      int err;
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS > 16);
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS < 2);
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS - 1 > IMQ_F_IFMASK);
-+#endif
-+
-+      err = imq_init_devs();
-+      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_devs(net)\n");
-+              return err;
-+      }
-+
-+      err = imq_init_hooks();
-+      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
-+              rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+              return err;
-+      }
-+
-+      printk(KERN_INFO "IMQ driver loaded successfully.\n");
-+
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n");
-+#endif
-+#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n");
-+#endif
-+
-+      return 0;
-+}
-+
-+static void __exit imq_unhook(void)
-+{
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      nf_unregister_hook(&imq_ingress_ipv6);
-+      nf_unregister_hook(&imq_egress_ipv6);
-+#endif
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+      nf_unregister_hook(&imq_egress_ipv4);
-+
-+      nf_unregister_queue_imq_handler();
-+}
-+
-+static void __exit imq_cleanup_devs(void)
-+{
-+      rtnl_link_unregister(&imq_link_ops);
-+      memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+}
-+
-+static void __exit imq_exit_module(void)
-+{
-+      imq_unhook();
-+      imq_cleanup_devs();
-+      printk(KERN_INFO "IMQ driver unloaded successfully.\n");
-+}
-+
-+module_init(imq_init_module);
-+module_exit(imq_exit_module);
-+
-+module_param(numdevs, int, 0);
-+MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will "
-+                      "be created)");
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See "
-+                      "http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS_RTNL_LINK("imq");
-+
-diff -U 5 -Nr linux-2.6.32/drivers/net/Kconfig linux-2.6.32-imq/drivers/net/Kconfig
---- linux-2.6.32/drivers/net/Kconfig   2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/drivers/net/Kconfig       2009-12-11 14:16:42.678730699 +0200
-@@ -107,10 +107,133 @@
-         <http://www.tldp.org/docs.html#howto>.
-         To compile this driver as a module, choose M here: the module
-         will be called eql.  If unsure, say N.
-+config IMQ
-+      tristate "IMQ (intermediate queueing device) support"
-+      depends on NETDEVICES && NETFILTER
-+      ---help---
-+        The IMQ device(s) is used as placeholder for QoS queueing
-+        disciplines. Every packet entering/leaving the IP stack can be
-+        directed through the IMQ device where it's enqueued/dequeued to the
-+        attached qdisc. This allows you to treat network devices as classes
-+        and distribute bandwidth among them. Iptables is used to specify
-+        through which IMQ device, if any, packets travel.
-+
-+        More information at: http://www.linuximq.net/
-+
-+        To compile this driver as a module, choose M here: the module
-+        will be called imq.  If unsure, say N.
-+
-+choice
-+      prompt "IMQ behavior (PRE/POSTROUTING)"
-+      depends on IMQ
-+      default IMQ_BEHAVIOR_AB
-+      help
-+
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              IMQ can work in any of the following ways:
-+
-+                  PREROUTING   |      POSTROUTING
-+              -----------------|-------------------
-+              #1  After NAT    |      After NAT
-+              #2  After NAT    |      Before NAT
-+              #3  Before NAT   |      After NAT
-+              #4  Before NAT   |      Before NAT
-+
-+              The default behavior is to hook before NAT on PREROUTING
-+              and after NAT on POSTROUTING (#3).
-+
-+              This settings are specially usefull when trying to use IMQ
-+              to shape NATed clients.
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AA
-+      bool "IMQ AA"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   After NAT
-+              POSTROUTING:  After NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AB
-+      bool "IMQ AB"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   After NAT
-+              POSTROUTING:  Before NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BA
-+      bool "IMQ BA"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   Before NAT
-+              POSTROUTING:  After NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BB
-+      bool "IMQ BB"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   Before NAT
-+              POSTROUTING:  Before NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+endchoice
-+
-+config IMQ_NUM_DEVS
-+
-+      int "Number of IMQ devices"
-+      range 2 16
-+      depends on IMQ
-+      default "16"
-+      help
-+
-+              This settings defines how many IMQ devices will be
-+              created.
-+
-+              The default value is 16.
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
- config TUN
-       tristate "Universal TUN/TAP device driver support"
-       select CRC32
-       ---help---
-         TUN/TAP provides packet reception and transmission for user space
-diff -U 5 -Nr linux-2.6.32/drivers/net/Makefile linux-2.6.32-imq/drivers/net/Makefile
---- linux-2.6.32/drivers/net/Makefile  2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/drivers/net/Makefile      2009-12-11 14:16:42.678730699 +0200
-@@ -163,10 +163,11 @@
- obj-$(CONFIG_SLHC) += slhc.o
- obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o
- obj-$(CONFIG_DUMMY) += dummy.o
-+obj-$(CONFIG_IMQ) += imq.o
- obj-$(CONFIG_IFB) += ifb.o
- obj-$(CONFIG_MACVLAN) += macvlan.o
- obj-$(CONFIG_DE600) += de600.o
- obj-$(CONFIG_DE620) += de620.o
- obj-$(CONFIG_LANCE) += lance.o
-diff -U 5 -Nr linux-2.6.32/include/linux/imq.h linux-2.6.32-imq/include/linux/imq.h
---- linux-2.6.32/include/linux/imq.h   1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.32-imq/include/linux/imq.h       2009-12-11 14:16:42.678730699 +0200
-@@ -0,0 +1,13 @@
-+#ifndef _IMQ_H
-+#define _IMQ_H
-+
-+/* IFMASK (16 device indexes, 0 to 15) and flag(s) fit in 5 bits */
-+#define IMQ_F_BITS    5
-+
-+#define IMQ_F_IFMASK  0x0f
-+#define IMQ_F_ENQUEUE 0x10
-+
-+#define IMQ_MAX_DEVS  (IMQ_F_IFMASK + 1)
-+
-+#endif /* _IMQ_H */
-+
-diff -U 5 -Nr linux-2.6.32/include/linux/netdevice.h linux-2.6.32-imq/include/linux/netdevice.h
---- linux-2.6.32/include/linux/netdevice.h     2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/include/linux/netdevice.h 2009-12-11 14:16:42.679730960 +0200
-@@ -1112,10 +1112,11 @@
- extern struct net_device      *__dev_get_by_name(struct net *net, const char *name);
- extern int            dev_alloc_name(struct net_device *dev, const char *name);
- extern int            dev_open(struct net_device *dev);
- extern int            dev_close(struct net_device *dev);
- extern void           dev_disable_lro(struct net_device *dev);
-+extern struct netdev_queue *dev_pick_tx(struct net_device *dev, struct sk_buff *skb);
- extern int            dev_queue_xmit(struct sk_buff *skb);
- extern int            register_netdevice(struct net_device *dev);
- extern void           unregister_netdevice(struct net_device *dev);
- extern void           free_netdev(struct net_device *dev);
- extern void           synchronize_net(void);
-diff -U 5 -Nr linux-2.6.32/include/linux/netfilter/xt_IMQ.h linux-2.6.32-imq/include/linux/netfilter/xt_IMQ.h
---- linux-2.6.32/include/linux/netfilter/xt_IMQ.h      1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.32-imq/include/linux/netfilter/xt_IMQ.h  2009-12-11 14:16:42.679730960 +0200
-@@ -0,0 +1,9 @@
-+#ifndef _XT_IMQ_H
-+#define _XT_IMQ_H
-+
-+struct xt_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _XT_IMQ_H */
-+
-diff -U 5 -Nr linux-2.6.32/include/linux/netfilter_ipv4/ipt_IMQ.h linux-2.6.32-imq/include/linux/netfilter_ipv4/ipt_IMQ.h
---- linux-2.6.32/include/linux/netfilter_ipv4/ipt_IMQ.h        1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.32-imq/include/linux/netfilter_ipv4/ipt_IMQ.h    2009-12-11 14:16:42.679730960 +0200
-@@ -0,0 +1,10 @@
-+#ifndef _IPT_IMQ_H
-+#define _IPT_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ipt_imq_info xt_imq_info
-+
-+#endif /* _IPT_IMQ_H */
-+
-diff -U 5 -Nr linux-2.6.32/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-2.6.32-imq/include/linux/netfilter_ipv6/ip6t_IMQ.h
---- linux-2.6.32/include/linux/netfilter_ipv6/ip6t_IMQ.h       1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.32-imq/include/linux/netfilter_ipv6/ip6t_IMQ.h   2009-12-11 14:16:42.679730960 +0200
-@@ -0,0 +1,10 @@
-+#ifndef _IP6T_IMQ_H
-+#define _IP6T_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ip6t_imq_info xt_imq_info
-+
-+#endif /* _IP6T_IMQ_H */
-+
-diff -U 5 -Nr linux-2.6.32/include/linux/skbuff.h linux-2.6.32-imq/include/linux/skbuff.h
---- linux-2.6.32/include/linux/skbuff.h        2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/include/linux/skbuff.h    2009-12-11 14:16:42.680730834 +0200
-@@ -27,10 +27,13 @@
- #include <linux/textsearch.h>
- #include <net/checksum.h>
- #include <linux/rcupdate.h>
- #include <linux/dmaengine.h>
- #include <linux/hrtimer.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- /* Don't change this without changing skb_csum_unnecessary! */
- #define CHECKSUM_NONE 0
- #define CHECKSUM_UNNECESSARY 1
- #define CHECKSUM_COMPLETE 2
-@@ -328,10 +331,13 @@
-        * layer. Please put your private variables there. If you
-        * want to keep them across layers you have to do a skb_clone()
-        * first. This is owned by whoever has the skb queued ATM.
-        */
-       char                    cb[48];
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      void                    *cb_next;
-+#endif
-       unsigned int            len,
-                               data_len;
-       __u16                   mac_len,
-                               hdr_len;
-@@ -360,10 +366,13 @@
-       void                    (*destructor)(struct sk_buff *skb);
- #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
-       struct nf_conntrack     *nfct;
-       struct sk_buff          *nfct_reasm;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      struct nf_queue_entry   *nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       struct nf_bridge_info   *nf_bridge;
- #endif
-       int                     iif;
-@@ -381,10 +390,14 @@
- #endif
-       kmemcheck_bitfield_end(flags2);
-       /* 0/14 bit hole */
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      __u8                    imq_flags:IMQ_F_BITS;
-+#endif
-+
- #ifdef CONFIG_NET_DMA
-       dma_cookie_t            dma_cookie;
- #endif
- #ifdef CONFIG_NETWORK_SECMARK
-       __u32                   secmark;
-@@ -435,10 +448,16 @@
- static inline struct rtable *skb_rtable(const struct sk_buff *skb)
- {
-       return (struct rtable *)skb_dst(skb);
- }
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern int skb_save_cb(struct sk_buff *skb);
-+extern int skb_restore_cb(struct sk_buff *skb);
-+#endif
-+
- extern void kfree_skb(struct sk_buff *skb);
- extern void consume_skb(struct sk_buff *skb);
- extern void          __kfree_skb(struct sk_buff *skb);
- extern struct sk_buff *__alloc_skb(unsigned int size,
-                                  gfp_t priority, int fclone, int node);
-@@ -1970,10 +1989,14 @@
-       nf_conntrack_get(src->nfct);
-       dst->nfctinfo = src->nfctinfo;
-       dst->nfct_reasm = src->nfct_reasm;
-       nf_conntrack_get_reasm(src->nfct_reasm);
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      dst->imq_flags = src->imq_flags;
-+      dst->nf_queue_entry = src->nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       dst->nf_bridge  = src->nf_bridge;
-       nf_bridge_get(src->nf_bridge);
- #endif
- }
-diff -U 5 -Nr linux-2.6.32/include/net/netfilter/nf_queue.h linux-2.6.32-imq/include/net/netfilter/nf_queue.h
---- linux-2.6.32/include/net/netfilter/nf_queue.h      2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/include/net/netfilter/nf_queue.h  2009-12-11 14:16:42.680730834 +0200
-@@ -11,10 +11,16 @@
-       u_int8_t                pf;
-       unsigned int            hook;
-       struct net_device       *indev;
-       struct net_device       *outdev;
-       int                     (*okfn)(struct sk_buff *);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      int                     (*next_outfn)(struct nf_queue_entry *entry,
-+                                            unsigned int queuenum);
-+      unsigned int            next_queuenum;
-+#endif
- };
- #define nf_queue_entry_reroute(x) ((void *)x + sizeof(struct nf_queue_entry))
- /* Packet queuing */
-@@ -28,7 +34,13 @@
-                                    const struct nf_queue_handler *qh);
- extern int nf_unregister_queue_handler(u_int8_t pf,
-                                      const struct nf_queue_handler *qh);
- extern void nf_unregister_queue_handlers(const struct nf_queue_handler *qh);
- extern void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
-+extern void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern void nf_register_queue_imq_handler(const struct nf_queue_handler *qh);
-+extern void nf_unregister_queue_imq_handler(void);
-+#endif
- #endif /* _NF_QUEUE_H */
-diff -U 5 -Nr linux-2.6.32/net/core/dev.c linux-2.6.32-imq/net/core/dev.c
---- linux-2.6.32/net/core/dev.c        2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/net/core/dev.c    2009-12-11 14:16:42.681731014 +0200
-@@ -94,10 +94,13 @@
- #include <linux/notifier.h>
- #include <linux/skbuff.h>
- #include <net/net_namespace.h>
- #include <net/sock.h>
- #include <linux/rtnetlink.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- #include <linux/proc_fs.h>
- #include <linux/seq_file.h>
- #include <linux/stat.h>
- #include <linux/if_bridge.h>
- #include <linux/if_macvlan.h>
-@@ -1702,11 +1705,15 @@
- {
-       const struct net_device_ops *ops = dev->netdev_ops;
-       int rc;
-       if (likely(!skb->next)) {
--              if (!list_empty(&ptype_all))
-+              if (!list_empty(&ptype_all)
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+                  && !(skb->imq_flags & IMQ_F_ENQUEUE)
-+#endif
-+                  )
-                       dev_queue_xmit_nit(skb, dev);
-               if (netif_needs_gso(dev, skb)) {
-                       if (unlikely(dev_gso_segment(skb)))
-                               goto out_kfree_skb;
-@@ -1787,12 +1794,11 @@
-       return (u16) (((u64) hash * dev->real_num_tx_queues) >> 32);
- }
- EXPORT_SYMBOL(skb_tx_hash);
--static struct netdev_queue *dev_pick_tx(struct net_device *dev,
--                                      struct sk_buff *skb)
-+struct netdev_queue *dev_pick_tx(struct net_device *dev, struct sk_buff *skb)
- {
-       const struct net_device_ops *ops = dev->netdev_ops;
-       u16 queue_index = 0;
-       if (ops->ndo_select_queue)
-@@ -1801,10 +1807,11 @@
-               queue_index = skb_tx_hash(dev, skb);
-       skb_set_queue_mapping(skb, queue_index);
-       return netdev_get_tx_queue(dev, queue_index);
- }
-+EXPORT_SYMBOL(dev_pick_tx);
- static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
-                                struct net_device *dev,
-                                struct netdev_queue *txq)
- {
-diff -U 5 -Nr linux-2.6.32/net/core/skbuff.c linux-2.6.32-imq/net/core/skbuff.c
---- linux-2.6.32/net/core/skbuff.c     2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/net/core/skbuff.c 2009-12-11 15:12:39.294981618 +0200
-@@ -70,10 +70,13 @@
- #include "kmap_skb.h"
- static struct kmem_cache *skbuff_head_cache __read_mostly;
- static struct kmem_cache *skbuff_fclone_cache __read_mostly;
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static struct kmem_cache *skbuff_cb_store_cache __read_mostly;
-+#endif
- static void sock_pipe_buf_release(struct pipe_inode_info *pipe,
-                                 struct pipe_buffer *buf)
- {
-       put_page(buf->page);
-@@ -89,10 +92,87 @@
-                              struct pipe_buffer *buf)
- {
-       return 1;
- }
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+/* Control buffer save/restore for IMQ devices */
-+struct skb_cb_table {
-+      void                    *cb_next;
-+      atomic_t                refcnt;
-+      char                    cb[48];
-+};
-+
-+static DEFINE_SPINLOCK(skb_cb_store_lock);
-+
-+int skb_save_cb(struct sk_buff *skb)
-+{
-+      struct skb_cb_table *next;
-+
-+      next = kmem_cache_alloc(skbuff_cb_store_cache, GFP_ATOMIC);
-+      if (!next)
-+              return -ENOMEM;
-+
-+      BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+      memcpy(next->cb, skb->cb, sizeof(skb->cb));
-+      next->cb_next = skb->cb_next;
-+
-+      atomic_set(&next->refcnt, 1);
-+
-+      skb->cb_next = next;
-+      return 0;
-+}
-+EXPORT_SYMBOL(skb_save_cb);
-+
-+int skb_restore_cb(struct sk_buff *skb)
-+{
-+      struct skb_cb_table *next;
-+
-+      if (!skb->cb_next)
-+              return 0;
-+
-+      next = skb->cb_next;
-+
-+      BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+      memcpy(skb->cb, next->cb, sizeof(skb->cb));
-+      skb->cb_next = next->cb_next;
-+
-+      spin_lock(&skb_cb_store_lock);
-+
-+      if (atomic_dec_and_test(&next->refcnt)) {
-+              kmem_cache_free(skbuff_cb_store_cache, next);
-+      }
-+
-+      spin_unlock(&skb_cb_store_lock);
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL(skb_restore_cb);
-+
-+static void skb_copy_stored_cb(struct sk_buff *new, const struct sk_buff *__old)
-+{
-+      struct skb_cb_table *next;
-+      struct sk_buff *old;
-+
-+      if (!__old->cb_next) {
-+              new->cb_next = NULL;
-+              return;
-+      }
-+
-+      spin_lock(&skb_cb_store_lock);
-+
-+      old = (struct sk_buff *)__old;
-+
-+      next = old->cb_next;
-+      atomic_inc(&next->refcnt);
-+      new->cb_next = next;
-+
-+      spin_unlock(&skb_cb_store_lock);
-+}
-+#endif
- /* Pipe buffer operations for a socket. */
- static struct pipe_buf_operations sock_pipe_buf_ops = {
-       .can_merge = 0,
-       .map = generic_pipe_buf_map,
-@@ -396,10 +476,30 @@
- #endif
-       if (skb->destructor) {
-               WARN_ON(in_irq());
-               skb->destructor(skb);
-       }
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      /* This should not happen. When it does, avoid memleak by restoring
-+      the chain of cb-backups. */
-+      while(skb->cb_next != NULL) {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "IMQ: kfree_skb: skb->cb_next: "
-+                              "%08x\n", (unsigned int)skb->cb_next);
-+
-+              skb_restore_cb(skb);
-+      }
-+      /* This should not happen either, nf_queue_entry is nullified in
-+       * imq_dev_xmit(). If we have non-NULL nf_queue_entry then we are
-+       * leaking entry pointers, maybe memory. We don't know if this is
-+       * pointer to already freed memory, or should this be freed.
-+       * If this happens we need to add refcounting, etc for nf_queue_entry.
-+       */
-+      if (skb->nf_queue_entry && net_ratelimit())
-+              printk(KERN_WARNING
-+                              "IMQ: kfree_skb: skb->nf_queue_entry != NULL");
-+#endif
- #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
-       nf_conntrack_put(skb->nfct);
-       nf_conntrack_put_reasm(skb->nfct_reasm);
- #endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-@@ -533,10 +633,13 @@
-       skb_dst_set(new, dst_clone(skb_dst(old)));
- #ifdef CONFIG_XFRM
-       new->sp                 = secpath_get(old->sp);
- #endif
-       memcpy(new->cb, old->cb, sizeof(old->cb));
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      skb_copy_stored_cb(new, old);
-+#endif
-       new->csum               = old->csum;
-       new->local_df           = old->local_df;
-       new->pkt_type           = old->pkt_type;
-       new->ip_summed          = old->ip_summed;
-       skb_copy_queue_mapping(new, old);
-@@ -2774,10 +2877,17 @@
-                                               (2*sizeof(struct sk_buff)) +
-                                               sizeof(atomic_t),
-                                               0,
-                                               SLAB_HWCACHE_ALIGN|SLAB_PANIC,
-                                               NULL);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      skbuff_cb_store_cache = kmem_cache_create("skbuff_cb_store_cache",
-+                                                sizeof(struct skb_cb_table),
-+                                                0,
-+                                                SLAB_HWCACHE_ALIGN|SLAB_PANIC,
-+                                                NULL);
-+#endif
- }
- /**
-  *    skb_to_sgvec - Fill a scatter-gather list from a socket buffer
-  *    @skb: Socket buffer containing the buffers to be mapped
-diff -U 5 -Nr linux-2.6.32/net/netfilter/Kconfig linux-2.6.32-imq/net/netfilter/Kconfig
---- linux-2.6.32/net/netfilter/Kconfig 2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/net/netfilter/Kconfig     2009-12-11 14:16:42.681731014 +0200
-@@ -394,10 +394,22 @@
-           echo netfilter-ssh > /sys/class/leds/<ledname>/trigger
-         For more information on the LEDs available on your system, see
-         Documentation/leds-class.txt
-+config NETFILTER_XT_TARGET_IMQ
-+        tristate '"IMQ" target support'
-+      depends on NETFILTER_XTABLES
-+      depends on IP_NF_MANGLE || IP6_NF_MANGLE
-+      select IMQ
-+      default m if NETFILTER_ADVANCED=n
-+        help
-+          This option adds a `IMQ' target which is used to specify if and
-+          to which imq device packets should get enqueued/dequeued.
-+
-+          To compile it as a module, choose M here.  If unsure, say N.
-+
- config NETFILTER_XT_TARGET_MARK
-       tristate '"MARK" target support'
-       default m if NETFILTER_ADVANCED=n
-       help
-         This option adds a `MARK' target, which allows you to create rules
-diff -U 5 -Nr linux-2.6.32/net/netfilter/Makefile linux-2.6.32-imq/net/netfilter/Makefile
---- linux-2.6.32/net/netfilter/Makefile        2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/net/netfilter/Makefile    2009-12-11 14:16:42.681731014 +0200
-@@ -44,10 +44,11 @@
- obj-$(CONFIG_NETFILTER_XT_TARGET_CLASSIFY) += xt_CLASSIFY.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_CONNMARK) += xt_CONNMARK.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_CONNSECMARK) += xt_CONNSECMARK.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o
-+obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_MARK) += xt_MARK.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NFLOG) += xt_NFLOG.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NFQUEUE) += xt_NFQUEUE.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NOTRACK) += xt_NOTRACK.o
-diff -U 5 -Nr linux-2.6.32/net/netfilter/nf_queue.c linux-2.6.32-imq/net/netfilter/nf_queue.c
---- linux-2.6.32/net/netfilter/nf_queue.c      2009-12-03 05:51:21.000000000 +0200
-+++ linux-2.6.32-imq/net/netfilter/nf_queue.c  2009-12-11 14:16:42.681731014 +0200
-@@ -18,10 +18,30 @@
-  */
- static const struct nf_queue_handler *queue_handler[NFPROTO_NUMPROTO] __read_mostly;
- static DEFINE_MUTEX(queue_handler_mutex);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static const struct nf_queue_handler *queue_imq_handler;
-+
-+void nf_register_queue_imq_handler(const struct nf_queue_handler *qh)
-+{
-+      mutex_lock(&queue_handler_mutex);
-+      rcu_assign_pointer(queue_imq_handler, qh);
-+      mutex_unlock(&queue_handler_mutex);
-+}
-+EXPORT_SYMBOL(nf_register_queue_imq_handler);
-+
-+void nf_unregister_queue_imq_handler(void)
-+{
-+      mutex_lock(&queue_handler_mutex);
-+      rcu_assign_pointer(queue_imq_handler, NULL);
-+      mutex_unlock(&queue_handler_mutex);
-+}
-+EXPORT_SYMBOL(nf_unregister_queue_imq_handler);
-+#endif
-+
- /* return EBUSY when somebody else is registered, return EEXIST if the
-  * same handler is registered, return 0 in case of success. */
- int nf_register_queue_handler(u_int8_t pf, const struct nf_queue_handler *qh)
- {
-       int ret;
-@@ -78,11 +98,11 @@
-       synchronize_rcu();
- }
- EXPORT_SYMBOL_GPL(nf_unregister_queue_handlers);
--static void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
-+void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
- {
-       /* Release those devices we held, or Alexey will kill me. */
-       if (entry->indev)
-               dev_put(entry->indev);
-       if (entry->outdev)
-@@ -98,10 +118,11 @@
-       }
- #endif
-       /* Drop reference to owner of hook which queued us. */
-       module_put(entry->elem->owner);
- }
-+EXPORT_SYMBOL_GPL(nf_queue_entry_release_refs);
- /*
-  * Any packet that leaves via this function must come back
-  * through nf_reinject().
-  */
-@@ -119,16 +140,30 @@
-       struct net_device *physindev;
-       struct net_device *physoutdev;
- #endif
-       const struct nf_afinfo *afinfo;
-       const struct nf_queue_handler *qh;
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      const struct nf_queue_handler *qih = NULL;
-+#endif
-       /* QUEUE == DROP if noone is waiting, to be safe. */
-       rcu_read_lock();
-       qh = rcu_dereference(queue_handler[pf]);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      if (pf == PF_INET || pf == PF_INET6)
-+#else
-+      if (pf == PF_INET)
-+#endif
-+              qih = rcu_dereference(queue_imq_handler);
-+
-+      if (!qh && !qih)
-+#else /* !IMQ */
-       if (!qh)
-+#endif
-               goto err_unlock;
-       afinfo = nf_get_afinfo(pf);
-       if (!afinfo)
-               goto err_unlock;
-@@ -143,10 +178,14 @@
-               .pf     = pf,
-               .hook   = hook,
-               .indev  = indev,
-               .outdev = outdev,
-               .okfn   = okfn,
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+              .next_outfn = qh ? qh->outfn : NULL,
-+              .next_queuenum = queuenum,
-+#endif
-       };
-       /* If it's going away, ignore hook. */
-       if (!try_module_get(entry->elem->owner)) {
-               rcu_read_unlock();
-@@ -168,12 +207,23 @@
-               if (physoutdev)
-                       dev_hold(physoutdev);
-       }
- #endif
-       afinfo->saveroute(skb, entry);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      if (qih) {
-+              status = qih->outfn(entry, queuenum);
-+              goto imq_skip_queue;
-+      }
-+#endif
-+
-       status = qh->outfn(entry, queuenum);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+imq_skip_queue:
-+#endif
-       rcu_read_unlock();
-       if (status < 0) {
-               nf_queue_entry_release_refs(entry);
-               goto err;
-diff -U 5 -Nr linux-2.6.32/net/netfilter/xt_IMQ.c linux-2.6.32-imq/net/netfilter/xt_IMQ.c
---- linux-2.6.32/net/netfilter/xt_IMQ.c        1970-01-01 02:00:00.000000000 +0200
-+++ linux-2.6.32-imq/net/netfilter/xt_IMQ.c    2009-12-11 14:16:42.681731014 +0200
-@@ -0,0 +1,73 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter/x_tables.h>
-+#include <linux/netfilter/xt_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff *pskb,
-+                              const struct xt_target_param *par)
-+{
-+      const struct xt_imq_info *mr = par->targinfo;
-+
-+      pskb->imq_flags = (mr->todev & IMQ_F_IFMASK) | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static bool imq_checkentry(const struct xt_tgchk_param *par)
-+{
-+      struct xt_imq_info *mr = par->targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS - 1) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS - 1);
-+              return 0;
-+      }
-+
-+      return 1;
-+}
-+
-+static struct xt_target xt_imq_reg[] __read_mostly = {
-+      {
-+              .name           = "IMQ",
-+              .family         = AF_INET,
-+              .checkentry     = imq_checkentry,
-+              .target         = imq_target,
-+              .targetsize     = sizeof(struct xt_imq_info),
-+              .table          = "mangle",
-+              .me             = THIS_MODULE
-+      },
-+      {
-+              .name           = "IMQ",
-+              .family         = AF_INET6,
-+              .checkentry     = imq_checkentry,
-+              .target         = imq_target,
-+              .targetsize     = sizeof(struct xt_imq_info),
-+              .table          = "mangle",
-+              .me             = THIS_MODULE
-+      },
-+};
-+
-+static int __init imq_init(void)
-+{
-+      return xt_register_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+static void __exit imq_fini(void)
-+{
-+      xt_unregister_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+module_init(imq_init);
-+module_exit(imq_fini);
-+
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("ipt_IMQ");
-+MODULE_ALIAS("ip6t_IMQ");
-+
diff --git a/src/patches/linux-2.6.32.11-netdev-1.patch b/src/patches/linux-2.6.32.11-netdev-1.patch
deleted file mode 100644 (file)
index 65cd319..0000000
+++ /dev/null
@@ -1,478 +0,0 @@
-diff -Nur linux-2.6.32.11.vanilla/drivers/leds/Kconfig linux-2.6.32.11/drivers/leds/Kconfig
---- linux-2.6.32.11.vanilla/drivers/leds/Kconfig       2010-04-02 00:59:14.000000000 +0200
-+++ linux-2.6.32.11/drivers/leds/Kconfig       2010-04-18 17:12:55.000000000 +0200
-@@ -304,4 +304,11 @@
- comment "iptables trigger is under Netfilter config (LED target)"
-       depends on LEDS_TRIGGERS
-+config LEDS_TRIGGER_NETDEV
-+      tristate "LED Netdev Trigger"
-+      depends on LEDS_TRIGGERS
-+      help
-+        This allows LEDs to be controlled by network device activity.
-+        If unsure, say Y.
-+
- endif # NEW_LEDS
-diff -Nur linux-2.6.32.11.vanilla/drivers/leds/ledtrig-netdev.c linux-2.6.32.11/drivers/leds/ledtrig-netdev.c
---- linux-2.6.32.11.vanilla/drivers/leds/ledtrig-netdev.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.32.11/drivers/leds/ledtrig-netdev.c      2010-04-18 16:17:25.000000000 +0200
-@@ -0,0 +1,451 @@
-+/*
-+ * LED Kernel Netdev Trigger
-+ *
-+ * Toggles the LED to reflect the link and traffic state of a named net device
-+ *
-+ * Copyright 2007 Oliver Jowett <oliver@opencloud.com>
-+ *
-+ * Derived from ledtrig-timer.c which is:
-+ *  Copyright 2005-2006 Openedhand Ltd.
-+ *  Author: Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/jiffies.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
-+#include <linux/device.h>
-+#include <linux/sysdev.h>
-+#include <linux/netdevice.h>
-+#include <linux/timer.h>
-+#include <linux/ctype.h>
-+#include <linux/leds.h>
-+#include <linux/version.h>
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
-+#include <net/net_namespace.h>
-+#endif
-+
-+#include "leds.h"
-+
-+/*
-+ * Configurable sysfs attributes:
-+ *
-+ * device_name - network device name to monitor
-+ *
-+ * interval - duration of LED blink, in milliseconds
-+ *
-+ * mode - either "none" (LED is off) or a space separated list of one or more of:
-+ *   link: LED's normal state reflects whether the link is up (has carrier) or not
-+ *   tx:   LED blinks on transmitted data
-+ *   rx:   LED blinks on receive data
-+ *
-+ * Some suggestions:
-+ *
-+ *  Simple link status LED:
-+ *  $ echo netdev >someled/trigger
-+ *  $ echo eth0 >someled/device_name
-+ *  $ echo link >someled/mode
-+ *
-+ *  Ethernet-style link/activity LED:
-+ *  $ echo netdev >someled/trigger
-+ *  $ echo eth0 >someled/device_name
-+ *  $ echo "link tx rx" >someled/mode
-+ *
-+ *  Modem-style tx/rx LEDs:
-+ *  $ echo netdev >led1/trigger
-+ *  $ echo ppp0 >led1/device_name
-+ *  $ echo tx >led1/mode
-+ *  $ echo netdev >led2/trigger
-+ *  $ echo ppp0 >led2/device_name
-+ *  $ echo rx >led2/mode
-+ *
-+ */
-+
-+#define MODE_LINK 1
-+#define MODE_TX   2
-+#define MODE_RX   4
-+
-+struct led_netdev_data {
-+      rwlock_t lock;
-+
-+      struct timer_list timer;
-+      struct notifier_block notifier;
-+
-+      struct led_classdev *led_cdev;
-+      struct net_device *net_dev;
-+
-+      char device_name[IFNAMSIZ];
-+      unsigned interval;
-+      unsigned mode;
-+      unsigned link_up;
-+      unsigned last_activity;
-+};
-+
-+static void set_baseline_state(struct led_netdev_data *trigger_data)
-+{
-+      if ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up)
-+              led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+      else
-+              led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+
-+      if ((trigger_data->mode & (MODE_TX | MODE_RX)) != 0 && trigger_data->link_up)
-+              mod_timer(&trigger_data->timer, jiffies + trigger_data->interval);
-+      else
-+              del_timer(&trigger_data->timer);
-+}
-+
-+static ssize_t led_device_name_show(struct device *dev,
-+                                  struct device_attribute *attr, char *buf)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      read_lock(&trigger_data->lock);
-+      sprintf(buf, "%s\n", trigger_data->device_name);
-+      read_unlock(&trigger_data->lock);
-+
-+      return strlen(buf) + 1;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+extern struct net init_net;
-+#endif
-+
-+static ssize_t led_device_name_store(struct device *dev,
-+                                   struct device_attribute *attr, const char *buf, size_t size)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      if (size < 0 || size >= IFNAMSIZ)
-+              return -EINVAL;
-+
-+      write_lock(&trigger_data->lock);
-+
-+      strcpy(trigger_data->device_name, buf);
-+      if (size > 0 && trigger_data->device_name[size-1] == '\n')
-+              trigger_data->device_name[size-1] = 0;
-+
-+      if (trigger_data->device_name[0] != 0) {
-+              /* check for existing device to update from */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
-+              trigger_data->net_dev = dev_get_by_name(&init_net, trigger_data->device_name);
-+#else
-+              trigger_data->net_dev = dev_get_by_name(trigger_data->device_name);
-+#endif
-+              if (trigger_data->net_dev != NULL)
-+                      trigger_data->link_up = (dev_get_flags(trigger_data->net_dev) & IFF_LOWER_UP) != 0;
-+              set_baseline_state(trigger_data); /* updates LEDs, may start timers */
-+      }
-+
-+      write_unlock(&trigger_data->lock);
-+      return size;
-+}
-+
-+static DEVICE_ATTR(device_name, 0644, led_device_name_show, led_device_name_store);
-+
-+static ssize_t led_mode_show(struct device *dev,
-+                           struct device_attribute *attr, char *buf)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      read_lock(&trigger_data->lock);
-+
-+      if (trigger_data->mode == 0) {
-+              strcpy(buf, "none\n");
-+      } else {
-+              if (trigger_data->mode & MODE_LINK)
-+                      strcat(buf, "link ");
-+              if (trigger_data->mode & MODE_TX)
-+                      strcat(buf, "tx ");
-+              if (trigger_data->mode & MODE_RX)
-+                      strcat(buf, "rx ");
-+              strcat(buf, "\n");
-+      }
-+
-+      read_unlock(&trigger_data->lock);
-+
-+      return strlen(buf)+1;
-+}
-+
-+static ssize_t led_mode_store(struct device *dev,
-+                            struct device_attribute *attr, const char *buf, size_t size)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+      char copybuf[1024];
-+      int new_mode = -1;
-+      char *p, *token;
-+
-+      /* take a copy since we don't want to trash the inbound buffer when using strsep */
-+      strncpy(copybuf, buf, sizeof(copybuf));
-+      copybuf[1023] = 0;
-+      p = copybuf;
-+
-+      while ((token = strsep(&p, " \t\n")) != NULL) {
-+              if (!*token)
-+                      continue;
-+
-+              if (new_mode == -1)
-+                      new_mode = 0;
-+
-+              if (!strcmp(token, "none"))
-+                      new_mode = 0;
-+              else if (!strcmp(token, "tx"))
-+                      new_mode |= MODE_TX;
-+              else if (!strcmp(token, "rx"))
-+                      new_mode |= MODE_RX;
-+              else if (!strcmp(token, "link"))
-+                      new_mode |= MODE_LINK;
-+              else
-+                      return -EINVAL;
-+      }
-+
-+      if (new_mode == -1)
-+              return -EINVAL;
-+
-+      write_lock(&trigger_data->lock);
-+      trigger_data->mode = new_mode;
-+      set_baseline_state(trigger_data);
-+      write_unlock(&trigger_data->lock);
-+
-+      return size;
-+}
-+
-+static DEVICE_ATTR(mode, 0644, led_mode_show, led_mode_store);
-+
-+static ssize_t led_interval_show(struct device *dev,
-+                               struct device_attribute *attr, char *buf)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      read_lock(&trigger_data->lock);
-+      sprintf(buf, "%u\n", jiffies_to_msecs(trigger_data->interval));
-+      read_unlock(&trigger_data->lock);
-+
-+      return strlen(buf) + 1;
-+}
-+
-+static ssize_t led_interval_store(struct device *dev,
-+                                struct device_attribute *attr, const char *buf, size_t size)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+      int ret = -EINVAL;
-+      char *after;
-+      unsigned long value = simple_strtoul(buf, &after, 10);
-+      size_t count = after - buf;
-+
-+      if (*after && isspace(*after))
-+              count++;
-+
-+      /* impose some basic bounds on the timer interval */
-+      if (count == size && value >= 5 && value <= 10000) {
-+              write_lock(&trigger_data->lock);
-+              trigger_data->interval = msecs_to_jiffies(value);
-+              set_baseline_state(trigger_data); // resets timer
-+              write_unlock(&trigger_data->lock);
-+              ret = count;
-+      }
-+
-+      return ret;
-+}
-+
-+static DEVICE_ATTR(interval, 0644, led_interval_show, led_interval_store);
-+
-+static int netdev_trig_notify(struct notifier_block *nb,
-+                            unsigned long evt,
-+                            void *dv)
-+{
-+      struct net_device *dev = dv;
-+      struct led_netdev_data *trigger_data = container_of(nb, struct led_netdev_data, notifier);
-+
-+      if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER)
-+              return NOTIFY_DONE;
-+
-+      write_lock(&trigger_data->lock);
-+
-+      if (strcmp(dev->name, trigger_data->device_name))
-+              goto done;
-+
-+      if (evt == NETDEV_REGISTER) {
-+              if (trigger_data->net_dev != NULL)
-+                      dev_put(trigger_data->net_dev);
-+              dev_hold(dev);
-+              trigger_data->net_dev = dev;
-+              trigger_data->link_up = 0;
-+              goto done;
-+      }
-+
-+      if (evt == NETDEV_UNREGISTER && trigger_data->net_dev != NULL) {
-+              dev_put(trigger_data->net_dev);
-+              trigger_data->net_dev = NULL;
-+              goto done;
-+      }
-+
-+      /* UP / DOWN / CHANGE */
-+
-+      trigger_data->link_up = (evt != NETDEV_DOWN && netif_carrier_ok(dev));
-+      set_baseline_state(trigger_data);
-+
-+done:
-+      write_unlock(&trigger_data->lock);
-+      return NOTIFY_DONE;
-+}
-+
-+/* here's the real work! */
-+static void netdev_trig_timer(unsigned long arg)
-+{
-+      struct led_netdev_data *trigger_data = (struct led_netdev_data *)arg;
-+      const struct net_device_stats *dev_stats;
-+      unsigned new_activity;
-+
-+      write_lock(&trigger_data->lock);
-+
-+      if (!trigger_data->link_up || !trigger_data->net_dev || (trigger_data->mode & (MODE_TX | MODE_RX)) == 0) {
-+              /* we don't need to do timer work, just reflect link state. */
-+              led_set_brightness(trigger_data->led_cdev, ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up) ? LED_FULL : LED_OFF);
-+              goto no_restart;
-+      }
-+
-+      dev_stats = dev_get_stats(trigger_data->net_dev);
-+      new_activity =
-+              ((trigger_data->mode & MODE_TX) ? dev_stats->tx_packets : 0) +
-+              ((trigger_data->mode & MODE_RX) ? dev_stats->rx_packets : 0);
-+
-+      if (trigger_data->mode & MODE_LINK) {
-+              /* base state is ON (link present) */
-+              /* if there's no link, we don't get this far and the LED is off */
-+
-+              /* OFF -> ON always */
-+              /* ON -> OFF on activity */
-+              if (trigger_data->led_cdev->brightness == LED_OFF) {
-+                      led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+              } else if (trigger_data->last_activity != new_activity) {
-+                      led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+              }
-+      } else {
-+              /* base state is OFF */
-+              /* ON -> OFF always */
-+              /* OFF -> ON on activity */
-+              if (trigger_data->led_cdev->brightness == LED_FULL) {
-+                      led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+              } else if (trigger_data->last_activity != new_activity) {
-+                      led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+              }
-+      }
-+
-+      trigger_data->last_activity = new_activity;
-+      mod_timer(&trigger_data->timer, jiffies + trigger_data->interval);
-+
-+no_restart:
-+      write_unlock(&trigger_data->lock);
-+}
-+
-+static void netdev_trig_activate(struct led_classdev *led_cdev)
-+{
-+      struct led_netdev_data *trigger_data;
-+      int rc;
-+
-+      trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL);
-+      if (!trigger_data)
-+              return;
-+
-+      rwlock_init(&trigger_data->lock);
-+
-+      trigger_data->notifier.notifier_call = netdev_trig_notify;
-+      trigger_data->notifier.priority = 10;
-+
-+      setup_timer(&trigger_data->timer, netdev_trig_timer, (unsigned long) trigger_data);
-+
-+      trigger_data->led_cdev = led_cdev;
-+      trigger_data->net_dev = NULL;
-+      trigger_data->device_name[0] = 0;
-+
-+      trigger_data->mode = 0;
-+      trigger_data->interval = msecs_to_jiffies(50);
-+      trigger_data->link_up = 0;
-+      trigger_data->last_activity = 0;
-+
-+      led_cdev->trigger_data = trigger_data;
-+
-+      rc = device_create_file(led_cdev->dev, &dev_attr_device_name);
-+      if (rc)
-+              goto err_out;
-+      rc = device_create_file(led_cdev->dev, &dev_attr_mode);
-+      if (rc)
-+              goto err_out_device_name;
-+      rc = device_create_file(led_cdev->dev, &dev_attr_interval);
-+      if (rc)
-+              goto err_out_mode;
-+
-+      register_netdevice_notifier(&trigger_data->notifier);
-+      return;
-+
-+err_out_mode:
-+      device_remove_file(led_cdev->dev, &dev_attr_mode);
-+err_out_device_name:
-+      device_remove_file(led_cdev->dev, &dev_attr_device_name);
-+err_out:
-+      led_cdev->trigger_data = NULL;
-+      kfree(trigger_data);
-+}
-+
-+static void netdev_trig_deactivate(struct led_classdev *led_cdev)
-+{
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      if (trigger_data) {
-+              unregister_netdevice_notifier(&trigger_data->notifier);
-+
-+              device_remove_file(led_cdev->dev, &dev_attr_device_name);
-+              device_remove_file(led_cdev->dev, &dev_attr_mode);
-+              device_remove_file(led_cdev->dev, &dev_attr_interval);
-+
-+              write_lock(&trigger_data->lock);
-+
-+              if (trigger_data->net_dev) {
-+                      dev_put(trigger_data->net_dev);
-+                      trigger_data->net_dev = NULL;
-+              }
-+
-+              write_unlock(&trigger_data->lock);
-+
-+              del_timer_sync(&trigger_data->timer);
-+
-+              kfree(trigger_data);
-+      }
-+}
-+
-+static struct led_trigger netdev_led_trigger = {
-+      .name     = "netdev",
-+      .activate = netdev_trig_activate,
-+      .deactivate = netdev_trig_deactivate,
-+};
-+
-+static int __init netdev_trig_init(void)
-+{
-+      return led_trigger_register(&netdev_led_trigger);
-+}
-+
-+static void __exit netdev_trig_exit(void)
-+{
-+      led_trigger_unregister(&netdev_led_trigger);
-+}
-+
-+module_init(netdev_trig_init);
-+module_exit(netdev_trig_exit);
-+
-+MODULE_AUTHOR("Oliver Jowett <oliver@opencloud.com>");
-+MODULE_DESCRIPTION("Netdev LED trigger");
-+MODULE_LICENSE("GPL");
-diff -Nur linux-2.6.32.11.vanilla/drivers/leds/Makefile linux-2.6.32.11/drivers/leds/Makefile
---- linux-2.6.32.11.vanilla/drivers/leds/Makefile      2010-04-02 00:59:14.000000000 +0200
-+++ linux-2.6.32.11/drivers/leds/Makefile      2010-04-18 16:13:39.000000000 +0200
-@@ -40,3 +40,4 @@
- obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)  += ledtrig-backlight.o
- obj-$(CONFIG_LEDS_TRIGGER_GPIO)               += ledtrig-gpio.o
- obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
-+obj-$(CONFIG_LEDS_TRIGGER_NETDEV)      += ledtrig-netdev.o
diff --git a/src/patches/linux-2.6.32.15-option_add_huawei_android.patch b/src/patches/linux-2.6.32.15-option_add_huawei_android.patch
deleted file mode 100644 (file)
index a6bb66b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -Naur linux-2.6.32.15.org/drivers/usb/serial/option.c linux-2.6.32.15/drivers/usb/serial/option.c
---- linux-2.6.32.15.org/drivers/usb/serial/option.c    2010-06-01 18:56:03.000000000 +0200
-+++ linux-2.6.32.15/drivers/usb/serial/option.c        2010-08-02 22:38:11.000000000 +0200
-@@ -102,6 +102,7 @@
- #define HUAWEI_PRODUCT_E600                   0x1001
- #define HUAWEI_PRODUCT_E220                   0x1003
- #define HUAWEI_PRODUCT_E220BIS                        0x1004
-+#define HUAWEI_PRODUCT_ANDROID                        0x1035
- #define HUAWEI_PRODUCT_E1401                  0x1401
- #define HUAWEI_PRODUCT_E1402                  0x1402
- #define HUAWEI_PRODUCT_E1403                  0x1403
-@@ -380,6 +381,7 @@
-       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) },
-       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
-       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
-+      { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ANDROID, 0xff, 0xff, 0xff) },
-       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) },
-       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1402, 0xff, 0xff, 0xff) },
-       { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) },
diff --git a/src/patches/linux-2.6.32.27_ipg-fix-driver-name.patch b/src/patches/linux-2.6.32.27_ipg-fix-driver-name.patch
deleted file mode 100644 (file)
index 2da9301..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Patch by Arne Fitzenreiter <arne_f@ipfire.org>
-Fix PHYSDEVDRIVER from "Sundance IPG ..." to the modulname (ipg)
-
-diff -Naur linux-2.6.32.27.org/drivers/net/ipg.c linux-2.6.32.27/drivers/net/ipg.c
---- linux-2.6.32.27.org/drivers/net/ipg.c      2010-12-09 22:29:45.000000000 +0100
-+++ linux-2.6.32.27/drivers/net/ipg.c  2010-12-25 00:24:29.291637731 +0100
-@@ -2320,7 +2320,7 @@
- }
- static struct pci_driver ipg_pci_driver = {
--      .name           = IPG_DRIVER_NAME,
-+      .name           = DRV_NAME,
-       .id_table       = ipg_pci_tbl,
-       .probe          = ipg_probe,
-       .remove         = __devexit_p(ipg_remove),
diff --git a/src/patches/linux-2.6.32.45_align_ssb_modtable_32bit_boundary.patch b/src/patches/linux-2.6.32.45_align_ssb_modtable_32bit_boundary.patch
deleted file mode 100644 (file)
index e9b8b82..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Naur linux-2.6.32.45.org/include/linux/mod_devicetable.h linux-2.6.32.45/include/linux/mod_devicetable.h
---- linux-2.6.32.45.org/include/linux/mod_devicetable.h        2011-08-16 03:57:37.000000000 +0200
-+++ linux-2.6.32.45/include/linux/mod_devicetable.h    2011-11-17 15:07:43.366023632 +0100
-@@ -364,7 +364,7 @@
-       __u16   vendor;                 /* Vendor or SDIO_ANY_ID */
-       __u16   device;                 /* Device ID or SDIO_ANY_ID */
-       kernel_ulong_t driver_data      /* Data private to the driver */
--              __attribute__((aligned(sizeof(kernel_ulong_t))));
-+              __attribute__((aligned(sizeof(__u32))));  /* align to 32bit boundary */
- };
- /* SSB core, see drivers/ssb/ */
diff --git a/src/patches/linux-2.6.32.8-ipp2p-0.8.2-pomng.patch b/src/patches/linux-2.6.32.8-ipp2p-0.8.2-pomng.patch
deleted file mode 100644 (file)
index 359892f..0000000
+++ /dev/null
@@ -1,1033 +0,0 @@
-diff -Naur linux-2.6.32.8.org/include/linux/netfilter_ipv4/ipt_ipp2p.h linux-2.6.32.8/include/linux/netfilter_ipv4/ipt_ipp2p.h
---- linux-2.6.32.8.org/include/linux/netfilter_ipv4/ipt_ipp2p.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.32.8/include/linux/netfilter_ipv4/ipt_ipp2p.h    2010-02-13 19:54:30.000000000 +0100
-@@ -0,0 +1,31 @@
-+#ifndef __IPT_IPP2P_H
-+#define __IPT_IPP2P_H
-+#define IPP2P_VERSION "0.8.2-pomng"
-+
-+struct ipt_p2p_info {
-+    int cmd;
-+    int debug;
-+};
-+
-+#endif //__IPT_IPP2P_H
-+
-+#define SHORT_HAND_IPP2P      1 /* --ipp2p switch*/
-+//#define SHORT_HAND_DATA             4 /* --ipp2p-data switch*/
-+#define SHORT_HAND_NONE               5 /* no short hand*/
-+
-+#define IPP2P_EDK             (1 << 1)
-+#define IPP2P_DATA_KAZAA      (1 << 2)
-+#define IPP2P_DATA_EDK                (1 << 3)
-+#define IPP2P_DATA_DC         (1 << 4)
-+#define IPP2P_DC              (1 << 5)
-+#define IPP2P_DATA_GNU                (1 << 6)
-+#define IPP2P_GNU             (1 << 7)
-+#define IPP2P_KAZAA           (1 << 8)
-+#define IPP2P_BIT             (1 << 9)
-+#define IPP2P_APPLE           (1 << 10)
-+#define IPP2P_SOUL            (1 << 11)
-+#define IPP2P_WINMX           (1 << 12)
-+#define IPP2P_ARES            (1 << 13)
-+#define IPP2P_MUTE            (1 << 14)
-+#define IPP2P_WASTE           (1 << 15)
-+#define IPP2P_XDCC            (1 << 16)
-diff -Naur linux-2.6.32.8.org/net/ipv4/netfilter/ipt_ipp2p.c linux-2.6.32.8/net/ipv4/netfilter/ipt_ipp2p.c
---- linux-2.6.32.8.org/net/ipv4/netfilter/ipt_ipp2p.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.32.8/net/ipv4/netfilter/ipt_ipp2p.c      2010-02-13 19:54:30.000000000 +0100
-@@ -0,0 +1,964 @@
-+#if defined(MODVERSIONS)
-+#include <linux/modversions.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/netfilter_ipv4/ip_tables.h>
-+#include <linux/netfilter_ipv4/ipt_ipp2p.h>
-+#include <net/tcp.h>
-+#include <net/udp.h>
-+
-+#define get_u8(X,O)  (*(__u8 *)(X + O))
-+#define get_u16(X,O)  (*(__u16 *)(X + O))
-+#define get_u32(X,O)  (*(__u32 *)(X + O))
-+
-+MODULE_AUTHOR("Eicke Friedrich/Klaus Degner <ipp2p@ipp2p.org>");
-+MODULE_DESCRIPTION("An extension to iptables to identify P2P traffic.");
-+MODULE_LICENSE("GPL");
-+
-+
-+/*Search for UDP eDonkey/eMule/Kad commands*/
-+int
-+udp_search_edk (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    t += 8;
-+
-+      switch (t[0]) {
-+              case 0xe3: 
-+              {       /*edonkey*/
-+                      switch (t[1]) 
-+                      {
-+                              /* client -> server status request */
-+                              case 0x96: 
-+                                      if (packet_len == 14) return ((IPP2P_EDK * 100) + 50);
-+                                      break;
-+                              /* server -> client status request */
-+                              case 0x97: if (packet_len == 42) return ((IPP2P_EDK * 100) + 51);
-+                                      break;
-+                                              /* server description request */
-+                                              /* e3 2a ff f0 .. | size == 6 */
-+                              case 0xa2: if ( (packet_len == 14) && ( get_u16(t,2) == __constant_htons(0xfff0) ) ) return ((IPP2P_EDK * 100) + 52);
-+                                      break;
-+                                              /* server description response */
-+                                              /* e3 a3 ff f0 ..  | size > 40 && size < 200 */
-+                              //case 0xa3: return ((IPP2P_EDK * 100) + 53);
-+                              //      break;
-+                              case 0x9a: if (packet_len==26) return ((IPP2P_EDK * 100) + 54);
-+                                      break;
-+
-+                              case 0x92: if (packet_len==18) return ((IPP2P_EDK * 100) + 55);
-+                                      break;
-+                      }
-+                      break;
-+              }
-+              case 0xe4: 
-+              {
-+                      switch (t[1]) 
-+                      {
-+                                              /* e4 20 .. | size == 43 */
-+                              case 0x20: if ((packet_len == 43) && (t[2] != 0x00) && (t[34] != 0x00)) return ((IPP2P_EDK * 100) + 60);
-+                                      break;
-+                                              /* e4 00 .. 00 | size == 35 ? */
-+                              case 0x00: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 61);
-+                                      break;
-+                                              /* e4 10 .. 00 | size == 35 ? */
-+                              case 0x10: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 62);
-+                                      break;
-+                                              /* e4 18 .. 00 | size == 35 ? */
-+                              case 0x18: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 63);
-+                                      break;
-+                                              /* e4 52 .. | size = 44 */
-+                              case 0x52: if (packet_len == 44 ) return ((IPP2P_EDK * 100) + 64);
-+                                      break;
-+                                              /* e4 58 .. | size == 6 */
-+                              case 0x58: if (packet_len == 14 ) return ((IPP2P_EDK * 100) + 65);
-+                                      break;
-+                                              /* e4 59 .. | size == 2 */
-+                              case 0x59: if (packet_len == 10 )return ((IPP2P_EDK * 100) + 66);
-+                                      break;
-+                                      /* e4 28 .. | packet_len == 52,77,102,127... */
-+                              case 0x28: if (((packet_len-52) % 25) == 0) return ((IPP2P_EDK * 100) + 67);
-+                                      break;
-+                                      /* e4 50 xx xx | size == 4 */
-+                              case 0x50: if (packet_len == 12) return ((IPP2P_EDK * 100) + 68);
-+                                      break;
-+                                      /* e4 40 xx xx | size == 48 */
-+                              case 0x40: if (packet_len == 56) return ((IPP2P_EDK * 100) + 69);
-+                                      break;
-+                      }
-+                      break;
-+              }
-+      } /* end of switch (t[0]) */
-+    return 0;
-+}/*udp_search_edk*/
-+
-+
-+/*Search for UDP Gnutella commands*/
-+int
-+udp_search_gnu (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    t += 8;
-+    
-+    if (memcmp(t, "GND", 3) == 0) return ((IPP2P_GNU * 100) + 51);
-+    if (memcmp(t, "GNUTELLA ", 9) == 0) return ((IPP2P_GNU * 100) + 52);
-+    return 0;
-+}/*udp_search_gnu*/
-+
-+
-+/*Search for UDP KaZaA commands*/
-+int
-+udp_search_kazaa (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    
-+    if (t[packet_len-1] == 0x00){
-+      t += (packet_len - 6);
-+      if (memcmp(t, "KaZaA", 5) == 0) return (IPP2P_KAZAA * 100 +50);
-+    }
-+    
-+    return 0;
-+}/*udp_search_kazaa*/
-+
-+/*Search for UDP DirectConnect commands*/
-+int
-+udp_search_directconnect (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    if ((*(t + 8) == 0x24) && (*(t + packet_len - 1) == 0x7c)) {
-+      t+=8;
-+      if (memcmp(t, "SR ", 3) == 0)                   return ((IPP2P_DC * 100) + 60);
-+      if (memcmp(t, "Ping ", 5) == 0)                 return ((IPP2P_DC * 100) + 61);
-+    }
-+    return 0;
-+}/*udp_search_directconnect*/
-+
-+
-+
-+/*Search for UDP BitTorrent commands*/
-+int
-+udp_search_bit (unsigned char *haystack, int packet_len)
-+{
-+      switch(packet_len)
-+      {
-+              case 24:
-+                      /* ^ 00 00 04 17 27 10 19 80 */
-+                      if ((ntohl(get_u32(haystack, 8)) == 0x00000417) && (ntohl(get_u32(haystack, 12)) == 0x27101980)) 
-+                              return (IPP2P_BIT * 100 + 50);
-+                      break;
-+              case 44:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000400) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 51);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000400))
-+                              return (IPP2P_BIT * 100 + 61);
-+                      break;
-+              case 65:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000404) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 52);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000404))
-+                              return (IPP2P_BIT * 100 + 62);
-+                      break;
-+              case 67:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000406) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 53);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000406))
-+                              return (IPP2P_BIT * 100 + 63);
-+                      break;
-+              case 211:
-+                      if (get_u32(haystack, 8) == __constant_htonl(0x00000405)) 
-+                              return (IPP2P_BIT * 100 + 54);
-+                      break;
-+              case 29:
-+                      if ((get_u32(haystack, 8) == __constant_htonl(0x00000401))) 
-+                              return (IPP2P_BIT * 100 + 55);
-+                      break;
-+              case 52:
-+                      if (get_u32(haystack,8)  == __constant_htonl(0x00000827) &&
-+                      get_u32(haystack,12) == __constant_htonl(0x37502950))
-+                              return (IPP2P_BIT * 100 + 80);
-+                      break;
-+              default:
-+                      /* this packet does not have a constant size */
-+                      if (packet_len >= 40 && get_u32(haystack, 16) == __constant_htonl(0x00000402) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 56);
-+                      break;
-+      }
-+    
-+      /* some extra-bitcomet rules:
-+      * "d1:" [a|r] "d2:id20:"
-+      */
-+      if (packet_len > 30 && get_u8(haystack, 8) == 'd' && get_u8(haystack, 9) == '1' && get_u8(haystack, 10) == ':' )
-+      {
-+              if (get_u8(haystack, 11) == 'a' || get_u8(haystack, 11) == 'r')
-+              {
-+                      if (memcmp(haystack+12,"d2:id20:",8)==0)
-+                              return (IPP2P_BIT * 100 + 57);
-+              }
-+      }
-+    
-+#if 0
-+      /* bitlord rules */
-+      /* packetlen must be bigger than 40 */
-+      /* first 4 bytes are zero */
-+      if (packet_len > 40 && get_u32(haystack, 8) == 0x00000000)
-+      {
-+              /* first rule: 00 00 00 00 01 00 00 xx xx xx xx 00 00 00 00*/
-+              if (get_u32(haystack, 12) == 0x00000000 && 
-+                  get_u32(haystack, 16) == 0x00010000 &&
-+                  get_u32(haystack, 24) == 0x00000000 )
-+                      return (IPP2P_BIT * 100 + 71);
-+                      
-+              /* 00 01 00 00 0d 00 00 xx xx xx xx 00 00 00 00*/
-+              if (get_u32(haystack, 12) == 0x00000001 && 
-+                  get_u32(haystack, 16) == 0x000d0000 &&
-+                  get_u32(haystack, 24) == 0x00000000 )
-+                      return (IPP2P_BIT * 100 + 71);
-+              
-+                  
-+      }
-+#endif
-+
-+    return 0;
-+}/*udp_search_bit*/
-+
-+
-+
-+/*Search for Ares commands*/
-+//#define IPP2P_DEBUG_ARES
-+int
-+search_ares (const unsigned char *payload, const u16 plen)
-+//int search_ares (unsigned char *haystack, int packet_len, int head_len)
-+{
-+//    const unsigned char *t = haystack + head_len;
-+      
-+      /* all ares packets start with  */
-+      if (payload[1] == 0 && (plen - payload[0]) == 3)
-+      {
-+              switch (payload[2])
-+              {
-+                      case 0x5a:
-+                              /* ares connect */
-+                              if ( plen == 6 && payload[5] == 0x05 ) return ((IPP2P_ARES * 100) + 1);
-+                              break;
-+                      case 0x09:
-+                              /* ares search, min 3 chars --> 14 bytes
-+                               * lets define a search can be up to 30 chars --> max 34 bytes
-+                               */
-+                              if ( plen >= 14 && plen <= 34 ) return ((IPP2P_ARES * 100) + 1);
-+                              break;
-+#ifdef IPP2P_DEBUG_ARES
-+                      default:
-+                      printk(KERN_DEBUG "Unknown Ares command %x recognized, len: %u \n", (unsigned int) payload[2],plen);
-+#endif /* IPP2P_DEBUG_ARES */
-+              }
-+      }
-+
-+#if 0         
-+      /* found connect packet: 03 00 5a 04 03 05 */
-+      /* new version ares 1.8: 03 00 5a xx xx 05 */
-+    if ((plen) == 6){ /* possible connect command*/
-+      if ((payload[0] == 0x03) && (payload[1] == 0x00) && (payload[2] == 0x5a) && (payload[5] == 0x05))
-+          return ((IPP2P_ARES * 100) + 1);
-+    }
-+    if ((plen) == 60){        /* possible download command*/
-+      if ((payload[59] == 0x0a) && (payload[58] == 0x0a)){
-+          if (memcmp(t, "PUSH SHA1:", 10) == 0) /* found download command */
-+              return ((IPP2P_ARES * 100) + 2);
-+      }
-+    }
-+#endif
-+
-+    return 0;
-+} /*search_ares*/
-+
-+/*Search for SoulSeek commands*/
-+int
-+search_soul (const unsigned char *payload, const u16 plen)
-+{
-+//#define IPP2P_DEBUG_SOUL
-+    /* match: xx xx xx xx | xx = sizeof(payload) - 4 */
-+    if (get_u32(payload, 0) == (plen - 4)){
-+      const __u32 m=get_u32(payload, 4);
-+      /* match 00 yy yy 00, yy can be everything */
-+        if ( get_u8(payload, 4) == 0x00 && get_u8(payload, 7) == 0x00 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "0: Soulseek command 0x%x recognized\n",get_u32(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 1);
-+      }
-+      
-+        /* next match: 01 yy 00 00 | yy can be everything */
-+        if ( get_u8(payload, 4) == 0x01 && get_u16(payload, 6) == 0x0000 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "1: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 2);
-+      }
-+      
-+      /* other soulseek commandos are: 1-5,7,9,13-18,22,23,26,28,35-37,40-46,50,51,60,62-69,91,92,1001 */
-+      /* try to do this in an intelligent way */
-+      /* get all small commandos */
-+      switch(m)
-+      {
-+              case 7:
-+              case 9:
-+              case 22:
-+              case 23:
-+              case 26:
-+              case 28:
-+              case 50:
-+              case 51:
-+              case 60:
-+              case 91:
-+              case 92:
-+              case 1001:
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "2: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 3);
-+      }
-+      
-+      if (m > 0 && m < 6 ) 
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "3: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 4);
-+      }
-+      if (m > 12 && m < 19 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "4: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 5);
-+      }
-+
-+      if (m > 34 && m < 38 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "5: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 6);
-+      }
-+
-+      if (m > 39 && m < 47 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "6: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 7);
-+      }
-+
-+      if (m > 61 && m < 70 ) 
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "7: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 8);
-+      }
-+
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "unknown SOULSEEK command: 0x%x, first 16 bit: 0x%x, first 8 bit: 0x%x ,soulseek ???\n",get_u32(payload, 4),get_u16(payload, 4) >> 16,get_u8(payload, 4) >> 24);
-+#endif /* IPP2P_DEBUG_SOUL */
-+    }
-+      
-+      /* match 14 00 00 00 01 yy 00 00 00 STRING(YY) 01 00 00 00 00 46|50 00 00 00 00 */
-+      /* without size at the beginning !!! */
-+      if ( get_u32(payload, 0) == 0x14 && get_u8(payload, 4) == 0x01 )
-+      {
-+              __u32 y=get_u32(payload, 5);
-+              /* we need 19 chars + string */
-+              if ( (y + 19) <= (plen) )
-+              {
-+                      const unsigned char *w=payload+9+y;
-+                      if (get_u32(w, 0) == 0x01 && ( get_u16(w, 4) == 0x4600 || get_u16(w, 4) == 0x5000) && get_u32(w, 6) == 0x00);
-+#ifdef IPP2P_DEBUG_SOUL
-+                      printk(KERN_DEBUG "Soulssek special client command recognized\n");
-+#endif /* IPP2P_DEBUG_SOUL */
-+                      return ((IPP2P_SOUL * 100) + 9);
-+              }
-+      }
-+    return 0;
-+}
-+
-+
-+/*Search for WinMX commands*/
-+int
-+search_winmx (const unsigned char *payload, const u16 plen)
-+{
-+//#define IPP2P_DEBUG_WINMX
-+    if (((plen) == 4) && (memcmp(payload, "SEND", 4) == 0))  return ((IPP2P_WINMX * 100) + 1);
-+    if (((plen) == 3) && (memcmp(payload, "GET", 3) == 0))  return ((IPP2P_WINMX * 100) + 2);
-+    //if (packet_len < (head_len + 10)) return 0;
-+    if (plen < 10) return 0;
-+    
-+    if ((memcmp(payload, "SEND", 4) == 0) || (memcmp(payload, "GET", 3) == 0)){
-+        u16 c=4;
-+        const u16 end=plen-2;
-+        u8 count=0;
-+        while (c < end)
-+        {
-+              if (payload[c]== 0x20 && payload[c+1] == 0x22)
-+              {
-+                      c++;
-+                      count++;
-+                      if (count>=2) return ((IPP2P_WINMX * 100) + 3);
-+              }
-+              c++;
-+        }
-+    }
-+    
-+    if ( plen == 149 && payload[0] == '8' )
-+    {
-+#ifdef IPP2P_DEBUG_WINMX
-+      printk(KERN_INFO "maybe WinMX\n");
-+#endif
-+      if (get_u32(payload,17) == 0 && get_u32(payload,21) == 0 && get_u32(payload,25) == 0 &&
-+//                get_u32(payload,33) == __constant_htonl(0x71182b1a) && get_u32(payload,37) == __constant_htonl(0x05050000) &&
-+//                get_u32(payload,133) == __constant_htonl(0x31097edf) && get_u32(payload,145) == __constant_htonl(0xdcb8f792))
-+          get_u16(payload,39) == 0 && get_u16(payload,135) == __constant_htons(0x7edf) && get_u16(payload,147) == __constant_htons(0xf792))
-+          
-+      {
-+#ifdef IPP2P_DEBUG_WINMX
-+              printk(KERN_INFO "got WinMX\n");
-+#endif
-+              return ((IPP2P_WINMX * 100) + 4);
-+      }
-+    }
-+    return 0;
-+} /*search_winmx*/
-+
-+
-+/*Search for appleJuice commands*/
-+int
-+search_apple (const unsigned char *payload, const u16 plen)
-+{
-+    if ( (plen > 7) && (payload[6] == 0x0d) && (payload[7] == 0x0a) && (memcmp(payload, "ajprot", 6) == 0))  return (IPP2P_APPLE * 100);
-+    
-+    return 0;
-+}
-+
-+
-+/*Search for BitTorrent commands*/
-+int
-+search_bittorrent (const unsigned char *payload, const u16 plen)
-+{
-+    if (plen > 20)
-+    {
-+      /* test for match 0x13+"BitTorrent protocol" */
-+      if (payload[0] == 0x13) 
-+      {
-+              if (memcmp(payload+1, "BitTorrent protocol", 19) == 0) return (IPP2P_BIT * 100);
-+      }
-+      
-+      /* get tracker commandos, all starts with GET /
-+      * then it can follow: scrape| announce
-+      * and then ?hash_info=
-+      */
-+      if (memcmp(payload,"GET /",5) == 0)
-+      {
-+              /* message scrape */
-+              if ( memcmp(payload+5,"scrape?info_hash=",17)==0 ) return (IPP2P_BIT * 100 + 1);
-+              /* message announce */
-+              if ( memcmp(payload+5,"announce?info_hash=",19)==0 ) return (IPP2P_BIT * 100 + 2);
-+      }
-+    } 
-+    else 
-+    {
-+      /* bitcomet encryptes the first packet, so we have to detect another 
-+       * one later in the flow */
-+       /* first try failed, too many missdetections */
-+      //if ( size == 5 && get_u32(t,0) == __constant_htonl(1) && t[4] < 3) return (IPP2P_BIT * 100 + 3);
-+      
-+      /* second try: block request packets */
-+      if ( plen == 17 && get_u32(payload,0) == __constant_htonl(0x0d) && payload[4] == 0x06 && get_u32(payload,13) == __constant_htonl(0x4000) ) return (IPP2P_BIT * 100 + 3);
-+    }
-+
-+    return 0;
-+}
-+
-+
-+
-+/*check for Kazaa get command*/
-+int
-+search_kazaa (const unsigned char *payload, const u16 plen)
-+
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a) && memcmp(payload, "GET /.hash=", 11) == 0)
-+      return (IPP2P_DATA_KAZAA * 100);
-+
-+    return 0;
-+}
-+
-+
-+/*check for gnutella get command*/
-+int
-+search_gnu (const unsigned char *payload, const u16 plen)
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+      if (memcmp(payload, "GET /get/", 9) == 0)       return ((IPP2P_DATA_GNU * 100) + 1);
-+      if (memcmp(payload, "GET /uri-res/", 13) == 0) return ((IPP2P_DATA_GNU * 100) + 2); 
-+    }
-+    return 0;
-+}
-+
-+
-+/*check for gnutella get commands and other typical data*/
-+int
-+search_all_gnu (const unsigned char *payload, const u16 plen)
-+{
-+    
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+      
-+      if (memcmp(payload, "GNUTELLA CONNECT/", 17) == 0) return ((IPP2P_GNU * 100) + 1);
-+      if (memcmp(payload, "GNUTELLA/", 9) == 0) return ((IPP2P_GNU * 100) + 2);    
-+    
-+    
-+      if ((memcmp(payload, "GET /get/", 9) == 0) || (memcmp(payload, "GET /uri-res/", 13) == 0))
-+      {        
-+              u16 c=8;
-+              const u16 end=plen-22;
-+              while (c < end) {
-+                      if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Gnutella-", 11) == 0) || (memcmp(&payload[c+2], "X-Queue:", 8) == 0))) 
-+                              return ((IPP2P_GNU * 100) + 3);
-+                      c++;
-+              }
-+      }
-+    }
-+    return 0;
-+}
-+
-+
-+/*check for KaZaA download commands and other typical data*/
-+int
-+search_all_kazaa (const unsigned char *payload, const u16 plen)
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+
-+      if (memcmp(payload, "GIVE ", 5) == 0) return ((IPP2P_KAZAA * 100) + 1);
-+    
-+      if (memcmp(payload, "GET /", 5) == 0) {
-+              u16 c = 8;
-+              const u16 end=plen-22;
-+              while (c < end) {
-+                      if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Kazaa-Username: ", 18) == 0) || (memcmp(&payload[c+2], "User-Agent: PeerEnabler/", 24) == 0)))
-+                              return ((IPP2P_KAZAA * 100) + 2);
-+                      c++;
-+              }
-+      }
-+    }
-+    return 0;
-+}
-+
-+/*fast check for edonkey file segment transfer command*/
-+int
-+search_edk (const unsigned char *payload, const u16 plen)
-+{
-+    if (payload[0] != 0xe3) 
-+      return 0;
-+    else {
-+      if (payload[5] == 0x47) 
-+          return (IPP2P_DATA_EDK * 100);
-+      else    
-+          return 0;
-+    }
-+}
-+
-+
-+
-+/*intensive but slower search for some edonkey packets including size-check*/
-+int
-+search_all_edk (const unsigned char *payload, const u16 plen)
-+{
-+    if (payload[0] != 0xe3) 
-+      return 0;
-+    else {
-+      //t += head_len;        
-+      const u16 cmd = get_u16(payload, 1);
-+      if (cmd == (plen - 5)) {
-+          switch (payload[5]) {
-+              case 0x01: return ((IPP2P_EDK * 100) + 1);      /*Client: hello or Server:hello*/
-+              case 0x4c: return ((IPP2P_EDK * 100) + 9);      /*Client: Hello-Answer*/
-+          }
-+      }
-+      return 0;
-+     }
-+}
-+
-+
-+/*fast check for Direct Connect send command*/
-+int
-+search_dc (const unsigned char *payload, const u16 plen)
-+{
-+
-+    if (payload[0] != 0x24 ) 
-+      return 0;
-+    else {
-+      if (memcmp(&payload[1], "Send|", 5) == 0)
-+          return (IPP2P_DATA_DC * 100);
-+      else
-+          return 0;
-+    } 
-+
-+}
-+
-+
-+/*intensive but slower check for all direct connect packets*/
-+int
-+search_all_dc (const unsigned char *payload, const u16 plen)
-+{
-+//    unsigned char *t = haystack;
-+
-+    if (payload[0] == 0x24 && payload[plen-1] == 0x7c) 
-+    {
-+      const unsigned char *t=&payload[1];
-+              /* Client-Hub-Protocol */
-+      if (memcmp(t, "Lock ", 5) == 0)                 return ((IPP2P_DC * 100) + 1);
-+      /* Client-Client-Protocol, some are already recognized by client-hub (like lock) */
-+      if (memcmp(t, "MyNick ", 7) == 0)               return ((IPP2P_DC * 100) + 38); 
-+    }
-+    return 0;
-+}
-+
-+/*check for mute*/
-+int
-+search_mute (const unsigned char *payload, const u16 plen)
-+{
-+      if ( plen == 209 || plen == 345 || plen == 473 || plen == 609 || plen == 1121 )
-+      {
-+              //printk(KERN_DEBUG "size hit: %u",size);
-+              if (memcmp(payload,"PublicKey: ",11) == 0 )
-+              { 
-+                      return ((IPP2P_MUTE * 100) + 0);
-+                      
-+/*                    if (memcmp(t+size-14,"\x0aEndPublicKey\x0a",14) == 0)
-+                      {
-+                              printk(KERN_DEBUG "end pubic key hit: %u",size);
-+                              
-+                      }*/
-+              }
-+      }
-+      return 0;
-+}
-+
-+
-+/* check for xdcc */
-+int
-+search_xdcc (const unsigned char *payload, const u16 plen)
-+{
-+      /* search in small packets only */
-+      if (plen > 20 && plen < 200 && payload[plen-1] == 0x0a && payload[plen-2] == 0x0d && memcmp(payload,"PRIVMSG ",8) == 0)
-+      {
-+              
-+              u16 x=10;
-+              const u16 end=plen - 13;
-+              
-+              /* is seems to be a irc private massage, chedck for xdcc command */
-+              while (x < end)
-+              {
-+                      if (payload[x] == ':')
-+                      {
-+                              if ( memcmp(&payload[x+1],"xdcc send #",11) == 0 )
-+                                      return ((IPP2P_XDCC * 100) + 0);
-+                      }
-+                      x++;
-+              }
-+      }
-+      return 0;
-+}
-+
-+/* search for waste */
-+int search_waste(const unsigned char *payload, const u16 plen)
-+{
-+      if ( plen >= 8 && memcmp(payload,"GET.sha1:",9) == 0)
-+              return ((IPP2P_WASTE * 100) + 0);
-+
-+      return 0;
-+}
-+
-+
-+static struct {
-+    int command;
-+    __u8 short_hand;                  /*for fucntions included in short hands*/
-+    int packet_len;
-+    int (*function_name) (const unsigned char *, const u16);
-+} matchlist[] = {
-+    {IPP2P_EDK,SHORT_HAND_IPP2P,20, &search_all_edk},
-+//    {IPP2P_DATA_KAZAA,SHORT_HAND_DATA,200, &search_kazaa},
-+//    {IPP2P_DATA_EDK,SHORT_HAND_DATA,60, &search_edk},
-+//    {IPP2P_DATA_DC,SHORT_HAND_DATA,26, &search_dc},
-+    {IPP2P_DC,SHORT_HAND_IPP2P,5, search_all_dc},
-+//    {IPP2P_DATA_GNU,SHORT_HAND_DATA,40, &search_gnu},
-+    {IPP2P_GNU,SHORT_HAND_IPP2P,5, &search_all_gnu},
-+    {IPP2P_KAZAA,SHORT_HAND_IPP2P,5, &search_all_kazaa},
-+    {IPP2P_BIT,SHORT_HAND_IPP2P,20, &search_bittorrent},
-+    {IPP2P_APPLE,SHORT_HAND_IPP2P,5, &search_apple},
-+    {IPP2P_SOUL,SHORT_HAND_IPP2P,5, &search_soul},
-+    {IPP2P_WINMX,SHORT_HAND_IPP2P,2, &search_winmx},
-+    {IPP2P_ARES,SHORT_HAND_IPP2P,5, &search_ares},
-+    {IPP2P_MUTE,SHORT_HAND_NONE,200, &search_mute},
-+    {IPP2P_WASTE,SHORT_HAND_NONE,5, &search_waste},
-+    {IPP2P_XDCC,SHORT_HAND_NONE,5, &search_xdcc},
-+    {0,0,0,NULL}
-+};
-+
-+
-+static struct {
-+    int command;
-+    __u8 short_hand;                  /*for fucntions included in short hands*/
-+    int packet_len;
-+    int (*function_name) (unsigned char *, int);
-+} udp_list[] = {
-+    { IPP2P_KAZAA, SHORT_HAND_IPP2P, 14, &udp_search_kazaa},
-+    { IPP2P_BIT,   SHORT_HAND_IPP2P, 23, &udp_search_bit},
-+    { IPP2P_GNU,   SHORT_HAND_IPP2P, 11, &udp_search_gnu},
-+    { IPP2P_EDK,   SHORT_HAND_IPP2P,  9, &udp_search_edk},
-+    { IPP2P_DC,    SHORT_HAND_IPP2P, 12, &udp_search_directconnect},    
-+    { 0, 0, 0, NULL }
-+};
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+static int
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const void *matchinfo,
-+      int offset,
-+      const void *hdr,
-+      u_int16_t datalen,
-+      int *hotdrop) 
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
-+static int
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const void *matchinfo,
-+      int offset,
-+      int *hotdrop) 
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17)
-+static int
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const void *matchinfo,
-+      int offset,
-+      unsigned int protoff,
-+      int *hotdrop)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
-+static int
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const struct xt_match *match,
-+      const void *matchinfo,
-+      int offset,
-+      unsigned int protoff,
-+      int *hotdrop)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
-+static bool
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const struct xt_match *match,
-+      const void *matchinfo,
-+      int offset, 
-+      unsigned int protoff, 
-+      bool *hotdrop)
-+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) */
-+static bool
-+match(const struct sk_buff *skb,
-+      const struct xt_match_param *par)
-+#endif
-+{
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
-+      const struct ipt_p2p_info *info = matchinfo;
-+#else
-+      const struct ipt_p2p_info *info = par->matchinfo;
-+      const int offset = par->fragoff;
-+#endif
-+    unsigned char  *haystack;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
-+    struct iphdr *ip = ip_hdr(skb);
-+#else
-+    struct iphdr *ip = skb->nh.iph;
-+#endif
-+    int p2p_result = 0, i = 0;
-+//    int head_len;
-+    int hlen = ntohs(ip->tot_len)-(ip->ihl*4);        /*hlen = packet-data length*/
-+
-+    /*must not be a fragment*/
-+    if (offset) {
-+      if (info->debug) printk("IPP2P.match: offset found %i \n",offset);
-+      return 0;
-+    }
-+    
-+    /*make sure that skb is linear*/
-+    if(skb_is_nonlinear(skb)){
-+      if (info->debug) printk("IPP2P.match: nonlinear skb found\n");
-+      return 0;
-+    }
-+
-+
-+    haystack=(char *)ip+(ip->ihl*4);          /*haystack = packet data*/
-+
-+    switch (ip->protocol){
-+      case IPPROTO_TCP:               /*what to do with a TCP packet*/
-+      {
-+          struct tcphdr *tcph = (void *) ip + ip->ihl * 4;
-+          
-+          if (tcph->fin) return 0;  /*if FIN bit is set bail out*/
-+          if (tcph->syn) return 0;  /*if SYN bit is set bail out*/
-+          if (tcph->rst) return 0;  /*if RST bit is set bail out*/
-+          
-+          haystack += tcph->doff * 4; /*get TCP-Header-Size*/
-+          hlen -= tcph->doff * 4;
-+          while (matchlist[i].command) {
-+              if ((((info->cmd & matchlist[i].command) == matchlist[i].command) ||
-+                  ((info->cmd & matchlist[i].short_hand) == matchlist[i].short_hand)) &&
-+                  (hlen > matchlist[i].packet_len)) {
-+                          p2p_result = matchlist[i].function_name(haystack, hlen);
-+                          if (p2p_result) 
-+                          {
-+                              if (info->debug) printk("IPP2P.debug:TCP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n", 
-+                                  p2p_result, NIPQUAD(ip->saddr),ntohs(tcph->source), NIPQUAD(ip->daddr),ntohs(tcph->dest),hlen);
-+                              return p2p_result;
-+                          }
-+              }
-+          i++;
-+          }
-+          return p2p_result;
-+      }
-+      
-+      case IPPROTO_UDP:               /*what to do with an UDP packet*/
-+      {
-+          struct udphdr *udph = (void *) ip + ip->ihl * 4;
-+          
-+          while (udp_list[i].command){
-+              if ((((info->cmd & udp_list[i].command) == udp_list[i].command) ||
-+                  ((info->cmd & udp_list[i].short_hand) == udp_list[i].short_hand)) &&
-+                  (hlen > udp_list[i].packet_len)) {
-+                          p2p_result = udp_list[i].function_name(haystack, hlen);
-+                          if (p2p_result){
-+                              if (info->debug) printk("IPP2P.debug:UDP-match: %i from: %u.%u.%u.%u:%i to: %u.%u.%u.%u:%i Length: %i\n", 
-+                                  p2p_result, NIPQUAD(ip->saddr),ntohs(udph->source), NIPQUAD(ip->daddr),ntohs(udph->dest),hlen);
-+                              return p2p_result;
-+                          }
-+              }
-+          i++;
-+          }                   
-+          return p2p_result;
-+      }
-+    
-+      default: return 0;
-+    }
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
-+static int
-+checkentry(const char *tablename,
-+         const struct ipt_ip *ip,
-+         void *matchinfo,
-+         unsigned int matchsize,
-+         unsigned int hook_mask)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17)
-+static int
-+checkentry(const char *tablename,
-+         const void *inf,
-+         void *matchinfo,
-+         unsigned int matchsize,
-+         unsigned int hook_mask)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+static int
-+checkentry(const char *tablename,
-+         const void *inf,
-+         const struct xt_match *match,
-+         void *matchinfo,
-+         unsigned int matchsize,
-+         unsigned int hook_mask)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
-+static int
-+checkentry(const char *tablename,
-+         const void *inf,
-+         const struct xt_match *match,
-+         void *matchinfo,
-+         unsigned int hook_mask)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
-+static bool
-+checkentry(const char *tablename,
-+         const void *inf,
-+         const struct xt_match *match,
-+         void *matchinfo,
-+         unsigned int hook_mask)
-+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28) */
-+static bool
-+checkentry(const struct xt_mtchk_param *par)
-+#endif
-+{
-+        /* Must specify -p tcp */
-+/*    if (ip->proto != IPPROTO_TCP || (ip->invflags & IPT_INV_PROTO)) {
-+ *    printk("ipp2p: Only works on TCP packets, use -p tcp\n");
-+ *    return 0;
-+ *    }*/
-+    return 1;
-+}
-+
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+static struct xt_match ipp2p_match = {
-+#else
-+static struct ipt_match ipp2p_match = { 
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      { NULL, NULL }, 
-+      "ipp2p", 
-+      &ipp2p_match, 
-+      &ipp2p_checkentry, 
-+      NULL, 
-+      THIS_MODULE
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      .name           = "ipp2p",
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+      .family         = AF_INET,
-+#endif
-+      .match          = &match,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
-+      .matchsize      = sizeof(struct ipt_p2p_info),
-+#endif
-+      .checkentry     = &checkentry,
-+      .me             = THIS_MODULE,
-+#endif
-+};
-+
-+
-+static int __init init(void)
-+{
-+    printk(KERN_INFO "IPP2P v%s loading\n", IPP2P_VERSION);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+    return xt_register_match(&ipp2p_match);
-+#else
-+    return ipt_register_match(&ipp2p_match);
-+#endif
-+}
-+      
-+static void __exit fini(void)
-+{
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+    xt_unregister_match(&ipp2p_match);
-+#else
-+    ipt_unregister_match(&ipp2p_match);
-+#endif
-+    printk(KERN_INFO "IPP2P v%s unloaded\n", IPP2P_VERSION);    
-+}
-+      
-+module_init(init);
-+module_exit(fini);
-+
-+
-diff -Naur linux-2.6.32.8.org/net/ipv4/netfilter/Kconfig linux-2.6.32.8/net/ipv4/netfilter/Kconfig
---- linux-2.6.32.8.org/net/ipv4/netfilter/Kconfig      2010-02-09 13:57:19.000000000 +0100
-+++ linux-2.6.32.8/net/ipv4/netfilter/Kconfig  2010-02-13 19:54:30.000000000 +0100
-@@ -388,5 +388,15 @@
- endif # IP_NF_ARPTABLES
-+config IP_NF_MATCH_IPP2P
-+      tristate  'IPP2P match support'
-+      depends on IP_NF_IPTABLES
-+      help
-+        This option makes possible to match some P2P packets
-+        therefore helps controlling such traffic.
-+      
-+        If you want to compile it as a module, say M here and read
-+        <file:Documentation/modules.txt>.  If unsure, say `N'.
-+
- endmenu
-diff -Naur linux-2.6.32.8.org/net/ipv4/netfilter/Makefile linux-2.6.32.8/net/ipv4/netfilter/Makefile
---- linux-2.6.32.8.org/net/ipv4/netfilter/Makefile     2010-02-09 13:57:19.000000000 +0100
-+++ linux-2.6.32.8/net/ipv4/netfilter/Makefile 2010-02-13 19:54:30.000000000 +0100
-@@ -48,6 +48,7 @@
- obj-$(CONFIG_IP_NF_SECURITY) += iptable_security.o
- # matches
-+obj-$(CONFIG_IP_NF_MATCH_IPP2P) += ipt_ipp2p.o
- obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ipt_addrtype.o
- obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o
- obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o
diff --git a/src/patches/linux-2.6.32.8-xen-imq-test2.patch b/src/patches/linux-2.6.32.8-xen-imq-test2.patch
deleted file mode 100644 (file)
index 9d05da5..0000000
+++ /dev/null
@@ -1,1353 +0,0 @@
-diff -Naur linux-2.6.32.8.org/drivers/net/imq.c linux-2.6.32.8/drivers/net/imq.c
---- linux-2.6.32.8.org/drivers/net/imq.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.32.8/drivers/net/imq.c   2010-02-17 20:45:00.000000000 +0100
-@@ -0,0 +1,632 @@
-+/*
-+ *             Pseudo-driver for the intermediate queue device.
-+ *
-+ *             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.
-+ *
-+ * Authors:    Patrick McHardy, <kaber@trash.net>
-+ *
-+ *            The first version was written by Martin Devera, <devik@cdi.cz>
-+ *
-+ * Credits:    Jan Rafaj <imq2t@cedric.vabo.cz>
-+ *              - Update patch to 2.4.21
-+ *             Sebastian Strollo <sstrollo@nortelnetworks.com>
-+ *              - Fix "Dead-loop on netdevice imq"-issue
-+ *             Marcel Sebek <sebek64@post.cz>
-+ *              - Update to 2.6.2-rc1
-+ *
-+ *           After some time of inactivity there is a group taking care
-+ *           of IMQ again: http://www.linuximq.net
-+ *
-+ *
-+ *           2004/06/30 - New version of IMQ patch to kernels <=2.6.7
-+ *             including the following changes:
-+ *
-+ *           - Correction of ipv6 support "+"s issue (Hasso Tepper)
-+ *           - Correction of imq_init_devs() issue that resulted in
-+ *           kernel OOPS unloading IMQ as module (Norbert Buchmuller)
-+ *           - Addition of functionality to choose number of IMQ devices
-+ *           during kernel config (Andre Correa)
-+ *           - Addition of functionality to choose how IMQ hooks on
-+ *           PRE and POSTROUTING (after or before NAT) (Andre Correa)
-+ *           - Cosmetic corrections (Norbert Buchmuller) (Andre Correa)
-+ *
-+ *
-+ *             2005/12/16 - IMQ versions between 2.6.7 and 2.6.13 were
-+ *             released with almost no problems. 2.6.14-x was released
-+ *             with some important changes: nfcache was removed; After
-+ *             some weeks of trouble we figured out that some IMQ fields
-+ *             in skb were missing in skbuff.c - skb_clone and copy_skb_header.
-+ *             These functions are correctly patched by this new patch version.
-+ *
-+ *             Thanks for all who helped to figure out all the problems with
-+ *             2.6.14.x: Patrick McHardy, Rune Kock, VeNoMouS, Max CtRiX,
-+ *             Kevin Shanahan, Richard Lucassen, Valery Dachev (hopefully
-+ *             I didn't forget anybody). I apologize again for my lack of time.
-+ *
-+ *
-+ *             2008/06/17 - 2.6.25 - Changed imq.c to use qdisc_run() instead 
-+ *             of qdisc_restart() and moved qdisc_run() to tasklet to avoid
-+ *             recursive locking. New initialization routines to fix 'rmmod' not
-+ *             working anymore. Used code from ifb.c. (Jussi Kivilinna)
-+ *
-+ *             2008/08/06 - 2.6.26 - (JK)
-+ *              - Replaced tasklet with 'netif_schedule()'.
-+ *              - Cleaned up and added comments for imq_nf_queue().
-+ *
-+ *             2009/04/12
-+ *              - Add skb_save_cb/skb_restore_cb helper functions for backuping
-+ *                control buffer. This is needed because qdisc-layer on kernels
-+ *                2.6.27 and newer overwrite control buffer. (Jussi Kivilinna)
-+ *              - Add better locking for IMQ device. Hopefully this will solve
-+ *                SMP issues. (Jussi Kivilinna)
-+ *              - Port to 2.6.27
-+ *              - Port to 2.6.28
-+ *              - Port to 2.6.29 + fix rmmod not working
-+ *
-+ *             2009/04/20 - (Jussi Kivilinna)
-+ *              - Use netdevice feature flags to avoid extra packet handling
-+ *                by core networking layer and possibly increase performance.
-+ *
-+ *             2009/09/26 - (Jussi Kivilinna)
-+ *              - Add imq_nf_reinject_lockless to fix deadlock with
-+ *                imq_nf_queue/imq_nf_reinject.
-+ *
-+ *             2009/12/08 - (Jussi Kivilinna)
-+ *              - Port to 2.6.32
-+ *              - Add check for skb->nf_queue_entry==NULL in imq_dev_xmit()
-+ *              - Also add better error checking for skb->nf_queue_entry usage
-+ *
-+ *           Also, many thanks to pablo Sebastian Greco for making the initial
-+ *           patch and to those who helped the testing.
-+ *
-+ *             More info at: http://www.linuximq.net/ (Andre Correa)
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/moduleparam.h>
-+#include <linux/list.h>
-+#include <linux/skbuff.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/if_arp.h>
-+#include <linux/netfilter.h>
-+#include <linux/netfilter_ipv4.h>
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      #include <linux/netfilter_ipv6.h>
-+#endif
-+#include <linux/imq.h>
-+#include <net/pkt_sched.h>
-+#include <net/netfilter/nf_queue.h>
-+
-+static nf_hookfn imq_nf_hook;
-+
-+static struct nf_hook_ops imq_ingress_ipv4 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET,
-+      .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      .priority       = NF_IP_PRI_MANGLE + 1
-+#else
-+      .priority       = NF_IP_PRI_NAT_DST + 1
-+#endif
-+};
-+
-+static struct nf_hook_ops imq_egress_ipv4 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET,
-+      .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+      .priority       = NF_IP_PRI_LAST
-+#else
-+      .priority       = NF_IP_PRI_NAT_SRC - 1
-+#endif
-+};
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+static struct nf_hook_ops imq_ingress_ipv6 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET6,
-+      .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      .priority       = NF_IP6_PRI_MANGLE + 1
-+#else
-+      .priority       = NF_IP6_PRI_NAT_DST + 1
-+#endif
-+};
-+
-+static struct nf_hook_ops imq_egress_ipv6 = {
-+      .hook           = imq_nf_hook,
-+      .owner          = THIS_MODULE,
-+      .pf             = PF_INET6,
-+      .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+      .priority       = NF_IP6_PRI_LAST
-+#else
-+      .priority       = NF_IP6_PRI_NAT_SRC - 1
-+#endif
-+};
-+#endif
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+static unsigned int numdevs = CONFIG_IMQ_NUM_DEVS;
-+#else
-+static unsigned int numdevs = IMQ_MAX_DEVS;
-+#endif
-+
-+static DEFINE_SPINLOCK(imq_nf_queue_lock);
-+
-+static struct net_device *imq_devs_cache[IMQ_MAX_DEVS];
-+
-+
-+static struct net_device_stats *imq_get_stats(struct net_device *dev)
-+{
-+      return &dev->stats;
-+}
-+
-+/* called for packets kfree'd in qdiscs at places other than enqueue */
-+static void imq_skb_destructor(struct sk_buff *skb)
-+{
-+      struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+      skb->nf_queue_entry = NULL;
-+
-+      if (entry) {
-+              nf_queue_entry_release_refs(entry);
-+              kfree(entry);
-+      }
-+
-+      skb_restore_cb(skb); /* kfree backup */
-+}
-+
-+/* locking not needed when called from imq_nf_queue */
-+static void imq_nf_reinject_lockless(struct nf_queue_entry *entry,
-+                                              unsigned int verdict)
-+{
-+      int status;
-+
-+      if (!entry->next_outfn) {
-+              nf_reinject(entry, verdict);
-+              return;
-+      }
-+
-+      status = entry->next_outfn(entry, entry->next_queuenum);
-+      if (status < 0) {
-+              nf_queue_entry_release_refs(entry);
-+              kfree_skb(entry->skb);
-+              kfree(entry);
-+      }
-+}
-+
-+static void imq_nf_reinject(struct nf_queue_entry *entry, unsigned int verdict)
-+{
-+      int status;
-+
-+      if (!entry->next_outfn) {
-+              spin_lock_bh(&imq_nf_queue_lock);
-+              nf_reinject(entry, verdict);
-+              spin_unlock_bh(&imq_nf_queue_lock);
-+              return;
-+      }
-+
-+      rcu_read_lock();
-+      local_bh_disable();
-+      status = entry->next_outfn(entry, entry->next_queuenum);
-+      local_bh_enable();
-+      if (status < 0) {
-+              nf_queue_entry_release_refs(entry);
-+              kfree_skb(entry->skb);
-+              kfree(entry);
-+      }
-+
-+      rcu_read_unlock();
-+}
-+
-+static netdev_tx_t imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+      skb->nf_queue_entry = NULL;
-+      dev->trans_start = jiffies;
-+
-+      dev->stats.tx_bytes += skb->len;
-+      dev->stats.tx_packets++;
-+
-+      if (entry == NULL) {
-+              /* We don't know what is going on here.. packet is queued for
-+               * imq device, but (probably) not by us.
-+               *
-+               * If this packet was not send here by imq_nf_queue(), then
-+               * skb_save_cb() was not used and skb_free() should not show:
-+               *   WARNING: IMQ: kfree_skb: skb->cb_next:..
-+               * and/or
-+               *   WARNING: IMQ: kfree_skb: skb->nf_queue_entry...
-+               *
-+               * However if this message is shown, then IMQ is somehow broken
-+               * and you should report this to linuximq.net.
-+               */
-+
-+              /* imq_dev_xmit is black hole that eats all packets, report that
-+               * we eat this packet happily and increase dropped counters.
-+               */
-+
-+              dev->stats.tx_dropped++;
-+              dev_kfree_skb(skb);
-+
-+              return NETDEV_TX_OK;
-+      }
-+
-+      skb_restore_cb(skb); /* restore skb->cb */
-+
-+      skb->imq_flags = 0;
-+      skb->destructor = NULL;
-+
-+      imq_nf_reinject(entry, NF_ACCEPT);
-+
-+      return NETDEV_TX_OK;
-+}
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num)
-+{
-+      struct net_device *dev;
-+      struct sk_buff *skb_orig, *skb, *skb_shared;
-+      struct Qdisc *q;
-+      struct netdev_queue *txq;
-+      int users, index;
-+      int retval = -EINVAL;
-+
-+      index = entry->skb->imq_flags & IMQ_F_IFMASK;
-+      if (unlikely(index > numdevs - 1)) {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING
-+                             "IMQ: invalid device specified, highest is %u\n",
-+                             numdevs - 1);
-+              retval = -EINVAL;
-+              goto out;
-+      }
-+
-+      /* check for imq device by index from cache */
-+      dev = imq_devs_cache[index];
-+      if (unlikely(!dev)) {
-+              char buf[8];
-+
-+              /* get device by name and cache result */
-+              snprintf(buf, sizeof(buf), "imq%d", index);
-+              dev = dev_get_by_name(&init_net, buf);
-+              if (!dev) {
-+                      /* not found ?!*/
-+                      BUG();
-+                      retval = -ENODEV;
-+                      goto out;
-+              }
-+
-+              imq_devs_cache[index] = dev;
-+              dev_put(dev);
-+      }
-+
-+      if (unlikely(!(dev->flags & IFF_UP))) {
-+              entry->skb->imq_flags = 0;
-+              imq_nf_reinject_lockless(entry, NF_ACCEPT);
-+              retval = 0;
-+              goto out;
-+      }
-+      dev->last_rx = jiffies;
-+
-+      skb = entry->skb;
-+      skb_orig = NULL;
-+
-+      /* skb has owner? => make clone */
-+      if (unlikely(skb->destructor)) {
-+              skb_orig = skb;
-+              skb = skb_clone(skb, GFP_ATOMIC);
-+              if (!skb) {
-+                      retval = -ENOMEM;
-+                      goto out;
-+              }
-+              entry->skb = skb;
-+      }
-+
-+      skb->nf_queue_entry = entry;
-+
-+      dev->stats.rx_bytes += skb->len;
-+      dev->stats.rx_packets++;
-+
-+      txq = dev_pick_tx(dev, skb);
-+
-+      q = rcu_dereference(txq->qdisc);
-+      if (unlikely(!q->enqueue))
-+              goto packet_not_eaten_by_imq_dev;
-+
-+      spin_lock_bh(qdisc_lock(q));
-+
-+      users = atomic_read(&skb->users);
-+
-+      skb_shared = skb_get(skb); /* increase reference count by one */
-+      skb_save_cb(skb_shared); /* backup skb->cb, as qdisc layer will
-+                                      overwrite it */
-+      qdisc_enqueue_root(skb_shared, q); /* might kfree_skb */
-+
-+      if (likely(atomic_read(&skb_shared->users) == users + 1)) {
-+              kfree_skb(skb_shared); /* decrease reference count by one */
-+
-+              skb->destructor = &imq_skb_destructor;
-+
-+              /* cloned? */
-+              if (skb_orig)
-+                      kfree_skb(skb_orig); /* free original */
-+
-+              spin_unlock_bh(qdisc_lock(q));
-+
-+              /* schedule qdisc dequeue */
-+              __netif_schedule(q);
-+
-+              retval = 0;
-+              goto out;
-+      } else {
-+              skb_restore_cb(skb_shared); /* restore skb->cb */
-+              skb->nf_queue_entry = NULL;
-+              /* qdisc dropped packet and decreased skb reference count of
-+               * skb, so we don't really want to and try refree as that would
-+               * actually destroy the skb. */
-+              spin_unlock_bh(qdisc_lock(q));
-+              goto packet_not_eaten_by_imq_dev;
-+      }
-+
-+packet_not_eaten_by_imq_dev:
-+      /* cloned? restore original */
-+      if (skb_orig) {
-+              kfree_skb(skb);
-+              entry->skb = skb_orig;
-+      }
-+      retval = -1;
-+out:
-+      return retval;
-+}
-+
-+static struct nf_queue_handler nfqh = {
-+      .name  = "imq",
-+      .outfn = imq_nf_queue,
-+};
-+
-+static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff *pskb,
-+                              const struct net_device *indev,
-+                              const struct net_device *outdev,
-+                              int (*okfn)(struct sk_buff *))
-+{
-+      if (pskb->imq_flags & IMQ_F_ENQUEUE)
-+              return NF_QUEUE;
-+
-+      return NF_ACCEPT;
-+}
-+
-+static int imq_close(struct net_device *dev)
-+{
-+      netif_stop_queue(dev);
-+      return 0;
-+}
-+
-+static int imq_open(struct net_device *dev)
-+{
-+      netif_start_queue(dev);
-+      return 0;
-+}
-+
-+static const struct net_device_ops imq_netdev_ops = {
-+      .ndo_open               = imq_open,
-+      .ndo_stop               = imq_close,
-+      .ndo_start_xmit         = imq_dev_xmit,
-+      .ndo_get_stats          = imq_get_stats,
-+};
-+
-+static void imq_setup(struct net_device *dev)
-+{
-+      dev->netdev_ops         = &imq_netdev_ops;
-+      dev->type               = ARPHRD_VOID;
-+      dev->mtu                = 16000;
-+      dev->tx_queue_len       = 11000;
-+      dev->flags              = IFF_NOARP;
-+      dev->features           = NETIF_F_SG | NETIF_F_FRAGLIST |
-+                                NETIF_F_GSO | NETIF_F_HW_CSUM |
-+                                NETIF_F_HIGHDMA;
-+      dev->priv_flags         &= ~IFF_XMIT_DST_RELEASE;
-+}
-+
-+static int imq_validate(struct nlattr *tb[], struct nlattr *data[])
-+{
-+      int ret = 0;
-+
-+      if (tb[IFLA_ADDRESS]) {
-+              if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
-+                      ret = -EINVAL;
-+                      goto end;
-+              }
-+              if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
-+                      ret = -EADDRNOTAVAIL;
-+                      goto end;
-+              }
-+      }
-+      return 0;
-+end:
-+      printk(KERN_WARNING "IMQ: imq_validate failed (%d)\n", ret);
-+      return ret;
-+}
-+
-+static struct rtnl_link_ops imq_link_ops __read_mostly = {
-+      .kind           = "imq",
-+      .priv_size      = 0,
-+      .setup          = imq_setup,
-+      .validate       = imq_validate,
-+};
-+
-+static int __init imq_init_hooks(void)
-+{
-+      int err;
-+
-+      nf_register_queue_imq_handler(&nfqh);
-+
-+      err = nf_register_hook(&imq_ingress_ipv4);
-+      if (err)
-+              goto err1;
-+
-+      err = nf_register_hook(&imq_egress_ipv4);
-+      if (err)
-+              goto err2;
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      err = nf_register_hook(&imq_ingress_ipv6);
-+      if (err)
-+              goto err3;
-+
-+      err = nf_register_hook(&imq_egress_ipv6);
-+      if (err)
-+              goto err4;
-+#endif
-+
-+      return 0;
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+err4:
-+      nf_unregister_hook(&imq_ingress_ipv6);
-+err3:
-+      nf_unregister_hook(&imq_egress_ipv4);
-+#endif
-+err2:
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+err1:
-+      nf_unregister_queue_imq_handler();
-+      return err;
-+}
-+
-+static int __init imq_init_one(int index)
-+{
-+      struct net_device *dev;
-+      int ret;
-+
-+      dev = alloc_netdev(0, "imq%d", imq_setup);
-+      if (!dev)
-+              return -ENOMEM;
-+
-+      ret = dev_alloc_name(dev, dev->name);
-+      if (ret < 0)
-+              goto fail;
-+
-+      dev->rtnl_link_ops = &imq_link_ops;
-+      ret = register_netdevice(dev);
-+      if (ret < 0)
-+              goto fail;
-+
-+      return 0;
-+fail:
-+      free_netdev(dev);
-+      return ret;
-+}
-+
-+static int __init imq_init_devs(void)
-+{
-+      int err, i;
-+
-+      if (numdevs < 1 || numdevs > IMQ_MAX_DEVS) {
-+              printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n",
-+                     IMQ_MAX_DEVS);
-+              return -EINVAL;
-+      }
-+
-+      rtnl_lock();
-+      err = __rtnl_link_register(&imq_link_ops);
-+
-+      for (i = 0; i < numdevs && !err; i++)
-+              err = imq_init_one(i);
-+
-+      if (err) {
-+              __rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+      }
-+      rtnl_unlock();
-+
-+      return err;
-+}
-+
-+static int __init imq_init_module(void)
-+{
-+      int err;
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS > 16);
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS < 2);
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS - 1 > IMQ_F_IFMASK);
-+#endif
-+
-+      err = imq_init_devs();
-+      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_devs(net)\n");
-+              return err;
-+      }
-+
-+      err = imq_init_hooks();
-+      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
-+              rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+              return err;
-+      }
-+
-+      printk(KERN_INFO "IMQ driver loaded successfully.\n");
-+
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n");
-+#endif
-+#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n");
-+#endif
-+
-+      return 0;
-+}
-+
-+static void __exit imq_unhook(void)
-+{
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      nf_unregister_hook(&imq_ingress_ipv6);
-+      nf_unregister_hook(&imq_egress_ipv6);
-+#endif
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+      nf_unregister_hook(&imq_egress_ipv4);
-+
-+      nf_unregister_queue_imq_handler();
-+}
-+
-+static void __exit imq_cleanup_devs(void)
-+{
-+      rtnl_link_unregister(&imq_link_ops);
-+      memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+}
-+
-+static void __exit imq_exit_module(void)
-+{
-+      imq_unhook();
-+      imq_cleanup_devs();
-+      printk(KERN_INFO "IMQ driver unloaded successfully.\n");
-+}
-+
-+module_init(imq_init_module);
-+module_exit(imq_exit_module);
-+
-+module_param(numdevs, int, 0);
-+MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will "
-+                      "be created)");
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See "
-+                      "http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS_RTNL_LINK("imq");
-+
-diff -Naur linux-2.6.32.8.org/drivers/net/Kconfig linux-2.6.32.8/drivers/net/Kconfig
---- linux-2.6.32.8.org/drivers/net/Kconfig     2010-02-17 20:30:19.000000000 +0100
-+++ linux-2.6.32.8/drivers/net/Kconfig 2010-02-17 20:45:00.000000000 +0100
-@@ -109,6 +109,129 @@
-         To compile this driver as a module, choose M here: the module
-         will be called eql.  If unsure, say N.
-+config IMQ
-+      tristate "IMQ (intermediate queueing device) support"
-+      depends on NETDEVICES && NETFILTER
-+      ---help---
-+        The IMQ device(s) is used as placeholder for QoS queueing
-+        disciplines. Every packet entering/leaving the IP stack can be
-+        directed through the IMQ device where it's enqueued/dequeued to the
-+        attached qdisc. This allows you to treat network devices as classes
-+        and distribute bandwidth among them. Iptables is used to specify
-+        through which IMQ device, if any, packets travel.
-+
-+        More information at: http://www.linuximq.net/
-+
-+        To compile this driver as a module, choose M here: the module
-+        will be called imq.  If unsure, say N.
-+
-+choice
-+      prompt "IMQ behavior (PRE/POSTROUTING)"
-+      depends on IMQ
-+      default IMQ_BEHAVIOR_AB
-+      help
-+
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              IMQ can work in any of the following ways:
-+
-+                  PREROUTING   |      POSTROUTING
-+              -----------------|-------------------
-+              #1  After NAT    |      After NAT
-+              #2  After NAT    |      Before NAT
-+              #3  Before NAT   |      After NAT
-+              #4  Before NAT   |      Before NAT
-+
-+              The default behavior is to hook before NAT on PREROUTING
-+              and after NAT on POSTROUTING (#3).
-+
-+              This settings are specially usefull when trying to use IMQ
-+              to shape NATed clients.
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AA
-+      bool "IMQ AA"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   After NAT
-+              POSTROUTING:  After NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AB
-+      bool "IMQ AB"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   After NAT
-+              POSTROUTING:  Before NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BA
-+      bool "IMQ BA"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   Before NAT
-+              POSTROUTING:  After NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BB
-+      bool "IMQ BB"
-+      help
-+              This settings defines how IMQ behaves in respect to its
-+              hooking in PREROUTING and POSTROUTING.
-+
-+              Choosing this option will make IMQ hook like this:
-+
-+              PREROUTING:   Before NAT
-+              POSTROUTING:  Before NAT
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
-+endchoice
-+
-+config IMQ_NUM_DEVS
-+
-+      int "Number of IMQ devices"
-+      range 2 16
-+      depends on IMQ
-+      default "16"
-+      help
-+
-+              This settings defines how many IMQ devices will be
-+              created.
-+
-+              The default value is 16.
-+
-+              More information can be found at: www.linuximq.net
-+
-+              If not sure leave the default settings alone.
-+
- config TUN
-       tristate "Universal TUN/TAP device driver support"
-       select CRC32
-diff -Naur linux-2.6.32.8.org/drivers/net/Makefile linux-2.6.32.8/drivers/net/Makefile
---- linux-2.6.32.8.org/drivers/net/Makefile    2010-02-17 20:30:19.000000000 +0100
-+++ linux-2.6.32.8/drivers/net/Makefile        2010-02-17 20:46:48.000000000 +0100
-@@ -165,6 +165,7 @@
- obj-$(CONFIG_XEN_NETFRONT) += xen-netfront.o
- obj-$(CONFIG_DUMMY) += dummy.o
-+obj-$(CONFIG_IMQ) += imq.o
- obj-$(CONFIG_IFB) += ifb.o
- obj-$(CONFIG_MACVLAN) += macvlan.o
- obj-$(CONFIG_DE600) += de600.o
-diff -Naur linux-2.6.32.8.org/include/linux/imq.h linux-2.6.32.8/include/linux/imq.h
---- linux-2.6.32.8.org/include/linux/imq.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.32.8/include/linux/imq.h 2010-02-17 20:45:00.000000000 +0100
-@@ -0,0 +1,13 @@
-+#ifndef _IMQ_H
-+#define _IMQ_H
-+
-+/* IFMASK (16 device indexes, 0 to 15) and flag(s) fit in 5 bits */
-+#define IMQ_F_BITS    5
-+
-+#define IMQ_F_IFMASK  0x0f
-+#define IMQ_F_ENQUEUE 0x10
-+
-+#define IMQ_MAX_DEVS  (IMQ_F_IFMASK + 1)
-+
-+#endif /* _IMQ_H */
-+
-diff -Naur linux-2.6.32.8.org/include/linux/netdevice.h linux-2.6.32.8/include/linux/netdevice.h
---- linux-2.6.32.8.org/include/linux/netdevice.h       2010-02-17 20:30:18.000000000 +0100
-+++ linux-2.6.32.8/include/linux/netdevice.h   2010-02-17 20:45:00.000000000 +0100
-@@ -1119,6 +1119,7 @@
- extern int            dev_open(struct net_device *dev);
- extern int            dev_close(struct net_device *dev);
- extern void           dev_disable_lro(struct net_device *dev);
-+extern struct netdev_queue *dev_pick_tx(struct net_device *dev, struct sk_buff *skb);
- extern int            dev_queue_xmit(struct sk_buff *skb);
- extern int            register_netdevice(struct net_device *dev);
- extern void           unregister_netdevice(struct net_device *dev);
-diff -Naur linux-2.6.32.8.org/include/linux/netfilter/xt_IMQ.h linux-2.6.32.8/include/linux/netfilter/xt_IMQ.h
---- linux-2.6.32.8.org/include/linux/netfilter/xt_IMQ.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.32.8/include/linux/netfilter/xt_IMQ.h    2010-02-17 20:45:00.000000000 +0100
-@@ -0,0 +1,9 @@
-+#ifndef _XT_IMQ_H
-+#define _XT_IMQ_H
-+
-+struct xt_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _XT_IMQ_H */
-+
-diff -Naur linux-2.6.32.8.org/include/linux/netfilter_ipv4/ipt_IMQ.h linux-2.6.32.8/include/linux/netfilter_ipv4/ipt_IMQ.h
---- linux-2.6.32.8.org/include/linux/netfilter_ipv4/ipt_IMQ.h  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.32.8/include/linux/netfilter_ipv4/ipt_IMQ.h      2010-02-17 20:45:00.000000000 +0100
-@@ -0,0 +1,10 @@
-+#ifndef _IPT_IMQ_H
-+#define _IPT_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ipt_imq_info xt_imq_info
-+
-+#endif /* _IPT_IMQ_H */
-+
-diff -Naur linux-2.6.32.8.org/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-2.6.32.8/include/linux/netfilter_ipv6/ip6t_IMQ.h
---- linux-2.6.32.8.org/include/linux/netfilter_ipv6/ip6t_IMQ.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.32.8/include/linux/netfilter_ipv6/ip6t_IMQ.h     2010-02-17 20:45:00.000000000 +0100
-@@ -0,0 +1,10 @@
-+#ifndef _IP6T_IMQ_H
-+#define _IP6T_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ip6t_imq_info xt_imq_info
-+
-+#endif /* _IP6T_IMQ_H */
-+
-diff -Naur linux-2.6.32.8.org/include/linux/skbuff.h linux-2.6.32.8/include/linux/skbuff.h
---- linux-2.6.32.8.org/include/linux/skbuff.h  2010-02-17 20:30:19.000000000 +0100
-+++ linux-2.6.32.8/include/linux/skbuff.h      2010-02-17 20:50:34.000000000 +0100
-@@ -29,6 +29,9 @@
- #include <linux/rcupdate.h>
- #include <linux/dmaengine.h>
- #include <linux/hrtimer.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- /* Don't change this without changing skb_csum_unnecessary! */
- #define CHECKSUM_NONE 0
-@@ -332,6 +335,9 @@
-        * first. This is owned by whoever has the skb queued ATM.
-        */
-       char                    cb[48];
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      void                    *cb_next;
-+#endif
-       unsigned int            len,
-                               data_len;
-@@ -364,6 +370,9 @@
-       struct nf_conntrack     *nfct;
-       struct sk_buff          *nfct_reasm;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      struct nf_queue_entry   *nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       struct nf_bridge_info   *nf_bridge;
- #endif
-@@ -395,6 +404,11 @@
- #ifdef CONFIG_NET_DMA
-       dma_cookie_t            dma_cookie;
- #endif
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      __u8                    imq_flags:IMQ_F_BITS;
-+#endif
-+
- #ifdef CONFIG_NETWORK_SECMARK
-       __u32                   secmark;
- #endif
-@@ -458,6 +472,12 @@
-       return (struct rtable *)skb_dst(skb);
- }
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern int skb_save_cb(struct sk_buff *skb);
-+extern int skb_restore_cb(struct sk_buff *skb);
-+#endif
-+
- extern void kfree_skb(struct sk_buff *skb);
- extern void consume_skb(struct sk_buff *skb);
- extern void          __kfree_skb(struct sk_buff *skb);
-@@ -2008,6 +2028,10 @@
-       dst->nfct_reasm = src->nfct_reasm;
-       nf_conntrack_get_reasm(src->nfct_reasm);
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      dst->imq_flags = src->imq_flags;
-+      dst->nf_queue_entry = src->nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       dst->nf_bridge  = src->nf_bridge;
-       nf_bridge_get(src->nf_bridge);
-diff -Naur linux-2.6.32.8.org/include/net/netfilter/nf_queue.h linux-2.6.32.8/include/net/netfilter/nf_queue.h
---- linux-2.6.32.8.org/include/net/netfilter/nf_queue.h        2010-02-09 13:57:19.000000000 +0100
-+++ linux-2.6.32.8/include/net/netfilter/nf_queue.h    2010-02-17 20:45:00.000000000 +0100
-@@ -13,6 +13,12 @@
-       struct net_device       *indev;
-       struct net_device       *outdev;
-       int                     (*okfn)(struct sk_buff *);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      int                     (*next_outfn)(struct nf_queue_entry *entry,
-+                                            unsigned int queuenum);
-+      unsigned int            next_queuenum;
-+#endif
- };
- #define nf_queue_entry_reroute(x) ((void *)x + sizeof(struct nf_queue_entry))
-@@ -30,5 +36,11 @@
-                                      const struct nf_queue_handler *qh);
- extern void nf_unregister_queue_handlers(const struct nf_queue_handler *qh);
- extern void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
-+extern void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern void nf_register_queue_imq_handler(const struct nf_queue_handler *qh);
-+extern void nf_unregister_queue_imq_handler(void);
-+#endif
- #endif /* _NF_QUEUE_H */
-diff -Naur linux-2.6.32.8.org/net/core/dev.c linux-2.6.32.8/net/core/dev.c
---- linux-2.6.32.8.org/net/core/dev.c  2010-02-17 20:30:19.000000000 +0100
-+++ linux-2.6.32.8/net/core/dev.c      2010-02-17 20:57:37.000000000 +0100
-@@ -96,6 +96,9 @@
- #include <net/net_namespace.h>
- #include <net/sock.h>
- #include <linux/rtnetlink.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- #include <linux/proc_fs.h>
- #include <linux/seq_file.h>
- #include <linux/stat.h>
-@@ -1723,7 +1726,11 @@
-       int rc;
-       if (likely(!skb->next)) {
--              if (!list_empty(&ptype_all))
-+              if (!list_empty(&ptype_all)
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+                  && !(skb->imq_flags & IMQ_F_ENQUEUE)
-+#endif
-+                  )
-                       dev_queue_xmit_nit(skb, dev);
-               if (netif_needs_gso(dev, skb)) {
-@@ -1808,8 +1815,7 @@
- }
- EXPORT_SYMBOL(skb_tx_hash);
--static struct netdev_queue *dev_pick_tx(struct net_device *dev,
--                                      struct sk_buff *skb)
-+struct netdev_queue *dev_pick_tx(struct net_device *dev, struct sk_buff *skb)
- {
-       const struct net_device_ops *ops = dev->netdev_ops;
-       u16 queue_index = 0;
-@@ -1875,6 +1881,7 @@
- EXPORT_SYMBOL(skb_checksum_setup);
- #endif
-+EXPORT_SYMBOL(dev_pick_tx);
- static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
-                                struct net_device *dev,
-                                struct netdev_queue *txq)
-diff -Naur linux-2.6.32.8.org/net/core/skbuff.c linux-2.6.32.8/net/core/skbuff.c
---- linux-2.6.32.8.org/net/core/skbuff.c       2010-02-17 20:30:18.000000000 +0100
-+++ linux-2.6.32.8/net/core/skbuff.c   2010-02-17 20:45:00.000000000 +0100
-@@ -72,6 +72,9 @@
- static struct kmem_cache *skbuff_head_cache __read_mostly;
- static struct kmem_cache *skbuff_fclone_cache __read_mostly;
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static struct kmem_cache *skbuff_cb_store_cache __read_mostly;
-+#endif
- static void sock_pipe_buf_release(struct pipe_inode_info *pipe,
-                                 struct pipe_buffer *buf)
-@@ -91,6 +94,83 @@
-       return 1;
- }
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+/* Control buffer save/restore for IMQ devices */
-+struct skb_cb_table {
-+      void                    *cb_next;
-+      atomic_t                refcnt;
-+      char                    cb[48];
-+};
-+
-+static DEFINE_SPINLOCK(skb_cb_store_lock);
-+
-+int skb_save_cb(struct sk_buff *skb)
-+{
-+      struct skb_cb_table *next;
-+
-+      next = kmem_cache_alloc(skbuff_cb_store_cache, GFP_ATOMIC);
-+      if (!next)
-+              return -ENOMEM;
-+
-+      BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+      memcpy(next->cb, skb->cb, sizeof(skb->cb));
-+      next->cb_next = skb->cb_next;
-+
-+      atomic_set(&next->refcnt, 1);
-+
-+      skb->cb_next = next;
-+      return 0;
-+}
-+EXPORT_SYMBOL(skb_save_cb);
-+
-+int skb_restore_cb(struct sk_buff *skb)
-+{
-+      struct skb_cb_table *next;
-+
-+      if (!skb->cb_next)
-+              return 0;
-+
-+      next = skb->cb_next;
-+
-+      BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+      memcpy(skb->cb, next->cb, sizeof(skb->cb));
-+      skb->cb_next = next->cb_next;
-+
-+      spin_lock(&skb_cb_store_lock);
-+
-+      if (atomic_dec_and_test(&next->refcnt)) {
-+              kmem_cache_free(skbuff_cb_store_cache, next);
-+      }
-+
-+      spin_unlock(&skb_cb_store_lock);
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL(skb_restore_cb);
-+
-+static void skb_copy_stored_cb(struct sk_buff *new, const struct sk_buff *__old)
-+{
-+      struct skb_cb_table *next;
-+      struct sk_buff *old;
-+
-+      if (!__old->cb_next) {
-+              new->cb_next = NULL;
-+              return;
-+      }
-+
-+      spin_lock(&skb_cb_store_lock);
-+
-+      old = (struct sk_buff *)__old;
-+
-+      next = old->cb_next;
-+      atomic_inc(&next->refcnt);
-+      new->cb_next = next;
-+
-+      spin_unlock(&skb_cb_store_lock);
-+}
-+#endif
- /* Pipe buffer operations for a socket. */
- static struct pipe_buf_operations sock_pipe_buf_ops = {
-@@ -456,6 +536,26 @@
-               WARN_ON(in_irq());
-               skb->destructor(skb);
-       }
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      /* This should not happen. When it does, avoid memleak by restoring
-+      the chain of cb-backups. */
-+      while(skb->cb_next != NULL) {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "IMQ: kfree_skb: skb->cb_next: "
-+                              "%08x\n", (unsigned int)skb->cb_next);
-+
-+              skb_restore_cb(skb);
-+      }
-+      /* This should not happen either, nf_queue_entry is nullified in
-+       * imq_dev_xmit(). If we have non-NULL nf_queue_entry then we are
-+       * leaking entry pointers, maybe memory. We don't know if this is
-+       * pointer to already freed memory, or should this be freed.
-+       * If this happens we need to add refcounting, etc for nf_queue_entry.
-+       */
-+      if (skb->nf_queue_entry && net_ratelimit())
-+              printk(KERN_WARNING
-+                              "IMQ: kfree_skb: skb->nf_queue_entry != NULL");
-+#endif
- #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
-       nf_conntrack_put(skb->nfct);
-       nf_conntrack_put_reasm(skb->nfct_reasm);
-@@ -593,6 +693,9 @@
-       new->sp                 = secpath_get(old->sp);
- #endif
-       memcpy(new->cb, old->cb, sizeof(old->cb));
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      skb_copy_stored_cb(new, old);
-+#endif
-       new->csum               = old->csum;
-       new->local_df           = old->local_df;
-       new->pkt_type           = old->pkt_type;
-@@ -2863,6 +2966,13 @@
-                                               0,
-                                               SLAB_HWCACHE_ALIGN|SLAB_PANIC,
-                                               NULL);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      skbuff_cb_store_cache = kmem_cache_create("skbuff_cb_store_cache",
-+                                                sizeof(struct skb_cb_table),
-+                                                0,
-+                                                SLAB_HWCACHE_ALIGN|SLAB_PANIC,
-+                                                NULL);
-+#endif
- }
- /**
-diff -Naur linux-2.6.32.8.org/net/netfilter/Kconfig linux-2.6.32.8/net/netfilter/Kconfig
---- linux-2.6.32.8.org/net/netfilter/Kconfig   2010-02-17 20:30:16.000000000 +0100
-+++ linux-2.6.32.8/net/netfilter/Kconfig       2010-02-17 20:45:00.000000000 +0100
-@@ -411,6 +411,18 @@
-         For more information on the LEDs available on your system, see
-         Documentation/leds-class.txt
-+config NETFILTER_XT_TARGET_IMQ
-+        tristate '"IMQ" target support'
-+      depends on NETFILTER_XTABLES
-+      depends on IP_NF_MANGLE || IP6_NF_MANGLE
-+      select IMQ
-+      default m if NETFILTER_ADVANCED=n
-+        help
-+          This option adds a `IMQ' target which is used to specify if and
-+          to which imq device packets should get enqueued/dequeued.
-+
-+          To compile it as a module, choose M here.  If unsure, say N.
-+
- config NETFILTER_XT_TARGET_MARK
-       tristate '"MARK" target support'
-       default m if NETFILTER_ADVANCED=n
-diff -Naur linux-2.6.32.8.org/net/netfilter/Makefile linux-2.6.32.8/net/netfilter/Makefile
---- linux-2.6.32.8.org/net/netfilter/Makefile  2010-02-17 20:30:16.000000000 +0100
-+++ linux-2.6.32.8/net/netfilter/Makefile      2010-02-17 20:45:00.000000000 +0100
-@@ -47,6 +47,7 @@
- obj-$(CONFIG_NETFILTER_XT_TARGET_CONNSECMARK) += xt_CONNSECMARK.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o
-+obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_MARK) += xt_MARK.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NFLOG) += xt_NFLOG.o
-diff -Naur linux-2.6.32.8.org/net/netfilter/nf_queue.c linux-2.6.32.8/net/netfilter/nf_queue.c
---- linux-2.6.32.8.org/net/netfilter/nf_queue.c        2010-02-09 13:57:19.000000000 +0100
-+++ linux-2.6.32.8/net/netfilter/nf_queue.c    2010-02-17 20:45:00.000000000 +0100
-@@ -20,6 +20,26 @@
- static DEFINE_MUTEX(queue_handler_mutex);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static const struct nf_queue_handler *queue_imq_handler;
-+
-+void nf_register_queue_imq_handler(const struct nf_queue_handler *qh)
-+{
-+      mutex_lock(&queue_handler_mutex);
-+      rcu_assign_pointer(queue_imq_handler, qh);
-+      mutex_unlock(&queue_handler_mutex);
-+}
-+EXPORT_SYMBOL(nf_register_queue_imq_handler);
-+
-+void nf_unregister_queue_imq_handler(void)
-+{
-+      mutex_lock(&queue_handler_mutex);
-+      rcu_assign_pointer(queue_imq_handler, NULL);
-+      mutex_unlock(&queue_handler_mutex);
-+}
-+EXPORT_SYMBOL(nf_unregister_queue_imq_handler);
-+#endif
-+
- /* return EBUSY when somebody else is registered, return EEXIST if the
-  * same handler is registered, return 0 in case of success. */
- int nf_register_queue_handler(u_int8_t pf, const struct nf_queue_handler *qh)
-@@ -80,7 +100,7 @@
- }
- EXPORT_SYMBOL_GPL(nf_unregister_queue_handlers);
--static void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
-+void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
- {
-       /* Release those devices we held, or Alexey will kill me. */
-       if (entry->indev)
-@@ -100,6 +120,7 @@
-       /* Drop reference to owner of hook which queued us. */
-       module_put(entry->elem->owner);
- }
-+EXPORT_SYMBOL_GPL(nf_queue_entry_release_refs);
- /*
-  * Any packet that leaves via this function must come back
-@@ -121,12 +142,26 @@
- #endif
-       const struct nf_afinfo *afinfo;
-       const struct nf_queue_handler *qh;
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      const struct nf_queue_handler *qih = NULL;
-+#endif
-       /* QUEUE == DROP if noone is waiting, to be safe. */
-       rcu_read_lock();
-       qh = rcu_dereference(queue_handler[pf]);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      if (pf == PF_INET || pf == PF_INET6)
-+#else
-+      if (pf == PF_INET)
-+#endif
-+              qih = rcu_dereference(queue_imq_handler);
-+
-+      if (!qh && !qih)
-+#else /* !IMQ */
-       if (!qh)
-+#endif
-               goto err_unlock;
-       afinfo = nf_get_afinfo(pf);
-@@ -145,6 +180,10 @@
-               .indev  = indev,
-               .outdev = outdev,
-               .okfn   = okfn,
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+              .next_outfn = qh ? qh->outfn : NULL,
-+              .next_queuenum = queuenum,
-+#endif
-       };
-       /* If it's going away, ignore hook. */
-@@ -170,8 +209,19 @@
-       }
- #endif
-       afinfo->saveroute(skb, entry);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      if (qih) {
-+              status = qih->outfn(entry, queuenum);
-+              goto imq_skip_queue;
-+      }
-+#endif
-+
-       status = qh->outfn(entry, queuenum);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+imq_skip_queue:
-+#endif
-       rcu_read_unlock();
-       if (status < 0) {
-diff -Naur linux-2.6.32.8.org/net/netfilter/xt_IMQ.c linux-2.6.32.8/net/netfilter/xt_IMQ.c
---- linux-2.6.32.8.org/net/netfilter/xt_IMQ.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.32.8/net/netfilter/xt_IMQ.c      2010-02-17 20:45:00.000000000 +0100
-@@ -0,0 +1,73 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter/x_tables.h>
-+#include <linux/netfilter/xt_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff *pskb,
-+                              const struct xt_target_param *par)
-+{
-+      const struct xt_imq_info *mr = par->targinfo;
-+
-+      pskb->imq_flags = (mr->todev & IMQ_F_IFMASK) | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static bool imq_checkentry(const struct xt_tgchk_param *par)
-+{
-+      struct xt_imq_info *mr = par->targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS - 1) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS - 1);
-+              return 0;
-+      }
-+
-+      return 1;
-+}
-+
-+static struct xt_target xt_imq_reg[] __read_mostly = {
-+      {
-+              .name           = "IMQ",
-+              .family         = AF_INET,
-+              .checkentry     = imq_checkentry,
-+              .target         = imq_target,
-+              .targetsize     = sizeof(struct xt_imq_info),
-+              .table          = "mangle",
-+              .me             = THIS_MODULE
-+      },
-+      {
-+              .name           = "IMQ",
-+              .family         = AF_INET6,
-+              .checkentry     = imq_checkentry,
-+              .target         = imq_target,
-+              .targetsize     = sizeof(struct xt_imq_info),
-+              .table          = "mangle",
-+              .me             = THIS_MODULE
-+      },
-+};
-+
-+static int __init imq_init(void)
-+{
-+      return xt_register_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+static void __exit imq_fini(void)
-+{
-+      xt_unregister_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+module_init(imq_init);
-+module_exit(imq_fini);
-+
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("ipt_IMQ");
-+MODULE_ALIAS("ip6t_IMQ");
-+
diff --git a/src/patches/linux-2.x-smsc95xx-add_mac_addr_param.patch b/src/patches/linux-2.x-smsc95xx-add_mac_addr_param.patch
deleted file mode 100644 (file)
index 2aea1d1..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-Added smsc95xx.macaddr module parameter to allow the user to
-change the MAC address on boot if there was no MAC on the EEPROM.
-
-The parameter take the MAC address in 01:23:45:67:89:ab format and
-needs to be locally assigned. The MAC get assigned to the first
-smsc95xx device with no MAC on EEPROM (which resulted in a random
-MAC before). If there is more than one device without MAC on
-EEPROM and the user needs set the MAC to a specific device, it
-can be done by attaching the netdev name (e.g. eth0) to the
-smsc95xx.macaddr parameter seperated by a ';' as e.g. in
-'01:23:45:67:89:ab;eth0'
-
-This allows e.g. u-boot to pass on PandaBoard or BeagleBoard
-the by u-boot generated static MAC address to the kernel device
-to ensure the MAC stays the same during the whole boot process.
-
-Signed-off-by: Danny Kukawka <danny.kukawka@...>
----
- drivers/net/usb/smsc95xx.c |   85 ++++++++++++++++++++++++++++++++++++++++++--
- 1 files changed, 82 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
-index d45520e..3198c7d 100644
---- a/drivers/net/usb/smsc95xx.c
-+++ b/drivers/net/usb/smsc95xx.c
-@@ -52,6 +52,8 @@ struct smsc95xx_priv {
-       u32 hash_hi;
-       u32 hash_lo;
-       spinlock_t mac_cr_lock;
-+      bool mac_set_from_param;
-+      bool mac_is_random;
- };
-
- struct usb_context {
-@@ -63,6 +65,11 @@ static bool turbo_mode = true;
- module_param(turbo_mode, bool, 0644);
- MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction");
-
-+static char *macaddr = ":";
-+static bool set_macaddr = false;
-+module_param(macaddr, charp, 0);
-+MODULE_PARM_DESC(macaddr, " macaddr=macaddr;[tgt-netdevname] (Set MAC only if there is a device without MAC on EEPROM)");
-+
- static int smsc95xx_read_reg(struct usbnet *dev, u32 index, u32 *data)
- {
-       u32 *buf = kmalloc(4, GFP_KERNEL);
-@@ -601,8 +608,71 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
-       return generic_mii_ioctl(&dev->mii, if_mii(rq), cmd, NULL);
- }
-
-+/* set mac address from the macaddr module parameter */
-+static int smsc95xx_init_mac_address_from_param(struct usbnet *dev)
-+{
-+      struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
-+      int i, parsed, ret;
-+      u8 mtbl[ETH_ALEN];
-+      char *input = NULL;
-+      char *config_param = NULL;
-+      char *netdev_name = NULL;       
-+
-+      parsed = 0;
-+      ret = 0;
-+
-+      input = kstrdup(macaddr, GFP_KERNEL);
-+
-+      if (!input)
-+              return -ENOMEM;
-+
-+      if (strlen(input) >= 17) {
-+              while ((config_param = strsep(&input, ";"))) {
-+                      if (parsed == 0) {
-+                              if (!mac_pton(config_param, mtbl)) {
-+                                      ret = 1;
-+                                      goto parse_err;
-+                              }
-+                      } else {
-+                              netdev_name = config_param;                             
-+                      }
-+                      parsed ++;
-+              }
-+
-+              if (parsed && is_valid_ether_addr(mtbl)) {
-+                      if (netdev_name && strlen(netdev_name)) {
-+                              if (strcmp(netdev_name, dev->net->name) != 0) {
-+                                      netif_dbg(dev, ifup, dev->net, "requested devname (%s) didn't match (%s)\n", netdev_name, dev->net->name);
-+                                      ret = 1;
-+                                      goto out;
-+                              }
-+                      }
-+
-+                      for (i = 0; i < ETH_ALEN; i++) {
-+                              dev->net->dev_addr[i] = mtbl[i];
-+                      }
-+
-+                      netif_dbg(dev, ifup, dev->net, "set valid MAC address from smsc95xx.macaddr\n");
-+                      set_macaddr = true;
-+                      pdata->mac_set_from_param = true;
-+                      pdata->mac_is_random = false;
-+                      goto out;
-+              }
-+      } 
-+
-+parse_err:
-+      netif_dbg(dev, ifup, dev->net, "failed to parse (valid) MAC from smsc95xx.macaddr\n");
-+      set_macaddr = true;
-+out:
-+      if (input)
-+              kfree(input);
-+      return ret;
-+}
-+
- static void smsc95xx_init_mac_address(struct usbnet *dev)
- {
-+      struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);   
-+
-       /* try reading mac address from EEPROM */
-       if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN,
-                       dev->net->dev_addr) == 0) {
-@@ -615,16 +685,25 @@ static void smsc95xx_init_mac_address(struct usbnet *dev)
-
-       /* no eeprom, or eeprom values are invalid. generate random MAC */
-       random_ether_addr(dev->net->dev_addr);
-+      pdata->mac_is_random = true;
-       netif_dbg(dev, ifup, dev->net, "MAC address set to random_ether_addr\n");
- }
-
- static int smsc95xx_set_mac_address(struct usbnet *dev)
- {
--      u32 addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 |
--              dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24;
--      u32 addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8;
-+      struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
-+      u32 addr_lo, addr_hi;
-       int ret;
-
-+      if (pdata->mac_is_random && !pdata->mac_set_from_param && !set_macaddr) {
-+              netif_dbg(dev, ifup, dev->net, "random MAC address, not yet set from smsc95xx.macaddr, try to set it ...\n");
-+              smsc95xx_init_mac_address_from_param(dev);
-+      }
-+
-+      addr_lo = dev->net->dev_addr[0] | dev->net->dev_addr[1] << 8 |
-+              dev->net->dev_addr[2] << 16 | dev->net->dev_addr[3] << 24;
-+      addr_hi = dev->net->dev_addr[4] | dev->net->dev_addr[5] << 8;
-+
-       ret = smsc95xx_write_reg(dev, ADDRL, addr_lo);
-       if (ret < 0) {
-               netdev_warn(dev->net, "Failed to write ADDRL: %d\n", ret);
---
-
diff --git a/src/patches/linux-3.0-ipp2p-0.8.2-ipfire.patch b/src/patches/linux-3.0-ipp2p-0.8.2-ipfire.patch
deleted file mode 100644 (file)
index 34cba84..0000000
+++ /dev/null
@@ -1,1039 +0,0 @@
-diff -Naur linux-3.0.24.org/include/linux/netfilter_ipv4/ipt_ipp2p.h linux-3.0.24/include/linux/netfilter_ipv4/ipt_ipp2p.h
---- linux-3.0.24.org/include/linux/netfilter_ipv4/ipt_ipp2p.h  1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.0.24/include/linux/netfilter_ipv4/ipt_ipp2p.h      2012-03-20 09:29:20.616541362 +0100
-@@ -0,0 +1,31 @@
-+#ifndef __IPT_IPP2P_H
-+#define __IPT_IPP2P_H
-+#define IPP2P_VERSION "0.8.2-ipfire"
-+
-+struct ipt_p2p_info {
-+    int cmd;
-+    int debug;
-+};
-+
-+#endif //__IPT_IPP2P_H
-+
-+#define SHORT_HAND_IPP2P      1 /* --ipp2p switch*/
-+//#define SHORT_HAND_DATA             4 /* --ipp2p-data switch*/
-+#define SHORT_HAND_NONE               5 /* no short hand*/
-+
-+#define IPP2P_EDK             (1 << 1)
-+#define IPP2P_DATA_KAZAA      (1 << 2)
-+#define IPP2P_DATA_EDK                (1 << 3)
-+#define IPP2P_DATA_DC         (1 << 4)
-+#define IPP2P_DC              (1 << 5)
-+#define IPP2P_DATA_GNU                (1 << 6)
-+#define IPP2P_GNU             (1 << 7)
-+#define IPP2P_KAZAA           (1 << 8)
-+#define IPP2P_BIT             (1 << 9)
-+#define IPP2P_APPLE           (1 << 10)
-+#define IPP2P_SOUL            (1 << 11)
-+#define IPP2P_WINMX           (1 << 12)
-+#define IPP2P_ARES            (1 << 13)
-+#define IPP2P_MUTE            (1 << 14)
-+#define IPP2P_WASTE           (1 << 15)
-+#define IPP2P_XDCC            (1 << 16)
-diff -Naur linux-3.0.24.org/net/ipv4/netfilter/ipt_ipp2p.c linux-3.0.24/net/ipv4/netfilter/ipt_ipp2p.c
---- linux-3.0.24.org/net/ipv4/netfilter/ipt_ipp2p.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.0.24/net/ipv4/netfilter/ipt_ipp2p.c        2012-03-20 11:26:38.593101443 +0100
-@@ -0,0 +1,970 @@
-+#if defined(MODVERSIONS)
-+#include <linux/modversions.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/netfilter_ipv4/ip_tables.h>
-+#include <linux/netfilter_ipv4/ipt_ipp2p.h>
-+#include <net/tcp.h>
-+#include <net/udp.h>
-+
-+#define get_u8(X,O)  (*(__u8 *)(X + O))
-+#define get_u16(X,O)  (*(__u16 *)(X + O))
-+#define get_u32(X,O)  (*(__u32 *)(X + O))
-+
-+MODULE_AUTHOR("Eicke Friedrich/Klaus Degner <ipp2p@ipp2p.org>");
-+MODULE_DESCRIPTION("An extension to iptables to identify P2P traffic.");
-+MODULE_LICENSE("GPL");
-+
-+
-+/*Search for UDP eDonkey/eMule/Kad commands*/
-+int
-+udp_search_edk (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    t += 8;
-+
-+      switch (t[0]) {
-+              case 0xe3: 
-+              {       /*edonkey*/
-+                      switch (t[1]) 
-+                      {
-+                              /* client -> server status request */
-+                              case 0x96: 
-+                                      if (packet_len == 14) return ((IPP2P_EDK * 100) + 50);
-+                                      break;
-+                              /* server -> client status request */
-+                              case 0x97: if (packet_len == 42) return ((IPP2P_EDK * 100) + 51);
-+                                      break;
-+                                              /* server description request */
-+                                              /* e3 2a ff f0 .. | size == 6 */
-+                              case 0xa2: if ( (packet_len == 14) && ( get_u16(t,2) == __constant_htons(0xfff0) ) ) return ((IPP2P_EDK * 100) + 52);
-+                                      break;
-+                                              /* server description response */
-+                                              /* e3 a3 ff f0 ..  | size > 40 && size < 200 */
-+                              //case 0xa3: return ((IPP2P_EDK * 100) + 53);
-+                              //      break;
-+                              case 0x9a: if (packet_len==26) return ((IPP2P_EDK * 100) + 54);
-+                                      break;
-+
-+                              case 0x92: if (packet_len==18) return ((IPP2P_EDK * 100) + 55);
-+                                      break;
-+                      }
-+                      break;
-+              }
-+              case 0xe4: 
-+              {
-+                      switch (t[1]) 
-+                      {
-+                                              /* e4 20 .. | size == 43 */
-+                              case 0x20: if ((packet_len == 43) && (t[2] != 0x00) && (t[34] != 0x00)) return ((IPP2P_EDK * 100) + 60);
-+                                      break;
-+                                              /* e4 00 .. 00 | size == 35 ? */
-+                              case 0x00: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 61);
-+                                      break;
-+                                              /* e4 10 .. 00 | size == 35 ? */
-+                              case 0x10: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 62);
-+                                      break;
-+                                              /* e4 18 .. 00 | size == 35 ? */
-+                              case 0x18: if ((packet_len == 35) && (t[26] == 0x00)) return ((IPP2P_EDK * 100) + 63);
-+                                      break;
-+                                              /* e4 52 .. | size = 44 */
-+                              case 0x52: if (packet_len == 44 ) return ((IPP2P_EDK * 100) + 64);
-+                                      break;
-+                                              /* e4 58 .. | size == 6 */
-+                              case 0x58: if (packet_len == 14 ) return ((IPP2P_EDK * 100) + 65);
-+                                      break;
-+                                              /* e4 59 .. | size == 2 */
-+                              case 0x59: if (packet_len == 10 )return ((IPP2P_EDK * 100) + 66);
-+                                      break;
-+                                      /* e4 28 .. | packet_len == 52,77,102,127... */
-+                              case 0x28: if (((packet_len-52) % 25) == 0) return ((IPP2P_EDK * 100) + 67);
-+                                      break;
-+                                      /* e4 50 xx xx | size == 4 */
-+                              case 0x50: if (packet_len == 12) return ((IPP2P_EDK * 100) + 68);
-+                                      break;
-+                                      /* e4 40 xx xx | size == 48 */
-+                              case 0x40: if (packet_len == 56) return ((IPP2P_EDK * 100) + 69);
-+                                      break;
-+                      }
-+                      break;
-+              }
-+      } /* end of switch (t[0]) */
-+    return 0;
-+}/*udp_search_edk*/
-+
-+
-+/*Search for UDP Gnutella commands*/
-+int
-+udp_search_gnu (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    t += 8;
-+    
-+    if (memcmp(t, "GND", 3) == 0) return ((IPP2P_GNU * 100) + 51);
-+    if (memcmp(t, "GNUTELLA ", 9) == 0) return ((IPP2P_GNU * 100) + 52);
-+    return 0;
-+}/*udp_search_gnu*/
-+
-+
-+/*Search for UDP KaZaA commands*/
-+int
-+udp_search_kazaa (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    
-+    if (t[packet_len-1] == 0x00){
-+      t += (packet_len - 6);
-+      if (memcmp(t, "KaZaA", 5) == 0) return (IPP2P_KAZAA * 100 +50);
-+    }
-+    
-+    return 0;
-+}/*udp_search_kazaa*/
-+
-+/*Search for UDP DirectConnect commands*/
-+int
-+udp_search_directconnect (unsigned char *haystack, int packet_len)
-+{
-+    unsigned char *t = haystack;
-+    if ((*(t + 8) == 0x24) && (*(t + packet_len - 1) == 0x7c)) {
-+      t+=8;
-+      if (memcmp(t, "SR ", 3) == 0)                   return ((IPP2P_DC * 100) + 60);
-+      if (memcmp(t, "Ping ", 5) == 0)                 return ((IPP2P_DC * 100) + 61);
-+    }
-+    return 0;
-+}/*udp_search_directconnect*/
-+
-+
-+
-+/*Search for UDP BitTorrent commands*/
-+int
-+udp_search_bit (unsigned char *haystack, int packet_len)
-+{
-+      switch(packet_len)
-+      {
-+              case 24:
-+                      /* ^ 00 00 04 17 27 10 19 80 */
-+                      if ((ntohl(get_u32(haystack, 8)) == 0x00000417) && (ntohl(get_u32(haystack, 12)) == 0x27101980)) 
-+                              return (IPP2P_BIT * 100 + 50);
-+                      break;
-+              case 44:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000400) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 51);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000400))
-+                              return (IPP2P_BIT * 100 + 61);
-+                      break;
-+              case 65:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000404) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 52);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000404))
-+                              return (IPP2P_BIT * 100 + 62);
-+                      break;
-+              case 67:
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000406) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 53);
-+                      if (get_u32(haystack, 16) == __constant_htonl(0x00000406))
-+                              return (IPP2P_BIT * 100 + 63);
-+                      break;
-+              case 211:
-+                      if (get_u32(haystack, 8) == __constant_htonl(0x00000405)) 
-+                              return (IPP2P_BIT * 100 + 54);
-+                      break;
-+              case 29:
-+                      if ((get_u32(haystack, 8) == __constant_htonl(0x00000401))) 
-+                              return (IPP2P_BIT * 100 + 55);
-+                      break;
-+              case 52:
-+                      if (get_u32(haystack,8)  == __constant_htonl(0x00000827) &&
-+                      get_u32(haystack,12) == __constant_htonl(0x37502950))
-+                              return (IPP2P_BIT * 100 + 80);
-+                      break;
-+              default:
-+                      /* this packet does not have a constant size */
-+                      if (packet_len >= 40 && get_u32(haystack, 16) == __constant_htonl(0x00000402) && get_u32(haystack, 36) == __constant_htonl(0x00000104)) 
-+                              return (IPP2P_BIT * 100 + 56);
-+                      break;
-+      }
-+    
-+      /* some extra-bitcomet rules:
-+      * "d1:" [a|r] "d2:id20:"
-+      */
-+      if (packet_len > 30 && get_u8(haystack, 8) == 'd' && get_u8(haystack, 9) == '1' && get_u8(haystack, 10) == ':' )
-+      {
-+              if (get_u8(haystack, 11) == 'a' || get_u8(haystack, 11) == 'r')
-+              {
-+                      if (memcmp(haystack+12,"d2:id20:",8)==0)
-+                              return (IPP2P_BIT * 100 + 57);
-+              }
-+      }
-+    
-+#if 0
-+      /* bitlord rules */
-+      /* packetlen must be bigger than 40 */
-+      /* first 4 bytes are zero */
-+      if (packet_len > 40 && get_u32(haystack, 8) == 0x00000000)
-+      {
-+              /* first rule: 00 00 00 00 01 00 00 xx xx xx xx 00 00 00 00*/
-+              if (get_u32(haystack, 12) == 0x00000000 && 
-+                  get_u32(haystack, 16) == 0x00010000 &&
-+                  get_u32(haystack, 24) == 0x00000000 )
-+                      return (IPP2P_BIT * 100 + 71);
-+                      
-+              /* 00 01 00 00 0d 00 00 xx xx xx xx 00 00 00 00*/
-+              if (get_u32(haystack, 12) == 0x00000001 && 
-+                  get_u32(haystack, 16) == 0x000d0000 &&
-+                  get_u32(haystack, 24) == 0x00000000 )
-+                      return (IPP2P_BIT * 100 + 71);
-+              
-+                  
-+      }
-+#endif
-+
-+    return 0;
-+}/*udp_search_bit*/
-+
-+
-+
-+/*Search for Ares commands*/
-+//#define IPP2P_DEBUG_ARES
-+int
-+search_ares (const unsigned char *payload, const u16 plen)
-+//int search_ares (unsigned char *haystack, int packet_len, int head_len)
-+{
-+//    const unsigned char *t = haystack + head_len;
-+      
-+      /* all ares packets start with  */
-+      if (payload[1] == 0 && (plen - payload[0]) == 3)
-+      {
-+              switch (payload[2])
-+              {
-+                      case 0x5a:
-+                              /* ares connect */
-+                              if ( plen == 6 && payload[5] == 0x05 ) return ((IPP2P_ARES * 100) + 1);
-+                              break;
-+                      case 0x09:
-+                              /* ares search, min 3 chars --> 14 bytes
-+                               * lets define a search can be up to 30 chars --> max 34 bytes
-+                               */
-+                              if ( plen >= 14 && plen <= 34 ) return ((IPP2P_ARES * 100) + 1);
-+                              break;
-+#ifdef IPP2P_DEBUG_ARES
-+                      default:
-+                      printk(KERN_DEBUG "Unknown Ares command %x recognized, len: %u \n", (unsigned int) payload[2],plen);
-+#endif /* IPP2P_DEBUG_ARES */
-+              }
-+      }
-+
-+#if 0         
-+      /* found connect packet: 03 00 5a 04 03 05 */
-+      /* new version ares 1.8: 03 00 5a xx xx 05 */
-+    if ((plen) == 6){ /* possible connect command*/
-+      if ((payload[0] == 0x03) && (payload[1] == 0x00) && (payload[2] == 0x5a) && (payload[5] == 0x05))
-+          return ((IPP2P_ARES * 100) + 1);
-+    }
-+    if ((plen) == 60){        /* possible download command*/
-+      if ((payload[59] == 0x0a) && (payload[58] == 0x0a)){
-+          if (memcmp(t, "PUSH SHA1:", 10) == 0) /* found download command */
-+              return ((IPP2P_ARES * 100) + 2);
-+      }
-+    }
-+#endif
-+
-+    return 0;
-+} /*search_ares*/
-+
-+/*Search for SoulSeek commands*/
-+int
-+search_soul (const unsigned char *payload, const u16 plen)
-+{
-+//#define IPP2P_DEBUG_SOUL
-+    /* match: xx xx xx xx | xx = sizeof(payload) - 4 */
-+    if (get_u32(payload, 0) == (plen - 4)){
-+      const __u32 m=get_u32(payload, 4);
-+      /* match 00 yy yy 00, yy can be everything */
-+        if ( get_u8(payload, 4) == 0x00 && get_u8(payload, 7) == 0x00 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "0: Soulseek command 0x%x recognized\n",get_u32(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 1);
-+      }
-+      
-+        /* next match: 01 yy 00 00 | yy can be everything */
-+        if ( get_u8(payload, 4) == 0x01 && get_u16(payload, 6) == 0x0000 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "1: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 2);
-+      }
-+      
-+      /* other soulseek commandos are: 1-5,7,9,13-18,22,23,26,28,35-37,40-46,50,51,60,62-69,91,92,1001 */
-+      /* try to do this in an intelligent way */
-+      /* get all small commandos */
-+      switch(m)
-+      {
-+              case 7:
-+              case 9:
-+              case 22:
-+              case 23:
-+              case 26:
-+              case 28:
-+              case 50:
-+              case 51:
-+              case 60:
-+              case 91:
-+              case 92:
-+              case 1001:
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "2: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 3);
-+      }
-+      
-+      if (m > 0 && m < 6 ) 
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "3: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 4);
-+      }
-+      if (m > 12 && m < 19 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "4: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 5);
-+      }
-+
-+      if (m > 34 && m < 38 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "5: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 6);
-+      }
-+
-+      if (m > 39 && m < 47 )
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "6: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 7);
-+      }
-+
-+      if (m > 61 && m < 70 ) 
-+      {
-+#ifdef IPP2P_DEBUG_SOUL
-+              printk(KERN_DEBUG "7: Soulseek command 0x%x recognized\n",get_u16(payload, 4));
-+#endif /* IPP2P_DEBUG_SOUL */
-+              return ((IPP2P_SOUL * 100) + 8);
-+      }
-+
-+#ifdef IPP2P_DEBUG_SOUL
-+      printk(KERN_DEBUG "unknown SOULSEEK command: 0x%x, first 16 bit: 0x%x, first 8 bit: 0x%x ,soulseek ???\n",get_u32(payload, 4),get_u16(payload, 4) >> 16,get_u8(payload, 4) >> 24);
-+#endif /* IPP2P_DEBUG_SOUL */
-+    }
-+      
-+      /* match 14 00 00 00 01 yy 00 00 00 STRING(YY) 01 00 00 00 00 46|50 00 00 00 00 */
-+      /* without size at the beginning !!! */
-+      if ( get_u32(payload, 0) == 0x14 && get_u8(payload, 4) == 0x01 )
-+      {
-+              __u32 y=get_u32(payload, 5);
-+              /* we need 19 chars + string */
-+              if ( (y + 19) <= (plen) )
-+              {
-+                      const unsigned char *w=payload+9+y;
-+                      if (get_u32(w, 0) == 0x01 && ( get_u16(w, 4) == 0x4600 || get_u16(w, 4) == 0x5000) && get_u32(w, 6) == 0x00);
-+#ifdef IPP2P_DEBUG_SOUL
-+                      printk(KERN_DEBUG "Soulssek special client command recognized\n");
-+#endif /* IPP2P_DEBUG_SOUL */
-+                      return ((IPP2P_SOUL * 100) + 9);
-+              }
-+      }
-+    return 0;
-+}
-+
-+
-+/*Search for WinMX commands*/
-+int
-+search_winmx (const unsigned char *payload, const u16 plen)
-+{
-+//#define IPP2P_DEBUG_WINMX
-+    if (((plen) == 4) && (memcmp(payload, "SEND", 4) == 0))  return ((IPP2P_WINMX * 100) + 1);
-+    if (((plen) == 3) && (memcmp(payload, "GET", 3) == 0))  return ((IPP2P_WINMX * 100) + 2);
-+    //if (packet_len < (head_len + 10)) return 0;
-+    if (plen < 10) return 0;
-+    
-+    if ((memcmp(payload, "SEND", 4) == 0) || (memcmp(payload, "GET", 3) == 0)){
-+        u16 c=4;
-+        const u16 end=plen-2;
-+        u8 count=0;
-+        while (c < end)
-+        {
-+              if (payload[c]== 0x20 && payload[c+1] == 0x22)
-+              {
-+                      c++;
-+                      count++;
-+                      if (count>=2) return ((IPP2P_WINMX * 100) + 3);
-+              }
-+              c++;
-+        }
-+    }
-+    
-+    if ( plen == 149 && payload[0] == '8' )
-+    {
-+#ifdef IPP2P_DEBUG_WINMX
-+      printk(KERN_INFO "maybe WinMX\n");
-+#endif
-+      if (get_u32(payload,17) == 0 && get_u32(payload,21) == 0 && get_u32(payload,25) == 0 &&
-+//                get_u32(payload,33) == __constant_htonl(0x71182b1a) && get_u32(payload,37) == __constant_htonl(0x05050000) &&
-+//                get_u32(payload,133) == __constant_htonl(0x31097edf) && get_u32(payload,145) == __constant_htonl(0xdcb8f792))
-+          get_u16(payload,39) == 0 && get_u16(payload,135) == __constant_htons(0x7edf) && get_u16(payload,147) == __constant_htons(0xf792))
-+          
-+      {
-+#ifdef IPP2P_DEBUG_WINMX
-+              printk(KERN_INFO "got WinMX\n");
-+#endif
-+              return ((IPP2P_WINMX * 100) + 4);
-+      }
-+    }
-+    return 0;
-+} /*search_winmx*/
-+
-+
-+/*Search for appleJuice commands*/
-+int
-+search_apple (const unsigned char *payload, const u16 plen)
-+{
-+    if ( (plen > 7) && (payload[6] == 0x0d) && (payload[7] == 0x0a) && (memcmp(payload, "ajprot", 6) == 0))  return (IPP2P_APPLE * 100);
-+    
-+    return 0;
-+}
-+
-+
-+/*Search for BitTorrent commands*/
-+int
-+search_bittorrent (const unsigned char *payload, const u16 plen)
-+{
-+    if (plen > 20)
-+    {
-+      /* test for match 0x13+"BitTorrent protocol" */
-+      if (payload[0] == 0x13) 
-+      {
-+              if (memcmp(payload+1, "BitTorrent protocol", 19) == 0) return (IPP2P_BIT * 100);
-+      }
-+      
-+      /* get tracker commandos, all starts with GET /
-+      * then it can follow: scrape| announce
-+      * and then ?hash_info=
-+      */
-+      if (memcmp(payload,"GET /",5) == 0)
-+      {
-+              /* message scrape */
-+              if ( memcmp(payload+5,"scrape?info_hash=",17)==0 ) return (IPP2P_BIT * 100 + 1);
-+              /* message announce */
-+              if ( memcmp(payload+5,"announce?info_hash=",19)==0 ) return (IPP2P_BIT * 100 + 2);
-+      }
-+    } 
-+    else 
-+    {
-+      /* bitcomet encryptes the first packet, so we have to detect another 
-+       * one later in the flow */
-+       /* first try failed, too many missdetections */
-+      //if ( size == 5 && get_u32(t,0) == __constant_htonl(1) && t[4] < 3) return (IPP2P_BIT * 100 + 3);
-+      
-+      /* second try: block request packets */
-+      if ( plen == 17 && get_u32(payload,0) == __constant_htonl(0x0d) && payload[4] == 0x06 && get_u32(payload,13) == __constant_htonl(0x4000) ) return (IPP2P_BIT * 100 + 3);
-+    }
-+
-+    return 0;
-+}
-+
-+
-+
-+/*check for Kazaa get command*/
-+int
-+search_kazaa (const unsigned char *payload, const u16 plen)
-+
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a) && memcmp(payload, "GET /.hash=", 11) == 0)
-+      return (IPP2P_DATA_KAZAA * 100);
-+
-+    return 0;
-+}
-+
-+
-+/*check for gnutella get command*/
-+int
-+search_gnu (const unsigned char *payload, const u16 plen)
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+      if (memcmp(payload, "GET /get/", 9) == 0)       return ((IPP2P_DATA_GNU * 100) + 1);
-+      if (memcmp(payload, "GET /uri-res/", 13) == 0) return ((IPP2P_DATA_GNU * 100) + 2); 
-+    }
-+    return 0;
-+}
-+
-+
-+/*check for gnutella get commands and other typical data*/
-+int
-+search_all_gnu (const unsigned char *payload, const u16 plen)
-+{
-+    
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+      
-+      if (memcmp(payload, "GNUTELLA CONNECT/", 17) == 0) return ((IPP2P_GNU * 100) + 1);
-+      if (memcmp(payload, "GNUTELLA/", 9) == 0) return ((IPP2P_GNU * 100) + 2);    
-+    
-+    
-+      if ((memcmp(payload, "GET /get/", 9) == 0) || (memcmp(payload, "GET /uri-res/", 13) == 0))
-+      {        
-+              u16 c=8;
-+              const u16 end=plen-22;
-+              while (c < end) {
-+                      if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Gnutella-", 11) == 0) || (memcmp(&payload[c+2], "X-Queue:", 8) == 0))) 
-+                              return ((IPP2P_GNU * 100) + 3);
-+                      c++;
-+              }
-+      }
-+    }
-+    return 0;
-+}
-+
-+
-+/*check for KaZaA download commands and other typical data*/
-+int
-+search_all_kazaa (const unsigned char *payload, const u16 plen)
-+{
-+    if ((payload[plen-2] == 0x0d) && (payload[plen-1] == 0x0a))
-+    {
-+
-+      if (memcmp(payload, "GIVE ", 5) == 0) return ((IPP2P_KAZAA * 100) + 1);
-+    
-+      if (memcmp(payload, "GET /", 5) == 0) {
-+              u16 c = 8;
-+              const u16 end=plen-22;
-+              while (c < end) {
-+                      if ( payload[c] == 0x0a && payload[c+1] == 0x0d && ((memcmp(&payload[c+2], "X-Kazaa-Username: ", 18) == 0) || (memcmp(&payload[c+2], "User-Agent: PeerEnabler/", 24) == 0)))
-+                              return ((IPP2P_KAZAA * 100) + 2);
-+                      c++;
-+              }
-+      }
-+    }
-+    return 0;
-+}
-+
-+/*fast check for edonkey file segment transfer command*/
-+int
-+search_edk (const unsigned char *payload, const u16 plen)
-+{
-+    if (payload[0] != 0xe3) 
-+      return 0;
-+    else {
-+      if (payload[5] == 0x47) 
-+          return (IPP2P_DATA_EDK * 100);
-+      else    
-+          return 0;
-+    }
-+}
-+
-+
-+
-+/*intensive but slower search for some edonkey packets including size-check*/
-+int
-+search_all_edk (const unsigned char *payload, const u16 plen)
-+{
-+    if (payload[0] != 0xe3) 
-+      return 0;
-+    else {
-+      //t += head_len;        
-+      const u16 cmd = get_u16(payload, 1);
-+      if (cmd == (plen - 5)) {
-+          switch (payload[5]) {
-+              case 0x01: return ((IPP2P_EDK * 100) + 1);      /*Client: hello or Server:hello*/
-+              case 0x4c: return ((IPP2P_EDK * 100) + 9);      /*Client: Hello-Answer*/
-+          }
-+      }
-+      return 0;
-+     }
-+}
-+
-+
-+/*fast check for Direct Connect send command*/
-+int
-+search_dc (const unsigned char *payload, const u16 plen)
-+{
-+
-+    if (payload[0] != 0x24 ) 
-+      return 0;
-+    else {
-+      if (memcmp(&payload[1], "Send|", 5) == 0)
-+          return (IPP2P_DATA_DC * 100);
-+      else
-+          return 0;
-+    } 
-+
-+}
-+
-+
-+/*intensive but slower check for all direct connect packets*/
-+int
-+search_all_dc (const unsigned char *payload, const u16 plen)
-+{
-+//    unsigned char *t = haystack;
-+
-+    if (payload[0] == 0x24 && payload[plen-1] == 0x7c) 
-+    {
-+      const unsigned char *t=&payload[1];
-+              /* Client-Hub-Protocol */
-+      if (memcmp(t, "Lock ", 5) == 0)                 return ((IPP2P_DC * 100) + 1);
-+      /* Client-Client-Protocol, some are already recognized by client-hub (like lock) */
-+      if (memcmp(t, "MyNick ", 7) == 0)               return ((IPP2P_DC * 100) + 38); 
-+    }
-+    return 0;
-+}
-+
-+/*check for mute*/
-+int
-+search_mute (const unsigned char *payload, const u16 plen)
-+{
-+      if ( plen == 209 || plen == 345 || plen == 473 || plen == 609 || plen == 1121 )
-+      {
-+              //printk(KERN_DEBUG "size hit: %u",size);
-+              if (memcmp(payload,"PublicKey: ",11) == 0 )
-+              { 
-+                      return ((IPP2P_MUTE * 100) + 0);
-+                      
-+/*                    if (memcmp(t+size-14,"\x0aEndPublicKey\x0a",14) == 0)
-+                      {
-+                              printk(KERN_DEBUG "end pubic key hit: %u",size);
-+                              
-+                      }*/
-+              }
-+      }
-+      return 0;
-+}
-+
-+
-+/* check for xdcc */
-+int
-+search_xdcc (const unsigned char *payload, const u16 plen)
-+{
-+      /* search in small packets only */
-+      if (plen > 20 && plen < 200 && payload[plen-1] == 0x0a && payload[plen-2] == 0x0d && memcmp(payload,"PRIVMSG ",8) == 0)
-+      {
-+              
-+              u16 x=10;
-+              const u16 end=plen - 13;
-+              
-+              /* is seems to be a irc private massage, chedck for xdcc command */
-+              while (x < end)
-+              {
-+                      if (payload[x] == ':')
-+                      {
-+                              if ( memcmp(&payload[x+1],"xdcc send #",11) == 0 )
-+                                      return ((IPP2P_XDCC * 100) + 0);
-+                      }
-+                      x++;
-+              }
-+      }
-+      return 0;
-+}
-+
-+/* search for waste */
-+int search_waste(const unsigned char *payload, const u16 plen)
-+{
-+      if ( plen >= 8 && memcmp(payload,"GET.sha1:",9) == 0)
-+              return ((IPP2P_WASTE * 100) + 0);
-+
-+      return 0;
-+}
-+
-+
-+static struct {
-+    int command;
-+    __u8 short_hand;                  /*for fucntions included in short hands*/
-+    int packet_len;
-+    int (*function_name) (const unsigned char *, const u16);
-+} matchlist[] = {
-+    {IPP2P_EDK,SHORT_HAND_IPP2P,20, &search_all_edk},
-+//    {IPP2P_DATA_KAZAA,SHORT_HAND_DATA,200, &search_kazaa},
-+//    {IPP2P_DATA_EDK,SHORT_HAND_DATA,60, &search_edk},
-+//    {IPP2P_DATA_DC,SHORT_HAND_DATA,26, &search_dc},
-+    {IPP2P_DC,SHORT_HAND_IPP2P,5, search_all_dc},
-+//    {IPP2P_DATA_GNU,SHORT_HAND_DATA,40, &search_gnu},
-+    {IPP2P_GNU,SHORT_HAND_IPP2P,5, &search_all_gnu},
-+    {IPP2P_KAZAA,SHORT_HAND_IPP2P,5, &search_all_kazaa},
-+    {IPP2P_BIT,SHORT_HAND_IPP2P,20, &search_bittorrent},
-+    {IPP2P_APPLE,SHORT_HAND_IPP2P,5, &search_apple},
-+    {IPP2P_SOUL,SHORT_HAND_IPP2P,5, &search_soul},
-+    {IPP2P_WINMX,SHORT_HAND_IPP2P,2, &search_winmx},
-+    {IPP2P_ARES,SHORT_HAND_IPP2P,5, &search_ares},
-+    {IPP2P_MUTE,SHORT_HAND_NONE,200, &search_mute},
-+    {IPP2P_WASTE,SHORT_HAND_NONE,5, &search_waste},
-+    {IPP2P_XDCC,SHORT_HAND_NONE,5, &search_xdcc},
-+    {0,0,0,NULL}
-+};
-+
-+
-+static struct {
-+    int command;
-+    __u8 short_hand;                  /*for fucntions included in short hands*/
-+    int packet_len;
-+    int (*function_name) (unsigned char *, int);
-+} udp_list[] = {
-+    { IPP2P_KAZAA, SHORT_HAND_IPP2P, 14, &udp_search_kazaa},
-+    { IPP2P_BIT,   SHORT_HAND_IPP2P, 23, &udp_search_bit},
-+    { IPP2P_GNU,   SHORT_HAND_IPP2P, 11, &udp_search_gnu},
-+    { IPP2P_EDK,   SHORT_HAND_IPP2P,  9, &udp_search_edk},
-+    { IPP2P_DC,    SHORT_HAND_IPP2P, 12, &udp_search_directconnect},    
-+    { 0, 0, 0, NULL }
-+};
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+static int
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const void *matchinfo,
-+      int offset,
-+      const void *hdr,
-+      u_int16_t datalen,
-+      int *hotdrop) 
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
-+static int
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const void *matchinfo,
-+      int offset,
-+      int *hotdrop) 
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17)
-+static int
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const void *matchinfo,
-+      int offset,
-+      unsigned int protoff,
-+      int *hotdrop)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
-+static int
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const struct xt_match *match,
-+      const void *matchinfo,
-+      int offset,
-+      unsigned int protoff,
-+      int *hotdrop)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
-+static bool
-+match(const struct sk_buff *skb,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const struct xt_match *match,
-+      const void *matchinfo,
-+      int offset, 
-+      unsigned int protoff, 
-+      bool *hotdrop)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
-+static bool
-+match(const struct sk_buff *skb,
-+      const struct xt_match_param *par)
-+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) */
-+static int
-+match(const struct sk_buff *skb,
-+      struct xt_action_param *par)
-+#endif
-+{
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
-+      const struct ipt_p2p_info *info = matchinfo;
-+#else
-+      const struct ipt_p2p_info *info = par->matchinfo;
-+      const int offset = par->fragoff;
-+#endif
-+    unsigned char  *haystack;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
-+    struct iphdr *ip = ip_hdr(skb);
-+#else
-+    struct iphdr *ip = skb->nh.iph;
-+#endif
-+    int p2p_result = 0, i = 0;
-+//    int head_len;
-+    int hlen = ntohs(ip->tot_len)-(ip->ihl*4);        /*hlen = packet-data length*/
-+
-+    /*must not be a fragment*/
-+    if (offset) {
-+      if (info->debug) printk("IPP2P.match: offset found %i \n",offset);
-+      return 0;
-+    }
-+    
-+    /*make sure that skb is linear*/
-+    if(skb_is_nonlinear(skb)){
-+      if (info->debug) printk("IPP2P.match: nonlinear skb found\n");
-+      return 0;
-+    }
-+
-+
-+    haystack=(char *)ip+(ip->ihl*4);          /*haystack = packet data*/
-+
-+    switch (ip->protocol){
-+      case IPPROTO_TCP:               /*what to do with a TCP packet*/
-+      {
-+          struct tcphdr *tcph = (void *) ip + ip->ihl * 4;
-+          
-+          if (tcph->fin) return 0;  /*if FIN bit is set bail out*/
-+          if (tcph->syn) return 0;  /*if SYN bit is set bail out*/
-+          if (tcph->rst) return 0;  /*if RST bit is set bail out*/
-+          
-+          haystack += tcph->doff * 4; /*get TCP-Header-Size*/
-+          hlen -= tcph->doff * 4;
-+          while (matchlist[i].command) {
-+              if ((((info->cmd & matchlist[i].command) == matchlist[i].command) ||
-+                  ((info->cmd & matchlist[i].short_hand) == matchlist[i].short_hand)) &&
-+                  (hlen > matchlist[i].packet_len)) {
-+                          p2p_result = matchlist[i].function_name(haystack, hlen);
-+                          if (p2p_result) 
-+                          {
-+                              if (info->debug) printk("IPP2P.debug:TCP-match: %i from: %pl4:%i to: %pl4:%i Length: %i\n", 
-+                                  p2p_result, &ip->saddr,ntohs(tcph->source), &ip->daddr,ntohs(tcph->dest),hlen);
-+                              return p2p_result;
-+                          }
-+              }
-+          i++;
-+          }
-+          return p2p_result;
-+      }
-+      
-+      case IPPROTO_UDP:               /*what to do with an UDP packet*/
-+      {
-+          struct udphdr *udph = (void *) ip + ip->ihl * 4;
-+          
-+          while (udp_list[i].command){
-+              if ((((info->cmd & udp_list[i].command) == udp_list[i].command) ||
-+                  ((info->cmd & udp_list[i].short_hand) == udp_list[i].short_hand)) &&
-+                  (hlen > udp_list[i].packet_len)) {
-+                          p2p_result = udp_list[i].function_name(haystack, hlen);
-+                          if (p2p_result){
-+                              if (info->debug) printk("IPP2P.debug:UDP-match: %i from: %pl4:%i to: %pl4:%i Length: %i\n", 
-+                                  p2p_result, &ip->saddr,ntohs(udph->source), &ip->daddr,ntohs(udph->dest),hlen);
-+                              return p2p_result;
-+                          }
-+              }
-+          i++;
-+          }                   
-+          return p2p_result;
-+      }
-+    
-+      default: return 0;
-+    }
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
-+static int
-+checkentry(const char *tablename,
-+         const struct ipt_ip *ip,
-+         void *matchinfo,
-+         unsigned int matchsize,
-+         unsigned int hook_mask)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17)
-+static int
-+checkentry(const char *tablename,
-+         const void *inf,
-+         void *matchinfo,
-+         unsigned int matchsize,
-+         unsigned int hook_mask)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+static int
-+checkentry(const char *tablename,
-+         const void *inf,
-+         const struct xt_match *match,
-+         void *matchinfo,
-+         unsigned int matchsize,
-+         unsigned int hook_mask)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
-+static int
-+checkentry(const char *tablename,
-+         const void *inf,
-+         const struct xt_match *match,
-+         void *matchinfo,
-+         unsigned int hook_mask)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,28)
-+static bool
-+checkentry(const char *tablename,
-+         const void *inf,
-+         const struct xt_match *match,
-+         void *matchinfo,
-+         unsigned int hook_mask)
-+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
-+static bool
-+checkentry(const struct xt_mtchk_param *par)
-+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35) */
-+static int
-+checkentry(const struct xt_mtchk_param *par)
-+#endif
-+{
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)
-+    return 1;
-+#else
-+    return 0;
-+#endif
-+}
-+
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+static struct xt_match ipp2p_match = {
-+#else
-+static struct ipt_match ipp2p_match = { 
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      { NULL, NULL }, 
-+      "ipp2p", 
-+      &ipp2p_match, 
-+      &ipp2p_checkentry, 
-+      NULL, 
-+      THIS_MODULE
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      .name           = "ipp2p",
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+      .family         = AF_INET,
-+#endif
-+      .match          = &match,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
-+      .matchsize      = sizeof(struct ipt_p2p_info),
-+#endif
-+      .checkentry     = &checkentry,
-+      .me             = THIS_MODULE,
-+#endif
-+};
-+
-+
-+static int __init init(void)
-+{
-+    printk(KERN_INFO "IPP2P v%s loading\n", IPP2P_VERSION);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+    return xt_register_match(&ipp2p_match);
-+#else
-+    return ipt_register_match(&ipp2p_match);
-+#endif
-+}
-+      
-+static void __exit fini(void)
-+{
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+    xt_unregister_match(&ipp2p_match);
-+#else
-+    ipt_unregister_match(&ipp2p_match);
-+#endif
-+    printk(KERN_INFO "IPP2P v%s unloaded\n", IPP2P_VERSION);    
-+}
-+      
-+module_init(init);
-+module_exit(fini);
-+
-+
-diff -Naur linux-3.0.24.org/net/ipv4/netfilter/Kconfig linux-3.0.24/net/ipv4/netfilter/Kconfig
---- linux-3.0.24.org/net/ipv4/netfilter/Kconfig        2012-03-12 18:58:19.000000000 +0100
-+++ linux-3.0.24/net/ipv4/netfilter/Kconfig    2012-03-20 09:05:15.827477622 +0100
-@@ -379,5 +379,15 @@
- endif # IP_NF_ARPTABLES
-+config IP_NF_MATCH_IPP2P
-+      tristate  'IPP2P match support'
-+      depends on IP_NF_IPTABLES
-+      help
-+        This option makes possible to match some P2P packets
-+        therefore helps controlling such traffic.
-+      
-+        If you want to compile it as a module, say M here and read
-+        <file:Documentation/modules.txt>.  If unsure, say `N'.
-+
- endmenu
-diff -Naur linux-3.0.24.org/net/ipv4/netfilter/Makefile linux-3.0.24/net/ipv4/netfilter/Makefile
---- linux-3.0.24.org/net/ipv4/netfilter/Makefile       2012-03-12 18:58:19.000000000 +0100
-+++ linux-3.0.24/net/ipv4/netfilter/Makefile   2012-03-20 09:13:38.960288878 +0100
-@@ -50,6 +50,7 @@
- # matches
- obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o
- obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o
-+obj-$(CONFIG_IP_NF_MATCH_IPP2P) += ipt_ipp2p.o
- # targets
- obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o
diff --git a/src/patches/linux-3.1-imq.patch b/src/patches/linux-3.1-imq.patch
deleted file mode 100644 (file)
index 6e97f1c..0000000
+++ /dev/null
@@ -1,1603 +0,0 @@
-diff -uNr linux-3.1/drivers/net/imq.c linux-3.1-imq/drivers/net/imq.c
---- linux-3.1/drivers/net/imq.c        1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.1-imq/drivers/net/imq.c    2011-11-04 12:16:10.454992642 +0200
-@@ -0,0 +1,850 @@
-+/*
-+ *             Pseudo-driver for the intermediate queue device.
-+ *
-+ *             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.
-+ *
-+ * Authors:    Patrick McHardy, <kaber@trash.net>
-+ *
-+ *            The first version was written by Martin Devera, <devik@cdi.cz>
-+ *
-+ * Credits:    Jan Rafaj <imq2t@cedric.vabo.cz>
-+ *              - Update patch to 2.4.21
-+ *             Sebastian Strollo <sstrollo@nortelnetworks.com>
-+ *              - Fix "Dead-loop on netdevice imq"-issue
-+ *             Marcel Sebek <sebek64@post.cz>
-+ *              - Update to 2.6.2-rc1
-+ *
-+ *           After some time of inactivity there is a group taking care
-+ *           of IMQ again: http://www.linuximq.net
-+ *
-+ *
-+ *           2004/06/30 - New version of IMQ patch to kernels <=2.6.7
-+ *             including the following changes:
-+ *
-+ *           - Correction of ipv6 support "+"s issue (Hasso Tepper)
-+ *           - Correction of imq_init_devs() issue that resulted in
-+ *           kernel OOPS unloading IMQ as module (Norbert Buchmuller)
-+ *           - Addition of functionality to choose number of IMQ devices
-+ *           during kernel config (Andre Correa)
-+ *           - Addition of functionality to choose how IMQ hooks on
-+ *           PRE and POSTROUTING (after or before NAT) (Andre Correa)
-+ *           - Cosmetic corrections (Norbert Buchmuller) (Andre Correa)
-+ *
-+ *
-+ *             2005/12/16 - IMQ versions between 2.6.7 and 2.6.13 were
-+ *             released with almost no problems. 2.6.14-x was released
-+ *             with some important changes: nfcache was removed; After
-+ *             some weeks of trouble we figured out that some IMQ fields
-+ *             in skb were missing in skbuff.c - skb_clone and copy_skb_header.
-+ *             These functions are correctly patched by this new patch version.
-+ *
-+ *             Thanks for all who helped to figure out all the problems with
-+ *             2.6.14.x: Patrick McHardy, Rune Kock, VeNoMouS, Max CtRiX,
-+ *             Kevin Shanahan, Richard Lucassen, Valery Dachev (hopefully
-+ *             I didn't forget anybody). I apologize again for my lack of time.
-+ *
-+ *
-+ *             2008/06/17 - 2.6.25 - Changed imq.c to use qdisc_run() instead
-+ *             of qdisc_restart() and moved qdisc_run() to tasklet to avoid
-+ *             recursive locking. New initialization routines to fix 'rmmod' not
-+ *             working anymore. Used code from ifb.c. (Jussi Kivilinna)
-+ *
-+ *             2008/08/06 - 2.6.26 - (JK)
-+ *              - Replaced tasklet with 'netif_schedule()'.
-+ *              - Cleaned up and added comments for imq_nf_queue().
-+ *
-+ *             2009/04/12
-+ *              - Add skb_save_cb/skb_restore_cb helper functions for backuping
-+ *                control buffer. This is needed because qdisc-layer on kernels
-+ *                2.6.27 and newer overwrite control buffer. (Jussi Kivilinna)
-+ *              - Add better locking for IMQ device. Hopefully this will solve
-+ *                SMP issues. (Jussi Kivilinna)
-+ *              - Port to 2.6.27
-+ *              - Port to 2.6.28
-+ *              - Port to 2.6.29 + fix rmmod not working
-+ *
-+ *             2009/04/20 - (Jussi Kivilinna)
-+ *              - Use netdevice feature flags to avoid extra packet handling
-+ *                by core networking layer and possibly increase performance.
-+ *
-+ *             2009/09/26 - (Jussi Kivilinna)
-+ *              - Add imq_nf_reinject_lockless to fix deadlock with
-+ *                imq_nf_queue/imq_nf_reinject.
-+ *
-+ *             2009/12/08 - (Jussi Kivilinna)
-+ *              - Port to 2.6.32
-+ *              - Add check for skb->nf_queue_entry==NULL in imq_dev_xmit()
-+ *              - Also add better error checking for skb->nf_queue_entry usage
-+ *
-+ *             2010/02/25 - (Jussi Kivilinna)
-+ *              - Port to 2.6.33
-+ *
-+ *             2010/08/15 - (Jussi Kivilinna)
-+ *              - Port to 2.6.35
-+ *              - Simplify hook registration by using nf_register_hooks.
-+ *              - nf_reinject doesn't need spinlock around it, therefore remove
-+ *                imq_nf_reinject function. Other nf_reinject users protect
-+ *                their own data with spinlock. With IMQ however all data is
-+ *                needed is stored per skbuff, so no locking is needed.
-+ *              - Changed IMQ to use 'separate' NF_IMQ_QUEUE instead of
-+ *                NF_QUEUE, this allows working coexistance of IMQ and other
-+ *                NF_QUEUE users.
-+ *              - Make IMQ multi-queue. Number of IMQ device queues can be
-+ *                increased with 'numqueues' module parameters. Default number
-+ *                of queues is 1, in other words by default IMQ works as
-+ *                single-queue device. Multi-queue selection is based on
-+ *                IFB multi-queue patch by Changli Gao <xiaosuo@gmail.com>.
-+ *
-+ *             2011/03/18 - (Jussi Kivilinna)
-+ *              - Port to 2.6.38
-+ *
-+ *             2011/07/12 - (syoder89@gmail.com)
-+ *              - Crash fix that happens when the receiving interface has more
-+ *                than one queue (add missing skb_set_queue_mapping in
-+ *                imq_select_queue).
-+ *
-+ *             2011/07/26 - (Jussi Kivilinna)
-+ *              - Add queue mapping checks for packets exiting IMQ.
-+ *              - Port to 3.0
-+ *
-+ *             2011/08/16 - (Jussi Kivilinna)
-+ *              - Clear IFF_TX_SKB_SHARING flag that was added for linux 3.0.2
-+ *
-+ *             2011/11/03 - Germano Michel <germanomichel@gmail.com>
-+ *              - Fix IMQ for net namespaces
-+ *
-+ *             2011/11/04 - Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
-+ *              - Port to 3.1
-+ *              - Clean-up, move 'get imq device pointer by imqX name' to
-+ *                separate function from imq_nf_queue().
-+ *
-+ *           Also, many thanks to pablo Sebastian Greco for making the initial
-+ *           patch and to those who helped the testing.
-+ *
-+ *             More info at: http://www.linuximq.net/ (Andre Correa)
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/moduleparam.h>
-+#include <linux/list.h>
-+#include <linux/skbuff.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/if_arp.h>
-+#include <linux/netfilter.h>
-+#include <linux/netfilter_ipv4.h>
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      #include <linux/netfilter_ipv6.h>
-+#endif
-+#include <linux/imq.h>
-+#include <net/pkt_sched.h>
-+#include <net/netfilter/nf_queue.h>
-+#include <net/sock.h>
-+#include <linux/ip.h>
-+#include <linux/ipv6.h>
-+#include <linux/if_vlan.h>
-+#include <linux/if_pppox.h>
-+#include <net/ip.h>
-+#include <net/ipv6.h>
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num);
-+
-+static nf_hookfn imq_nf_hook;
-+
-+static struct nf_hook_ops imq_ops[] = {
-+      {
-+      /* imq_ingress_ipv4 */
-+              .hook           = imq_nf_hook,
-+              .owner          = THIS_MODULE,
-+              .pf             = PF_INET,
-+              .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+              .priority       = NF_IP_PRI_MANGLE + 1,
-+#else
-+              .priority       = NF_IP_PRI_NAT_DST + 1,
-+#endif
-+      },
-+      {
-+      /* imq_egress_ipv4 */
-+              .hook           = imq_nf_hook,
-+              .owner          = THIS_MODULE,
-+              .pf             = PF_INET,
-+              .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+              .priority       = NF_IP_PRI_LAST,
-+#else
-+              .priority       = NF_IP_PRI_NAT_SRC - 1,
-+#endif
-+      },
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      {
-+      /* imq_ingress_ipv6 */
-+              .hook           = imq_nf_hook,
-+              .owner          = THIS_MODULE,
-+              .pf             = PF_INET6,
-+              .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+              .priority       = NF_IP6_PRI_MANGLE + 1,
-+#else
-+              .priority       = NF_IP6_PRI_NAT_DST + 1,
-+#endif
-+      },
-+      {
-+      /* imq_egress_ipv6 */
-+              .hook           = imq_nf_hook,
-+              .owner          = THIS_MODULE,
-+              .pf             = PF_INET6,
-+              .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+              .priority       = NF_IP6_PRI_LAST,
-+#else
-+              .priority       = NF_IP6_PRI_NAT_SRC - 1,
-+#endif
-+      },
-+#endif
-+};
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+static int numdevs = CONFIG_IMQ_NUM_DEVS;
-+#else
-+static int numdevs = IMQ_MAX_DEVS;
-+#endif
-+
-+static struct net_device *imq_devs_cache[IMQ_MAX_DEVS];
-+
-+#define IMQ_MAX_QUEUES 32
-+static int numqueues = 1;
-+static u32 imq_hashrnd;
-+
-+static inline __be16 pppoe_proto(const struct sk_buff *skb)
-+{
-+      return *((__be16 *)(skb_mac_header(skb) + ETH_HLEN +
-+                      sizeof(struct pppoe_hdr)));
-+}
-+
-+static u16 imq_hash(struct net_device *dev, struct sk_buff *skb)
-+{
-+      unsigned int pull_len;
-+      u16 protocol = skb->protocol;
-+      u32 addr1, addr2;
-+      u32 hash, ihl = 0;
-+      union {
-+              u16 in16[2];
-+              u32 in32;
-+      } ports;
-+      u8 ip_proto;
-+
-+      pull_len = 0;
-+
-+recheck:
-+      switch (protocol) {
-+      case htons(ETH_P_8021Q): {
-+              if (unlikely(skb_pull(skb, VLAN_HLEN) == NULL))
-+                      goto other;
-+
-+              pull_len += VLAN_HLEN;
-+              skb->network_header += VLAN_HLEN;
-+
-+              protocol = vlan_eth_hdr(skb)->h_vlan_encapsulated_proto;
-+              goto recheck;
-+      }
-+
-+      case htons(ETH_P_PPP_SES): {
-+              if (unlikely(skb_pull(skb, PPPOE_SES_HLEN) == NULL))
-+                      goto other;
-+
-+              pull_len += PPPOE_SES_HLEN;
-+              skb->network_header += PPPOE_SES_HLEN;
-+
-+              protocol = pppoe_proto(skb);
-+              goto recheck;
-+      }
-+
-+      case htons(ETH_P_IP): {
-+              const struct iphdr *iph = ip_hdr(skb);
-+
-+              if (unlikely(!pskb_may_pull(skb, sizeof(struct iphdr))))
-+                      goto other;
-+
-+              addr1 = iph->daddr;
-+              addr2 = iph->saddr;
-+
-+              ip_proto = !(ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) ?
-+                               iph->protocol : 0;
-+              ihl = ip_hdrlen(skb);
-+
-+              break;
-+      }
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      case htons(ETH_P_IPV6): {
-+              const struct ipv6hdr *iph = ipv6_hdr(skb);
-+
-+              if (unlikely(!pskb_may_pull(skb, sizeof(struct ipv6hdr))))
-+                      goto other;
-+
-+              addr1 = iph->daddr.s6_addr32[3];
-+              addr2 = iph->saddr.s6_addr32[3];
-+              ihl = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &ip_proto);
-+              if (unlikely(ihl < 0))
-+                      goto other;
-+
-+              break;
-+      }
-+#endif
-+      default:
-+other:
-+              if (pull_len != 0) {
-+                      skb_push(skb, pull_len);
-+                      skb->network_header -= pull_len;
-+              }
-+
-+              return (u16)(ntohs(protocol) % dev->real_num_tx_queues);
-+      }
-+
-+      if (addr1 > addr2)
-+              swap(addr1, addr2);
-+
-+      switch (ip_proto) {
-+      case IPPROTO_TCP:
-+      case IPPROTO_UDP:
-+      case IPPROTO_DCCP:
-+      case IPPROTO_ESP:
-+      case IPPROTO_AH:
-+      case IPPROTO_SCTP:
-+      case IPPROTO_UDPLITE: {
-+              if (likely(skb_copy_bits(skb, ihl, &ports.in32, 4) >= 0)) {
-+                      if (ports.in16[0] > ports.in16[1])
-+                              swap(ports.in16[0], ports.in16[1]);
-+                      break;
-+              }
-+              /* fall-through */
-+      }
-+      default:
-+              ports.in32 = 0;
-+              break;
-+      }
-+
-+      if (pull_len != 0) {
-+              skb_push(skb, pull_len);
-+              skb->network_header -= pull_len;
-+      }
-+
-+      hash = jhash_3words(addr1, addr2, ports.in32, imq_hashrnd ^ ip_proto);
-+
-+      return (u16)(((u64)hash * dev->real_num_tx_queues) >> 32);
-+}
-+
-+static inline bool sk_tx_queue_recorded(struct sock *sk)
-+{
-+      return (sk_tx_queue_get(sk) >= 0);
-+}
-+
-+static struct netdev_queue *imq_select_queue(struct net_device *dev,
-+                                              struct sk_buff *skb)
-+{
-+      u16 queue_index = 0;
-+      u32 hash;
-+
-+      if (likely(dev->real_num_tx_queues == 1))
-+              goto out;
-+
-+      /* IMQ can be receiving ingress or engress packets. */
-+
-+      /* Check first for if rx_queue is set */
-+      if (skb_rx_queue_recorded(skb)) {
-+              queue_index = skb_get_rx_queue(skb);
-+              goto out;
-+      }
-+
-+      /* Check if socket has tx_queue set */
-+      if (sk_tx_queue_recorded(skb->sk)) {
-+              queue_index = sk_tx_queue_get(skb->sk);
-+              goto out;
-+      }
-+
-+      /* Try use socket hash */
-+      if (skb->sk && skb->sk->sk_hash) {
-+              hash = skb->sk->sk_hash;
-+              queue_index =
-+                      (u16)(((u64)hash * dev->real_num_tx_queues) >> 32);
-+              goto out;
-+      }
-+
-+      /* Generate hash from packet data */
-+      queue_index = imq_hash(dev, skb);
-+
-+out:
-+      if (unlikely(queue_index >= dev->real_num_tx_queues))
-+              queue_index = (u16)((u32)queue_index % dev->real_num_tx_queues);
-+
-+      skb_set_queue_mapping(skb, queue_index);
-+      return netdev_get_tx_queue(dev, queue_index);
-+}
-+
-+static struct net_device_stats *imq_get_stats(struct net_device *dev)
-+{
-+      return &dev->stats;
-+}
-+
-+/* called for packets kfree'd in qdiscs at places other than enqueue */
-+static void imq_skb_destructor(struct sk_buff *skb)
-+{
-+      struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+      skb->nf_queue_entry = NULL;
-+
-+      if (entry) {
-+              nf_queue_entry_release_refs(entry);
-+              kfree(entry);
-+      }
-+
-+      skb_restore_cb(skb); /* kfree backup */
-+}
-+
-+static void imq_done_check_queue_mapping(struct sk_buff *skb,
-+                                       struct net_device *dev)
-+{
-+      unsigned int queue_index;
-+
-+      /* Don't let queue_mapping be left too large after exiting IMQ */
-+      if (likely(skb->dev != dev && skb->dev != NULL)) {
-+              queue_index = skb_get_queue_mapping(skb);
-+              if (unlikely(queue_index >= skb->dev->real_num_tx_queues)) {
-+                      queue_index = (u16)((u32)queue_index %
-+                                              skb->dev->real_num_tx_queues);
-+                      skb_set_queue_mapping(skb, queue_index);
-+              }
-+      } else {
-+              /* skb->dev was IMQ device itself or NULL, be on safe side and
-+               * just clear queue mapping.
-+               */
-+              skb_set_queue_mapping(skb, 0);
-+      }
-+}
-+
-+static netdev_tx_t imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+      skb->nf_queue_entry = NULL;
-+      dev->trans_start = jiffies;
-+
-+      dev->stats.tx_bytes += skb->len;
-+      dev->stats.tx_packets++;
-+
-+      if (unlikely(entry == NULL)) {
-+              /* We don't know what is going on here.. packet is queued for
-+               * imq device, but (probably) not by us.
-+               *
-+               * If this packet was not send here by imq_nf_queue(), then
-+               * skb_save_cb() was not used and skb_free() should not show:
-+               *   WARNING: IMQ: kfree_skb: skb->cb_next:..
-+               * and/or
-+               *   WARNING: IMQ: kfree_skb: skb->nf_queue_entry...
-+               *
-+               * However if this message is shown, then IMQ is somehow broken
-+               * and you should report this to linuximq.net.
-+               */
-+
-+              /* imq_dev_xmit is black hole that eats all packets, report that
-+               * we eat this packet happily and increase dropped counters.
-+               */
-+
-+              dev->stats.tx_dropped++;
-+              dev_kfree_skb(skb);
-+
-+              return NETDEV_TX_OK;
-+      }
-+
-+      skb_restore_cb(skb); /* restore skb->cb */
-+
-+      skb->imq_flags = 0;
-+      skb->destructor = NULL;
-+
-+      imq_done_check_queue_mapping(skb, dev);
-+
-+      nf_reinject(entry, NF_ACCEPT);
-+
-+      return NETDEV_TX_OK;
-+}
-+
-+static struct net_device *get_imq_device_by_index(int index)
-+{
-+      struct net_device *dev = NULL;
-+      struct net *net;
-+      char buf[8];
-+
-+      /* get device by name and cache result */
-+      snprintf(buf, sizeof(buf), "imq%d", index);
-+
-+      /* Search device from all namespaces. */
-+      for_each_net(net) {
-+              dev = dev_get_by_name(net, buf);
-+              if (dev)
-+                      break;
-+      }
-+
-+      if (WARN_ON_ONCE(dev == NULL)) {
-+              /* IMQ device not found. Exotic config? */
-+              return ERR_PTR(-ENODEV);
-+      }
-+
-+      imq_devs_cache[index] = dev;
-+      dev_put(dev);
-+
-+      return dev;
-+}
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num)
-+{
-+      struct net_device *dev;
-+      struct sk_buff *skb_orig, *skb, *skb_shared;
-+      struct Qdisc *q;
-+      struct netdev_queue *txq;
-+      spinlock_t *root_lock;
-+      int users, index;
-+      int retval = -EINVAL;
-+      unsigned int orig_queue_index;
-+
-+      index = entry->skb->imq_flags & IMQ_F_IFMASK;
-+      if (unlikely(index > numdevs - 1)) {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING
-+                             "IMQ: invalid device specified, highest is %u\n",
-+                             numdevs - 1);
-+              retval = -EINVAL;
-+              goto out;
-+      }
-+
-+      /* check for imq device by index from cache */
-+      dev = imq_devs_cache[index];
-+      if (unlikely(!dev)) {
-+              dev = get_imq_device_by_index(index);
-+              if (IS_ERR(dev)) {
-+                      retval = PTR_ERR(dev);
-+                      goto out;
-+              }
-+      }
-+
-+      if (unlikely(!(dev->flags & IFF_UP))) {
-+              entry->skb->imq_flags = 0;
-+              nf_reinject(entry, NF_ACCEPT);
-+              retval = 0;
-+              goto out;
-+      }
-+      dev->last_rx = jiffies;
-+
-+      skb = entry->skb;
-+      skb_orig = NULL;
-+
-+      /* skb has owner? => make clone */
-+      if (unlikely(skb->destructor)) {
-+              skb_orig = skb;
-+              skb = skb_clone(skb, GFP_ATOMIC);
-+              if (unlikely(!skb)) {
-+                      retval = -ENOMEM;
-+                      goto out;
-+              }
-+              entry->skb = skb;
-+      }
-+
-+      skb->nf_queue_entry = entry;
-+
-+      dev->stats.rx_bytes += skb->len;
-+      dev->stats.rx_packets++;
-+
-+      if (!skb->dev) {
-+              /* skb->dev == NULL causes problems, try the find cause. */
-+              if (net_ratelimit()) {
-+                      dev_warn(&dev->dev,
-+                               "received packet with skb->dev == NULL\n");
-+                      dump_stack();
-+              }
-+
-+              skb->dev = dev;
-+      }
-+
-+      /* Disables softirqs for lock below */
-+      rcu_read_lock_bh();
-+
-+      /* Multi-queue selection */
-+      orig_queue_index = skb_get_queue_mapping(skb);
-+      txq = imq_select_queue(dev, skb);
-+
-+      q = rcu_dereference(txq->qdisc);
-+      if (unlikely(!q->enqueue))
-+              goto packet_not_eaten_by_imq_dev;
-+
-+      root_lock = qdisc_lock(q);
-+      spin_lock(root_lock);
-+
-+      users = atomic_read(&skb->users);
-+
-+      skb_shared = skb_get(skb); /* increase reference count by one */
-+      skb_save_cb(skb_shared); /* backup skb->cb, as qdisc layer will
-+                                      overwrite it */
-+      qdisc_enqueue_root(skb_shared, q); /* might kfree_skb */
-+
-+      if (likely(atomic_read(&skb_shared->users) == users + 1)) {
-+              kfree_skb(skb_shared); /* decrease reference count by one */
-+
-+              skb->destructor = &imq_skb_destructor;
-+
-+              /* cloned? */
-+              if (unlikely(skb_orig))
-+                      kfree_skb(skb_orig); /* free original */
-+
-+              spin_unlock(root_lock);
-+              rcu_read_unlock_bh();
-+
-+              /* schedule qdisc dequeue */
-+              __netif_schedule(q);
-+
-+              retval = 0;
-+              goto out;
-+      } else {
-+              skb_restore_cb(skb_shared); /* restore skb->cb */
-+              skb->nf_queue_entry = NULL;
-+              /* qdisc dropped packet and decreased skb reference count of
-+               * skb, so we don't really want to and try refree as that would
-+               * actually destroy the skb. */
-+              spin_unlock(root_lock);
-+              goto packet_not_eaten_by_imq_dev;
-+      }
-+
-+packet_not_eaten_by_imq_dev:
-+      skb_set_queue_mapping(skb, orig_queue_index);
-+      rcu_read_unlock_bh();
-+
-+      /* cloned? restore original */
-+      if (unlikely(skb_orig)) {
-+              kfree_skb(skb);
-+              entry->skb = skb_orig;
-+      }
-+      retval = -1;
-+out:
-+      return retval;
-+}
-+
-+static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff *pskb,
-+                              const struct net_device *indev,
-+                              const struct net_device *outdev,
-+                              int (*okfn)(struct sk_buff *))
-+{
-+      return (pskb->imq_flags & IMQ_F_ENQUEUE) ? NF_IMQ_QUEUE : NF_ACCEPT;
-+}
-+
-+static int imq_close(struct net_device *dev)
-+{
-+      netif_stop_queue(dev);
-+      return 0;
-+}
-+
-+static int imq_open(struct net_device *dev)
-+{
-+      netif_start_queue(dev);
-+      return 0;
-+}
-+
-+static const struct net_device_ops imq_netdev_ops = {
-+      .ndo_open               = imq_open,
-+      .ndo_stop               = imq_close,
-+      .ndo_start_xmit         = imq_dev_xmit,
-+      .ndo_get_stats          = imq_get_stats,
-+};
-+
-+static void imq_setup(struct net_device *dev)
-+{
-+      dev->netdev_ops         = &imq_netdev_ops;
-+      dev->type               = ARPHRD_VOID;
-+      dev->mtu                = 16000; /* too small? */
-+      dev->tx_queue_len       = 11000; /* too big? */
-+      dev->flags              = IFF_NOARP;
-+      dev->features           = NETIF_F_SG | NETIF_F_FRAGLIST |
-+                                NETIF_F_GSO | NETIF_F_HW_CSUM |
-+                                NETIF_F_HIGHDMA;
-+      dev->priv_flags         &= ~(IFF_XMIT_DST_RELEASE |
-+                                   IFF_TX_SKB_SHARING);
-+}
-+
-+static int imq_validate(struct nlattr *tb[], struct nlattr *data[])
-+{
-+      int ret = 0;
-+
-+      if (tb[IFLA_ADDRESS]) {
-+              if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
-+                      ret = -EINVAL;
-+                      goto end;
-+              }
-+              if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
-+                      ret = -EADDRNOTAVAIL;
-+                      goto end;
-+              }
-+      }
-+      return 0;
-+end:
-+      printk(KERN_WARNING "IMQ: imq_validate failed (%d)\n", ret);
-+      return ret;
-+}
-+
-+static struct rtnl_link_ops imq_link_ops __read_mostly = {
-+      .kind           = "imq",
-+      .priv_size      = 0,
-+      .setup          = imq_setup,
-+      .validate       = imq_validate,
-+};
-+
-+static const struct nf_queue_handler imq_nfqh = {
-+      .name  = "imq",
-+      .outfn = imq_nf_queue,
-+};
-+
-+static int __init imq_init_hooks(void)
-+{
-+      int ret;
-+
-+      nf_register_queue_imq_handler(&imq_nfqh);
-+
-+      ret = nf_register_hooks(imq_ops, ARRAY_SIZE(imq_ops));
-+      if (ret < 0)
-+              nf_unregister_queue_imq_handler();
-+
-+      return ret;
-+}
-+
-+static int __init imq_init_one(int index)
-+{
-+      struct net_device *dev;
-+      int ret;
-+
-+      dev = alloc_netdev_mq(0, "imq%d", imq_setup, numqueues);
-+      if (!dev)
-+              return -ENOMEM;
-+
-+      ret = dev_alloc_name(dev, dev->name);
-+      if (ret < 0)
-+              goto fail;
-+
-+      dev->rtnl_link_ops = &imq_link_ops;
-+      ret = register_netdevice(dev);
-+      if (ret < 0)
-+              goto fail;
-+
-+      return 0;
-+fail:
-+      free_netdev(dev);
-+      return ret;
-+}
-+
-+static int __init imq_init_devs(void)
-+{
-+      int err, i;
-+
-+      if (numdevs < 1 || numdevs > IMQ_MAX_DEVS) {
-+              printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n",
-+                     IMQ_MAX_DEVS);
-+              return -EINVAL;
-+      }
-+
-+      if (numqueues < 1 || numqueues > IMQ_MAX_QUEUES) {
-+              printk(KERN_ERR "IMQ: numqueues has to be betweed 1 and %u\n",
-+                     IMQ_MAX_QUEUES);
-+              return -EINVAL;
-+      }
-+
-+      get_random_bytes(&imq_hashrnd, sizeof(imq_hashrnd));
-+
-+      rtnl_lock();
-+      err = __rtnl_link_register(&imq_link_ops);
-+
-+      for (i = 0; i < numdevs && !err; i++)
-+              err = imq_init_one(i);
-+
-+      if (err) {
-+              __rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+      }
-+      rtnl_unlock();
-+
-+      return err;
-+}
-+
-+static int __init imq_init_module(void)
-+{
-+      int err;
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS > 16);
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS < 2);
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS - 1 > IMQ_F_IFMASK);
-+#endif
-+
-+      err = imq_init_devs();
-+      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_devs(net)\n");
-+              return err;
-+      }
-+
-+      err = imq_init_hooks();
-+      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
-+              rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+              return err;
-+      }
-+
-+      printk(KERN_INFO "IMQ driver loaded successfully. "
-+              "(numdevs = %d, numqueues = %d)\n", numdevs, numqueues);
-+
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n");
-+#endif
-+#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n");
-+#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n");
-+#endif
-+
-+      return 0;
-+}
-+
-+static void __exit imq_unhook(void)
-+{
-+      nf_unregister_hooks(imq_ops, ARRAY_SIZE(imq_ops));
-+      nf_unregister_queue_imq_handler();
-+}
-+
-+static void __exit imq_cleanup_devs(void)
-+{
-+      rtnl_link_unregister(&imq_link_ops);
-+      memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+}
-+
-+static void __exit imq_exit_module(void)
-+{
-+      imq_unhook();
-+      imq_cleanup_devs();
-+      printk(KERN_INFO "IMQ driver unloaded successfully.\n");
-+}
-+
-+module_init(imq_init_module);
-+module_exit(imq_exit_module);
-+
-+module_param(numdevs, int, 0);
-+module_param(numqueues, int, 0);
-+MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will "
-+                      "be created)");
-+MODULE_PARM_DESC(numqueues, "number of queues per IMQ device");
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See "
-+                      "http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS_RTNL_LINK("imq");
-+
-diff -uNr linux-3.1/drivers/net/Kconfig linux-3.1-imq/drivers/net/Kconfig
---- linux-3.1/drivers/net/Kconfig      2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/drivers/net/Kconfig  2011-11-04 11:12:52.106390309 +0200
-@@ -124,6 +124,125 @@
-         To compile this driver as a module, choose M here: the module
-         will be called eql.  If unsure, say N.
-+config IMQ
-+      tristate "IMQ (intermediate queueing device) support"
-+      depends on NETDEVICES && NETFILTER
-+      ---help---
-+        The IMQ device(s) is used as placeholder for QoS queueing
-+        disciplines. Every packet entering/leaving the IP stack can be
-+        directed through the IMQ device where it's enqueued/dequeued to the
-+        attached qdisc. This allows you to treat network devices as classes
-+        and distribute bandwidth among them. Iptables is used to specify
-+        through which IMQ device, if any, packets travel.
-+
-+        More information at: http://www.linuximq.net/
-+
-+        To compile this driver as a module, choose M here: the module
-+        will be called imq.  If unsure, say N.
-+
-+choice
-+      prompt "IMQ behavior (PRE/POSTROUTING)"
-+      depends on IMQ
-+      default IMQ_BEHAVIOR_AB
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        IMQ can work in any of the following ways:
-+
-+            PREROUTING   |      POSTROUTING
-+        -----------------|-------------------
-+        #1  After NAT    |      After NAT
-+        #2  After NAT    |      Before NAT
-+        #3  Before NAT   |      After NAT
-+        #4  Before NAT   |      Before NAT
-+
-+        The default behavior is to hook before NAT on PREROUTING
-+        and after NAT on POSTROUTING (#3).
-+
-+        This settings are specially usefull when trying to use IMQ
-+        to shape NATed clients.
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AA
-+      bool "IMQ AA"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   After NAT
-+        POSTROUTING:  After NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AB
-+      bool "IMQ AB"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   After NAT
-+        POSTROUTING:  Before NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BA
-+      bool "IMQ BA"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   Before NAT
-+        POSTROUTING:  After NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BB
-+      bool "IMQ BB"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   Before NAT
-+        POSTROUTING:  Before NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+endchoice
-+
-+config IMQ_NUM_DEVS
-+      int "Number of IMQ devices"
-+      range 2 16
-+      depends on IMQ
-+      default "16"
-+      help
-+        This setting defines how many IMQ devices will be created.
-+
-+        The default value is 16.
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
- config TUN
-       tristate "Universal TUN/TAP device driver support"
-       select CRC32
-diff -uNr linux-3.1/drivers/net/Makefile linux-3.1-imq/drivers/net/Makefile
---- linux-3.1/drivers/net/Makefile     2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/drivers/net/Makefile 2011-11-04 11:12:52.106390309 +0200
-@@ -175,6 +175,7 @@
- obj-$(CONFIG_XEN_NETDEV_BACKEND) += xen-netback/
- obj-$(CONFIG_DUMMY) += dummy.o
-+obj-$(CONFIG_IMQ) += imq.o
- obj-$(CONFIG_IFB) += ifb.o
- obj-$(CONFIG_MACVLAN) += macvlan.o
- obj-$(CONFIG_MACVTAP) += macvtap.o
-diff -uNr linux-3.1/include/linux/imq.h linux-3.1-imq/include/linux/imq.h
---- linux-3.1/include/linux/imq.h      1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.1-imq/include/linux/imq.h  2011-11-04 11:12:52.109723710 +0200
-@@ -0,0 +1,13 @@
-+#ifndef _IMQ_H
-+#define _IMQ_H
-+
-+/* IFMASK (16 device indexes, 0 to 15) and flag(s) fit in 5 bits */
-+#define IMQ_F_BITS    5
-+
-+#define IMQ_F_IFMASK  0x0f
-+#define IMQ_F_ENQUEUE 0x10
-+
-+#define IMQ_MAX_DEVS  (IMQ_F_IFMASK + 1)
-+
-+#endif /* _IMQ_H */
-+
-diff -uNr linux-3.1/include/linux/netfilter/xt_IMQ.h linux-3.1-imq/include/linux/netfilter/xt_IMQ.h
---- linux-3.1/include/linux/netfilter/xt_IMQ.h 1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.1-imq/include/linux/netfilter/xt_IMQ.h     2011-11-04 11:12:52.109723710 +0200
-@@ -0,0 +1,9 @@
-+#ifndef _XT_IMQ_H
-+#define _XT_IMQ_H
-+
-+struct xt_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _XT_IMQ_H */
-+
-diff -uNr linux-3.1/include/linux/netfilter.h linux-3.1-imq/include/linux/netfilter.h
---- linux-3.1/include/linux/netfilter.h        2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/include/linux/netfilter.h    2011-11-04 11:12:52.109723710 +0200
-@@ -22,7 +22,8 @@
- #define NF_QUEUE 3
- #define NF_REPEAT 4
- #define NF_STOP 5
--#define NF_MAX_VERDICT NF_STOP
-+#define NF_IMQ_QUEUE 6
-+#define NF_MAX_VERDICT NF_IMQ_QUEUE
- /* we overload the higher bits for encoding auxiliary data such as the queue
-  * number or errno values. Not nice, but better than additional function
-diff -uNr linux-3.1/include/linux/netfilter_ipv4/ipt_IMQ.h linux-3.1-imq/include/linux/netfilter_ipv4/ipt_IMQ.h
---- linux-3.1/include/linux/netfilter_ipv4/ipt_IMQ.h   1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.1-imq/include/linux/netfilter_ipv4/ipt_IMQ.h       2011-11-04 11:12:52.109723710 +0200
-@@ -0,0 +1,10 @@
-+#ifndef _IPT_IMQ_H
-+#define _IPT_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ipt_imq_info xt_imq_info
-+
-+#endif /* _IPT_IMQ_H */
-+
-diff -uNr linux-3.1/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-3.1-imq/include/linux/netfilter_ipv6/ip6t_IMQ.h
---- linux-3.1/include/linux/netfilter_ipv6/ip6t_IMQ.h  1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.1-imq/include/linux/netfilter_ipv6/ip6t_IMQ.h      2011-11-04 11:12:52.113057113 +0200
-@@ -0,0 +1,10 @@
-+#ifndef _IP6T_IMQ_H
-+#define _IP6T_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ip6t_imq_info xt_imq_info
-+
-+#endif /* _IP6T_IMQ_H */
-+
-diff -uNr linux-3.1/include/linux/skbuff.h linux-3.1-imq/include/linux/skbuff.h
---- linux-3.1/include/linux/skbuff.h   2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/include/linux/skbuff.h       2011-11-04 11:12:52.116390515 +0200
-@@ -29,6 +29,9 @@
- #include <linux/rcupdate.h>
- #include <linux/dmaengine.h>
- #include <linux/hrtimer.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- /* Don't change this without changing skb_csum_unnecessary! */
- #define CHECKSUM_NONE 0
-@@ -356,6 +359,9 @@
-        * first. This is owned by whoever has the skb queued ATM.
-        */
-       char                    cb[48] __aligned(8);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      void                    *cb_next;
-+#endif
-       unsigned long           _skb_refdst;
- #ifdef CONFIG_XFRM
-@@ -394,6 +400,9 @@
- #ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
-       struct sk_buff          *nfct_reasm;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      struct nf_queue_entry   *nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       struct nf_bridge_info   *nf_bridge;
- #endif
-@@ -418,6 +427,10 @@
-       /* 0/13 bit hole */
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      __u8                    imq_flags:IMQ_F_BITS;
-+#endif
-+
- #ifdef CONFIG_NET_DMA
-       dma_cookie_t            dma_cookie;
- #endif
-@@ -504,6 +517,12 @@
-       return (struct rtable *)skb_dst(skb);
- }
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern int skb_save_cb(struct sk_buff *skb);
-+extern int skb_restore_cb(struct sk_buff *skb);
-+#endif
-+
- extern void kfree_skb(struct sk_buff *skb);
- extern void consume_skb(struct sk_buff *skb);
- extern void          __kfree_skb(struct sk_buff *skb);
-@@ -2157,6 +2176,10 @@
-       dst->nfct_reasm = src->nfct_reasm;
-       nf_conntrack_get_reasm(src->nfct_reasm);
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      dst->imq_flags = src->imq_flags;
-+      dst->nf_queue_entry = src->nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       dst->nf_bridge  = src->nf_bridge;
-       nf_bridge_get(src->nf_bridge);
-diff -uNr linux-3.1/include/net/netfilter/nf_queue.h linux-3.1-imq/include/net/netfilter/nf_queue.h
---- linux-3.1/include/net/netfilter/nf_queue.h 2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/include/net/netfilter/nf_queue.h     2011-11-04 11:12:52.116390515 +0200
-@@ -30,5 +30,11 @@
-                                      const struct nf_queue_handler *qh);
- extern void nf_unregister_queue_handlers(const struct nf_queue_handler *qh);
- extern void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
-+extern void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern void nf_register_queue_imq_handler(const struct nf_queue_handler *qh);
-+extern void nf_unregister_queue_imq_handler(void);
-+#endif
- #endif /* _NF_QUEUE_H */
-diff -uNr linux-3.1/net/core/dev.c linux-3.1-imq/net/core/dev.c
---- linux-3.1/net/core/dev.c   2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/net/core/dev.c       2011-11-04 11:12:52.119723915 +0200
-@@ -98,6 +98,9 @@
- #include <net/net_namespace.h>
- #include <net/sock.h>
- #include <linux/rtnetlink.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- #include <linux/proc_fs.h>
- #include <linux/seq_file.h>
- #include <linux/stat.h>
-@@ -2126,7 +2129,12 @@
-               if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
-                       skb_dst_drop(skb);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+              if (!list_empty(&ptype_all) &&
-+                                      !(skb->imq_flags & IMQ_F_ENQUEUE))
-+#else
-               if (!list_empty(&ptype_all))
-+#endif
-                       dev_queue_xmit_nit(skb, dev);
-               skb_orphan_try(skb);
-diff -uNr linux-3.1/net/core/skbuff.c linux-3.1-imq/net/core/skbuff.c
---- linux-3.1/net/core/skbuff.c        2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/net/core/skbuff.c    2011-11-04 11:12:52.123057315 +0200
-@@ -73,6 +73,9 @@
- static struct kmem_cache *skbuff_head_cache __read_mostly;
- static struct kmem_cache *skbuff_fclone_cache __read_mostly;
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static struct kmem_cache *skbuff_cb_store_cache __read_mostly;
-+#endif
- static void sock_pipe_buf_release(struct pipe_inode_info *pipe,
-                                 struct pipe_buffer *buf)
-@@ -92,6 +95,82 @@
-       return 1;
- }
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+/* Control buffer save/restore for IMQ devices */
-+struct skb_cb_table {
-+      char                    cb[48] __aligned(8);
-+      void                    *cb_next;
-+      atomic_t                refcnt;
-+};
-+
-+static DEFINE_SPINLOCK(skb_cb_store_lock);
-+
-+int skb_save_cb(struct sk_buff *skb)
-+{
-+      struct skb_cb_table *next;
-+
-+      next = kmem_cache_alloc(skbuff_cb_store_cache, GFP_ATOMIC);
-+      if (!next)
-+              return -ENOMEM;
-+
-+      BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+      memcpy(next->cb, skb->cb, sizeof(skb->cb));
-+      next->cb_next = skb->cb_next;
-+
-+      atomic_set(&next->refcnt, 1);
-+
-+      skb->cb_next = next;
-+      return 0;
-+}
-+EXPORT_SYMBOL(skb_save_cb);
-+
-+int skb_restore_cb(struct sk_buff *skb)
-+{
-+      struct skb_cb_table *next;
-+
-+      if (!skb->cb_next)
-+              return 0;
-+
-+      next = skb->cb_next;
-+
-+      BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+      memcpy(skb->cb, next->cb, sizeof(skb->cb));
-+      skb->cb_next = next->cb_next;
-+
-+      spin_lock(&skb_cb_store_lock);
-+
-+      if (atomic_dec_and_test(&next->refcnt))
-+              kmem_cache_free(skbuff_cb_store_cache, next);
-+
-+      spin_unlock(&skb_cb_store_lock);
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL(skb_restore_cb);
-+
-+static void skb_copy_stored_cb(struct sk_buff *new, const struct sk_buff *__old)
-+{
-+      struct skb_cb_table *next;
-+      struct sk_buff *old;
-+
-+      if (!__old->cb_next) {
-+              new->cb_next = NULL;
-+              return;
-+      }
-+
-+      spin_lock(&skb_cb_store_lock);
-+
-+      old = (struct sk_buff *)__old;
-+
-+      next = old->cb_next;
-+      atomic_inc(&next->refcnt);
-+      new->cb_next = next;
-+
-+      spin_unlock(&skb_cb_store_lock);
-+}
-+#endif
- /* Pipe buffer operations for a socket. */
- static const struct pipe_buf_operations sock_pipe_buf_ops = {
-@@ -392,6 +471,26 @@
-               WARN_ON(in_irq());
-               skb->destructor(skb);
-       }
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      /* This should not happen. When it does, avoid memleak by restoring
-+      the chain of cb-backups. */
-+      while (skb->cb_next != NULL) {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "IMQ: kfree_skb: skb->cb_next: "
-+                              "%08x\n", (unsigned int)skb->cb_next);
-+
-+              skb_restore_cb(skb);
-+      }
-+      /* This should not happen either, nf_queue_entry is nullified in
-+       * imq_dev_xmit(). If we have non-NULL nf_queue_entry then we are
-+       * leaking entry pointers, maybe memory. We don't know if this is
-+       * pointer to already freed memory, or should this be freed.
-+       * If this happens we need to add refcounting, etc for nf_queue_entry.
-+       */
-+      if (skb->nf_queue_entry && net_ratelimit())
-+              printk(KERN_WARNING
-+                              "IMQ: kfree_skb: skb->nf_queue_entry != NULL");
-+#endif
- #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
-       nf_conntrack_put(skb->nfct);
- #endif
-@@ -533,6 +632,9 @@
-       new->sp                 = secpath_get(old->sp);
- #endif
-       memcpy(new->cb, old->cb, sizeof(old->cb));
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      skb_copy_stored_cb(new, old);
-+#endif
-       new->csum               = old->csum;
-       new->local_df           = old->local_df;
-       new->pkt_type           = old->pkt_type;
-@@ -2888,6 +2990,13 @@
-                                               0,
-                                               SLAB_HWCACHE_ALIGN|SLAB_PANIC,
-                                               NULL);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      skbuff_cb_store_cache = kmem_cache_create("skbuff_cb_store_cache",
-+                                                sizeof(struct skb_cb_table),
-+                                                0,
-+                                                SLAB_HWCACHE_ALIGN|SLAB_PANIC,
-+                                                NULL);
-+#endif
- }
- /**
-diff -uNr linux-3.1/net/ipv6/ip6_output.c linux-3.1-imq/net/ipv6/ip6_output.c
---- linux-3.1/net/ipv6/ip6_output.c    2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/net/ipv6/ip6_output.c        2011-11-04 11:12:52.123057315 +0200
-@@ -102,9 +102,6 @@
-       struct net_device *dev = dst->dev;
-       struct neighbour *neigh;
--      skb->protocol = htons(ETH_P_IPV6);
--      skb->dev = dev;
--
-       if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) {
-               struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
-@@ -170,6 +167,11 @@
-               return 0;
-       }
-+      /* IMQ-patch: moved setting skb->dev and skb->protocol from
-+       * ip6_finish_output2 to fix crashing at netif_skb_features(). */
-+      skb->protocol = htons(ETH_P_IPV6);
-+      skb->dev = dev;
-+
-       return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, skb, NULL, dev,
-                           ip6_finish_output,
-                           !(IP6CB(skb)->flags & IP6SKB_REROUTED));
-diff -uNr linux-3.1/net/netfilter/core.c linux-3.1-imq/net/netfilter/core.c
---- linux-3.1/net/netfilter/core.c     2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/net/netfilter/core.c 2011-11-04 11:12:52.123057315 +0200
-@@ -179,9 +179,11 @@
-               ret = NF_DROP_GETERR(verdict);
-               if (ret == 0)
-                       ret = -EPERM;
--      } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE) {
-+      } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE ||
-+                 (verdict & NF_VERDICT_MASK) == NF_IMQ_QUEUE) {
-               ret = nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
--                             verdict >> NF_VERDICT_QBITS);
-+                             verdict >> NF_VERDICT_QBITS,
-+                             verdict & NF_VERDICT_MASK);
-               if (ret < 0) {
-                       if (ret == -ECANCELED)
-                               goto next_hook;
-diff -uNr linux-3.1/net/netfilter/Kconfig linux-3.1-imq/net/netfilter/Kconfig
---- linux-3.1/net/netfilter/Kconfig    2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/net/netfilter/Kconfig        2011-11-04 11:12:52.123057315 +0200
-@@ -507,6 +507,18 @@
-         For more information on the LEDs available on your system, see
-         Documentation/leds-class.txt
-+config NETFILTER_XT_TARGET_IMQ
-+        tristate '"IMQ" target support'
-+      depends on NETFILTER_XTABLES
-+      depends on IP_NF_MANGLE || IP6_NF_MANGLE
-+      select IMQ
-+      default m if NETFILTER_ADVANCED=n
-+        help
-+          This option adds a `IMQ' target which is used to specify if and
-+          to which imq device packets should get enqueued/dequeued.
-+
-+          To compile it as a module, choose M here.  If unsure, say N.
-+
- config NETFILTER_XT_TARGET_MARK
-       tristate '"MARK" target support'
-       depends on NETFILTER_ADVANCED
-diff -uNr linux-3.1/net/netfilter/Makefile linux-3.1-imq/net/netfilter/Makefile
---- linux-3.1/net/netfilter/Makefile   2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/net/netfilter/Makefile       2011-11-04 11:12:52.123057315 +0200
-@@ -56,6 +56,7 @@
- obj-$(CONFIG_NETFILTER_XT_TARGET_CT) += xt_CT.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o
-+obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NFLOG) += xt_NFLOG.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NFQUEUE) += xt_NFQUEUE.o
-diff -uNr linux-3.1/net/netfilter/nf_internals.h linux-3.1-imq/net/netfilter/nf_internals.h
---- linux-3.1/net/netfilter/nf_internals.h     2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/net/netfilter/nf_internals.h 2011-11-04 11:12:52.123057315 +0200
-@@ -29,7 +29,7 @@
-                   struct net_device *indev,
-                   struct net_device *outdev,
-                   int (*okfn)(struct sk_buff *),
--                  unsigned int queuenum);
-+                  unsigned int queuenum, unsigned int queuetype);
- extern int __init netfilter_queue_init(void);
- /* nf_log.c */
-diff -uNr linux-3.1/net/netfilter/nf_queue.c linux-3.1-imq/net/netfilter/nf_queue.c
---- linux-3.1/net/netfilter/nf_queue.c 2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.1-imq/net/netfilter/nf_queue.c     2011-11-04 11:12:52.123057315 +0200
-@@ -22,6 +22,26 @@
- static DEFINE_MUTEX(queue_handler_mutex);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static const struct nf_queue_handler *queue_imq_handler;
-+
-+void nf_register_queue_imq_handler(const struct nf_queue_handler *qh)
-+{
-+      mutex_lock(&queue_handler_mutex);
-+      rcu_assign_pointer(queue_imq_handler, qh);
-+      mutex_unlock(&queue_handler_mutex);
-+}
-+EXPORT_SYMBOL_GPL(nf_register_queue_imq_handler);
-+
-+void nf_unregister_queue_imq_handler(void)
-+{
-+      mutex_lock(&queue_handler_mutex);
-+      rcu_assign_pointer(queue_imq_handler, NULL);
-+      mutex_unlock(&queue_handler_mutex);
-+}
-+EXPORT_SYMBOL_GPL(nf_unregister_queue_imq_handler);
-+#endif
-+
- /* return EBUSY when somebody else is registered, return EEXIST if the
-  * same handler is registered, return 0 in case of success. */
- int nf_register_queue_handler(u_int8_t pf, const struct nf_queue_handler *qh)
-@@ -92,7 +112,7 @@
- }
- EXPORT_SYMBOL_GPL(nf_unregister_queue_handlers);
--static void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
-+void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
- {
-       /* Release those devices we held, or Alexey will kill me. */
-       if (entry->indev)
-@@ -112,6 +132,7 @@
-       /* Drop reference to owner of hook which queued us. */
-       module_put(entry->elem->owner);
- }
-+EXPORT_SYMBOL_GPL(nf_queue_entry_release_refs);
- /*
-  * Any packet that leaves via this function must come back
-@@ -123,7 +144,8 @@
-                     struct net_device *indev,
-                     struct net_device *outdev,
-                     int (*okfn)(struct sk_buff *),
--                    unsigned int queuenum)
-+                    unsigned int queuenum,
-+                    unsigned int queuetype)
- {
-       int status = -ENOENT;
-       struct nf_queue_entry *entry = NULL;
-@@ -137,7 +159,17 @@
-       /* QUEUE == DROP if no one is waiting, to be safe. */
-       rcu_read_lock();
--      qh = rcu_dereference(queue_handler[pf]);
-+      if (queuetype == NF_IMQ_QUEUE) {
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+              qh = rcu_dereference(queue_imq_handler);
-+#else
-+              BUG();
-+              goto err_unlock;
-+#endif
-+      } else {
-+              qh = rcu_dereference(queue_handler[pf]);
-+      }
-+
-       if (!qh) {
-               status = -ESRCH;
-               goto err_unlock;
-@@ -209,7 +241,8 @@
-            struct net_device *indev,
-            struct net_device *outdev,
-            int (*okfn)(struct sk_buff *),
--           unsigned int queuenum)
-+           unsigned int queuenum,
-+           unsigned int queuetype)
- {
-       struct sk_buff *segs;
-       int err;
-@@ -217,7 +250,7 @@
-       if (!skb_is_gso(skb))
-               return __nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
--                                queuenum);
-+                                queuenum, queuetype);
-       switch (pf) {
-       case NFPROTO_IPV4:
-@@ -244,7 +277,7 @@
-               segs->next = NULL;
-               if (err == 0)
-                       err = __nf_queue(segs, elem, pf, hook, indev,
--                                         outdev, okfn, queuenum);
-+                                       outdev, okfn, queuenum, queuetype);
-               if (err == 0)
-                       queued++;
-               else
-@@ -299,9 +332,11 @@
-               local_bh_enable();
-               break;
-       case NF_QUEUE:
-+      case NF_IMQ_QUEUE:
-               err = __nf_queue(skb, elem, entry->pf, entry->hook,
-                                entry->indev, entry->outdev, entry->okfn,
--                               verdict >> NF_VERDICT_QBITS);
-+                               verdict >> NF_VERDICT_QBITS,
-+                               verdict & NF_VERDICT_MASK);
-               if (err < 0) {
-                       if (err == -ECANCELED)
-                               goto next_hook;
-diff -uNr linux-3.1/net/netfilter/xt_IMQ.c linux-3.1-imq/net/netfilter/xt_IMQ.c
---- linux-3.1/net/netfilter/xt_IMQ.c   1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.1-imq/net/netfilter/xt_IMQ.c       2011-11-04 11:12:52.123057315 +0200
-@@ -0,0 +1,74 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter/x_tables.h>
-+#include <linux/netfilter/xt_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff *pskb,
-+                              const struct xt_action_param *par)
-+{
-+      const struct xt_imq_info *mr = par->targinfo;
-+
-+      pskb->imq_flags = (mr->todev & IMQ_F_IFMASK) | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static int imq_checkentry(const struct xt_tgchk_param *par)
-+{
-+      struct xt_imq_info *mr = par->targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS - 1) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS - 1);
-+              return -EINVAL;
-+      }
-+
-+      return 0;
-+}
-+
-+static struct xt_target xt_imq_reg[] __read_mostly = {
-+      {
-+              .name           = "IMQ",
-+              .family         = AF_INET,
-+              .checkentry     = imq_checkentry,
-+              .target         = imq_target,
-+              .targetsize     = sizeof(struct xt_imq_info),
-+              .table          = "mangle",
-+              .me             = THIS_MODULE
-+      },
-+      {
-+              .name           = "IMQ",
-+              .family         = AF_INET6,
-+              .checkentry     = imq_checkentry,
-+              .target         = imq_target,
-+              .targetsize     = sizeof(struct xt_imq_info),
-+              .table          = "mangle",
-+              .me             = THIS_MODULE
-+      },
-+};
-+
-+static int __init imq_init(void)
-+{
-+      return xt_register_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+static void __exit imq_fini(void)
-+{
-+      xt_unregister_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+module_init(imq_init);
-+module_exit(imq_fini);
-+
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. "
-+                 "See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("ipt_IMQ");
-+MODULE_ALIAS("ip6t_IMQ");
-+
diff --git a/src/patches/linux-3.10.10-arm_kirkwood_setups.patch b/src/patches/linux-3.10.10-arm_kirkwood_setups.patch
deleted file mode 100644 (file)
index 3564465..0000000
+++ /dev/null
@@ -1,704 +0,0 @@
-diff -Naur linux-3.10.10.org/arch/arm/Kconfig linux-3.10.10/arch/arm/Kconfig
---- linux-3.10.10.org/arch/arm/Kconfig 2013-08-29 18:47:51.000000000 +0200
-+++ linux-3.10.10/arch/arm/Kconfig     2013-09-02 19:37:01.000000000 +0200
-@@ -217,7 +217,7 @@
- config ARM_PATCH_PHYS_VIRT
-       bool "Patch physical to virtual translations at runtime" if EMBEDDED
--      default y
-+      default n
-       depends on !XIP_KERNEL && MMU
-       depends on !ARCH_REALVIEW || !SPARSEMEM
-       help
-diff -Naur linux-3.10.10.org/arch/arm/mach-kirkwood/dreamplug-setup.c linux-3.10.10/arch/arm/mach-kirkwood/dreamplug-setup.c
---- linux-3.10.10.org/arch/arm/mach-kirkwood/dreamplug-setup.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.10/arch/arm/mach-kirkwood/dreamplug-setup.c     2013-09-02 21:29:28.000000000 +0200
-@@ -0,0 +1,151 @@
-+/*
-+ * arch/arm/mach-kirkwood/dreamplug-setup.c
-+ *
-+ * Marvell DreamPlug Reference Board Setup
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2.  This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/ata_platform.h>
-+#include <linux/mv643xx_eth.h>
-+#include <linux/gpio.h>
-+#include <linux/leds.h>
-+#include <linux/spi/flash.h>
-+#include <linux/spi/spi.h>
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <mach/kirkwood.h>
-+#include <linux/platform_data/mmc-mvsdio.h>
-+#include "common.h"
-+#include "mpp.h"
-+
-+static const struct flash_platform_data dreamplug_spi_slave_data = {
-+      .type           = "mx25l1606e",
-+};
-+
-+static struct spi_board_info __initdata dreamplug_spi_slave_info[] = {
-+      {
-+              .modalias       = "m25p80",
-+              .platform_data  = &dreamplug_spi_slave_data,
-+              .irq            = -1,
-+              .max_speed_hz   = 50000000,
-+              .bus_num        = 0,
-+              .chip_select    = 0,
-+      },
-+};
-+
-+static struct mv643xx_eth_platform_data dreamplug_ge00_data = {
-+      .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
-+};
-+
-+static struct mv643xx_eth_platform_data dreamplug_ge01_data = {
-+      .phy_addr       = MV643XX_ETH_PHY_ADDR(1),
-+};
-+
-+static struct mv_sata_platform_data dreamplug_sata_data = {
-+      .n_ports        = 1,
-+};
-+
-+static struct mvsdio_platform_data dreamplug_mvsdio_data = {
-+      /* unfortunately the CD signal has not been connected */
-+};
-+
-+static struct gpio_led dreamplug_led_pins[] = {
-+      {
-+              .name                   = "dreamplug:blue:bluetooth",
-+              .gpio                   = 47,
-+              .active_low             = 1,
-+      },
-+      {
-+              .name                   = "dreamplug:green:wlan",
-+              .gpio                   = 48,
-+              .active_low             = 1,
-+      },
-+      {
-+              .name                   = "dreamplug:blue:wlanap",
-+              .gpio                   = 49,
-+              .active_low             = 1,
-+      },
-+};
-+
-+static struct gpio_led_platform_data dreamplug_led_data = {
-+      .leds           = dreamplug_led_pins,
-+      .num_leds       = ARRAY_SIZE(dreamplug_led_pins),
-+};
-+
-+static struct platform_device dreamplug_leds = {
-+      .name   = "leds-gpio",
-+      .id     = -1,
-+      .dev    = {
-+              .platform_data  = &dreamplug_led_data,
-+      }
-+};
-+
-+static unsigned int dreamplug_mpp_config[] __initdata = {
-+      MPP0_SPI_SCn,
-+      MPP1_SPI_MOSI,
-+      MPP2_SPI_SCK,
-+      MPP3_SPI_MISO,
-+      MPP4_GPIO,
-+      MPP5_GPO,
-+      MPP7_GPO,
-+      MPP18_GPO,
-+      MPP19_GPO,
-+      MPP47_GPIO,     /* B_BLED */
-+      MPP48_GPIO,     /* W_GLED */
-+      MPP49_GPIO,     /* W_BLED */
-+      0
-+};
-+
-+static void __init dreamplug_legacy_init(void)
-+{
-+      /*
-+       * Basic setup. Needs to be called early.
-+       */
-+      kirkwood_init();
-+      kirkwood_mpp_conf(dreamplug_mpp_config);
-+
-+      kirkwood_uart0_init();
-+
-+      spi_register_board_info(dreamplug_spi_slave_info,
-+                              ARRAY_SIZE(dreamplug_spi_slave_info));
-+
-+      kirkwood_spi_init();
-+      kirkwood_ehci_init();
-+
-+      kirkwood_ge00_init(&dreamplug_ge00_data);
-+      kirkwood_ge01_init(&dreamplug_ge01_data);
-+      kirkwood_sata_init(&dreamplug_sata_data);
-+      kirkwood_sdio_init(&dreamplug_mvsdio_data);
-+
-+      platform_device_register(&dreamplug_leds);
-+}
-+
-+MACHINE_START(DREAMPLUG, "Marvell DreamPlug Reference Board")
-+      /* Maintainer: Siddarth Gore <gores <at> marvell.com> */
-+      .atag_offset    = 0x100,
-+      .init_machine   = dreamplug_legacy_init,
-+      .map_io         = kirkwood_map_io,
-+      .init_early     = kirkwood_init_early,
-+      .init_irq       = kirkwood_init_irq,
-+      .init_time      = kirkwood_timer_init,
-+      .restart        = kirkwood_restart,
-+MACHINE_END
-+
-+MACHINE_START(DREAMPLUG1, "Marvell DreamPlug Reference Board")
-+      .atag_offset    = 0x100,
-+      .init_machine   = dreamplug_legacy_init,
-+      .map_io         = kirkwood_map_io,
-+      .init_early     = kirkwood_init_early,
-+      .init_irq       = kirkwood_init_irq,
-+      .init_time      = kirkwood_timer_init,
-+      .restart        = kirkwood_restart,
-+
-+MACHINE_END
-diff -Naur linux-3.10.10.org/arch/arm/mach-kirkwood/guruplug-setup.c linux-3.10.10/arch/arm/mach-kirkwood/guruplug-setup.c
---- linux-3.10.10.org/arch/arm/mach-kirkwood/guruplug-setup.c  2013-08-29 18:47:51.000000000 +0200
-+++ linux-3.10.10/arch/arm/mach-kirkwood/guruplug-setup.c      2013-09-02 19:37:02.000000000 +0200
-@@ -11,6 +11,7 @@
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
- #include <linux/ata_platform.h>
- #include <linux/mv643xx_eth.h>
-@@ -27,15 +28,16 @@
-       {
-               .name = "u-boot",
-               .offset = 0,
--              .size = SZ_1M
-+              .size = SZ_1M,
-+              .mask_flags = MTD_WRITEABLE, /* read only */
-       }, {
-               .name = "uImage",
-               .offset = MTDPART_OFS_NXTBLK,
--              .size = SZ_4M
-+              .size = SZ_4M,
-       }, {
-               .name = "root",
-               .offset = MTDPART_OFS_NXTBLK,
--              .size = MTDPART_SIZ_FULL
-+              .size = MTDPART_SIZ_FULL,
-       },
- };
-diff -Naur linux-3.10.10.org/arch/arm/mach-kirkwood/iconnect-setup.c linux-3.10.10/arch/arm/mach-kirkwood/iconnect-setup.c
---- linux-3.10.10.org/arch/arm/mach-kirkwood/iconnect-setup.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.10/arch/arm/mach-kirkwood/iconnect-setup.c      2013-09-02 21:31:09.000000000 +0200
-@@ -0,0 +1,214 @@
-+/*
-+ * arch/arm/mach-kirkwood/iconnect-setup.c
-+ *
-+ * Iomega iConnect Wireless Data Station Board Setup
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2.  This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/ata_platform.h>
-+#include <linux/mv643xx_eth.h>
-+#include <linux/gpio.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/i2c.h>
-+#include <linux/input.h>
-+#include <linux/leds.h>
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <mach/kirkwood.h>
-+#include "common.h"
-+#include "mpp.h"
-+
-+static struct mtd_partition iconnect_nand_parts[] = {
-+      {
-+              .name = "u-boot",
-+              .offset = 0,
-+              .size = SZ_1M,
-+              .mask_flags = MTD_WRITEABLE, /* read only */
-+      }, {
-+              .name = "uImage",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = 0x440000,
-+      }, {
-+              .name = "uInit",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = 0x440000,
-+      }, {
-+              .name = "root",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = MTDPART_SIZ_FULL,
-+      },
-+};
-+
-+static struct mv643xx_eth_platform_data iconnect_ge00_data = {
-+      .phy_addr       = MV643XX_ETH_PHY_ADDR(0xB),
-+};
-+
-+static struct gpio_led iconnect_led_pins[] = {
-+      {
-+              .name                   = "iconnect:led_level",
-+              .default_trigger        = "default-on",
-+              .gpio                   = 41,
-+              .active_low             = 0,
-+      },
-+
-+      {
-+              .name                   = "iconnect:blue:power",
-+              .default_trigger        = "default-on",
-+              .gpio                   = 42,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:red:power",
-+              .default_trigger        = "none",
-+              .gpio                   = 43,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:usb_1",
-+              .default_trigger        = "none",
-+              .gpio                   = 44,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:usb_2",
-+              .default_trigger        = "none",
-+              .gpio                   = 45,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:usb_3",
-+              .default_trigger        = "none",
-+              .gpio                   = 46,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:usb_4",
-+              .default_trigger        = "none",
-+              .gpio                   = 47,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:otb",
-+              .default_trigger        = "none",
-+              .gpio                   = 48,
-+              .active_low             = 0,
-+      },
-+};
-+
-+static struct gpio_led_platform_data iconnect_led_data = {
-+      .leds           = iconnect_led_pins,
-+      .num_leds       = ARRAY_SIZE(iconnect_led_pins),
-+};
-+
-+static struct platform_device iconnect_leds = {
-+      .name   = "leds-gpio",
-+      .id     = -1,
-+      .dev    = {
-+              .platform_data  = &iconnect_led_data,
-+      }
-+};
-+
-+static struct gpio_keys_button iconnect_buttons[] = {
-+      {
-+              .code           = KEY_COPY,
-+              .gpio           = 35,
-+              .desc           = "OTB Button",
-+              .active_low     = 1,
-+      },
-+      {
-+              .code           = KEY_RESTART,
-+              .gpio           = 12,
-+              .desc           = "Reset",
-+              .active_low     = 1,
-+      },
-+};
-+
-+static struct gpio_keys_platform_data iconnect_button_data = {
-+      .buttons        = iconnect_buttons,
-+      .nbuttons       = ARRAY_SIZE(iconnect_buttons),
-+};
-+
-+static struct platform_device iconnect_button_device = {
-+      .name           = "gpio-keys",
-+      .id             = -1,
-+      .num_resources  = 0,
-+      .dev            = {
-+              .platform_data  = &iconnect_button_data,
-+      }
-+};
-+
-+static unsigned int iconnect_mpp_config[] __initdata = {
-+      MPP0_NF_IO2,
-+      MPP1_NF_IO3,
-+      MPP2_NF_IO4,
-+      MPP3_NF_IO5,
-+      MPP4_NF_IO6,
-+      MPP5_NF_IO7,
-+      MPP18_NF_IO0,
-+      MPP19_NF_IO1,
-+      MPP12_GPIO,     /* Reset Button */
-+      MPP35_GPIO,     /* OTB Button */
-+
-+      MPP41_GPIO,     /* LED Level */
-+      MPP42_GPIO,     /* Power LED blue */
-+      MPP43_GPIO,     /* Power LED red */
-+      MPP44_GPIO,     /* USB LED 1 */
-+      MPP45_GPIO,     /* USB LED 2 */
-+      MPP46_GPIO,     /* USB LED 3 */
-+      MPP47_GPIO,     /* USB LED 4 */
-+      MPP48_GPIO,     /* OTB LED */
-+      0
-+};
-+
-+static struct i2c_board_info __initdata iconnect_i2c = {
-+      I2C_BOARD_INFO("lm63", 0x4c),
-+};
-+
-+static void __init iconnect_legacy_init(void)
-+{
-+      /*
-+       * Basic setup. Needs to be called early.
-+       */
-+      kirkwood_init();
-+      kirkwood_mpp_conf(iconnect_mpp_config);
-+
-+      kirkwood_nand_init(ARRAY_AND_SIZE(iconnect_nand_parts), 25);
-+      kirkwood_ehci_init();
-+      kirkwood_ge00_init(&iconnect_ge00_data);
-+
-+      kirkwood_uart0_init();
-+      platform_device_register(&iconnect_leds);
-+      platform_device_register(&iconnect_button_device);
-+
-+      kirkwood_i2c_init();
-+      i2c_register_board_info(0, &iconnect_i2c,1);
-+}
-+
-+static int __init iconnect_pci_init(void)
-+{
-+      if (machine_is_iconnect()) {
-+              kirkwood_pcie_init(KW_PCIE0);
-+      }
-+      return 0;
-+}
-+subsys_initcall(iconnect_pci_init);
-+
-+MACHINE_START(ICONNECT, "Iomega iConnect Wireless Data Station")
-+      /* Maintainer: Arne Fitzenreiter <arne_f@ipfire.org> */
-+      .atag_offset    = 0x100,
-+      .init_machine   = iconnect_legacy_init,
-+      .map_io         = kirkwood_map_io,
-+      .init_early     = kirkwood_init_early,
-+      .init_irq       = kirkwood_init_irq,
-+      .init_time      = kirkwood_timer_init,
-+      .restart        = kirkwood_restart,
-+
-+MACHINE_END
-diff -Naur linux-3.10.10.org/arch/arm/mach-kirkwood/Kconfig linux-3.10.10/arch/arm/mach-kirkwood/Kconfig
---- linux-3.10.10.org/arch/arm/mach-kirkwood/Kconfig   2013-08-29 18:47:51.000000000 +0200
-+++ linux-3.10.10/arch/arm/mach-kirkwood/Kconfig       2013-09-02 19:37:02.000000000 +0200
-@@ -116,6 +116,12 @@
-         Say 'Y' here if you want your kernel to support the
-         HP t5325 Thin Client.
-+config MACH_DREAMPLUG
-+      bool "Marvell DreamPlug Reference Board"
-+      help
-+        Say 'Y' here if you want your kernel to support the
-+        Marvell DreamPlug Reference Board.
-+
- config MACH_TS219
-       bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS"
-       help
-@@ -317,6 +323,18 @@
-         or MV6282. If you have the wrong one, the buttons will not
-         work.
-+config MACH_ICONNECT
-+      bool "Iomega iConnect Wireless Data Station"
-+      help
-+        Say 'Y' here if you want your kernel to support the
-+        Iomega iConnect Wireless Data Station.
-+
-+config MACH_NAS6210
-+      bool "Raidsonic ICY BOX IB-62x0"
-+      help
-+        Say 'Y' here if you want your kernel to support the
-+        Raidsonic ICY BOX IB-62x0.
-+
- endmenu
- endif
-diff -Naur linux-3.10.10.org/arch/arm/mach-kirkwood/Makefile linux-3.10.10/arch/arm/mach-kirkwood/Makefile
---- linux-3.10.10.org/arch/arm/mach-kirkwood/Makefile  2013-08-29 18:47:51.000000000 +0200
-+++ linux-3.10.10/arch/arm/mach-kirkwood/Makefile      2013-09-02 19:50:19.000000000 +0200
-@@ -5,6 +5,7 @@
- obj-$(CONFIG_MACH_DOCKSTAR)           += dockstar-setup.o
- obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG)   += sheevaplug-setup.o
- obj-$(CONFIG_MACH_GURUPLUG)           += guruplug-setup.o
-+obj-$(CONFIG_MACH_DREAMPLUG)          += dreamplug-setup.o
- obj-$(CONFIG_MACH_INETSPACE_V2)               += netspace_v2-setup.o lacie_v2-common.o
- obj-$(CONFIG_MACH_MV88F6281GTW_GE)    += mv88f6281gtw_ge-setup.o
- obj-$(CONFIG_MACH_NET2BIG_V2)         += netxbig_v2-setup.o lacie_v2-common.o
-@@ -18,6 +19,8 @@
- obj-$(CONFIG_MACH_T5325)              += t5325-setup.o
- obj-$(CONFIG_MACH_TS219)              += ts219-setup.o tsx1x-common.o
- obj-$(CONFIG_MACH_TS41X)              += ts41x-setup.o tsx1x-common.o
-+obj-$(CONFIG_MACH_ICONNECT)           += iconnect-setup.o
-+obj-$(CONFIG_MACH_NAS6210)            += nas6210-setup.o
- obj-$(CONFIG_ARCH_KIRKWOOD_DT)                += board-dt.o
- obj-$(CONFIG_MACH_CLOUDBOX_DT)                += board-ns2.o
-diff -Naur linux-3.10.10.org/arch/arm/mach-kirkwood/nas6210-setup.c linux-3.10.10/arch/arm/mach-kirkwood/nas6210-setup.c
---- linux-3.10.10.org/arch/arm/mach-kirkwood/nas6210-setup.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.10/arch/arm/mach-kirkwood/nas6210-setup.c       2013-09-02 21:32:36.000000000 +0200
-@@ -0,0 +1,185 @@
-+/*
-+ * arch/arm/mach-kirkwood/nas6210-setup.c
-+ *
-+ * Raidsonic ICYBOX NAS6210 and 6220 Board Setup
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2.  This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/ata_platform.h>
-+#include <linux/mv643xx_eth.h>
-+#include <linux/gpio.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/i2c.h>
-+#include <linux/input.h>
-+#include <linux/leds.h>
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <mach/kirkwood.h>
-+#include "common.h"
-+#include "mpp.h"
-+
-+#define NAS6210_GPIO_POWER_OFF 24
-+
-+static struct mtd_partition nas6210_nand_parts[] = {
-+      {
-+              .name = "u-boot",
-+              .offset = 0,
-+              .size = SZ_1M,
-+              .mask_flags = MTD_WRITEABLE, /* read only */
-+      }, {
-+              .name = "uImage",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = (SZ_1M*6),
-+      }, {
-+              .name = "root",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = MTDPART_SIZ_FULL,
-+      },
-+};
-+
-+static struct mv643xx_eth_platform_data nas6210_ge00_data = {
-+      .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
-+};
-+
-+static struct mv_sata_platform_data nas6210_sata_data = {
-+      .n_ports        = 2,
-+};
-+
-+static struct gpio_led nas6210_led_pins[] = {
-+      {
-+              .name                   = "nas6210:green:power",
-+              .default_trigger        = "default-on",
-+              .gpio                   = 25,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "nas6210:red:power",
-+              .default_trigger        = "none",
-+              .gpio                   = 22,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "nas6210:red:usb_copy",
-+              .default_trigger        = "none",
-+              .gpio                   = 27,
-+              .active_low             = 0,
-+      },
-+};
-+
-+static struct gpio_led_platform_data nas6210_led_data = {
-+      .leds           = nas6210_led_pins,
-+      .num_leds       = ARRAY_SIZE(nas6210_led_pins),
-+};
-+
-+static struct platform_device nas6210_leds = {
-+      .name   = "leds-gpio",
-+      .id     = -1,
-+      .dev    = {
-+              .platform_data  = &nas6210_led_data,
-+      }
-+};
-+
-+static struct gpio_keys_button nas6210_buttons[] = {
-+      {
-+              .code           = KEY_COPY,
-+              .gpio           = 29,
-+              .desc           = "USB Copy",
-+              .active_low     = 1,
-+      },
-+      {
-+              .code           = KEY_RESTART,
-+              .gpio           = 28,
-+              .desc           = "Reset",
-+              .active_low     = 1,
-+      },
-+};
-+
-+static struct gpio_keys_platform_data nas6210_button_data = {
-+      .buttons        = nas6210_buttons,
-+      .nbuttons       = ARRAY_SIZE(nas6210_buttons),
-+};
-+
-+static struct platform_device nas6210_button_device = {
-+      .name           = "gpio-keys",
-+      .id             = -1,
-+      .num_resources  = 0,
-+      .dev            = {
-+              .platform_data  = &nas6210_button_data,
-+      }
-+};
-+
-+static unsigned int nas6210_mpp_config[] __initdata = {
-+      MPP0_NF_IO2,
-+      MPP1_NF_IO3,
-+      MPP2_NF_IO4,
-+      MPP3_NF_IO5,
-+      MPP4_NF_IO6,
-+      MPP5_NF_IO7,
-+      MPP18_NF_IO0,
-+      MPP19_NF_IO1,
-+      MPP22_GPIO,     /* Power LED red */
-+      MPP24_GPIO,     /* Power off */
-+      MPP25_GPIO,     /* Power LED green */
-+      MPP27_GPIO,    /* USB transfer LED */
-+      MPP28_GPIO,    /* Reset button */
-+      MPP29_GPIO,    /* USB Copy button */
-+      0
-+};
-+
-+void nas6210_power_off(void)
-+{
-+      gpio_set_value(NAS6210_GPIO_POWER_OFF, 1);
-+      while(1);
-+}
-+
-+static void __init nas6210_init(void)
-+{
-+      /*
-+       * Basic setup. Needs to be called early.
-+       */
-+      kirkwood_init();
-+      kirkwood_mpp_conf(nas6210_mpp_config);
-+
-+      kirkwood_nand_init(ARRAY_AND_SIZE(nas6210_nand_parts), 25);
-+      kirkwood_ehci_init();
-+      kirkwood_ge00_init(&nas6210_ge00_data);
-+      kirkwood_sata_init(&nas6210_sata_data);
-+      kirkwood_uart0_init();
-+      platform_device_register(&nas6210_leds);
-+      platform_device_register(&nas6210_button_device);
-+
-+      if (gpio_request(NAS6210_GPIO_POWER_OFF, "power-off") == 0 &&
-+              gpio_direction_output(NAS6210_GPIO_POWER_OFF, 0) == 0)
-+                      pm_power_off = nas6210_power_off;
-+
-+      else
-+              pr_err("nas6210: failed to configure power-off gpio pin");
-+}
-+
-+static int __init nas6210_pci_init(void)
-+{
-+      if (machine_is_nas6210()) {
-+              kirkwood_pcie_init(KW_PCIE0);
-+      }
-+      return 0;
-+}
-+subsys_initcall(nas6210_pci_init);
-+
-+MACHINE_START(NAS6210, "RaidSonic ICY BOX IB-NAS62x0")
-+      /* Maintainer: Arne Fitzenreiter <arne_f@ipfire.org> */
-+      .atag_offset    = 0x00000100,
-+      .init_machine   = nas6210_init,
-+      .map_io         = kirkwood_map_io,
-+      .init_early     = kirkwood_init_early,
-+      .init_irq       = kirkwood_init_irq,
-+      .init_time      = kirkwood_timer_init,
-+      .restart        = kirkwood_restart,
-+MACHINE_END
-diff -Naur linux-3.10.10.org/arch/arm/tools/mach-types linux-3.10.10/arch/arm/tools/mach-types
---- linux-3.10.10.org/arch/arm/tools/mach-types        2013-08-29 18:47:51.000000000 +0200
-+++ linux-3.10.10/arch/arm/tools/mach-types    2013-09-02 22:06:34.000000000 +0200
-@@ -447,6 +447,7 @@
- smartq5                       MACH_SMARTQ5            SMARTQ5                 2534
- davinci_dm6467tevm    MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM      2548
- mxt_td60              MACH_MXT_TD60           MXT_TD60                2550
-+guruplug              MACH_GURUPLUG           GURUPLUG                2601
- capc7117              MACH_CAPC7117           CAPC7117                2612
- icontrol              MACH_ICONTROL           ICONTROL                2624
- gplugd                        MACH_GPLUGD             GPLUGD                  2625
-@@ -454,7 +455,7 @@
- mx23evk                       MACH_MX23EVK            MX23EVK                 2629
- ap4evb                        MACH_AP4EVB             AP4EVB                  2630
- mityomapl138          MACH_MITYOMAPL138       MITYOMAPL138            2650
--guruplug              MACH_GURUPLUG           GURUPLUG                2659
-+dreamplug1            MACH_DREAMPLUG1         DREAMPLUG1              2659
- spear310              MACH_SPEAR310           SPEAR310                2660
- spear320              MACH_SPEAR320           SPEAR320                2661
- aquila                        MACH_AQUILA             AQUILA                  2676
-@@ -491,6 +492,7 @@
- t5325                 MACH_T5325              T5325                   2846
- income                        MACH_INCOME             INCOME                  2849
- goni                  MACH_GONI               GONI                    2862
-+iconnect              MACH_ICONNECT           ICONNECT                2870
- bv07                  MACH_BV07               BV07                    2882
- openrd_ultimate               MACH_OPENRD_ULTIMATE    OPENRD_ULTIMATE         2884
- devixp                        MACH_DEVIXP             DEVIXP                  2885
-@@ -520,6 +522,7 @@
- vpr200                        MACH_VPR200             VPR200                  3087
- torbreck              MACH_TORBRECK           TORBRECK                3090
- prima2_evb            MACH_PRIMA2_EVB         PRIMA2_EVB              3103
-+nas6210                       MACH_NAS6210            NAS6210                 3104
- paz00                 MACH_PAZ00              PAZ00                   3128
- acmenetusfoxg20               MACH_ACMENETUSFOXG20    ACMENETUSFOXG20         3129
- ag5evm                        MACH_AG5EVM             AG5EVM                  3189
-@@ -544,6 +547,7 @@
- nspire                        MACH_NSPIRE             NSPIRE                  3503
- nokia_rm696           MACH_NOKIA_RM696        NOKIA_RM696             3522
- mikrap_x168           MACH_MIKRAP_X168        MIKRAP_X168             3543
-+dreamplug             MACH_DREAMPLUG          DREAMPLUG               3550
- deto_macarm9          MACH_DETO_MACARM9       DETO_MACARM9            3568
- m28evk                        MACH_M28EVK             M28EVK                  3613
- kota2                 MACH_KOTA2              KOTA2                   3616
diff --git a/src/patches/linux-3.10.27-fs-exec-atomic64-operand-requires-impossible-reload.patch b/src/patches/linux-3.10.27-fs-exec-atomic64-operand-requires-impossible-reload.patch
deleted file mode 100644 (file)
index a829790..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/fs/Makefile.orig 2014-01-16 20:17:03.000000000 +0000
-+++ b/fs/Makefile      2014-01-16 20:25:05.000000000 +0000
-@@ -13,6 +13,8 @@
-               pnode.o splice.o sync.o utimes.o \
-               stack.o fs_struct.o statfs.o
-+CFLAGS_exec.o += -O1
-+
- ifeq ($(CONFIG_BLOCK),y)
- obj-y +=      buffer.o bio.o block_dev.o direct-io.o mpage.o ioprio.o
- else
diff --git a/src/patches/linux-3.10.30-imq.patch b/src/patches/linux-3.10.30-imq.patch
deleted file mode 100644 (file)
index 7eebd69..0000000
+++ /dev/null
@@ -1,3304 +0,0 @@
-diff -Naur linux-3.10.30.org/drivers/net/imq.c linux-3.10.30/drivers/net/imq.c
---- linux-3.10.30.org/drivers/net/imq.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.30/drivers/net/imq.c    2014-02-14 20:29:05.379402305 +0100
-@@ -0,0 +1,1001 @@
-+/*
-+ *             Pseudo-driver for the intermediate queue device.
-+ *
-+ *             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.
-+ *
-+ * Authors:    Patrick McHardy, <kaber@trash.net>
-+ *
-+ *            The first version was written by Martin Devera, <devik@cdi.cz>
-+ *
-+ * Credits:    Jan Rafaj <imq2t@cedric.vabo.cz>
-+ *              - Update patch to 2.4.21
-+ *             Sebastian Strollo <sstrollo@nortelnetworks.com>
-+ *              - Fix "Dead-loop on netdevice imq"-issue
-+ *             Marcel Sebek <sebek64@post.cz>
-+ *              - Update to 2.6.2-rc1
-+ *
-+ *           After some time of inactivity there is a group taking care
-+ *           of IMQ again: http://www.linuximq.net
-+ *
-+ *
-+ *           2004/06/30 - New version of IMQ patch to kernels <=2.6.7
-+ *             including the following changes:
-+ *
-+ *           - Correction of ipv6 support "+"s issue (Hasso Tepper)
-+ *           - Correction of imq_init_devs() issue that resulted in
-+ *           kernel OOPS unloading IMQ as module (Norbert Buchmuller)
-+ *           - Addition of functionality to choose number of IMQ devices
-+ *           during kernel config (Andre Correa)
-+ *           - Addition of functionality to choose how IMQ hooks on
-+ *           PRE and POSTROUTING (after or before NAT) (Andre Correa)
-+ *           - Cosmetic corrections (Norbert Buchmuller) (Andre Correa)
-+ *
-+ *
-+ *             2005/12/16 - IMQ versions between 2.6.7 and 2.6.13 were
-+ *             released with almost no problems. 2.6.14-x was released
-+ *             with some important changes: nfcache was removed; After
-+ *             some weeks of trouble we figured out that some IMQ fields
-+ *             in skb were missing in skbuff.c - skb_clone and copy_skb_header.
-+ *             These functions are correctly patched by this new patch version.
-+ *
-+ *             Thanks for all who helped to figure out all the problems with
-+ *             2.6.14.x: Patrick McHardy, Rune Kock, VeNoMouS, Max CtRiX,
-+ *             Kevin Shanahan, Richard Lucassen, Valery Dachev (hopefully
-+ *             I didn't forget anybody). I apologize again for my lack of time.
-+ *
-+ *
-+ *             2008/06/17 - 2.6.25 - Changed imq.c to use qdisc_run() instead
-+ *             of qdisc_restart() and moved qdisc_run() to tasklet to avoid
-+ *             recursive locking. New initialization routines to fix 'rmmod' not
-+ *             working anymore. Used code from ifb.c. (Jussi Kivilinna)
-+ *
-+ *             2008/08/06 - 2.6.26 - (JK)
-+ *              - Replaced tasklet with 'netif_schedule()'.
-+ *              - Cleaned up and added comments for imq_nf_queue().
-+ *
-+ *             2009/04/12
-+ *              - Add skb_save_cb/skb_restore_cb helper functions for backuping
-+ *                control buffer. This is needed because qdisc-layer on kernels
-+ *                2.6.27 and newer overwrite control buffer. (Jussi Kivilinna)
-+ *              - Add better locking for IMQ device. Hopefully this will solve
-+ *                SMP issues. (Jussi Kivilinna)
-+ *              - Port to 2.6.27
-+ *              - Port to 2.6.28
-+ *              - Port to 2.6.29 + fix rmmod not working
-+ *
-+ *             2009/04/20 - (Jussi Kivilinna)
-+ *              - Use netdevice feature flags to avoid extra packet handling
-+ *                by core networking layer and possibly increase performance.
-+ *
-+ *             2009/09/26 - (Jussi Kivilinna)
-+ *              - Add imq_nf_reinject_lockless to fix deadlock with
-+ *                imq_nf_queue/imq_nf_reinject.
-+ *
-+ *             2009/12/08 - (Jussi Kivilinna)
-+ *              - Port to 2.6.32
-+ *              - Add check for skb->nf_queue_entry==NULL in imq_dev_xmit()
-+ *              - Also add better error checking for skb->nf_queue_entry usage
-+ *
-+ *             2010/02/25 - (Jussi Kivilinna)
-+ *              - Port to 2.6.33
-+ *
-+ *             2010/08/15 - (Jussi Kivilinna)
-+ *              - Port to 2.6.35
-+ *              - Simplify hook registration by using nf_register_hooks.
-+ *              - nf_reinject doesn't need spinlock around it, therefore remove
-+ *                imq_nf_reinject function. Other nf_reinject users protect
-+ *                their own data with spinlock. With IMQ however all data is
-+ *                needed is stored per skbuff, so no locking is needed.
-+ *              - Changed IMQ to use 'separate' NF_IMQ_QUEUE instead of
-+ *                NF_QUEUE, this allows working coexistance of IMQ and other
-+ *                NF_QUEUE users.
-+ *              - Make IMQ multi-queue. Number of IMQ device queues can be
-+ *                increased with 'numqueues' module parameters. Default number
-+ *                of queues is 1, in other words by default IMQ works as
-+ *                single-queue device. Multi-queue selection is based on
-+ *                IFB multi-queue patch by Changli Gao <xiaosuo@gmail.com>.
-+ *
-+ *             2011/03/18 - (Jussi Kivilinna)
-+ *              - Port to 2.6.38
-+ *
-+ *             2011/07/12 - (syoder89@gmail.com)
-+ *              - Crash fix that happens when the receiving interface has more
-+ *                than one queue (add missing skb_set_queue_mapping in
-+ *                imq_select_queue).
-+ *
-+ *             2011/07/26 - (Jussi Kivilinna)
-+ *              - Add queue mapping checks for packets exiting IMQ.
-+ *              - Port to 3.0
-+ *
-+ *             2011/08/16 - (Jussi Kivilinna)
-+ *              - Clear IFF_TX_SKB_SHARING flag that was added for linux 3.0.2
-+ *
-+ *             2011/11/03 - Germano Michel <germanomichel@gmail.com>
-+ *              - Fix IMQ for net namespaces
-+ *
-+ *             2011/11/04 - Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
-+ *              - Port to 3.1
-+ *              - Clean-up, move 'get imq device pointer by imqX name' to
-+ *                separate function from imq_nf_queue().
-+ *
-+ *             2012/01/05 - Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
-+ *              - Port to 3.2
-+ *
-+ *             2012/03/19 - Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
-+ *              - Port to 3.3
-+ *
-+ *             2012/12/12 - Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
-+ *              - Port to 3.7
-+ *              - Fix checkpatch.pl warnings
-+ *
-+ *             2013/09/10 - Jussi Kivilinna <jussi.kivilinna@iki.fi>
-+ *              - Fixed GSO handling for 3.10, see imq_nf_queue() for comments.
-+ *              - Don't copy skb->cb_next when copying or cloning skbuffs.
-+ *
-+ *           Also, many thanks to pablo Sebastian Greco for making the initial
-+ *           patch and to those who helped the testing.
-+ *
-+ *             More info at: http://www.linuximq.net/ (Andre Correa)
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/moduleparam.h>
-+#include <linux/list.h>
-+#include <linux/skbuff.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/if_arp.h>
-+#include <linux/netfilter.h>
-+#include <linux/netfilter_ipv4.h>
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      #include <linux/netfilter_ipv6.h>
-+#endif
-+#include <linux/imq.h>
-+#include <net/pkt_sched.h>
-+#include <net/netfilter/nf_queue.h>
-+#include <net/sock.h>
-+#include <linux/ip.h>
-+#include <linux/ipv6.h>
-+#include <linux/if_vlan.h>
-+#include <linux/if_pppox.h>
-+#include <net/ip.h>
-+#include <net/ipv6.h>
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num);
-+
-+static nf_hookfn imq_nf_hook;
-+
-+static struct nf_hook_ops imq_ops[] = {
-+      {
-+      /* imq_ingress_ipv4 */
-+              .hook           = imq_nf_hook,
-+              .owner          = THIS_MODULE,
-+              .pf             = PF_INET,
-+              .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+              .priority       = NF_IP_PRI_MANGLE + 1,
-+#else
-+              .priority       = NF_IP_PRI_NAT_DST + 1,
-+#endif
-+      },
-+      {
-+      /* imq_egress_ipv4 */
-+              .hook           = imq_nf_hook,
-+              .owner          = THIS_MODULE,
-+              .pf             = PF_INET,
-+              .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+              .priority       = NF_IP_PRI_LAST,
-+#else
-+              .priority       = NF_IP_PRI_NAT_SRC - 1,
-+#endif
-+      },
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      {
-+      /* imq_ingress_ipv6 */
-+              .hook           = imq_nf_hook,
-+              .owner          = THIS_MODULE,
-+              .pf             = PF_INET6,
-+              .hooknum        = NF_INET_PRE_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+              .priority       = NF_IP6_PRI_MANGLE + 1,
-+#else
-+              .priority       = NF_IP6_PRI_NAT_DST + 1,
-+#endif
-+      },
-+      {
-+      /* imq_egress_ipv6 */
-+              .hook           = imq_nf_hook,
-+              .owner          = THIS_MODULE,
-+              .pf             = PF_INET6,
-+              .hooknum        = NF_INET_POST_ROUTING,
-+#if defined(CONFIG_IMQ_BEHAVIOR_AA) || defined(CONFIG_IMQ_BEHAVIOR_BA)
-+              .priority       = NF_IP6_PRI_LAST,
-+#else
-+              .priority       = NF_IP6_PRI_NAT_SRC - 1,
-+#endif
-+      },
-+#endif
-+};
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+static int numdevs = CONFIG_IMQ_NUM_DEVS;
-+#else
-+static int numdevs = IMQ_MAX_DEVS;
-+#endif
-+
-+static struct net_device *imq_devs_cache[IMQ_MAX_DEVS];
-+
-+#define IMQ_MAX_QUEUES 32
-+static int numqueues = 1;
-+static u32 imq_hashrnd;
-+
-+static inline __be16 pppoe_proto(const struct sk_buff *skb)
-+{
-+      return *((__be16 *)(skb_mac_header(skb) + ETH_HLEN +
-+                      sizeof(struct pppoe_hdr)));
-+}
-+
-+static u16 imq_hash(struct net_device *dev, struct sk_buff *skb)
-+{
-+      unsigned int pull_len;
-+      u16 protocol = skb->protocol;
-+      u32 addr1, addr2;
-+      u32 hash, ihl = 0;
-+      union {
-+              u16 in16[2];
-+              u32 in32;
-+      } ports;
-+      u8 ip_proto;
-+
-+      pull_len = 0;
-+
-+recheck:
-+      switch (protocol) {
-+      case htons(ETH_P_8021Q): {
-+              if (unlikely(skb_pull(skb, VLAN_HLEN) == NULL))
-+                      goto other;
-+
-+              pull_len += VLAN_HLEN;
-+              skb->network_header += VLAN_HLEN;
-+
-+              protocol = vlan_eth_hdr(skb)->h_vlan_encapsulated_proto;
-+              goto recheck;
-+      }
-+
-+      case htons(ETH_P_PPP_SES): {
-+              if (unlikely(skb_pull(skb, PPPOE_SES_HLEN) == NULL))
-+                      goto other;
-+
-+              pull_len += PPPOE_SES_HLEN;
-+              skb->network_header += PPPOE_SES_HLEN;
-+
-+              protocol = pppoe_proto(skb);
-+              goto recheck;
-+      }
-+
-+      case htons(ETH_P_IP): {
-+              const struct iphdr *iph = ip_hdr(skb);
-+
-+              if (unlikely(!pskb_may_pull(skb, sizeof(struct iphdr))))
-+                      goto other;
-+
-+              addr1 = iph->daddr;
-+              addr2 = iph->saddr;
-+
-+              ip_proto = !(ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) ?
-+                               iph->protocol : 0;
-+              ihl = ip_hdrlen(skb);
-+
-+              break;
-+      }
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      case htons(ETH_P_IPV6): {
-+              const struct ipv6hdr *iph = ipv6_hdr(skb);
-+              __be16 fo = 0;
-+
-+              if (unlikely(!pskb_may_pull(skb, sizeof(struct ipv6hdr))))
-+                      goto other;
-+
-+              addr1 = iph->daddr.s6_addr32[3];
-+              addr2 = iph->saddr.s6_addr32[3];
-+              ihl = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &ip_proto,
-+                                     &fo);
-+              if (unlikely(ihl < 0))
-+                      goto other;
-+
-+              break;
-+      }
-+#endif
-+      default:
-+other:
-+              if (pull_len != 0) {
-+                      skb_push(skb, pull_len);
-+                      skb->network_header -= pull_len;
-+              }
-+
-+              return (u16)(ntohs(protocol) % dev->real_num_tx_queues);
-+      }
-+
-+      if (addr1 > addr2)
-+              swap(addr1, addr2);
-+
-+      switch (ip_proto) {
-+      case IPPROTO_TCP:
-+      case IPPROTO_UDP:
-+      case IPPROTO_DCCP:
-+      case IPPROTO_ESP:
-+      case IPPROTO_AH:
-+      case IPPROTO_SCTP:
-+      case IPPROTO_UDPLITE: {
-+              if (likely(skb_copy_bits(skb, ihl, &ports.in32, 4) >= 0)) {
-+                      if (ports.in16[0] > ports.in16[1])
-+                              swap(ports.in16[0], ports.in16[1]);
-+                      break;
-+              }
-+              /* fall-through */
-+      }
-+      default:
-+              ports.in32 = 0;
-+              break;
-+      }
-+
-+      if (pull_len != 0) {
-+              skb_push(skb, pull_len);
-+              skb->network_header -= pull_len;
-+      }
-+
-+      hash = jhash_3words(addr1, addr2, ports.in32, imq_hashrnd ^ ip_proto);
-+
-+      return (u16)(((u64)hash * dev->real_num_tx_queues) >> 32);
-+}
-+
-+static inline bool sk_tx_queue_recorded(struct sock *sk)
-+{
-+      return (sk_tx_queue_get(sk) >= 0);
-+}
-+
-+static struct netdev_queue *imq_select_queue(struct net_device *dev,
-+                                              struct sk_buff *skb)
-+{
-+      u16 queue_index = 0;
-+      u32 hash;
-+
-+      if (likely(dev->real_num_tx_queues == 1))
-+              goto out;
-+
-+      /* IMQ can be receiving ingress or engress packets. */
-+
-+      /* Check first for if rx_queue is set */
-+      if (skb_rx_queue_recorded(skb)) {
-+              queue_index = skb_get_rx_queue(skb);
-+              goto out;
-+      }
-+
-+      /* Check if socket has tx_queue set */
-+      if (sk_tx_queue_recorded(skb->sk)) {
-+              queue_index = sk_tx_queue_get(skb->sk);
-+              goto out;
-+      }
-+
-+      /* Try use socket hash */
-+      if (skb->sk && skb->sk->sk_hash) {
-+              hash = skb->sk->sk_hash;
-+              queue_index =
-+                      (u16)(((u64)hash * dev->real_num_tx_queues) >> 32);
-+              goto out;
-+      }
-+
-+      /* Generate hash from packet data */
-+      queue_index = imq_hash(dev, skb);
-+
-+out:
-+      if (unlikely(queue_index >= dev->real_num_tx_queues))
-+              queue_index = (u16)((u32)queue_index % dev->real_num_tx_queues);
-+
-+      skb_set_queue_mapping(skb, queue_index);
-+      return netdev_get_tx_queue(dev, queue_index);
-+}
-+
-+static struct net_device_stats *imq_get_stats(struct net_device *dev)
-+{
-+      return &dev->stats;
-+}
-+
-+/* called for packets kfree'd in qdiscs at places other than enqueue */
-+static void imq_skb_destructor(struct sk_buff *skb)
-+{
-+      struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+      skb->nf_queue_entry = NULL;
-+
-+      if (entry) {
-+              nf_queue_entry_release_refs(entry);
-+              kfree(entry);
-+      }
-+
-+      skb_restore_cb(skb); /* kfree backup */
-+}
-+
-+static void imq_done_check_queue_mapping(struct sk_buff *skb,
-+                                       struct net_device *dev)
-+{
-+      unsigned int queue_index;
-+
-+      /* Don't let queue_mapping be left too large after exiting IMQ */
-+      if (likely(skb->dev != dev && skb->dev != NULL)) {
-+              queue_index = skb_get_queue_mapping(skb);
-+              if (unlikely(queue_index >= skb->dev->real_num_tx_queues)) {
-+                      queue_index = (u16)((u32)queue_index %
-+                                              skb->dev->real_num_tx_queues);
-+                      skb_set_queue_mapping(skb, queue_index);
-+              }
-+      } else {
-+              /* skb->dev was IMQ device itself or NULL, be on safe side and
-+               * just clear queue mapping.
-+               */
-+              skb_set_queue_mapping(skb, 0);
-+      }
-+}
-+
-+static netdev_tx_t imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      struct nf_queue_entry *entry = skb->nf_queue_entry;
-+
-+      skb->nf_queue_entry = NULL;
-+      dev->trans_start = jiffies;
-+
-+      dev->stats.tx_bytes += skb->len;
-+      dev->stats.tx_packets++;
-+
-+      if (unlikely(entry == NULL)) {
-+              /* We don't know what is going on here.. packet is queued for
-+               * imq device, but (probably) not by us.
-+               *
-+               * If this packet was not send here by imq_nf_queue(), then
-+               * skb_save_cb() was not used and skb_free() should not show:
-+               *   WARNING: IMQ: kfree_skb: skb->cb_next:..
-+               * and/or
-+               *   WARNING: IMQ: kfree_skb: skb->nf_queue_entry...
-+               *
-+               * However if this message is shown, then IMQ is somehow broken
-+               * and you should report this to linuximq.net.
-+               */
-+
-+              /* imq_dev_xmit is black hole that eats all packets, report that
-+               * we eat this packet happily and increase dropped counters.
-+               */
-+
-+              dev->stats.tx_dropped++;
-+              dev_kfree_skb(skb);
-+
-+              return NETDEV_TX_OK;
-+      }
-+
-+      skb_restore_cb(skb); /* restore skb->cb */
-+
-+      skb->imq_flags = 0;
-+      skb->destructor = NULL;
-+
-+      imq_done_check_queue_mapping(skb, dev);
-+
-+      nf_reinject(entry, NF_ACCEPT);
-+
-+      return NETDEV_TX_OK;
-+}
-+
-+static struct net_device *get_imq_device_by_index(int index)
-+{
-+      struct net_device *dev = NULL;
-+      struct net *net;
-+      char buf[8];
-+
-+      /* get device by name and cache result */
-+      snprintf(buf, sizeof(buf), "imq%d", index);
-+
-+      /* Search device from all namespaces. */
-+      for_each_net(net) {
-+              dev = dev_get_by_name(net, buf);
-+              if (dev)
-+                      break;
-+      }
-+
-+      if (WARN_ON_ONCE(dev == NULL)) {
-+              /* IMQ device not found. Exotic config? */
-+              return ERR_PTR(-ENODEV);
-+      }
-+
-+      imq_devs_cache[index] = dev;
-+      dev_put(dev);
-+
-+      return dev;
-+}
-+
-+static struct nf_queue_entry *nf_queue_entry_dup(struct nf_queue_entry *e)
-+{
-+      struct nf_queue_entry *entry = kmemdup(e, e->size, GFP_ATOMIC);
-+      if (entry) {
-+              if (nf_queue_entry_get_refs(entry))
-+                      return entry;
-+              kfree(entry);
-+      }
-+      return NULL;
-+}
-+
-+#ifdef CONFIG_BRIDGE_NETFILTER
-+/* When called from bridge netfilter, skb->data must point to MAC header
-+ * before calling skb_gso_segment(). Else, original MAC header is lost
-+ * and segmented skbs will be sent to wrong destination.
-+ */
-+static void nf_bridge_adjust_skb_data(struct sk_buff *skb)
-+{
-+      if (skb->nf_bridge)
-+              __skb_push(skb, skb->network_header - skb->mac_header);
-+}
-+
-+static void nf_bridge_adjust_segmented_data(struct sk_buff *skb)
-+{
-+      if (skb->nf_bridge)
-+              __skb_pull(skb, skb->network_header - skb->mac_header);
-+}
-+#else
-+#define nf_bridge_adjust_skb_data(s) do {} while (0)
-+#define nf_bridge_adjust_segmented_data(s) do {} while (0)
-+#endif
-+
-+static void free_entry(struct nf_queue_entry *entry)
-+{
-+      nf_queue_entry_release_refs(entry);
-+      kfree(entry);
-+}
-+
-+static int __imq_nf_queue(struct nf_queue_entry *entry, struct net_device *dev);
-+
-+static int __imq_nf_queue_gso(struct nf_queue_entry *entry,
-+                            struct net_device *dev, struct sk_buff *skb)
-+{
-+      int ret = -ENOMEM;
-+      struct nf_queue_entry *entry_seg;
-+
-+      nf_bridge_adjust_segmented_data(skb);
-+
-+      if (skb->next == NULL) { /* last packet, no need to copy entry */
-+              struct sk_buff *gso_skb = entry->skb;
-+              entry->skb = skb;
-+              ret = __imq_nf_queue(entry, dev);
-+              if (ret)
-+                      entry->skb = gso_skb;
-+              return ret;
-+      }
-+
-+      skb->next = NULL;
-+
-+      entry_seg = nf_queue_entry_dup(entry);
-+      if (entry_seg) {
-+              entry_seg->skb = skb;
-+              ret = __imq_nf_queue(entry_seg, dev);
-+              if (ret)
-+                      free_entry(entry_seg);
-+      }
-+      return ret;
-+}
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num)
-+{
-+      struct sk_buff *skb, *segs;
-+      struct net_device *dev;
-+      unsigned int queued;
-+      int index, retval, err;
-+
-+      index = entry->skb->imq_flags & IMQ_F_IFMASK;
-+      if (unlikely(index > numdevs - 1)) {
-+              if (net_ratelimit())
-+                      pr_warn("IMQ: invalid device specified, highest is %u\n",
-+                              numdevs - 1);
-+              retval = -EINVAL;
-+              goto out_no_dev;
-+      }
-+
-+      /* check for imq device by index from cache */
-+      dev = imq_devs_cache[index];
-+      if (unlikely(!dev)) {
-+              dev = get_imq_device_by_index(index);
-+              if (IS_ERR(dev)) {
-+                      retval = PTR_ERR(dev);
-+                      goto out_no_dev;
-+              }
-+      }
-+
-+      if (unlikely(!(dev->flags & IFF_UP))) {
-+              entry->skb->imq_flags = 0;
-+              retval = -ECANCELED;
-+              goto out_no_dev;
-+      }
-+
-+      if (!skb_is_gso(entry->skb))
-+              return __imq_nf_queue(entry, dev);
-+
-+      /* Since 3.10.x, GSO handling moved here as result of upstream commit
-+       * a5fedd43d5f6c94c71053a66e4c3d2e35f1731a2 (netfilter: move
-+       * skb_gso_segment into nfnetlink_queue module).
-+       *
-+       * Following code replicates the gso handling from
-+       * 'net/netfilter/nfnetlink_queue_core.c':nfqnl_enqueue_packet().
-+       */
-+
-+      skb = entry->skb;
-+
-+      switch (entry->pf) {
-+      case NFPROTO_IPV4:
-+              skb->protocol = htons(ETH_P_IP);
-+              break;
-+      case NFPROTO_IPV6:
-+              skb->protocol = htons(ETH_P_IPV6);
-+              break;
-+      }
-+
-+      nf_bridge_adjust_skb_data(skb);
-+      segs = skb_gso_segment(skb, 0);
-+      /* Does not use PTR_ERR to limit the number of error codes that can be
-+       * returned by nf_queue.  For instance, callers rely on -ECANCELED to
-+       * mean 'ignore this hook'.
-+       */
-+      err = -ENOBUFS;
-+      if (IS_ERR(segs))
-+              goto out_err;
-+      queued = 0;
-+      err = 0;
-+      do {
-+              struct sk_buff *nskb = segs->next;
-+              if (nskb && nskb->next)
-+                      nskb->cb_next = NULL;
-+              if (err == 0)
-+                      err = __imq_nf_queue_gso(entry, dev, segs);
-+              if (err == 0)
-+                      queued++;
-+              else
-+                      kfree_skb(segs);
-+              segs = nskb;
-+      } while (segs);
-+
-+      if (queued) {
-+              if (err) /* some segments are already queued */
-+                      free_entry(entry);
-+              kfree_skb(skb);
-+              return 0;
-+      }
-+
-+out_err:
-+      nf_bridge_adjust_segmented_data(skb);
-+      retval = err;
-+out_no_dev:
-+      return retval;
-+}
-+
-+static int __imq_nf_queue(struct nf_queue_entry *entry, struct net_device *dev)
-+{
-+      struct sk_buff *skb_orig, *skb, *skb_shared;
-+      struct Qdisc *q;
-+      struct netdev_queue *txq;
-+      spinlock_t *root_lock;
-+      int users;
-+      int retval = -EINVAL;
-+      unsigned int orig_queue_index;
-+
-+      dev->last_rx = jiffies;
-+
-+      skb = entry->skb;
-+      skb_orig = NULL;
-+
-+      /* skb has owner? => make clone */
-+      if (unlikely(skb->destructor)) {
-+              skb_orig = skb;
-+              skb = skb_clone(skb, GFP_ATOMIC);
-+              if (unlikely(!skb)) {
-+                      retval = -ENOMEM;
-+                      goto out;
-+              }
-+              skb->cb_next = NULL;
-+              entry->skb = skb;
-+      }
-+
-+      skb->nf_queue_entry = entry;
-+
-+      dev->stats.rx_bytes += skb->len;
-+      dev->stats.rx_packets++;
-+
-+      if (!skb->dev) {
-+              /* skb->dev == NULL causes problems, try the find cause. */
-+              if (net_ratelimit()) {
-+                      dev_warn(&dev->dev,
-+                               "received packet with skb->dev == NULL\n");
-+                      dump_stack();
-+              }
-+
-+              skb->dev = dev;
-+      }
-+
-+      /* Disables softirqs for lock below */
-+      rcu_read_lock_bh();
-+
-+      /* Multi-queue selection */
-+      orig_queue_index = skb_get_queue_mapping(skb);
-+      txq = imq_select_queue(dev, skb);
-+
-+      q = rcu_dereference(txq->qdisc);
-+      if (unlikely(!q->enqueue))
-+              goto packet_not_eaten_by_imq_dev;
-+
-+      root_lock = qdisc_lock(q);
-+      spin_lock(root_lock);
-+
-+      users = atomic_read(&skb->users);
-+
-+      skb_shared = skb_get(skb); /* increase reference count by one */
-+
-+      /* backup skb->cb, as qdisc layer will overwrite it */
-+      skb_save_cb(skb_shared);
-+      qdisc_enqueue_root(skb_shared, q); /* might kfree_skb */
-+
-+      if (likely(atomic_read(&skb_shared->users) == users + 1)) {
-+              kfree_skb(skb_shared); /* decrease reference count by one */
-+
-+              skb->destructor = &imq_skb_destructor;
-+
-+              /* cloned? */
-+              if (unlikely(skb_orig))
-+                      kfree_skb(skb_orig); /* free original */
-+
-+              spin_unlock(root_lock);
-+              rcu_read_unlock_bh();
-+
-+              /* schedule qdisc dequeue */
-+              __netif_schedule(q);
-+
-+              retval = 0;
-+              goto out;
-+      } else {
-+              skb_restore_cb(skb_shared); /* restore skb->cb */
-+              skb->nf_queue_entry = NULL;
-+              /*
-+               * qdisc dropped packet and decreased skb reference count of
-+               * skb, so we don't really want to and try refree as that would
-+               * actually destroy the skb.
-+               */
-+              spin_unlock(root_lock);
-+              goto packet_not_eaten_by_imq_dev;
-+      }
-+
-+packet_not_eaten_by_imq_dev:
-+      skb_set_queue_mapping(skb, orig_queue_index);
-+      rcu_read_unlock_bh();
-+
-+      /* cloned? restore original */
-+      if (unlikely(skb_orig)) {
-+              kfree_skb(skb);
-+              entry->skb = skb_orig;
-+      }
-+      retval = -1;
-+out:
-+      return retval;
-+}
-+
-+static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff *pskb,
-+                              const struct net_device *indev,
-+                              const struct net_device *outdev,
-+                              int (*okfn)(struct sk_buff *))
-+{
-+      return (pskb->imq_flags & IMQ_F_ENQUEUE) ? NF_IMQ_QUEUE : NF_ACCEPT;
-+}
-+
-+static int imq_close(struct net_device *dev)
-+{
-+      netif_stop_queue(dev);
-+      return 0;
-+}
-+
-+static int imq_open(struct net_device *dev)
-+{
-+      netif_start_queue(dev);
-+      return 0;
-+}
-+
-+static const struct net_device_ops imq_netdev_ops = {
-+      .ndo_open               = imq_open,
-+      .ndo_stop               = imq_close,
-+      .ndo_start_xmit         = imq_dev_xmit,
-+      .ndo_get_stats          = imq_get_stats,
-+};
-+
-+static void imq_setup(struct net_device *dev)
-+{
-+      dev->netdev_ops         = &imq_netdev_ops;
-+      dev->type               = ARPHRD_VOID;
-+      dev->mtu                = 16000; /* too small? */
-+      dev->tx_queue_len       = 11000; /* too big? */
-+      dev->flags              = IFF_NOARP;
-+      dev->features           = NETIF_F_SG | NETIF_F_FRAGLIST |
-+                                NETIF_F_GSO | NETIF_F_HW_CSUM |
-+                                NETIF_F_HIGHDMA;
-+      dev->priv_flags         &= ~(IFF_XMIT_DST_RELEASE |
-+                                   IFF_TX_SKB_SHARING);
-+}
-+
-+static int imq_validate(struct nlattr *tb[], struct nlattr *data[])
-+{
-+      int ret = 0;
-+
-+      if (tb[IFLA_ADDRESS]) {
-+              if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) {
-+                      ret = -EINVAL;
-+                      goto end;
-+              }
-+              if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) {
-+                      ret = -EADDRNOTAVAIL;
-+                      goto end;
-+              }
-+      }
-+      return 0;
-+end:
-+      pr_warn("IMQ: imq_validate failed (%d)\n", ret);
-+      return ret;
-+}
-+
-+static struct rtnl_link_ops imq_link_ops __read_mostly = {
-+      .kind           = "imq",
-+      .priv_size      = 0,
-+      .setup          = imq_setup,
-+      .validate       = imq_validate,
-+};
-+
-+static const struct nf_queue_handler imq_nfqh = {
-+      .outfn = imq_nf_queue,
-+};
-+
-+static int __init imq_init_hooks(void)
-+{
-+      int ret;
-+
-+      nf_register_queue_imq_handler(&imq_nfqh);
-+
-+      ret = nf_register_hooks(imq_ops, ARRAY_SIZE(imq_ops));
-+      if (ret < 0)
-+              nf_unregister_queue_imq_handler();
-+
-+      return ret;
-+}
-+
-+static int __init imq_init_one(int index)
-+{
-+      struct net_device *dev;
-+      int ret;
-+
-+      dev = alloc_netdev_mq(0, "imq%d", imq_setup, numqueues);
-+      if (!dev)
-+              return -ENOMEM;
-+
-+      ret = dev_alloc_name(dev, dev->name);
-+      if (ret < 0)
-+              goto fail;
-+
-+      dev->rtnl_link_ops = &imq_link_ops;
-+      ret = register_netdevice(dev);
-+      if (ret < 0)
-+              goto fail;
-+
-+      return 0;
-+fail:
-+      free_netdev(dev);
-+      return ret;
-+}
-+
-+static int __init imq_init_devs(void)
-+{
-+      int err, i;
-+
-+      if (numdevs < 1 || numdevs > IMQ_MAX_DEVS) {
-+              pr_err("IMQ: numdevs has to be betweed 1 and %u\n",
-+                     IMQ_MAX_DEVS);
-+              return -EINVAL;
-+      }
-+
-+      if (numqueues < 1 || numqueues > IMQ_MAX_QUEUES) {
-+              pr_err("IMQ: numqueues has to be betweed 1 and %u\n",
-+                     IMQ_MAX_QUEUES);
-+              return -EINVAL;
-+      }
-+
-+      get_random_bytes(&imq_hashrnd, sizeof(imq_hashrnd));
-+
-+      rtnl_lock();
-+      err = __rtnl_link_register(&imq_link_ops);
-+
-+      for (i = 0; i < numdevs && !err; i++)
-+              err = imq_init_one(i);
-+
-+      if (err) {
-+              __rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+      }
-+      rtnl_unlock();
-+
-+      return err;
-+}
-+
-+static int __init imq_init_module(void)
-+{
-+      int err;
-+
-+#if defined(CONFIG_IMQ_NUM_DEVS)
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS > 16);
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS < 2);
-+      BUILD_BUG_ON(CONFIG_IMQ_NUM_DEVS - 1 > IMQ_F_IFMASK);
-+#endif
-+
-+      err = imq_init_devs();
-+      if (err) {
-+              pr_err("IMQ: Error trying imq_init_devs(net)\n");
-+              return err;
-+      }
-+
-+      err = imq_init_hooks();
-+      if (err) {
-+              pr_err(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
-+              rtnl_link_unregister(&imq_link_ops);
-+              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+              return err;
-+      }
-+
-+      pr_info("IMQ driver loaded successfully. (numdevs = %d, numqueues = %d)\n",
-+              numdevs, numqueues);
-+
-+#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      pr_info("\tHooking IMQ before NAT on PREROUTING.\n");
-+#else
-+      pr_info("\tHooking IMQ after NAT on PREROUTING.\n");
-+#endif
-+#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      pr_info("\tHooking IMQ before NAT on POSTROUTING.\n");
-+#else
-+      pr_info("\tHooking IMQ after NAT on POSTROUTING.\n");
-+#endif
-+
-+      return 0;
-+}
-+
-+static void __exit imq_unhook(void)
-+{
-+      nf_unregister_hooks(imq_ops, ARRAY_SIZE(imq_ops));
-+      nf_unregister_queue_imq_handler();
-+}
-+
-+static void __exit imq_cleanup_devs(void)
-+{
-+      rtnl_link_unregister(&imq_link_ops);
-+      memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
-+}
-+
-+static void __exit imq_exit_module(void)
-+{
-+      imq_unhook();
-+      imq_cleanup_devs();
-+      pr_info("IMQ driver unloaded successfully.\n");
-+}
-+
-+module_init(imq_init_module);
-+module_exit(imq_exit_module);
-+
-+module_param(numdevs, int, 0);
-+module_param(numqueues, int, 0);
-+MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will be created)");
-+MODULE_PARM_DESC(numqueues, "number of queues per IMQ device");
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS_RTNL_LINK("imq");
-+
-diff -Naur linux-3.10.30.org/drivers/net/Kconfig linux-3.10.30/drivers/net/Kconfig
---- linux-3.10.30.org/drivers/net/Kconfig      2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/drivers/net/Kconfig  2014-02-14 20:29:05.379402305 +0100
-@@ -207,6 +207,125 @@
-       depends on RIONET
-       default "128"
-+config IMQ
-+      tristate "IMQ (intermediate queueing device) support"
-+      depends on NETDEVICES && NETFILTER
-+      ---help---
-+        The IMQ device(s) is used as placeholder for QoS queueing
-+        disciplines. Every packet entering/leaving the IP stack can be
-+        directed through the IMQ device where it's enqueued/dequeued to the
-+        attached qdisc. This allows you to treat network devices as classes
-+        and distribute bandwidth among them. Iptables is used to specify
-+        through which IMQ device, if any, packets travel.
-+
-+        More information at: http://www.linuximq.net/
-+
-+        To compile this driver as a module, choose M here: the module
-+        will be called imq.  If unsure, say N.
-+
-+choice
-+      prompt "IMQ behavior (PRE/POSTROUTING)"
-+      depends on IMQ
-+      default IMQ_BEHAVIOR_AB
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        IMQ can work in any of the following ways:
-+
-+            PREROUTING   |      POSTROUTING
-+        -----------------|-------------------
-+        #1  After NAT    |      After NAT
-+        #2  After NAT    |      Before NAT
-+        #3  Before NAT   |      After NAT
-+        #4  Before NAT   |      Before NAT
-+
-+        The default behavior is to hook before NAT on PREROUTING
-+        and after NAT on POSTROUTING (#3).
-+
-+        This settings are specially usefull when trying to use IMQ
-+        to shape NATed clients.
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AA
-+      bool "IMQ AA"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   After NAT
-+        POSTROUTING:  After NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AB
-+      bool "IMQ AB"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   After NAT
-+        POSTROUTING:  Before NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BA
-+      bool "IMQ BA"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   Before NAT
-+        POSTROUTING:  After NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BB
-+      bool "IMQ BB"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   Before NAT
-+        POSTROUTING:  Before NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+endchoice
-+
-+config IMQ_NUM_DEVS
-+      int "Number of IMQ devices"
-+      range 2 16
-+      depends on IMQ
-+      default "16"
-+      help
-+        This setting defines how many IMQ devices will be created.
-+
-+        The default value is 16.
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
- config TUN
-       tristate "Universal TUN/TAP device driver support"
-       select CRC32
-diff -Naur linux-3.10.30.org/drivers/net/Makefile linux-3.10.30/drivers/net/Makefile
---- linux-3.10.30.org/drivers/net/Makefile     2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/drivers/net/Makefile 2014-02-14 20:29:05.379402305 +0100
-@@ -9,6 +9,7 @@
- obj-$(CONFIG_DUMMY) += dummy.o
- obj-$(CONFIG_EQUALIZER) += eql.o
- obj-$(CONFIG_IFB) += ifb.o
-+obj-$(CONFIG_IMQ) += imq.o
- obj-$(CONFIG_MACVLAN) += macvlan.o
- obj-$(CONFIG_MACVTAP) += macvtap.o
- obj-$(CONFIG_MII) += mii.o
-diff -Naur linux-3.10.30.org/include/linux/imq.h linux-3.10.30/include/linux/imq.h
---- linux-3.10.30.org/include/linux/imq.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.30/include/linux/imq.h  2014-02-14 20:29:05.379402305 +0100
-@@ -0,0 +1,13 @@
-+#ifndef _IMQ_H
-+#define _IMQ_H
-+
-+/* IFMASK (16 device indexes, 0 to 15) and flag(s) fit in 5 bits */
-+#define IMQ_F_BITS    5
-+
-+#define IMQ_F_IFMASK  0x0f
-+#define IMQ_F_ENQUEUE 0x10
-+
-+#define IMQ_MAX_DEVS  (IMQ_F_IFMASK + 1)
-+
-+#endif /* _IMQ_H */
-+
-diff -Naur linux-3.10.30.org/include/linux/netfilter/xt_IMQ.h linux-3.10.30/include/linux/netfilter/xt_IMQ.h
---- linux-3.10.30.org/include/linux/netfilter/xt_IMQ.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.30/include/linux/netfilter/xt_IMQ.h     2014-02-14 20:29:05.379402305 +0100
-@@ -0,0 +1,9 @@
-+#ifndef _XT_IMQ_H
-+#define _XT_IMQ_H
-+
-+struct xt_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _XT_IMQ_H */
-+
-diff -Naur linux-3.10.30.org/include/linux/netfilter_ipv4/ipt_IMQ.h linux-3.10.30/include/linux/netfilter_ipv4/ipt_IMQ.h
---- linux-3.10.30.org/include/linux/netfilter_ipv4/ipt_IMQ.h   1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.30/include/linux/netfilter_ipv4/ipt_IMQ.h       2014-02-14 20:29:05.379402305 +0100
-@@ -0,0 +1,10 @@
-+#ifndef _IPT_IMQ_H
-+#define _IPT_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ipt_imq_info xt_imq_info
-+
-+#endif /* _IPT_IMQ_H */
-+
-diff -Naur linux-3.10.30.org/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-3.10.30/include/linux/netfilter_ipv6/ip6t_IMQ.h
---- linux-3.10.30.org/include/linux/netfilter_ipv6/ip6t_IMQ.h  1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.30/include/linux/netfilter_ipv6/ip6t_IMQ.h      2014-02-14 20:29:05.379402305 +0100
-@@ -0,0 +1,10 @@
-+#ifndef _IP6T_IMQ_H
-+#define _IP6T_IMQ_H
-+
-+/* Backwards compatibility for old userspace */
-+#include <linux/netfilter/xt_IMQ.h>
-+
-+#define ip6t_imq_info xt_imq_info
-+
-+#endif /* _IP6T_IMQ_H */
-+
-diff -Naur linux-3.10.30.org/include/linux/skbuff.h linux-3.10.30/include/linux/skbuff.h
---- linux-3.10.30.org/include/linux/skbuff.h   2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/include/linux/skbuff.h       2014-02-14 20:29:05.379402305 +0100
-@@ -33,6 +33,9 @@
- #include <linux/dma-mapping.h>
- #include <linux/netdev_features.h>
- #include <net/flow_keys.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- /* Don't change this without changing skb_csum_unnecessary! */
- #define CHECKSUM_NONE 0
-@@ -414,6 +417,9 @@
-        * first. This is owned by whoever has the skb queued ATM.
-        */
-       char                    cb[48] __aligned(8);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      void                    *cb_next;
-+#endif
-       unsigned long           _skb_refdst;
- #ifdef CONFIG_XFRM
-@@ -449,6 +455,9 @@
- #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
-       struct nf_conntrack     *nfct;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      struct nf_queue_entry   *nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       struct nf_bridge_info   *nf_bridge;
- #endif
-@@ -487,7 +496,9 @@
-       __u8                    encapsulation:1;
-       /* 7/9 bit hole (depending on ndisc_nodetype presence) */
-       kmemcheck_bitfield_end(flags2);
--
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      __u8                    imq_flags:IMQ_F_BITS;
-+#endif
- #ifdef CONFIG_NET_DMA
-       dma_cookie_t            dma_cookie;
- #endif
-@@ -616,7 +627,10 @@
- {
-       return (struct rtable *)skb_dst(skb);
- }
--
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern int skb_save_cb(struct sk_buff *skb);
-+extern int skb_restore_cb(struct sk_buff *skb);
-+#endif
- extern void kfree_skb(struct sk_buff *skb);
- extern void kfree_skb_list(struct sk_buff *segs);
- extern void skb_tx_error(struct sk_buff *skb);
-@@ -2735,6 +2749,10 @@
-       nf_conntrack_get(src->nfct);
-       dst->nfctinfo = src->nfctinfo;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      dst->imq_flags = src->imq_flags;
-+      dst->nf_queue_entry = src->nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       dst->nf_bridge  = src->nf_bridge;
-       nf_bridge_get(src->nf_bridge);
-diff -Naur linux-3.10.30.org/include/net/netfilter/nf_queue.h linux-3.10.30/include/net/netfilter/nf_queue.h
---- linux-3.10.30.org/include/net/netfilter/nf_queue.h 2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/include/net/netfilter/nf_queue.h     2014-02-14 20:29:05.382736249 +0100
-@@ -29,6 +29,12 @@
- void nf_register_queue_handler(const struct nf_queue_handler *qh);
- void nf_unregister_queue_handler(void);
- extern void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
-+extern void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
-+
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern void nf_register_queue_imq_handler(const struct nf_queue_handler *qh);
-+extern void nf_unregister_queue_imq_handler(void);
-+#endif
- bool nf_queue_entry_get_refs(struct nf_queue_entry *entry);
- void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
-diff -Naur linux-3.10.30.org/include/uapi/linux/netfilter.h linux-3.10.30/include/uapi/linux/netfilter.h
---- linux-3.10.30.org/include/uapi/linux/netfilter.h   2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/include/uapi/linux/netfilter.h       2014-02-14 20:29:05.382736249 +0100
-@@ -13,7 +13,8 @@
- #define NF_QUEUE 3
- #define NF_REPEAT 4
- #define NF_STOP 5
--#define NF_MAX_VERDICT NF_STOP
-+#define NF_IMQ_QUEUE 6
-+#define NF_MAX_VERDICT NF_IMQ_QUEUE
- /* we overload the higher bits for encoding auxiliary data such as the queue
-  * number or errno values. Not nice, but better than additional function
-diff -Naur linux-3.10.30.org/net/core/dev.c linux-3.10.30/net/core/dev.c
---- linux-3.10.30.org/net/core/dev.c   2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/net/core/dev.c       2014-02-14 20:29:05.382736249 +0100
-@@ -129,6 +129,9 @@
- #include <linux/inetdevice.h>
- #include <linux/cpu_rmap.h>
- #include <linux/static_key.h>
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+#include <linux/imq.h>
-+#endif
- #include "net-sysfs.h"
-@@ -2573,7 +2576,12 @@
-                       }
-               }
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+              if (!list_empty(&ptype_all) &&
-+                                      !(skb->imq_flags & IMQ_F_ENQUEUE))
-+#else
-               if (!list_empty(&ptype_all))
-+#endif
-                       dev_queue_xmit_nit(skb, dev);
-               skb_len = skb->len;
-diff -Naur linux-3.10.30.org/net/core/skbuff.c linux-3.10.30/net/core/skbuff.c
---- linux-3.10.30.org/net/core/skbuff.c        2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/net/core/skbuff.c    2014-02-14 21:47:17.286039229 +0100
-@@ -73,6 +73,9 @@
- struct kmem_cache *skbuff_head_cache __read_mostly;
- static struct kmem_cache *skbuff_fclone_cache __read_mostly;
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static struct kmem_cache *skbuff_cb_store_cache __read_mostly;
-+#endif
- /**
-  *    skb_panic - private function for out-of-line support
-@@ -552,6 +555,29 @@
-               WARN_ON(in_irq());
-               skb->destructor(skb);
-       }
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      /*
-+       * This should not happen. When it does, avoid memleak by restoring
-+       * the chain of cb-backups.
-+       */
-+      while (skb->cb_next != NULL) {
-+              if (net_ratelimit())
-+                      pr_warn("IMQ: kfree_skb: skb->cb_next: %08x\n",
-+                              (unsigned int)skb->cb_next);
-+
-+              skb_restore_cb(skb);
-+      }
-+      /*
-+       * This should not happen either, nf_queue_entry is nullified in
-+       * imq_dev_xmit(). If we have non-NULL nf_queue_entry then we are
-+       * leaking entry pointers, maybe memory. We don't know if this is
-+       * pointer to already freed memory, or should this be freed.
-+       * If this happens we need to add refcounting, etc for nf_queue_entry.
-+       */
-+      if (skb->nf_queue_entry && net_ratelimit())
-+              pr_warn("%s\n", "IMQ: kfree_skb: skb->nf_queue_entry != NULL");
-+#endif
-+
- #if IS_ENABLED(CONFIG_NF_CONNTRACK)
-       nf_conntrack_put(skb->nfct);
- #endif
-@@ -683,6 +709,10 @@
-       new->sp                 = secpath_get(old->sp);
- #endif
-       memcpy(new->cb, old->cb, sizeof(old->cb));
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      new->cb_next = NULL;
-+      /*skb_copy_stored_cb(new, old);*/
-+#endif
-       new->csum               = old->csum;
-       new->local_df           = old->local_df;
-       new->pkt_type           = old->pkt_type;
-@@ -3050,6 +3080,15 @@
- }
- EXPORT_SYMBOL_GPL(skb_gro_receive);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+/* Control buffer save/restore for IMQ devices */
-+struct skb_cb_table {
-+      char                    cb[48] __aligned(8);
-+      void                    *cb_next;
-+      atomic_t                refcnt;
-+};
-+#endif
-+
- void __init skb_init(void)
- {
-       skbuff_head_cache = kmem_cache_create("skbuff_head_cache",
-@@ -3063,6 +3102,13 @@
-                                               0,
-                                               SLAB_HWCACHE_ALIGN|SLAB_PANIC,
-                                               NULL);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      skbuff_cb_store_cache = kmem_cache_create("skbuff_cb_store_cache",
-+                                                sizeof(struct skb_cb_table),
-+                                                0,
-+                                                SLAB_HWCACHE_ALIGN|SLAB_PANIC,
-+                                                NULL);
-+#endif
- }
- /**
-@@ -3348,6 +3394,76 @@
- EXPORT_SYMBOL_GPL(skb_complete_wifi_ack);
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static DEFINE_SPINLOCK(skb_cb_store_lock);
-+
-+int skb_save_cb(struct sk_buff *skb)
-+{
-+      struct skb_cb_table *next;
-+
-+      next = kmem_cache_alloc(skbuff_cb_store_cache, GFP_ATOMIC);
-+      if (!next)
-+              return -ENOMEM;
-+
-+      BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+      memcpy(next->cb, skb->cb, sizeof(skb->cb));
-+      next->cb_next = skb->cb_next;
-+
-+      atomic_set(&next->refcnt, 1);
-+
-+      skb->cb_next = next;
-+      return 0;
-+}
-+EXPORT_SYMBOL(skb_save_cb);
-+
-+int skb_restore_cb(struct sk_buff *skb)
-+{
-+      struct skb_cb_table *next;
-+
-+      if (!skb->cb_next)
-+              return 0;
-+
-+      next = skb->cb_next;
-+
-+      BUILD_BUG_ON(sizeof(skb->cb) != sizeof(next->cb));
-+
-+      memcpy(skb->cb, next->cb, sizeof(skb->cb));
-+      skb->cb_next = next->cb_next;
-+
-+      spin_lock(&skb_cb_store_lock);
-+
-+      if (atomic_dec_and_test(&next->refcnt))
-+              kmem_cache_free(skbuff_cb_store_cache, next);
-+
-+      spin_unlock(&skb_cb_store_lock);
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL(skb_restore_cb);
-+
-+static void skb_copy_stored_cb(struct sk_buff *new, const struct sk_buff *__old)
-+{
-+      struct skb_cb_table *next;
-+      struct sk_buff *old;
-+
-+      if (!__old->cb_next) {
-+              new->cb_next = NULL;
-+              return;
-+      }
-+
-+      spin_lock(&skb_cb_store_lock);
-+
-+      old = (struct sk_buff *)__old;
-+
-+      next = old->cb_next;
-+      atomic_inc(&next->refcnt);
-+      new->cb_next = next;
-+
-+      spin_unlock(&skb_cb_store_lock);
-+}
-+#endif
-+
- /**
-  * skb_partial_csum_set - set up and verify partial csum values for packet
-  * @skb: the skb to set
-diff -Naur linux-3.10.30.org/net/ipv6/ip6_output.c linux-3.10.30/net/ipv6/ip6_output.c
---- linux-3.10.30.org/net/ipv6/ip6_output.c    2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/net/ipv6/ip6_output.c        2014-02-14 20:29:05.392738001 +0100
-@@ -89,9 +89,6 @@
-       struct in6_addr *nexthop;
-       int ret;
--      skb->protocol = htons(ETH_P_IPV6);
--      skb->dev = dev;
--
-       if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) {
-               struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
-@@ -168,6 +165,13 @@
-               return 0;
-       }
-+      /*
-+       * IMQ-patch: moved setting skb->dev and skb->protocol from
-+       * ip6_finish_output2 to fix crashing at netif_skb_features().
-+       */
-+      skb->protocol = htons(ETH_P_IPV6);
-+      skb->dev = dev;
-+
-       return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, skb, NULL, dev,
-                           ip6_finish_output,
-                           !(IP6CB(skb)->flags & IP6SKB_REROUTED));
-diff -Naur linux-3.10.30.org/net/ipv6/ip6_output.c.orig linux-3.10.30/net/ipv6/ip6_output.c.orig
---- linux-3.10.30.org/net/ipv6/ip6_output.c.orig       1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.30/net/ipv6/ip6_output.c.orig   2014-02-14 20:29:05.392738001 +0100
-@@ -0,0 +1,1580 @@
-+/*
-+ *    IPv6 output functions
-+ *    Linux INET6 implementation
-+ *
-+ *    Authors:
-+ *    Pedro Roque             <roque@di.fc.ul.pt>
-+ *
-+ *    Based on linux/net/ipv4/ip_output.c
-+ *
-+ *    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.
-+ *
-+ *    Changes:
-+ *    A.N.Kuznetsov   :       airthmetics in fragmentation.
-+ *                            extension headers are implemented.
-+ *                            route changes now work.
-+ *                            ip6_forward does not confuse sniffers.
-+ *                            etc.
-+ *
-+ *      H. von Brand    :       Added missing #include <linux/string.h>
-+ *    Imran Patel     :       frag id should be in NBO
-+ *      Kazunori MIYAZAWA @USAGI
-+ *                    :       add ip6_append_data and related functions
-+ *                            for datagram xmit
-+ */
-+
-+#include <linux/errno.h>
-+#include <linux/kernel.h>
-+#include <linux/string.h>
-+#include <linux/socket.h>
-+#include <linux/net.h>
-+#include <linux/netdevice.h>
-+#include <linux/if_arp.h>
-+#include <linux/in6.h>
-+#include <linux/tcp.h>
-+#include <linux/route.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+
-+#include <linux/netfilter.h>
-+#include <linux/netfilter_ipv6.h>
-+
-+#include <net/sock.h>
-+#include <net/snmp.h>
-+
-+#include <net/ipv6.h>
-+#include <net/ndisc.h>
-+#include <net/protocol.h>
-+#include <net/ip6_route.h>
-+#include <net/addrconf.h>
-+#include <net/rawv6.h>
-+#include <net/icmp.h>
-+#include <net/xfrm.h>
-+#include <net/checksum.h>
-+#include <linux/mroute6.h>
-+
-+int __ip6_local_out(struct sk_buff *skb)
-+{
-+      int len;
-+
-+      len = skb->len - sizeof(struct ipv6hdr);
-+      if (len > IPV6_MAXPLEN)
-+              len = 0;
-+      ipv6_hdr(skb)->payload_len = htons(len);
-+
-+      return nf_hook(NFPROTO_IPV6, NF_INET_LOCAL_OUT, skb, NULL,
-+                     skb_dst(skb)->dev, dst_output);
-+}
-+
-+int ip6_local_out(struct sk_buff *skb)
-+{
-+      int err;
-+
-+      err = __ip6_local_out(skb);
-+      if (likely(err == 1))
-+              err = dst_output(skb);
-+
-+      return err;
-+}
-+EXPORT_SYMBOL_GPL(ip6_local_out);
-+
-+static int ip6_finish_output2(struct sk_buff *skb)
-+{
-+      struct dst_entry *dst = skb_dst(skb);
-+      struct net_device *dev = dst->dev;
-+      struct neighbour *neigh;
-+      struct in6_addr *nexthop;
-+      int ret;
-+
-+      skb->protocol = htons(ETH_P_IPV6);
-+      skb->dev = dev;
-+
-+      if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) {
-+              struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
-+
-+              if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(skb->sk) &&
-+                  ((mroute6_socket(dev_net(dev), skb) &&
-+                   !(IP6CB(skb)->flags & IP6SKB_FORWARDED)) ||
-+                   ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr,
-+                                       &ipv6_hdr(skb)->saddr))) {
-+                      struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
-+
-+                      /* Do not check for IFF_ALLMULTI; multicast routing
-+                         is not supported in any case.
-+                       */
-+                      if (newskb)
-+                              NF_HOOK(NFPROTO_IPV6, NF_INET_POST_ROUTING,
-+                                      newskb, NULL, newskb->dev,
-+                                      dev_loopback_xmit);
-+
-+                      if (ipv6_hdr(skb)->hop_limit == 0) {
-+                              IP6_INC_STATS(dev_net(dev), idev,
-+                                            IPSTATS_MIB_OUTDISCARDS);
-+                              kfree_skb(skb);
-+                              return 0;
-+                      }
-+              }
-+
-+              IP6_UPD_PO_STATS(dev_net(dev), idev, IPSTATS_MIB_OUTMCAST,
-+                              skb->len);
-+
-+              if (IPV6_ADDR_MC_SCOPE(&ipv6_hdr(skb)->daddr) <=
-+                  IPV6_ADDR_SCOPE_NODELOCAL &&
-+                  !(dev->flags & IFF_LOOPBACK)) {
-+                      kfree_skb(skb);
-+                      return 0;
-+              }
-+      }
-+
-+      rcu_read_lock_bh();
-+      nexthop = rt6_nexthop((struct rt6_info *)dst);
-+      neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop);
-+      if (unlikely(!neigh))
-+              neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
-+      if (!IS_ERR(neigh)) {
-+              ret = dst_neigh_output(dst, neigh, skb);
-+              rcu_read_unlock_bh();
-+              return ret;
-+      }
-+      rcu_read_unlock_bh();
-+
-+      IP6_INC_STATS(dev_net(dst->dev),
-+                    ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
-+      kfree_skb(skb);
-+      return -EINVAL;
-+}
-+
-+static int ip6_finish_output(struct sk_buff *skb)
-+{
-+      if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
-+          dst_allfrag(skb_dst(skb)) ||
-+          (IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
-+              return ip6_fragment(skb, ip6_finish_output2);
-+      else
-+              return ip6_finish_output2(skb);
-+}
-+
-+int ip6_output(struct sk_buff *skb)
-+{
-+      struct net_device *dev = skb_dst(skb)->dev;
-+      struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
-+      if (unlikely(idev->cnf.disable_ipv6)) {
-+              IP6_INC_STATS(dev_net(dev), idev,
-+                            IPSTATS_MIB_OUTDISCARDS);
-+              kfree_skb(skb);
-+              return 0;
-+      }
-+
-+      return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, skb, NULL, dev,
-+                          ip6_finish_output,
-+                          !(IP6CB(skb)->flags & IP6SKB_REROUTED));
-+}
-+
-+/*
-+ *    xmit an sk_buff (used by TCP, SCTP and DCCP)
-+ */
-+
-+int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6,
-+           struct ipv6_txoptions *opt, int tclass)
-+{
-+      struct net *net = sock_net(sk);
-+      struct ipv6_pinfo *np = inet6_sk(sk);
-+      struct in6_addr *first_hop = &fl6->daddr;
-+      struct dst_entry *dst = skb_dst(skb);
-+      struct ipv6hdr *hdr;
-+      u8  proto = fl6->flowi6_proto;
-+      int seg_len = skb->len;
-+      int hlimit = -1;
-+      u32 mtu;
-+
-+      if (opt) {
-+              unsigned int head_room;
-+
-+              /* First: exthdrs may take lots of space (~8K for now)
-+                 MAX_HEADER is not enough.
-+               */
-+              head_room = opt->opt_nflen + opt->opt_flen;
-+              seg_len += head_room;
-+              head_room += sizeof(struct ipv6hdr) + LL_RESERVED_SPACE(dst->dev);
-+
-+              if (skb_headroom(skb) < head_room) {
-+                      struct sk_buff *skb2 = skb_realloc_headroom(skb, head_room);
-+                      if (skb2 == NULL) {
-+                              IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
-+                                            IPSTATS_MIB_OUTDISCARDS);
-+                              kfree_skb(skb);
-+                              return -ENOBUFS;
-+                      }
-+                      consume_skb(skb);
-+                      skb = skb2;
-+                      skb_set_owner_w(skb, sk);
-+              }
-+              if (opt->opt_flen)
-+                      ipv6_push_frag_opts(skb, opt, &proto);
-+              if (opt->opt_nflen)
-+                      ipv6_push_nfrag_opts(skb, opt, &proto, &first_hop);
-+      }
-+
-+      skb_push(skb, sizeof(struct ipv6hdr));
-+      skb_reset_network_header(skb);
-+      hdr = ipv6_hdr(skb);
-+
-+      /*
-+       *      Fill in the IPv6 header
-+       */
-+      if (np)
-+              hlimit = np->hop_limit;
-+      if (hlimit < 0)
-+              hlimit = ip6_dst_hoplimit(dst);
-+
-+      ip6_flow_hdr(hdr, tclass, fl6->flowlabel);
-+
-+      hdr->payload_len = htons(seg_len);
-+      hdr->nexthdr = proto;
-+      hdr->hop_limit = hlimit;
-+
-+      hdr->saddr = fl6->saddr;
-+      hdr->daddr = *first_hop;
-+
-+      skb->priority = sk->sk_priority;
-+      skb->mark = sk->sk_mark;
-+
-+      mtu = dst_mtu(dst);
-+      if ((skb->len <= mtu) || skb->local_df || skb_is_gso(skb)) {
-+              IP6_UPD_PO_STATS(net, ip6_dst_idev(skb_dst(skb)),
-+                            IPSTATS_MIB_OUT, skb->len);
-+              return NF_HOOK(NFPROTO_IPV6, NF_INET_LOCAL_OUT, skb, NULL,
-+                             dst->dev, dst_output);
-+      }
-+
-+      skb->dev = dst->dev;
-+      ipv6_local_error(sk, EMSGSIZE, fl6, mtu);
-+      IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)), IPSTATS_MIB_FRAGFAILS);
-+      kfree_skb(skb);
-+      return -EMSGSIZE;
-+}
-+
-+EXPORT_SYMBOL(ip6_xmit);
-+
-+static int ip6_call_ra_chain(struct sk_buff *skb, int sel)
-+{
-+      struct ip6_ra_chain *ra;
-+      struct sock *last = NULL;
-+
-+      read_lock(&ip6_ra_lock);
-+      for (ra = ip6_ra_chain; ra; ra = ra->next) {
-+              struct sock *sk = ra->sk;
-+              if (sk && ra->sel == sel &&
-+                  (!sk->sk_bound_dev_if ||
-+                   sk->sk_bound_dev_if == skb->dev->ifindex)) {
-+                      if (last) {
-+                              struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC);
-+                              if (skb2)
-+                                      rawv6_rcv(last, skb2);
-+                      }
-+                      last = sk;
-+              }
-+      }
-+
-+      if (last) {
-+              rawv6_rcv(last, skb);
-+              read_unlock(&ip6_ra_lock);
-+              return 1;
-+      }
-+      read_unlock(&ip6_ra_lock);
-+      return 0;
-+}
-+
-+static int ip6_forward_proxy_check(struct sk_buff *skb)
-+{
-+      struct ipv6hdr *hdr = ipv6_hdr(skb);
-+      u8 nexthdr = hdr->nexthdr;
-+      __be16 frag_off;
-+      int offset;
-+
-+      if (ipv6_ext_hdr(nexthdr)) {
-+              offset = ipv6_skip_exthdr(skb, sizeof(*hdr), &nexthdr, &frag_off);
-+              if (offset < 0)
-+                      return 0;
-+      } else
-+              offset = sizeof(struct ipv6hdr);
-+
-+      if (nexthdr == IPPROTO_ICMPV6) {
-+              struct icmp6hdr *icmp6;
-+
-+              if (!pskb_may_pull(skb, (skb_network_header(skb) +
-+                                       offset + 1 - skb->data)))
-+                      return 0;
-+
-+              icmp6 = (struct icmp6hdr *)(skb_network_header(skb) + offset);
-+
-+              switch (icmp6->icmp6_type) {
-+              case NDISC_ROUTER_SOLICITATION:
-+              case NDISC_ROUTER_ADVERTISEMENT:
-+              case NDISC_NEIGHBOUR_SOLICITATION:
-+              case NDISC_NEIGHBOUR_ADVERTISEMENT:
-+              case NDISC_REDIRECT:
-+                      /* For reaction involving unicast neighbor discovery
-+                       * message destined to the proxied address, pass it to
-+                       * input function.
-+                       */
-+                      return 1;
-+              default:
-+                      break;
-+              }
-+      }
-+
-+      /*
-+       * The proxying router can't forward traffic sent to a link-local
-+       * address, so signal the sender and discard the packet. This
-+       * behavior is clarified by the MIPv6 specification.
-+       */
-+      if (ipv6_addr_type(&hdr->daddr) & IPV6_ADDR_LINKLOCAL) {
-+              dst_link_failure(skb);
-+              return -1;
-+      }
-+
-+      return 0;
-+}
-+
-+static inline int ip6_forward_finish(struct sk_buff *skb)
-+{
-+      return dst_output(skb);
-+}
-+
-+int ip6_forward(struct sk_buff *skb)
-+{
-+      struct dst_entry *dst = skb_dst(skb);
-+      struct ipv6hdr *hdr = ipv6_hdr(skb);
-+      struct inet6_skb_parm *opt = IP6CB(skb);
-+      struct net *net = dev_net(dst->dev);
-+      u32 mtu;
-+
-+      if (net->ipv6.devconf_all->forwarding == 0)
-+              goto error;
-+
-+      if (skb_warn_if_lro(skb))
-+              goto drop;
-+
-+      if (!xfrm6_policy_check(NULL, XFRM_POLICY_FWD, skb)) {
-+              IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_INDISCARDS);
-+              goto drop;
-+      }
-+
-+      if (skb->pkt_type != PACKET_HOST)
-+              goto drop;
-+
-+      skb_forward_csum(skb);
-+
-+      /*
-+       *      We DO NOT make any processing on
-+       *      RA packets, pushing them to user level AS IS
-+       *      without ane WARRANTY that application will be able
-+       *      to interpret them. The reason is that we
-+       *      cannot make anything clever here.
-+       *
-+       *      We are not end-node, so that if packet contains
-+       *      AH/ESP, we cannot make anything.
-+       *      Defragmentation also would be mistake, RA packets
-+       *      cannot be fragmented, because there is no warranty
-+       *      that different fragments will go along one path. --ANK
-+       */
-+      if (unlikely(opt->flags & IP6SKB_ROUTERALERT)) {
-+              if (ip6_call_ra_chain(skb, ntohs(opt->ra)))
-+                      return 0;
-+      }
-+
-+      /*
-+       *      check and decrement ttl
-+       */
-+      if (hdr->hop_limit <= 1) {
-+              /* Force OUTPUT device used as source address */
-+              skb->dev = dst->dev;
-+              icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, 0);
-+              IP6_INC_STATS_BH(net,
-+                               ip6_dst_idev(dst), IPSTATS_MIB_INHDRERRORS);
-+
-+              kfree_skb(skb);
-+              return -ETIMEDOUT;
-+      }
-+
-+      /* XXX: idev->cnf.proxy_ndp? */
-+      if (net->ipv6.devconf_all->proxy_ndp &&
-+          pneigh_lookup(&nd_tbl, net, &hdr->daddr, skb->dev, 0)) {
-+              int proxied = ip6_forward_proxy_check(skb);
-+              if (proxied > 0)
-+                      return ip6_input(skb);
-+              else if (proxied < 0) {
-+                      IP6_INC_STATS(net, ip6_dst_idev(dst),
-+                                    IPSTATS_MIB_INDISCARDS);
-+                      goto drop;
-+              }
-+      }
-+
-+      if (!xfrm6_route_forward(skb)) {
-+              IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_INDISCARDS);
-+              goto drop;
-+      }
-+      dst = skb_dst(skb);
-+
-+      /* IPv6 specs say nothing about it, but it is clear that we cannot
-+         send redirects to source routed frames.
-+         We don't send redirects to frames decapsulated from IPsec.
-+       */
-+      if (skb->dev == dst->dev && opt->srcrt == 0 && !skb_sec_path(skb)) {
-+              struct in6_addr *target = NULL;
-+              struct inet_peer *peer;
-+              struct rt6_info *rt;
-+
-+              /*
-+               *      incoming and outgoing devices are the same
-+               *      send a redirect.
-+               */
-+
-+              rt = (struct rt6_info *) dst;
-+              if (rt->rt6i_flags & RTF_GATEWAY)
-+                      target = &rt->rt6i_gateway;
-+              else
-+                      target = &hdr->daddr;
-+
-+              peer = inet_getpeer_v6(net->ipv6.peers, &rt->rt6i_dst.addr, 1);
-+
-+              /* Limit redirects both by destination (here)
-+                 and by source (inside ndisc_send_redirect)
-+               */
-+              if (inet_peer_xrlim_allow(peer, 1*HZ))
-+                      ndisc_send_redirect(skb, target);
-+              if (peer)
-+                      inet_putpeer(peer);
-+      } else {
-+              int addrtype = ipv6_addr_type(&hdr->saddr);
-+
-+              /* This check is security critical. */
-+              if (addrtype == IPV6_ADDR_ANY ||
-+                  addrtype & (IPV6_ADDR_MULTICAST | IPV6_ADDR_LOOPBACK))
-+                      goto error;
-+              if (addrtype & IPV6_ADDR_LINKLOCAL) {
-+                      icmpv6_send(skb, ICMPV6_DEST_UNREACH,
-+                                  ICMPV6_NOT_NEIGHBOUR, 0);
-+                      goto error;
-+              }
-+      }
-+
-+      mtu = dst_mtu(dst);
-+      if (mtu < IPV6_MIN_MTU)
-+              mtu = IPV6_MIN_MTU;
-+
-+      if ((!skb->local_df && skb->len > mtu && !skb_is_gso(skb)) ||
-+          (IP6CB(skb)->frag_max_size && IP6CB(skb)->frag_max_size > mtu)) {
-+              /* Again, force OUTPUT device used as source address */
-+              skb->dev = dst->dev;
-+              icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
-+              IP6_INC_STATS_BH(net,
-+                               ip6_dst_idev(dst), IPSTATS_MIB_INTOOBIGERRORS);
-+              IP6_INC_STATS_BH(net,
-+                               ip6_dst_idev(dst), IPSTATS_MIB_FRAGFAILS);
-+              kfree_skb(skb);
-+              return -EMSGSIZE;
-+      }
-+
-+      if (skb_cow(skb, dst->dev->hard_header_len)) {
-+              IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTDISCARDS);
-+              goto drop;
-+      }
-+
-+      hdr = ipv6_hdr(skb);
-+
-+      /* Mangling hops number delayed to point after skb COW */
-+
-+      hdr->hop_limit--;
-+
-+      IP6_INC_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
-+      IP6_ADD_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
-+      return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD, skb, skb->dev, dst->dev,
-+                     ip6_forward_finish);
-+
-+error:
-+      IP6_INC_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_INADDRERRORS);
-+drop:
-+      kfree_skb(skb);
-+      return -EINVAL;
-+}
-+
-+static void ip6_copy_metadata(struct sk_buff *to, struct sk_buff *from)
-+{
-+      to->pkt_type = from->pkt_type;
-+      to->priority = from->priority;
-+      to->protocol = from->protocol;
-+      skb_dst_drop(to);
-+      skb_dst_set(to, dst_clone(skb_dst(from)));
-+      to->dev = from->dev;
-+      to->mark = from->mark;
-+
-+#ifdef CONFIG_NET_SCHED
-+      to->tc_index = from->tc_index;
-+#endif
-+      nf_copy(to, from);
-+#if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE)
-+      to->nf_trace = from->nf_trace;
-+#endif
-+      skb_copy_secmark(to, from);
-+}
-+
-+int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
-+{
-+      struct sk_buff *frag;
-+      struct rt6_info *rt = (struct rt6_info*)skb_dst(skb);
-+      struct ipv6_pinfo *np = skb->sk ? inet6_sk(skb->sk) : NULL;
-+      struct ipv6hdr *tmp_hdr;
-+      struct frag_hdr *fh;
-+      unsigned int mtu, hlen, left, len;
-+      int hroom, troom;
-+      __be32 frag_id = 0;
-+      int ptr, offset = 0, err=0;
-+      u8 *prevhdr, nexthdr = 0;
-+      struct net *net = dev_net(skb_dst(skb)->dev);
-+
-+      hlen = ip6_find_1stfragopt(skb, &prevhdr);
-+      nexthdr = *prevhdr;
-+
-+      mtu = ip6_skb_dst_mtu(skb);
-+
-+      /* We must not fragment if the socket is set to force MTU discovery
-+       * or if the skb it not generated by a local socket.
-+       */
-+      if (unlikely(!skb->local_df && skb->len > mtu) ||
-+                   (IP6CB(skb)->frag_max_size &&
-+                    IP6CB(skb)->frag_max_size > mtu)) {
-+              if (skb->sk && dst_allfrag(skb_dst(skb)))
-+                      sk_nocaps_add(skb->sk, NETIF_F_GSO_MASK);
-+
-+              skb->dev = skb_dst(skb)->dev;
-+              icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
-+              IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
-+                            IPSTATS_MIB_FRAGFAILS);
-+              kfree_skb(skb);
-+              return -EMSGSIZE;
-+      }
-+
-+      if (np && np->frag_size < mtu) {
-+              if (np->frag_size)
-+                      mtu = np->frag_size;
-+      }
-+      mtu -= hlen + sizeof(struct frag_hdr);
-+
-+      if (skb_has_frag_list(skb)) {
-+              int first_len = skb_pagelen(skb);
-+              struct sk_buff *frag2;
-+
-+              if (first_len - hlen > mtu ||
-+                  ((first_len - hlen) & 7) ||
-+                  skb_cloned(skb))
-+                      goto slow_path;
-+
-+              skb_walk_frags(skb, frag) {
-+                      /* Correct geometry. */
-+                      if (frag->len > mtu ||
-+                          ((frag->len & 7) && frag->next) ||
-+                          skb_headroom(frag) < hlen)
-+                              goto slow_path_clean;
-+
-+                      /* Partially cloned skb? */
-+                      if (skb_shared(frag))
-+                              goto slow_path_clean;
-+
-+                      BUG_ON(frag->sk);
-+                      if (skb->sk) {
-+                              frag->sk = skb->sk;
-+                              frag->destructor = sock_wfree;
-+                      }
-+                      skb->truesize -= frag->truesize;
-+              }
-+
-+              err = 0;
-+              offset = 0;
-+              frag = skb_shinfo(skb)->frag_list;
-+              skb_frag_list_init(skb);
-+              /* BUILD HEADER */
-+
-+              *prevhdr = NEXTHDR_FRAGMENT;
-+              tmp_hdr = kmemdup(skb_network_header(skb), hlen, GFP_ATOMIC);
-+              if (!tmp_hdr) {
-+                      IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
-+                                    IPSTATS_MIB_FRAGFAILS);
-+                      return -ENOMEM;
-+              }
-+
-+              __skb_pull(skb, hlen);
-+              fh = (struct frag_hdr*)__skb_push(skb, sizeof(struct frag_hdr));
-+              __skb_push(skb, hlen);
-+              skb_reset_network_header(skb);
-+              memcpy(skb_network_header(skb), tmp_hdr, hlen);
-+
-+              ipv6_select_ident(fh, rt);
-+              fh->nexthdr = nexthdr;
-+              fh->reserved = 0;
-+              fh->frag_off = htons(IP6_MF);
-+              frag_id = fh->identification;
-+
-+              first_len = skb_pagelen(skb);
-+              skb->data_len = first_len - skb_headlen(skb);
-+              skb->len = first_len;
-+              ipv6_hdr(skb)->payload_len = htons(first_len -
-+                                                 sizeof(struct ipv6hdr));
-+
-+              dst_hold(&rt->dst);
-+
-+              for (;;) {
-+                      /* Prepare header of the next frame,
-+                       * before previous one went down. */
-+                      if (frag) {
-+                              frag->ip_summed = CHECKSUM_NONE;
-+                              skb_reset_transport_header(frag);
-+                              fh = (struct frag_hdr*)__skb_push(frag, sizeof(struct frag_hdr));
-+                              __skb_push(frag, hlen);
-+                              skb_reset_network_header(frag);
-+                              memcpy(skb_network_header(frag), tmp_hdr,
-+                                     hlen);
-+                              offset += skb->len - hlen - sizeof(struct frag_hdr);
-+                              fh->nexthdr = nexthdr;
-+                              fh->reserved = 0;
-+                              fh->frag_off = htons(offset);
-+                              if (frag->next != NULL)
-+                                      fh->frag_off |= htons(IP6_MF);
-+                              fh->identification = frag_id;
-+                              ipv6_hdr(frag)->payload_len =
-+                                              htons(frag->len -
-+                                                    sizeof(struct ipv6hdr));
-+                              ip6_copy_metadata(frag, skb);
-+                      }
-+
-+                      err = output(skb);
-+                      if(!err)
-+                              IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
-+                                            IPSTATS_MIB_FRAGCREATES);
-+
-+                      if (err || !frag)
-+                              break;
-+
-+                      skb = frag;
-+                      frag = skb->next;
-+                      skb->next = NULL;
-+              }
-+
-+              kfree(tmp_hdr);
-+
-+              if (err == 0) {
-+                      IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
-+                                    IPSTATS_MIB_FRAGOKS);
-+                      ip6_rt_put(rt);
-+                      return 0;
-+              }
-+
-+              while (frag) {
-+                      skb = frag->next;
-+                      kfree_skb(frag);
-+                      frag = skb;
-+              }
-+
-+              IP6_INC_STATS(net, ip6_dst_idev(&rt->dst),
-+                            IPSTATS_MIB_FRAGFAILS);
-+              ip6_rt_put(rt);
-+              return err;
-+
-+slow_path_clean:
-+              skb_walk_frags(skb, frag2) {
-+                      if (frag2 == frag)
-+                              break;
-+                      frag2->sk = NULL;
-+                      frag2->destructor = NULL;
-+                      skb->truesize += frag2->truesize;
-+              }
-+      }
-+
-+slow_path:
-+      if ((skb->ip_summed == CHECKSUM_PARTIAL) &&
-+          skb_checksum_help(skb))
-+              goto fail;
-+
-+      left = skb->len - hlen;         /* Space per frame */
-+      ptr = hlen;                     /* Where to start from */
-+
-+      /*
-+       *      Fragment the datagram.
-+       */
-+
-+      *prevhdr = NEXTHDR_FRAGMENT;
-+      hroom = LL_RESERVED_SPACE(rt->dst.dev);
-+      troom = rt->dst.dev->needed_tailroom;
-+
-+      /*
-+       *      Keep copying data until we run out.
-+       */
-+      while(left > 0) {
-+              len = left;
-+              /* IF: it doesn't fit, use 'mtu' - the data space left */
-+              if (len > mtu)
-+                      len = mtu;
-+              /* IF: we are not sending up to and including the packet end
-+                 then align the next start on an eight byte boundary */
-+              if (len < left) {
-+                      len &= ~7;
-+              }
-+              /*
-+               *      Allocate buffer.
-+               */
-+
-+              if ((frag = alloc_skb(len + hlen + sizeof(struct frag_hdr) +
-+                                    hroom + troom, GFP_ATOMIC)) == NULL) {
-+                      NETDEBUG(KERN_INFO "IPv6: frag: no memory for new fragment!\n");
-+                      IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
-+                                    IPSTATS_MIB_FRAGFAILS);
-+                      err = -ENOMEM;
-+                      goto fail;
-+              }
-+
-+              /*
-+               *      Set up data on packet
-+               */
-+
-+              ip6_copy_metadata(frag, skb);
-+              skb_reserve(frag, hroom);
-+              skb_put(frag, len + hlen + sizeof(struct frag_hdr));
-+              skb_reset_network_header(frag);
-+              fh = (struct frag_hdr *)(skb_network_header(frag) + hlen);
-+              frag->transport_header = (frag->network_header + hlen +
-+                                        sizeof(struct frag_hdr));
-+
-+              /*
-+               *      Charge the memory for the fragment to any owner
-+               *      it might possess
-+               */
-+              if (skb->sk)
-+                      skb_set_owner_w(frag, skb->sk);
-+
-+              /*
-+               *      Copy the packet header into the new buffer.
-+               */
-+              skb_copy_from_linear_data(skb, skb_network_header(frag), hlen);
-+
-+              /*
-+               *      Build fragment header.
-+               */
-+              fh->nexthdr = nexthdr;
-+              fh->reserved = 0;
-+              if (!frag_id) {
-+                      ipv6_select_ident(fh, rt);
-+                      frag_id = fh->identification;
-+              } else
-+                      fh->identification = frag_id;
-+
-+              /*
-+               *      Copy a block of the IP datagram.
-+               */
-+              if (skb_copy_bits(skb, ptr, skb_transport_header(frag), len))
-+                      BUG();
-+              left -= len;
-+
-+              fh->frag_off = htons(offset);
-+              if (left > 0)
-+                      fh->frag_off |= htons(IP6_MF);
-+              ipv6_hdr(frag)->payload_len = htons(frag->len -
-+                                                  sizeof(struct ipv6hdr));
-+
-+              ptr += len;
-+              offset += len;
-+
-+              /*
-+               *      Put this fragment into the sending queue.
-+               */
-+              err = output(frag);
-+              if (err)
-+                      goto fail;
-+
-+              IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
-+                            IPSTATS_MIB_FRAGCREATES);
-+      }
-+      IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
-+                    IPSTATS_MIB_FRAGOKS);
-+      consume_skb(skb);
-+      return err;
-+
-+fail:
-+      IP6_INC_STATS(net, ip6_dst_idev(skb_dst(skb)),
-+                    IPSTATS_MIB_FRAGFAILS);
-+      kfree_skb(skb);
-+      return err;
-+}
-+
-+static inline int ip6_rt_check(const struct rt6key *rt_key,
-+                             const struct in6_addr *fl_addr,
-+                             const struct in6_addr *addr_cache)
-+{
-+      return (rt_key->plen != 128 || !ipv6_addr_equal(fl_addr, &rt_key->addr)) &&
-+              (addr_cache == NULL || !ipv6_addr_equal(fl_addr, addr_cache));
-+}
-+
-+static struct dst_entry *ip6_sk_dst_check(struct sock *sk,
-+                                        struct dst_entry *dst,
-+                                        const struct flowi6 *fl6)
-+{
-+      struct ipv6_pinfo *np = inet6_sk(sk);
-+      struct rt6_info *rt;
-+
-+      if (!dst)
-+              goto out;
-+
-+      if (dst->ops->family != AF_INET6) {
-+              dst_release(dst);
-+              return NULL;
-+      }
-+
-+      rt = (struct rt6_info *)dst;
-+      /* Yes, checking route validity in not connected
-+       * case is not very simple. Take into account,
-+       * that we do not support routing by source, TOS,
-+       * and MSG_DONTROUTE            --ANK (980726)
-+       *
-+       * 1. ip6_rt_check(): If route was host route,
-+       *    check that cached destination is current.
-+       *    If it is network route, we still may
-+       *    check its validity using saved pointer
-+       *    to the last used address: daddr_cache.
-+       *    We do not want to save whole address now,
-+       *    (because main consumer of this service
-+       *    is tcp, which has not this problem),
-+       *    so that the last trick works only on connected
-+       *    sockets.
-+       * 2. oif also should be the same.
-+       */
-+      if (ip6_rt_check(&rt->rt6i_dst, &fl6->daddr, np->daddr_cache) ||
-+#ifdef CONFIG_IPV6_SUBTREES
-+          ip6_rt_check(&rt->rt6i_src, &fl6->saddr, np->saddr_cache) ||
-+#endif
-+          (fl6->flowi6_oif && fl6->flowi6_oif != dst->dev->ifindex)) {
-+              dst_release(dst);
-+              dst = NULL;
-+      }
-+
-+out:
-+      return dst;
-+}
-+
-+static int ip6_dst_lookup_tail(struct sock *sk,
-+                             struct dst_entry **dst, struct flowi6 *fl6)
-+{
-+      struct net *net = sock_net(sk);
-+#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
-+      struct neighbour *n;
-+      struct rt6_info *rt;
-+#endif
-+      int err;
-+
-+      if (*dst == NULL)
-+              *dst = ip6_route_output(net, sk, fl6);
-+
-+      if ((err = (*dst)->error))
-+              goto out_err_release;
-+
-+      if (ipv6_addr_any(&fl6->saddr)) {
-+              struct rt6_info *rt = (struct rt6_info *) *dst;
-+              err = ip6_route_get_saddr(net, rt, &fl6->daddr,
-+                                        sk ? inet6_sk(sk)->srcprefs : 0,
-+                                        &fl6->saddr);
-+              if (err)
-+                      goto out_err_release;
-+      }
-+
-+#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
-+      /*
-+       * Here if the dst entry we've looked up
-+       * has a neighbour entry that is in the INCOMPLETE
-+       * state and the src address from the flow is
-+       * marked as OPTIMISTIC, we release the found
-+       * dst entry and replace it instead with the
-+       * dst entry of the nexthop router
-+       */
-+      rt = (struct rt6_info *) *dst;
-+      rcu_read_lock_bh();
-+      n = __ipv6_neigh_lookup_noref(rt->dst.dev, rt6_nexthop(rt));
-+      err = n && !(n->nud_state & NUD_VALID) ? -EINVAL : 0;
-+      rcu_read_unlock_bh();
-+
-+      if (err) {
-+              struct inet6_ifaddr *ifp;
-+              struct flowi6 fl_gw6;
-+              int redirect;
-+
-+              ifp = ipv6_get_ifaddr(net, &fl6->saddr,
-+                                    (*dst)->dev, 1);
-+
-+              redirect = (ifp && ifp->flags & IFA_F_OPTIMISTIC);
-+              if (ifp)
-+                      in6_ifa_put(ifp);
-+
-+              if (redirect) {
-+                      /*
-+                       * We need to get the dst entry for the
-+                       * default router instead
-+                       */
-+                      dst_release(*dst);
-+                      memcpy(&fl_gw6, fl6, sizeof(struct flowi6));
-+                      memset(&fl_gw6.daddr, 0, sizeof(struct in6_addr));
-+                      *dst = ip6_route_output(net, sk, &fl_gw6);
-+                      if ((err = (*dst)->error))
-+                              goto out_err_release;
-+              }
-+      }
-+#endif
-+
-+      return 0;
-+
-+out_err_release:
-+      if (err == -ENETUNREACH)
-+              IP6_INC_STATS_BH(net, NULL, IPSTATS_MIB_OUTNOROUTES);
-+      dst_release(*dst);
-+      *dst = NULL;
-+      return err;
-+}
-+
-+/**
-+ *    ip6_dst_lookup - perform route lookup on flow
-+ *    @sk: socket which provides route info
-+ *    @dst: pointer to dst_entry * for result
-+ *    @fl6: flow to lookup
-+ *
-+ *    This function performs a route lookup on the given flow.
-+ *
-+ *    It returns zero on success, or a standard errno code on error.
-+ */
-+int ip6_dst_lookup(struct sock *sk, struct dst_entry **dst, struct flowi6 *fl6)
-+{
-+      *dst = NULL;
-+      return ip6_dst_lookup_tail(sk, dst, fl6);
-+}
-+EXPORT_SYMBOL_GPL(ip6_dst_lookup);
-+
-+/**
-+ *    ip6_dst_lookup_flow - perform route lookup on flow with ipsec
-+ *    @sk: socket which provides route info
-+ *    @fl6: flow to lookup
-+ *    @final_dst: final destination address for ipsec lookup
-+ *    @can_sleep: we are in a sleepable context
-+ *
-+ *    This function performs a route lookup on the given flow.
-+ *
-+ *    It returns a valid dst pointer on success, or a pointer encoded
-+ *    error code.
-+ */
-+struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
-+                                    const struct in6_addr *final_dst,
-+                                    bool can_sleep)
-+{
-+      struct dst_entry *dst = NULL;
-+      int err;
-+
-+      err = ip6_dst_lookup_tail(sk, &dst, fl6);
-+      if (err)
-+              return ERR_PTR(err);
-+      if (final_dst)
-+              fl6->daddr = *final_dst;
-+      if (can_sleep)
-+              fl6->flowi6_flags |= FLOWI_FLAG_CAN_SLEEP;
-+
-+      return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
-+}
-+EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow);
-+
-+/**
-+ *    ip6_sk_dst_lookup_flow - perform socket cached route lookup on flow
-+ *    @sk: socket which provides the dst cache and route info
-+ *    @fl6: flow to lookup
-+ *    @final_dst: final destination address for ipsec lookup
-+ *    @can_sleep: we are in a sleepable context
-+ *
-+ *    This function performs a route lookup on the given flow with the
-+ *    possibility of using the cached route in the socket if it is valid.
-+ *    It will take the socket dst lock when operating on the dst cache.
-+ *    As a result, this function can only be used in process context.
-+ *
-+ *    It returns a valid dst pointer on success, or a pointer encoded
-+ *    error code.
-+ */
-+struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
-+                                       const struct in6_addr *final_dst,
-+                                       bool can_sleep)
-+{
-+      struct dst_entry *dst = sk_dst_check(sk, inet6_sk(sk)->dst_cookie);
-+      int err;
-+
-+      dst = ip6_sk_dst_check(sk, dst, fl6);
-+
-+      err = ip6_dst_lookup_tail(sk, &dst, fl6);
-+      if (err)
-+              return ERR_PTR(err);
-+      if (final_dst)
-+              fl6->daddr = *final_dst;
-+      if (can_sleep)
-+              fl6->flowi6_flags |= FLOWI_FLAG_CAN_SLEEP;
-+
-+      return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0);
-+}
-+EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow);
-+
-+static inline int ip6_ufo_append_data(struct sock *sk,
-+                      int getfrag(void *from, char *to, int offset, int len,
-+                      int odd, struct sk_buff *skb),
-+                      void *from, int length, int hh_len, int fragheaderlen,
-+                      int transhdrlen, int mtu,unsigned int flags,
-+                      struct rt6_info *rt)
-+
-+{
-+      struct sk_buff *skb;
-+      int err;
-+
-+      /* There is support for UDP large send offload by network
-+       * device, so create one single skb packet containing complete
-+       * udp datagram
-+       */
-+      if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL) {
-+              struct frag_hdr fhdr;
-+
-+              skb = sock_alloc_send_skb(sk,
-+                      hh_len + fragheaderlen + transhdrlen + 20,
-+                      (flags & MSG_DONTWAIT), &err);
-+              if (skb == NULL)
-+                      return err;
-+
-+              /* reserve space for Hardware header */
-+              skb_reserve(skb, hh_len);
-+
-+              /* create space for UDP/IP header */
-+              skb_put(skb,fragheaderlen + transhdrlen);
-+
-+              /* initialize network header pointer */
-+              skb_reset_network_header(skb);
-+
-+              /* initialize protocol header pointer */
-+              skb->transport_header = skb->network_header + fragheaderlen;
-+
-+              skb->ip_summed = CHECKSUM_PARTIAL;
-+              skb->csum = 0;
-+
-+              /* Specify the length of each IPv6 datagram fragment.
-+               * It has to be a multiple of 8.
-+               */
-+              skb_shinfo(skb)->gso_size = (mtu - fragheaderlen -
-+                                           sizeof(struct frag_hdr)) & ~7;
-+              skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
-+              ipv6_select_ident(&fhdr, rt);
-+              skb_shinfo(skb)->ip6_frag_id = fhdr.identification;
-+              __skb_queue_tail(&sk->sk_write_queue, skb);
-+      }
-+
-+      return skb_append_datato_frags(sk, skb, getfrag, from,
-+                                     (length - transhdrlen));
-+}
-+
-+static inline struct ipv6_opt_hdr *ip6_opt_dup(struct ipv6_opt_hdr *src,
-+                                             gfp_t gfp)
-+{
-+      return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL;
-+}
-+
-+static inline struct ipv6_rt_hdr *ip6_rthdr_dup(struct ipv6_rt_hdr *src,
-+                                              gfp_t gfp)
-+{
-+      return src ? kmemdup(src, (src->hdrlen + 1) * 8, gfp) : NULL;
-+}
-+
-+static void ip6_append_data_mtu(unsigned int *mtu,
-+                              int *maxfraglen,
-+                              unsigned int fragheaderlen,
-+                              struct sk_buff *skb,
-+                              struct rt6_info *rt,
-+                              bool pmtuprobe)
-+{
-+      if (!(rt->dst.flags & DST_XFRM_TUNNEL)) {
-+              if (skb == NULL) {
-+                      /* first fragment, reserve header_len */
-+                      *mtu = *mtu - rt->dst.header_len;
-+
-+              } else {
-+                      /*
-+                       * this fragment is not first, the headers
-+                       * space is regarded as data space.
-+                       */
-+                      *mtu = min(*mtu, pmtuprobe ?
-+                                 rt->dst.dev->mtu :
-+                                 dst_mtu(rt->dst.path));
-+              }
-+              *maxfraglen = ((*mtu - fragheaderlen) & ~7)
-+                            + fragheaderlen - sizeof(struct frag_hdr);
-+      }
-+}
-+
-+int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
-+      int offset, int len, int odd, struct sk_buff *skb),
-+      void *from, int length, int transhdrlen,
-+      int hlimit, int tclass, struct ipv6_txoptions *opt, struct flowi6 *fl6,
-+      struct rt6_info *rt, unsigned int flags, int dontfrag)
-+{
-+      struct inet_sock *inet = inet_sk(sk);
-+      struct ipv6_pinfo *np = inet6_sk(sk);
-+      struct inet_cork *cork;
-+      struct sk_buff *skb, *skb_prev = NULL;
-+      unsigned int maxfraglen, fragheaderlen, mtu;
-+      int exthdrlen;
-+      int dst_exthdrlen;
-+      int hh_len;
-+      int copy;
-+      int err;
-+      int offset = 0;
-+      __u8 tx_flags = 0;
-+
-+      if (flags&MSG_PROBE)
-+              return 0;
-+      cork = &inet->cork.base;
-+      if (skb_queue_empty(&sk->sk_write_queue)) {
-+              /*
-+               * setup for corking
-+               */
-+              if (opt) {
-+                      if (WARN_ON(np->cork.opt))
-+                              return -EINVAL;
-+
-+                      np->cork.opt = kzalloc(opt->tot_len, sk->sk_allocation);
-+                      if (unlikely(np->cork.opt == NULL))
-+                              return -ENOBUFS;
-+
-+                      np->cork.opt->tot_len = opt->tot_len;
-+                      np->cork.opt->opt_flen = opt->opt_flen;
-+                      np->cork.opt->opt_nflen = opt->opt_nflen;
-+
-+                      np->cork.opt->dst0opt = ip6_opt_dup(opt->dst0opt,
-+                                                          sk->sk_allocation);
-+                      if (opt->dst0opt && !np->cork.opt->dst0opt)
-+                              return -ENOBUFS;
-+
-+                      np->cork.opt->dst1opt = ip6_opt_dup(opt->dst1opt,
-+                                                          sk->sk_allocation);
-+                      if (opt->dst1opt && !np->cork.opt->dst1opt)
-+                              return -ENOBUFS;
-+
-+                      np->cork.opt->hopopt = ip6_opt_dup(opt->hopopt,
-+                                                         sk->sk_allocation);
-+                      if (opt->hopopt && !np->cork.opt->hopopt)
-+                              return -ENOBUFS;
-+
-+                      np->cork.opt->srcrt = ip6_rthdr_dup(opt->srcrt,
-+                                                          sk->sk_allocation);
-+                      if (opt->srcrt && !np->cork.opt->srcrt)
-+                              return -ENOBUFS;
-+
-+                      /* need source address above miyazawa*/
-+              }
-+              dst_hold(&rt->dst);
-+              cork->dst = &rt->dst;
-+              inet->cork.fl.u.ip6 = *fl6;
-+              np->cork.hop_limit = hlimit;
-+              np->cork.tclass = tclass;
-+              if (rt->dst.flags & DST_XFRM_TUNNEL)
-+                      mtu = np->pmtudisc == IPV6_PMTUDISC_PROBE ?
-+                            rt->dst.dev->mtu : dst_mtu(&rt->dst);
-+              else
-+                      mtu = np->pmtudisc == IPV6_PMTUDISC_PROBE ?
-+                            rt->dst.dev->mtu : dst_mtu(rt->dst.path);
-+              if (np->frag_size < mtu) {
-+                      if (np->frag_size)
-+                              mtu = np->frag_size;
-+              }
-+              cork->fragsize = mtu;
-+              if (dst_allfrag(rt->dst.path))
-+                      cork->flags |= IPCORK_ALLFRAG;
-+              cork->length = 0;
-+              exthdrlen = (opt ? opt->opt_flen : 0);
-+              length += exthdrlen;
-+              transhdrlen += exthdrlen;
-+              dst_exthdrlen = rt->dst.header_len - rt->rt6i_nfheader_len;
-+      } else {
-+              rt = (struct rt6_info *)cork->dst;
-+              fl6 = &inet->cork.fl.u.ip6;
-+              opt = np->cork.opt;
-+              transhdrlen = 0;
-+              exthdrlen = 0;
-+              dst_exthdrlen = 0;
-+              mtu = cork->fragsize;
-+      }
-+
-+      hh_len = LL_RESERVED_SPACE(rt->dst.dev);
-+
-+      fragheaderlen = sizeof(struct ipv6hdr) + rt->rt6i_nfheader_len +
-+                      (opt ? opt->opt_nflen : 0);
-+      maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen - sizeof(struct frag_hdr);
-+
-+      if (mtu <= sizeof(struct ipv6hdr) + IPV6_MAXPLEN) {
-+              if (cork->length + length > sizeof(struct ipv6hdr) + IPV6_MAXPLEN - fragheaderlen) {
-+                      ipv6_local_error(sk, EMSGSIZE, fl6, mtu-exthdrlen);
-+                      return -EMSGSIZE;
-+              }
-+      }
-+
-+      /* For UDP, check if TX timestamp is enabled */
-+      if (sk->sk_type == SOCK_DGRAM)
-+              sock_tx_timestamp(sk, &tx_flags);
-+
-+      /*
-+       * Let's try using as much space as possible.
-+       * Use MTU if total length of the message fits into the MTU.
-+       * Otherwise, we need to reserve fragment header and
-+       * fragment alignment (= 8-15 octects, in total).
-+       *
-+       * Note that we may need to "move" the data from the tail of
-+       * of the buffer to the new fragment when we split
-+       * the message.
-+       *
-+       * FIXME: It may be fragmented into multiple chunks
-+       *        at once if non-fragmentable extension headers
-+       *        are too large.
-+       * --yoshfuji
-+       */
-+
-+      if ((length > mtu) && dontfrag && (sk->sk_protocol == IPPROTO_UDP ||
-+                                         sk->sk_protocol == IPPROTO_RAW)) {
-+              ipv6_local_rxpmtu(sk, fl6, mtu-exthdrlen);
-+              return -EMSGSIZE;
-+      }
-+
-+      skb = skb_peek_tail(&sk->sk_write_queue);
-+      cork->length += length;
-+      if (((length > mtu) ||
-+           (skb && skb_has_frags(skb))) &&
-+          (sk->sk_protocol == IPPROTO_UDP) &&
-+          (rt->dst.dev->features & NETIF_F_UFO)) {
-+              err = ip6_ufo_append_data(sk, getfrag, from, length,
-+                                        hh_len, fragheaderlen,
-+                                        transhdrlen, mtu, flags, rt);
-+              if (err)
-+                      goto error;
-+              return 0;
-+      }
-+
-+      if (!skb)
-+              goto alloc_new_skb;
-+
-+      while (length > 0) {
-+              /* Check if the remaining data fits into current packet. */
-+              copy = (cork->length <= mtu && !(cork->flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - skb->len;
-+              if (copy < length)
-+                      copy = maxfraglen - skb->len;
-+
-+              if (copy <= 0) {
-+                      char *data;
-+                      unsigned int datalen;
-+                      unsigned int fraglen;
-+                      unsigned int fraggap;
-+                      unsigned int alloclen;
-+alloc_new_skb:
-+                      /* There's no room in the current skb */
-+                      if (skb)
-+                              fraggap = skb->len - maxfraglen;
-+                      else
-+                              fraggap = 0;
-+                      /* update mtu and maxfraglen if necessary */
-+                      if (skb == NULL || skb_prev == NULL)
-+                              ip6_append_data_mtu(&mtu, &maxfraglen,
-+                                                  fragheaderlen, skb, rt,
-+                                                  np->pmtudisc ==
-+                                                  IPV6_PMTUDISC_PROBE);
-+
-+                      skb_prev = skb;
-+
-+                      /*
-+                       * If remaining data exceeds the mtu,
-+                       * we know we need more fragment(s).
-+                       */
-+                      datalen = length + fraggap;
-+
-+                      if (datalen > (cork->length <= mtu && !(cork->flags & IPCORK_ALLFRAG) ? mtu : maxfraglen) - fragheaderlen)
-+                              datalen = maxfraglen - fragheaderlen - rt->dst.trailer_len;
-+                      if ((flags & MSG_MORE) &&
-+                          !(rt->dst.dev->features&NETIF_F_SG))
-+                              alloclen = mtu;
-+                      else
-+                              alloclen = datalen + fragheaderlen;
-+
-+                      alloclen += dst_exthdrlen;
-+
-+                      if (datalen != length + fraggap) {
-+                              /*
-+                               * this is not the last fragment, the trailer
-+                               * space is regarded as data space.
-+                               */
-+                              datalen += rt->dst.trailer_len;
-+                      }
-+
-+                      alloclen += rt->dst.trailer_len;
-+                      fraglen = datalen + fragheaderlen;
-+
-+                      /*
-+                       * We just reserve space for fragment header.
-+                       * Note: this may be overallocation if the message
-+                       * (without MSG_MORE) fits into the MTU.
-+                       */
-+                      alloclen += sizeof(struct frag_hdr);
-+
-+                      if (transhdrlen) {
-+                              skb = sock_alloc_send_skb(sk,
-+                                              alloclen + hh_len,
-+                                              (flags & MSG_DONTWAIT), &err);
-+                      } else {
-+                              skb = NULL;
-+                              if (atomic_read(&sk->sk_wmem_alloc) <=
-+                                  2 * sk->sk_sndbuf)
-+                                      skb = sock_wmalloc(sk,
-+                                                         alloclen + hh_len, 1,
-+                                                         sk->sk_allocation);
-+                              if (unlikely(skb == NULL))
-+                                      err = -ENOBUFS;
-+                              else {
-+                                      /* Only the initial fragment
-+                                       * is time stamped.
-+                                       */
-+                                      tx_flags = 0;
-+                              }
-+                      }
-+                      if (skb == NULL)
-+                              goto error;
-+                      /*
-+                       *      Fill in the control structures
-+                       */
-+                      skb->ip_summed = CHECKSUM_NONE;
-+                      skb->csum = 0;
-+                      /* reserve for fragmentation and ipsec header */
-+                      skb_reserve(skb, hh_len + sizeof(struct frag_hdr) +
-+                                  dst_exthdrlen);
-+
-+                      if (sk->sk_type == SOCK_DGRAM)
-+                              skb_shinfo(skb)->tx_flags = tx_flags;
-+
-+                      /*
-+                       *      Find where to start putting bytes
-+                       */
-+                      data = skb_put(skb, fraglen);
-+                      skb_set_network_header(skb, exthdrlen);
-+                      data += fragheaderlen;
-+                      skb->transport_header = (skb->network_header +
-+                                               fragheaderlen);
-+                      if (fraggap) {
-+                              skb->csum = skb_copy_and_csum_bits(
-+                                      skb_prev, maxfraglen,
-+                                      data + transhdrlen, fraggap, 0);
-+                              skb_prev->csum = csum_sub(skb_prev->csum,
-+                                                        skb->csum);
-+                              data += fraggap;
-+                              pskb_trim_unique(skb_prev, maxfraglen);
-+                      }
-+                      copy = datalen - transhdrlen - fraggap;
-+
-+                      if (copy < 0) {
-+                              err = -EINVAL;
-+                              kfree_skb(skb);
-+                              goto error;
-+                      } else if (copy > 0 && getfrag(from, data + transhdrlen, offset, copy, fraggap, skb) < 0) {
-+                              err = -EFAULT;
-+                              kfree_skb(skb);
-+                              goto error;
-+                      }
-+
-+                      offset += copy;
-+                      length -= datalen - fraggap;
-+                      transhdrlen = 0;
-+                      exthdrlen = 0;
-+                      dst_exthdrlen = 0;
-+
-+                      /*
-+                       * Put the packet on the pending queue
-+                       */
-+                      __skb_queue_tail(&sk->sk_write_queue, skb);
-+                      continue;
-+              }
-+
-+              if (copy > length)
-+                      copy = length;
-+
-+              if (!(rt->dst.dev->features&NETIF_F_SG)) {
-+                      unsigned int off;
-+
-+                      off = skb->len;
-+                      if (getfrag(from, skb_put(skb, copy),
-+                                              offset, copy, off, skb) < 0) {
-+                              __skb_trim(skb, off);
-+                              err = -EFAULT;
-+                              goto error;
-+                      }
-+              } else {
-+                      int i = skb_shinfo(skb)->nr_frags;
-+                      struct page_frag *pfrag = sk_page_frag(sk);
-+
-+                      err = -ENOMEM;
-+                      if (!sk_page_frag_refill(sk, pfrag))
-+                              goto error;
-+
-+                      if (!skb_can_coalesce(skb, i, pfrag->page,
-+                                            pfrag->offset)) {
-+                              err = -EMSGSIZE;
-+                              if (i == MAX_SKB_FRAGS)
-+                                      goto error;
-+
-+                              __skb_fill_page_desc(skb, i, pfrag->page,
-+                                                   pfrag->offset, 0);
-+                              skb_shinfo(skb)->nr_frags = ++i;
-+                              get_page(pfrag->page);
-+                      }
-+                      copy = min_t(int, copy, pfrag->size - pfrag->offset);
-+                      if (getfrag(from,
-+                                  page_address(pfrag->page) + pfrag->offset,
-+                                  offset, copy, skb->len, skb) < 0)
-+                              goto error_efault;
-+
-+                      pfrag->offset += copy;
-+                      skb_frag_size_add(&skb_shinfo(skb)->frags[i - 1], copy);
-+                      skb->len += copy;
-+                      skb->data_len += copy;
-+                      skb->truesize += copy;
-+                      atomic_add(copy, &sk->sk_wmem_alloc);
-+              }
-+              offset += copy;
-+              length -= copy;
-+      }
-+
-+      return 0;
-+
-+error_efault:
-+      err = -EFAULT;
-+error:
-+      cork->length -= length;
-+      IP6_INC_STATS(sock_net(sk), rt->rt6i_idev, IPSTATS_MIB_OUTDISCARDS);
-+      return err;
-+}
-+EXPORT_SYMBOL_GPL(ip6_append_data);
-+
-+static void ip6_cork_release(struct inet_sock *inet, struct ipv6_pinfo *np)
-+{
-+      if (np->cork.opt) {
-+              kfree(np->cork.opt->dst0opt);
-+              kfree(np->cork.opt->dst1opt);
-+              kfree(np->cork.opt->hopopt);
-+              kfree(np->cork.opt->srcrt);
-+              kfree(np->cork.opt);
-+              np->cork.opt = NULL;
-+      }
-+
-+      if (inet->cork.base.dst) {
-+              dst_release(inet->cork.base.dst);
-+              inet->cork.base.dst = NULL;
-+              inet->cork.base.flags &= ~IPCORK_ALLFRAG;
-+      }
-+      memset(&inet->cork.fl, 0, sizeof(inet->cork.fl));
-+}
-+
-+int ip6_push_pending_frames(struct sock *sk)
-+{
-+      struct sk_buff *skb, *tmp_skb;
-+      struct sk_buff **tail_skb;
-+      struct in6_addr final_dst_buf, *final_dst = &final_dst_buf;
-+      struct inet_sock *inet = inet_sk(sk);
-+      struct ipv6_pinfo *np = inet6_sk(sk);
-+      struct net *net = sock_net(sk);
-+      struct ipv6hdr *hdr;
-+      struct ipv6_txoptions *opt = np->cork.opt;
-+      struct rt6_info *rt = (struct rt6_info *)inet->cork.base.dst;
-+      struct flowi6 *fl6 = &inet->cork.fl.u.ip6;
-+      unsigned char proto = fl6->flowi6_proto;
-+      int err = 0;
-+
-+      if ((skb = __skb_dequeue(&sk->sk_write_queue)) == NULL)
-+              goto out;
-+      tail_skb = &(skb_shinfo(skb)->frag_list);
-+
-+      /* move skb->data to ip header from ext header */
-+      if (skb->data < skb_network_header(skb))
-+              __skb_pull(skb, skb_network_offset(skb));
-+      while ((tmp_skb = __skb_dequeue(&sk->sk_write_queue)) != NULL) {
-+              __skb_pull(tmp_skb, skb_network_header_len(skb));
-+              *tail_skb = tmp_skb;
-+              tail_skb = &(tmp_skb->next);
-+              skb->len += tmp_skb->len;
-+              skb->data_len += tmp_skb->len;
-+              skb->truesize += tmp_skb->truesize;
-+              tmp_skb->destructor = NULL;
-+              tmp_skb->sk = NULL;
-+      }
-+
-+      /* Allow local fragmentation. */
-+      if (np->pmtudisc < IPV6_PMTUDISC_DO)
-+              skb->local_df = 1;
-+
-+      *final_dst = fl6->daddr;
-+      __skb_pull(skb, skb_network_header_len(skb));
-+      if (opt && opt->opt_flen)
-+              ipv6_push_frag_opts(skb, opt, &proto);
-+      if (opt && opt->opt_nflen)
-+              ipv6_push_nfrag_opts(skb, opt, &proto, &final_dst);
-+
-+      skb_push(skb, sizeof(struct ipv6hdr));
-+      skb_reset_network_header(skb);
-+      hdr = ipv6_hdr(skb);
-+
-+      ip6_flow_hdr(hdr, np->cork.tclass, fl6->flowlabel);
-+      hdr->hop_limit = np->cork.hop_limit;
-+      hdr->nexthdr = proto;
-+      hdr->saddr = fl6->saddr;
-+      hdr->daddr = *final_dst;
-+
-+      skb->priority = sk->sk_priority;
-+      skb->mark = sk->sk_mark;
-+
-+      skb_dst_set(skb, dst_clone(&rt->dst));
-+      IP6_UPD_PO_STATS(net, rt->rt6i_idev, IPSTATS_MIB_OUT, skb->len);
-+      if (proto == IPPROTO_ICMPV6) {
-+              struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
-+
-+              ICMP6MSGOUT_INC_STATS_BH(net, idev, icmp6_hdr(skb)->icmp6_type);
-+              ICMP6_INC_STATS_BH(net, idev, ICMP6_MIB_OUTMSGS);
-+      }
-+
-+      err = ip6_local_out(skb);
-+      if (err) {
-+              if (err > 0)
-+                      err = net_xmit_errno(err);
-+              if (err)
-+                      goto error;
-+      }
-+
-+out:
-+      ip6_cork_release(inet, np);
-+      return err;
-+error:
-+      IP6_INC_STATS(net, rt->rt6i_idev, IPSTATS_MIB_OUTDISCARDS);
-+      goto out;
-+}
-+EXPORT_SYMBOL_GPL(ip6_push_pending_frames);
-+
-+void ip6_flush_pending_frames(struct sock *sk)
-+{
-+      struct sk_buff *skb;
-+
-+      while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL) {
-+              if (skb_dst(skb))
-+                      IP6_INC_STATS(sock_net(sk), ip6_dst_idev(skb_dst(skb)),
-+                                    IPSTATS_MIB_OUTDISCARDS);
-+              kfree_skb(skb);
-+      }
-+
-+      ip6_cork_release(inet_sk(sk), inet6_sk(sk));
-+}
-+EXPORT_SYMBOL_GPL(ip6_flush_pending_frames);
-diff -Naur linux-3.10.30.org/net/netfilter/core.c linux-3.10.30/net/netfilter/core.c
---- linux-3.10.30.org/net/netfilter/core.c     2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/net/netfilter/core.c 2014-02-14 20:29:05.392738001 +0100
-@@ -191,9 +191,11 @@
-               ret = NF_DROP_GETERR(verdict);
-               if (ret == 0)
-                       ret = -EPERM;
--      } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE) {
-+      } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE ||
-+                 (verdict & NF_VERDICT_MASK) == NF_IMQ_QUEUE) {
-               int err = nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
--                                              verdict >> NF_VERDICT_QBITS);
-+                                              verdict >> NF_VERDICT_QBITS,
-+                                              verdict & NF_VERDICT_MASK);
-               if (err < 0) {
-                       if (err == -ECANCELED)
-                               goto next_hook;
-diff -Naur linux-3.10.30.org/net/netfilter/Kconfig linux-3.10.30/net/netfilter/Kconfig
---- linux-3.10.30.org/net/netfilter/Kconfig    2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/net/netfilter/Kconfig        2014-02-14 20:29:05.396071847 +0100
-@@ -641,6 +641,18 @@
-         To compile it as a module, choose M here.  If unsure, say N.
-+config NETFILTER_XT_TARGET_IMQ
-+        tristate '"IMQ" target support'
-+      depends on NETFILTER_XTABLES
-+      depends on IP_NF_MANGLE || IP6_NF_MANGLE
-+      select IMQ
-+      default m if NETFILTER_ADVANCED=n
-+        help
-+          This option adds a `IMQ' target which is used to specify if and
-+          to which imq device packets should get enqueued/dequeued.
-+
-+          To compile it as a module, choose M here.  If unsure, say N.
-+
- config NETFILTER_XT_TARGET_MARK
-       tristate '"MARK" target support'
-       depends on NETFILTER_ADVANCED
-diff -Naur linux-3.10.30.org/net/netfilter/Makefile linux-3.10.30/net/netfilter/Makefile
---- linux-3.10.30.org/net/netfilter/Makefile   2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/net/netfilter/Makefile       2014-02-14 20:29:05.396071847 +0100
-@@ -82,6 +82,7 @@
- obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_HMARK) += xt_HMARK.o
-+obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_LOG) += xt_LOG.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NETMAP) += xt_NETMAP.o
-diff -Naur linux-3.10.30.org/net/netfilter/nf_internals.h linux-3.10.30/net/netfilter/nf_internals.h
---- linux-3.10.30.org/net/netfilter/nf_internals.h     2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/net/netfilter/nf_internals.h 2014-02-14 20:29:05.396071847 +0100
-@@ -29,7 +29,7 @@
-                   struct net_device *indev,
-                   struct net_device *outdev,
-                   int (*okfn)(struct sk_buff *),
--                  unsigned int queuenum);
-+                  unsigned int queuenum, unsigned int queuetype);
- extern int __init netfilter_queue_init(void);
- /* nf_log.c */
-diff -Naur linux-3.10.30.org/net/netfilter/nf_queue.c linux-3.10.30/net/netfilter/nf_queue.c
---- linux-3.10.30.org/net/netfilter/nf_queue.c 2014-02-13 22:48:15.000000000 +0100
-+++ linux-3.10.30/net/netfilter/nf_queue.c     2014-02-14 20:29:05.396071847 +0100
-@@ -27,6 +27,23 @@
-  */
- static const struct nf_queue_handler __rcu *queue_handler __read_mostly;
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static const struct nf_queue_handler __rcu *queue_imq_handler __read_mostly;
-+
-+void nf_register_queue_imq_handler(const struct nf_queue_handler *qh)
-+{
-+      rcu_assign_pointer(queue_imq_handler, qh);
-+}
-+EXPORT_SYMBOL_GPL(nf_register_queue_imq_handler);
-+
-+void nf_unregister_queue_imq_handler(void)
-+{
-+      RCU_INIT_POINTER(queue_imq_handler, NULL);
-+      synchronize_rcu();
-+}
-+EXPORT_SYMBOL_GPL(nf_unregister_queue_imq_handler);
-+#endif
-+
- /* return EBUSY when somebody else is registered, return EEXIST if the
-  * same handler is registered, return 0 in case of success. */
- void nf_register_queue_handler(const struct nf_queue_handler *qh)
-@@ -105,7 +122,8 @@
-                     struct net_device *indev,
-                     struct net_device *outdev,
-                     int (*okfn)(struct sk_buff *),
--                    unsigned int queuenum)
-+                    unsigned int queuenum,
-+                    unsigned int queuetype)
- {
-       int status = -ENOENT;
-       struct nf_queue_entry *entry = NULL;
-@@ -115,7 +133,17 @@
-       /* QUEUE == DROP if no one is waiting, to be safe. */
-       rcu_read_lock();
--      qh = rcu_dereference(queue_handler);
-+      if (queuetype == NF_IMQ_QUEUE) {
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+              qh = rcu_dereference(queue_imq_handler);
-+#else
-+              BUG();
-+              goto err_unlock;
-+#endif
-+      } else {
-+              qh = rcu_dereference(queue_handler);
-+      }
-+
-       if (!qh) {
-               status = -ESRCH;
-               goto err_unlock;
-@@ -205,9 +233,11 @@
-               local_bh_enable();
-               break;
-       case NF_QUEUE:
-+      case NF_IMQ_QUEUE:
-               err = nf_queue(skb, elem, entry->pf, entry->hook,
-                               entry->indev, entry->outdev, entry->okfn,
--                              verdict >> NF_VERDICT_QBITS);
-+                              verdict >> NF_VERDICT_QBITS,
-+                              verdict & NF_VERDICT_MASK);
-               if (err < 0) {
-                       if (err == -ECANCELED)
-                               goto next_hook;
-diff -Naur linux-3.10.30.org/net/netfilter/xt_IMQ.c linux-3.10.30/net/netfilter/xt_IMQ.c
---- linux-3.10.30.org/net/netfilter/xt_IMQ.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.30/net/netfilter/xt_IMQ.c       2014-02-14 20:29:05.396071847 +0100
-@@ -0,0 +1,72 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter/x_tables.h>
-+#include <linux/netfilter/xt_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff *pskb,
-+                              const struct xt_action_param *par)
-+{
-+      const struct xt_imq_info *mr = par->targinfo;
-+
-+      pskb->imq_flags = (mr->todev & IMQ_F_IFMASK) | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static int imq_checkentry(const struct xt_tgchk_param *par)
-+{
-+      struct xt_imq_info *mr = par->targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS - 1) {
-+              pr_warn("IMQ: invalid device specified, highest is %u\n",
-+                      IMQ_MAX_DEVS - 1);
-+              return -EINVAL;
-+      }
-+
-+      return 0;
-+}
-+
-+static struct xt_target xt_imq_reg[] __read_mostly = {
-+      {
-+              .name           = "IMQ",
-+              .family         = AF_INET,
-+              .checkentry     = imq_checkentry,
-+              .target         = imq_target,
-+              .targetsize     = sizeof(struct xt_imq_info),
-+              .table          = "mangle",
-+              .me             = THIS_MODULE
-+      },
-+      {
-+              .name           = "IMQ",
-+              .family         = AF_INET6,
-+              .checkentry     = imq_checkentry,
-+              .target         = imq_target,
-+              .targetsize     = sizeof(struct xt_imq_info),
-+              .table          = "mangle",
-+              .me             = THIS_MODULE
-+      },
-+};
-+
-+static int __init imq_init(void)
-+{
-+      return xt_register_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+static void __exit imq_fini(void)
-+{
-+      xt_unregister_targets(xt_imq_reg, ARRAY_SIZE(xt_imq_reg));
-+}
-+
-+module_init(imq_init);
-+module_exit(imq_fini);
-+
-+MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("ipt_IMQ");
-+MODULE_ALIAS("ip6t_IMQ");
-+
diff --git a/src/patches/linux-3.10.39-pie_packet_sch.patch b/src/patches/linux-3.10.39-pie_packet_sch.patch
deleted file mode 100644 (file)
index 6bec374..0000000
+++ /dev/null
@@ -1,674 +0,0 @@
-From d4b36210c2e6ecef0ce52fb6c18c51144f5c2d88 Mon Sep 17 00:00:00 2001
-From: Vijay Subramanian <vijaynsu@cisco.com>
-Date: Sat, 4 Jan 2014 17:33:55 -0800
-Subject: net: pkt_sched: PIE AQM scheme
-
-Proportional Integral controller Enhanced (PIE) is a scheduler to address the
-bufferbloat problem.
-
->From the IETF draft below:
-" Bufferbloat is a phenomenon where excess buffers in the network cause high
-latency and jitter. As more and more interactive applications (e.g. voice over
-IP, real time video streaming and financial transactions) run in the Internet,
-high latency and jitter degrade application performance. There is a pressing
-need to design intelligent queue management schemes that can control latency and
-jitter; and hence provide desirable quality of service to users.
-
-We present here a lightweight design, PIE(Proportional Integral controller
-Enhanced) that can effectively control the average queueing latency to a target
-value. Simulation results, theoretical analysis and Linux testbed results have
-shown that PIE can ensure low latency and achieve high link utilization under
-various congestion situations. The design does not require per-packet
-timestamp, so it incurs very small overhead and is simple enough to implement
-in both hardware and software.  "
-
-Many thanks to Dave Taht for extensive feedback, reviews, testing and
-suggestions. Thanks also to Stephen Hemminger and Eric Dumazet for reviews and
-suggestions.  Naeem Khademi and Dave Taht independently contributed to ECN
-support.
-
-For more information, please see technical paper about PIE in the IEEE
-Conference on High Performance Switching and Routing 2013. A copy of the paper
-can be found at ftp://ftpeng.cisco.com/pie/.
-
-Please also refer to the IETF draft submission at
-http://tools.ietf.org/html/draft-pan-tsvwg-pie-00
-
-All relevant code, documents and test scripts and results can be found at
-ftp://ftpeng.cisco.com/pie/.
-
-For problems with the iproute2/tc or Linux kernel code, please contact Vijay
-Subramanian (vijaynsu@cisco.com or subramanian.vijay@gmail.com) Mythili Prabhu
-(mysuryan@cisco.com)
-
-Signed-off-by: Vijay Subramanian <subramanian.vijay@gmail.com>
-Signed-off-by: Mythili Prabhu <mysuryan@cisco.com>
-CC: Dave Taht <dave.taht@bufferbloat.net>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-
-diff -Naur linux-3.10.39.org/include/uapi/linux/pkt_sched.h linux-3.10.39/include/uapi/linux/pkt_sched.h
---- linux-3.10.39.org/include/uapi/linux/pkt_sched.h   2014-05-06 16:56:24.000000000 +0200
-+++ linux-3.10.39/include/uapi/linux/pkt_sched.h       2014-05-15 10:33:08.296828477 +0200
-@@ -744,4 +744,29 @@
-       };
- };
-+/* PIE */
-+enum {
-+      TCA_PIE_UNSPEC,
-+      TCA_PIE_TARGET,
-+      TCA_PIE_LIMIT,
-+      TCA_PIE_TUPDATE,
-+      TCA_PIE_ALPHA,
-+      TCA_PIE_BETA,
-+      TCA_PIE_ECN,
-+      TCA_PIE_BYTEMODE,
-+      __TCA_PIE_MAX
-+};
-+#define TCA_PIE_MAX   (__TCA_PIE_MAX - 1)
-+
-+struct tc_pie_xstats {
-+      __u32 prob;             /* current probability */
-+      __u32 delay;            /* current delay in ms */
-+      __u32 avg_dq_rate;      /* current average dq_rate in bits/pie_time */
-+      __u32 packets_in;       /* total number of packets enqueued */
-+      __u32 dropped;          /* packets dropped due to pie_action */
-+      __u32 overlimit;        /* dropped due to lack of space in queue */
-+      __u32 maxq;             /* maximum queue size */
-+      __u32 ecn_mark;         /* packets marked with ecn*/
-+};
-+
- #endif
-diff -Naur linux-3.10.39.org/net/sched/Kconfig linux-3.10.39/net/sched/Kconfig
---- linux-3.10.39.org/net/sched/Kconfig        2014-05-06 16:56:24.000000000 +0200
-+++ linux-3.10.39/net/sched/Kconfig    2014-05-15 09:30:29.866632326 +0200
-@@ -272,6 +272,19 @@
-         If unsure, say N.
-+config NET_SCH_PIE
-+      tristate "Proportional Integral controller Enhanced (PIE) scheduler"
-+      help
-+        Say Y here if you want to use the Proportional Integral controller
-+        Enhanced scheduler packet scheduling algorithm.
-+        For more information, please see
-+        http://tools.ietf.org/html/draft-pan-tsvwg-pie-00
-+
-+        To compile this driver as a module, choose M here: the module
-+        will be called sch_pie.
-+
-+        If unsure, say N.
-+
- config NET_SCH_INGRESS
-       tristate "Ingress Qdisc"
-       depends on NET_CLS_ACT
-diff -Naur linux-3.10.39.org/net/sched/Makefile linux-3.10.39/net/sched/Makefile
---- linux-3.10.39.org/net/sched/Makefile       2014-05-06 16:56:24.000000000 +0200
-+++ linux-3.10.39/net/sched/Makefile   2014-05-15 10:34:55.533502406 +0200
-@@ -39,6 +39,7 @@
- obj-$(CONFIG_NET_SCH_QFQ)     += sch_qfq.o
- obj-$(CONFIG_NET_SCH_CODEL)   += sch_codel.o
- obj-$(CONFIG_NET_SCH_FQ_CODEL)        += sch_fq_codel.o
-+obj-$(CONFIG_NET_SCH_PIE)     += sch_pie.o
- obj-$(CONFIG_NET_CLS_U32)     += cls_u32.o
- obj-$(CONFIG_NET_CLS_ROUTE4)  += cls_route.o
-diff -Naur linux-3.10.39.org/net/sched/sch_pie.c linux-3.10.39/net/sched/sch_pie.c
---- linux-3.10.39.org/net/sched/sch_pie.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.39/net/sched/sch_pie.c  2014-05-15 09:30:29.869966724 +0200
-@@ -0,0 +1,555 @@
-+/* Copyright (C) 2013 Cisco Systems, Inc, 2013.
-+ *
-+ * 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.
-+ *
-+ * 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.
-+ *
-+ * Author: Vijay Subramanian <vijaynsu@cisco.com>
-+ * Author: Mythili Prabhu <mysuryan@cisco.com>
-+ *
-+ * ECN support is added by Naeem Khademi <naeemk@ifi.uio.no>
-+ * University of Oslo, Norway.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/skbuff.h>
-+#include <net/pkt_sched.h>
-+#include <net/inet_ecn.h>
-+
-+#define QUEUE_THRESHOLD 10000
-+#define DQCOUNT_INVALID -1
-+#define MAX_PROB  0xffffffff
-+#define PIE_SCALE 8
-+
-+/* parameters used */
-+struct pie_params {
-+      psched_time_t target;   /* user specified target delay in pschedtime */
-+      u32 tupdate;            /* timer frequency (in jiffies) */
-+      u32 limit;              /* number of packets that can be enqueued */
-+      u32 alpha;              /* alpha and beta are between -4 and 4 */
-+      u32 beta;               /* and are used for shift relative to 1 */
-+      bool ecn;               /* true if ecn is enabled */
-+      bool bytemode;          /* to scale drop early prob based on pkt size */
-+};
-+
-+/* variables used */
-+struct pie_vars {
-+      u32 prob;               /* probability but scaled by u32 limit. */
-+      psched_time_t burst_time;
-+      psched_time_t qdelay;
-+      psched_time_t qdelay_old;
-+      u64 dq_count;           /* measured in bytes */
-+      psched_time_t dq_tstamp;        /* drain rate */
-+      u32 avg_dq_rate;        /* bytes per pschedtime tick,scaled */
-+      u32 qlen_old;           /* in bytes */
-+};
-+
-+/* statistics gathering */
-+struct pie_stats {
-+      u32 packets_in;         /* total number of packets enqueued */
-+      u32 dropped;            /* packets dropped due to pie_action */
-+      u32 overlimit;          /* dropped due to lack of space in queue */
-+      u32 maxq;               /* maximum queue size */
-+      u32 ecn_mark;           /* packets marked with ECN */
-+};
-+
-+/* private data for the Qdisc */
-+struct pie_sched_data {
-+      struct pie_params params;
-+      struct pie_vars vars;
-+      struct pie_stats stats;
-+      struct timer_list adapt_timer;
-+};
-+
-+static void pie_params_init(struct pie_params *params)
-+{
-+      params->alpha = 2;
-+      params->beta = 20;
-+      params->tupdate = usecs_to_jiffies(30 * USEC_PER_MSEC); /* 30 ms */
-+      params->limit = 1000;   /* default of 1000 packets */
-+      params->target = PSCHED_NS2TICKS(20 * NSEC_PER_MSEC);   /* 20 ms */
-+      params->ecn = false;
-+      params->bytemode = false;
-+}
-+
-+static void pie_vars_init(struct pie_vars *vars)
-+{
-+      vars->dq_count = DQCOUNT_INVALID;
-+      vars->avg_dq_rate = 0;
-+      /* default of 100 ms in pschedtime */
-+      vars->burst_time = PSCHED_NS2TICKS(100 * NSEC_PER_MSEC);
-+}
-+
-+static bool drop_early(struct Qdisc *sch, u32 packet_size)
-+{
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      u32 rnd;
-+      u32 local_prob = q->vars.prob;
-+      u32 mtu = psched_mtu(qdisc_dev(sch));
-+
-+      /* If there is still burst allowance left skip random early drop */
-+      if (q->vars.burst_time > 0)
-+              return false;
-+
-+      /* If current delay is less than half of target, and
-+       * if drop prob is low already, disable early_drop
-+       */
-+      if ((q->vars.qdelay < q->params.target / 2)
-+          && (q->vars.prob < MAX_PROB / 5))
-+              return false;
-+
-+      /* If we have fewer than 2 mtu-sized packets, disable drop_early,
-+       * similar to min_th in RED
-+       */
-+      if (sch->qstats.backlog < 2 * mtu)
-+              return false;
-+
-+      /* If bytemode is turned on, use packet size to compute new
-+       * probablity. Smaller packets will have lower drop prob in this case
-+       */
-+      if (q->params.bytemode && packet_size <= mtu)
-+              local_prob = (local_prob / mtu) * packet_size;
-+      else
-+              local_prob = q->vars.prob;
-+
-+      rnd = net_random();
-+      if (rnd < local_prob)
-+              return true;
-+
-+      return false;
-+}
-+
-+static int pie_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch)
-+{
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      bool enqueue = false;
-+
-+      if (unlikely(qdisc_qlen(sch) >= sch->limit)) {
-+              q->stats.overlimit++;
-+              goto out;
-+      }
-+
-+      if (!drop_early(sch, skb->len)) {
-+              enqueue = true;
-+      } else if (q->params.ecn && (q->vars.prob <= MAX_PROB / 10) &&
-+                 INET_ECN_set_ce(skb)) {
-+              /* If packet is ecn capable, mark it if drop probability
-+               * is lower than 10%, else drop it.
-+               */
-+              q->stats.ecn_mark++;
-+              enqueue = true;
-+      }
-+
-+      /* we can enqueue the packet */
-+      if (enqueue) {
-+              q->stats.packets_in++;
-+              if (qdisc_qlen(sch) > q->stats.maxq)
-+                      q->stats.maxq = qdisc_qlen(sch);
-+
-+              return qdisc_enqueue_tail(skb, sch);
-+      }
-+
-+out:
-+      q->stats.dropped++;
-+      return qdisc_drop(skb, sch);
-+}
-+
-+static const struct nla_policy pie_policy[TCA_PIE_MAX + 1] = {
-+      [TCA_PIE_TARGET] = {.type = NLA_U32},
-+      [TCA_PIE_LIMIT] = {.type = NLA_U32},
-+      [TCA_PIE_TUPDATE] = {.type = NLA_U32},
-+      [TCA_PIE_ALPHA] = {.type = NLA_U32},
-+      [TCA_PIE_BETA] = {.type = NLA_U32},
-+      [TCA_PIE_ECN] = {.type = NLA_U32},
-+      [TCA_PIE_BYTEMODE] = {.type = NLA_U32},
-+};
-+
-+static int pie_change(struct Qdisc *sch, struct nlattr *opt)
-+{
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      struct nlattr *tb[TCA_PIE_MAX + 1];
-+      unsigned int qlen;
-+      int err;
-+
-+      if (!opt)
-+              return -EINVAL;
-+
-+      err = nla_parse_nested(tb, TCA_PIE_MAX, opt, pie_policy);
-+      if (err < 0)
-+              return err;
-+
-+      sch_tree_lock(sch);
-+
-+      /* convert from microseconds to pschedtime */
-+      if (tb[TCA_PIE_TARGET]) {
-+              /* target is in us */
-+              u32 target = nla_get_u32(tb[TCA_PIE_TARGET]);
-+
-+              /* convert to pschedtime */
-+              q->params.target = PSCHED_NS2TICKS((u64)target * NSEC_PER_USEC);
-+      }
-+
-+      /* tupdate is in jiffies */
-+      if (tb[TCA_PIE_TUPDATE])
-+              q->params.tupdate = usecs_to_jiffies(nla_get_u32(tb[TCA_PIE_TUPDATE]));
-+
-+      if (tb[TCA_PIE_LIMIT]) {
-+              u32 limit = nla_get_u32(tb[TCA_PIE_LIMIT]);
-+
-+              q->params.limit = limit;
-+              sch->limit = limit;
-+      }
-+
-+      if (tb[TCA_PIE_ALPHA])
-+              q->params.alpha = nla_get_u32(tb[TCA_PIE_ALPHA]);
-+
-+      if (tb[TCA_PIE_BETA])
-+              q->params.beta = nla_get_u32(tb[TCA_PIE_BETA]);
-+
-+      if (tb[TCA_PIE_ECN])
-+              q->params.ecn = nla_get_u32(tb[TCA_PIE_ECN]);
-+
-+      if (tb[TCA_PIE_BYTEMODE])
-+              q->params.bytemode = nla_get_u32(tb[TCA_PIE_BYTEMODE]);
-+
-+      /* Drop excess packets if new limit is lower */
-+      qlen = sch->q.qlen;
-+      while (sch->q.qlen > sch->limit) {
-+              struct sk_buff *skb = __skb_dequeue(&sch->q);
-+
-+              sch->qstats.backlog -= qdisc_pkt_len(skb);
-+              qdisc_drop(skb, sch);
-+      }
-+      qdisc_tree_decrease_qlen(sch, qlen - sch->q.qlen);
-+
-+      sch_tree_unlock(sch);
-+      return 0;
-+}
-+
-+static void pie_process_dequeue(struct Qdisc *sch, struct sk_buff *skb)
-+{
-+
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      int qlen = sch->qstats.backlog; /* current queue size in bytes */
-+
-+      /* If current queue is about 10 packets or more and dq_count is unset
-+       * we have enough packets to calculate the drain rate. Save
-+       * current time as dq_tstamp and start measurement cycle.
-+       */
-+      if (qlen >= QUEUE_THRESHOLD && q->vars.dq_count == DQCOUNT_INVALID) {
-+              q->vars.dq_tstamp = psched_get_time();
-+              q->vars.dq_count = 0;
-+      }
-+
-+      /* Calculate the average drain rate from this value.  If queue length
-+       * has receded to a small value viz., <= QUEUE_THRESHOLD bytes,reset
-+       * the dq_count to -1 as we don't have enough packets to calculate the
-+       * drain rate anymore The following if block is entered only when we
-+       * have a substantial queue built up (QUEUE_THRESHOLD bytes or more)
-+       * and we calculate the drain rate for the threshold here.  dq_count is
-+       * in bytes, time difference in psched_time, hence rate is in
-+       * bytes/psched_time.
-+       */
-+      if (q->vars.dq_count != DQCOUNT_INVALID) {
-+              q->vars.dq_count += skb->len;
-+
-+              if (q->vars.dq_count >= QUEUE_THRESHOLD) {
-+                      psched_time_t now = psched_get_time();
-+                      u32 dtime = now - q->vars.dq_tstamp;
-+                      u32 count = q->vars.dq_count << PIE_SCALE;
-+
-+                      if (dtime == 0)
-+                              return;
-+
-+                      count = count / dtime;
-+
-+                      if (q->vars.avg_dq_rate == 0)
-+                              q->vars.avg_dq_rate = count;
-+                      else
-+                              q->vars.avg_dq_rate =
-+                                  (q->vars.avg_dq_rate -
-+                                   (q->vars.avg_dq_rate >> 3)) + (count >> 3);
-+
-+                      /* If the queue has receded below the threshold, we hold
-+                       * on to the last drain rate calculated, else we reset
-+                       * dq_count to 0 to re-enter the if block when the next
-+                       * packet is dequeued
-+                       */
-+                      if (qlen < QUEUE_THRESHOLD)
-+                              q->vars.dq_count = DQCOUNT_INVALID;
-+                      else {
-+                              q->vars.dq_count = 0;
-+                              q->vars.dq_tstamp = psched_get_time();
-+                      }
-+
-+                      if (q->vars.burst_time > 0) {
-+                              if (q->vars.burst_time > dtime)
-+                                      q->vars.burst_time -= dtime;
-+                              else
-+                                      q->vars.burst_time = 0;
-+                      }
-+              }
-+      }
-+}
-+
-+static void calculate_probability(struct Qdisc *sch)
-+{
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      u32 qlen = sch->qstats.backlog; /* queue size in bytes */
-+      psched_time_t qdelay = 0;       /* in pschedtime */
-+      psched_time_t qdelay_old = q->vars.qdelay;      /* in pschedtime */
-+      s32 delta = 0;          /* determines the change in probability */
-+      u32 oldprob;
-+      u32 alpha, beta;
-+      bool update_prob = true;
-+
-+      q->vars.qdelay_old = q->vars.qdelay;
-+
-+      if (q->vars.avg_dq_rate > 0)
-+              qdelay = (qlen << PIE_SCALE) / q->vars.avg_dq_rate;
-+      else
-+              qdelay = 0;
-+
-+      /* If qdelay is zero and qlen is not, it means qlen is very small, less
-+       * than dequeue_rate, so we do not update probabilty in this round
-+       */
-+      if (qdelay == 0 && qlen != 0)
-+              update_prob = false;
-+
-+      /* Add ranges for alpha and beta, more aggressive for high dropping
-+       * mode and gentle steps for light dropping mode
-+       * In light dropping mode, take gentle steps; in medium dropping mode,
-+       * take medium steps; in high dropping mode, take big steps.
-+       */
-+      if (q->vars.prob < MAX_PROB / 100) {
-+              alpha =
-+                  (q->params.alpha * (MAX_PROB / PSCHED_TICKS_PER_SEC)) >> 7;
-+              beta =
-+                  (q->params.beta * (MAX_PROB / PSCHED_TICKS_PER_SEC)) >> 7;
-+      } else if (q->vars.prob < MAX_PROB / 10) {
-+              alpha =
-+                  (q->params.alpha * (MAX_PROB / PSCHED_TICKS_PER_SEC)) >> 5;
-+              beta =
-+                  (q->params.beta * (MAX_PROB / PSCHED_TICKS_PER_SEC)) >> 5;
-+      } else {
-+              alpha =
-+                  (q->params.alpha * (MAX_PROB / PSCHED_TICKS_PER_SEC)) >> 4;
-+              beta =
-+                  (q->params.beta * (MAX_PROB / PSCHED_TICKS_PER_SEC)) >> 4;
-+      }
-+
-+      /* alpha and beta should be between 0 and 32, in multiples of 1/16 */
-+      delta += alpha * ((qdelay - q->params.target));
-+      delta += beta * ((qdelay - qdelay_old));
-+
-+      oldprob = q->vars.prob;
-+
-+      /* to ensure we increase probability in steps of no more than 2% */
-+      if (delta > (s32) (MAX_PROB / (100 / 2)) &&
-+          q->vars.prob >= MAX_PROB / 10)
-+              delta = (MAX_PROB / 100) * 2;
-+
-+      /* Non-linear drop:
-+       * Tune drop probability to increase quickly for high delays(>= 250ms)
-+       * 250ms is derived through experiments and provides error protection
-+       */
-+
-+      if (qdelay > (PSCHED_NS2TICKS(250 * NSEC_PER_MSEC)))
-+              delta += MAX_PROB / (100 / 2);
-+
-+      q->vars.prob += delta;
-+
-+      if (delta > 0) {
-+              /* prevent overflow */
-+              if (q->vars.prob < oldprob) {
-+                      q->vars.prob = MAX_PROB;
-+                      /* Prevent normalization error. If probability is at
-+                       * maximum value already, we normalize it here, and
-+                       * skip the check to do a non-linear drop in the next
-+                       * section.
-+                       */
-+                      update_prob = false;
-+              }
-+      } else {
-+              /* prevent underflow */
-+              if (q->vars.prob > oldprob)
-+                      q->vars.prob = 0;
-+      }
-+
-+      /* Non-linear drop in probability: Reduce drop probability quickly if
-+       * delay is 0 for 2 consecutive Tupdate periods.
-+       */
-+
-+      if ((qdelay == 0) && (qdelay_old == 0) && update_prob)
-+              q->vars.prob = (q->vars.prob * 98) / 100;
-+
-+      q->vars.qdelay = qdelay;
-+      q->vars.qlen_old = qlen;
-+
-+      /* We restart the measurement cycle if the following conditions are met
-+       * 1. If the delay has been low for 2 consecutive Tupdate periods
-+       * 2. Calculated drop probability is zero
-+       * 3. We have atleast one estimate for the avg_dq_rate ie.,
-+       *    is a non-zero value
-+       */
-+      if ((q->vars.qdelay < q->params.target / 2) &&
-+          (q->vars.qdelay_old < q->params.target / 2) &&
-+          (q->vars.prob == 0) &&
-+          (q->vars.avg_dq_rate > 0))
-+              pie_vars_init(&q->vars);
-+}
-+
-+static void pie_timer(unsigned long arg)
-+{
-+      struct Qdisc *sch = (struct Qdisc *)arg;
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      spinlock_t *root_lock = qdisc_lock(qdisc_root_sleeping(sch));
-+
-+      spin_lock(root_lock);
-+      calculate_probability(sch);
-+
-+      /* reset the timer to fire after 'tupdate'. tupdate is in jiffies. */
-+      if (q->params.tupdate)
-+              mod_timer(&q->adapt_timer, jiffies + q->params.tupdate);
-+      spin_unlock(root_lock);
-+
-+}
-+
-+static int pie_init(struct Qdisc *sch, struct nlattr *opt)
-+{
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+
-+      pie_params_init(&q->params);
-+      pie_vars_init(&q->vars);
-+      sch->limit = q->params.limit;
-+
-+      setup_timer(&q->adapt_timer, pie_timer, (unsigned long)sch);
-+      mod_timer(&q->adapt_timer, jiffies + HZ / 2);
-+
-+      if (opt) {
-+              int err = pie_change(sch, opt);
-+
-+              if (err)
-+                      return err;
-+      }
-+
-+      return 0;
-+}
-+
-+static int pie_dump(struct Qdisc *sch, struct sk_buff *skb)
-+{
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      struct nlattr *opts;
-+
-+      opts = nla_nest_start(skb, TCA_OPTIONS);
-+      if (opts == NULL)
-+              goto nla_put_failure;
-+
-+      /* convert target from pschedtime to us */
-+      if (nla_put_u32(skb, TCA_PIE_TARGET,
-+                      ((u32) PSCHED_TICKS2NS(q->params.target)) /
-+                      NSEC_PER_USEC) ||
-+          nla_put_u32(skb, TCA_PIE_LIMIT, sch->limit) ||
-+          nla_put_u32(skb, TCA_PIE_TUPDATE, jiffies_to_usecs(q->params.tupdate)) ||
-+          nla_put_u32(skb, TCA_PIE_ALPHA, q->params.alpha) ||
-+          nla_put_u32(skb, TCA_PIE_BETA, q->params.beta) ||
-+          nla_put_u32(skb, TCA_PIE_ECN, q->params.ecn) ||
-+          nla_put_u32(skb, TCA_PIE_BYTEMODE, q->params.bytemode))
-+              goto nla_put_failure;
-+
-+      return nla_nest_end(skb, opts);
-+
-+nla_put_failure:
-+      nla_nest_cancel(skb, opts);
-+      return -1;
-+
-+}
-+
-+static int pie_dump_stats(struct Qdisc *sch, struct gnet_dump *d)
-+{
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      struct tc_pie_xstats st = {
-+              .prob           = q->vars.prob,
-+              .delay          = ((u32) PSCHED_TICKS2NS(q->vars.qdelay)) /
-+                                 NSEC_PER_USEC,
-+              /* unscale and return dq_rate in bytes per sec */
-+              .avg_dq_rate    = q->vars.avg_dq_rate *
-+                                (PSCHED_TICKS_PER_SEC) >> PIE_SCALE,
-+              .packets_in     = q->stats.packets_in,
-+              .overlimit      = q->stats.overlimit,
-+              .maxq           = q->stats.maxq,
-+              .dropped        = q->stats.dropped,
-+              .ecn_mark       = q->stats.ecn_mark,
-+      };
-+
-+      return gnet_stats_copy_app(d, &st, sizeof(st));
-+}
-+
-+static struct sk_buff *pie_qdisc_dequeue(struct Qdisc *sch)
-+{
-+      struct sk_buff *skb;
-+      skb = __qdisc_dequeue_head(sch, &sch->q);
-+
-+      if (!skb)
-+              return NULL;
-+
-+      pie_process_dequeue(sch, skb);
-+      return skb;
-+}
-+
-+static void pie_reset(struct Qdisc *sch)
-+{
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      qdisc_reset_queue(sch);
-+      pie_vars_init(&q->vars);
-+}
-+
-+static void pie_destroy(struct Qdisc *sch)
-+{
-+      struct pie_sched_data *q = qdisc_priv(sch);
-+      q->params.tupdate = 0;
-+      del_timer_sync(&q->adapt_timer);
-+}
-+
-+static struct Qdisc_ops pie_qdisc_ops __read_mostly = {
-+      .id = "pie",
-+      .priv_size      = sizeof(struct pie_sched_data),
-+      .enqueue        = pie_qdisc_enqueue,
-+      .dequeue        = pie_qdisc_dequeue,
-+      .peek           = qdisc_peek_dequeued,
-+      .init           = pie_init,
-+      .destroy        = pie_destroy,
-+      .reset          = pie_reset,
-+      .change         = pie_change,
-+      .dump           = pie_dump,
-+      .dump_stats     = pie_dump_stats,
-+      .owner          = THIS_MODULE,
-+};
-+
-+static int __init pie_module_init(void)
-+{
-+      return register_qdisc(&pie_qdisc_ops);
-+}
-+
-+static void __exit pie_module_exit(void)
-+{
-+      unregister_qdisc(&pie_qdisc_ops);
-+}
-+
-+module_init(pie_module_init);
-+module_exit(pie_module_exit);
-+
-+MODULE_DESCRIPTION("Proportional Integral controller Enhanced (PIE) scheduler");
-+MODULE_AUTHOR("Vijay Subramanian");
-+MODULE_AUTHOR("Mythili Prabhu");
-+MODULE_LICENSE("GPL");
diff --git a/src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch b/src/patches/linux-3.10.55-rt2800usb-change_queue_warn_to_debug.patch
new file mode 100644 (file)
index 0000000..a03642d
--- /dev/null
@@ -0,0 +1,30 @@
+diff -Naur linux-3.10.55.org/drivers/net/wireless/rt2x00/rt2800usb.c linux-3.10.55/drivers/net/wireless/rt2x00/rt2800usb.c
+--- linux-3.10.55.org/drivers/net/wireless/rt2x00/rt2800usb.c  2014-09-17 18:04:18.000000000 +0200
++++ linux-3.10.55/drivers/net/wireless/rt2x00/rt2800usb.c      2014-10-05 19:25:25.070972490 +0200
+@@ -128,7 +128,7 @@
+       tout = time_after(jiffies, entry->last_action + msecs_to_jiffies(100));
+       if (unlikely(tout))
+-              rt2x00_warn(entry->queue->rt2x00dev,
++              rt2x00_dbg(entry->queue->rt2x00dev,
+                           "TX status timeout for entry %d in queue %d\n",
+                           entry->entry_idx, entry->queue->qid);
+       return tout;
+@@ -569,7 +569,7 @@
+               queue = rt2x00queue_get_tx_queue(rt2x00dev, qid);
+               if (unlikely(rt2x00queue_empty(queue))) {
+-                      rt2x00_warn(rt2x00dev, "Got TX status for an empty queue %u, dropping\n",
++                      rt2x00_dbg(rt2x00dev, "Got TX status for an empty queue %u, dropping\n",
+                                   qid);
+                       break;
+               }
+@@ -578,7 +578,7 @@
+               if (unlikely(test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) ||
+                            !test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags))) {
+-                      rt2x00_warn(rt2x00dev, "Data pending for entry %u in queue %u\n",
++                      rt2x00_dbg(rt2x00dev, "Data pending for entry %u in queue %u\n",
+                                   entry->entry_idx, qid);
+                       break;
+               }
diff --git a/src/patches/linux-3.10.y-usbnet_mcs7830_rework_link_detect.patch b/src/patches/linux-3.10.y-usbnet_mcs7830_rework_link_detect.patch
deleted file mode 100644 (file)
index 2114ae8..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-From 4e9792dc8ab29175295c79c35f9f6fbd2d453b35 Mon Sep 17 00:00:00 2001
-From: Octavian Purdila <octavian.purdila@intel.com>
-Date: Mon, 23 Dec 2013 19:06:31 +0200
-Subject: [PATCH] usbnet: mcs7830: rework link state detection
-
-Even with the quirks in commit dabdaf0c (mcs7830: Fix link state
-detection) there are still spurious link-down events for some chips
-where the false link-down events count go over a few hundreds.
-
-This patch takes a more conservative approach and only looks at
-link-down events where the link-down state is not combined with other
-states (e.g. half/full speed, pending frames in SRAM or TX status
-information valid). In all other cases we assume the link is up.
-
-Tested on MCS7830CV-DA (USB ID 9710:7830).
-
-Cc: Ondrej Zary <linux@rainbow-software.org>
-Cc: Michael Leun <lkml20120218@newton.leun.net>
-Cc: Ming Lei <ming.lei@canonical.com>
-Signed-off-by: Octavian Purdila <octavian.purdila@intel.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/usb/mcs7830.c | 19 ++++---------------
- 1 file changed, 4 insertions(+), 15 deletions(-)
-
-diff --git a/drivers/net/usb/mcs7830.c b/drivers/net/usb/mcs7830.c
-index 9237c45..8dd48b5 100644
---- a/drivers/net/usb/mcs7830.c
-+++ b/drivers/net/usb/mcs7830.c
-@@ -117,7 +117,6 @@ enum {
- struct mcs7830_data {
-       u8 multi_filter[8];
-       u8 config;
--      u8 link_counter;
- };
- static const char driver_name[] = "MOSCHIP usb-ethernet driver";
-@@ -562,26 +561,16 @@ static void mcs7830_status(struct usbnet *dev, struct urb *urb)
- {
-       u8 *buf = urb->transfer_buffer;
-       bool link, link_changed;
--      struct mcs7830_data *data = mcs7830_get_data(dev);
-       if (urb->actual_length < 16)
-               return;
--      link = !(buf[1] & 0x20);
-+      link = !(buf[1] == 0x20);
-       link_changed = netif_carrier_ok(dev->net) != link;
-       if (link_changed) {
--              data->link_counter++;
--              /*
--                 track link state 20 times to guard against erroneous
--                 link state changes reported sometimes by the chip
--               */
--              if (data->link_counter > 20) {
--                      data->link_counter = 0;
--                      usbnet_link_change(dev, link, 0);
--                      netdev_dbg(dev->net, "Link Status is: %d\n", link);
--              }
--      } else
--              data->link_counter = 0;
-+              usbnet_link_change(dev, link, 0);
-+              netdev_dbg(dev->net, "Link Status is: %d\n", link);
-+      }
- }
- static const struct driver_info moschip_info = {
--- 
-2.0.0
-
similarity index 94%
rename from src/patches/linux-3.10-layer7-filter.patch
rename to src/patches/linux-3.14-layer7-filter.patch
index ec5fc5d2fdedcdf0bac62045005490e5dbcf2623..ba799f73fa7c8c4ae5eeeca859351dc7f9654518 100644 (file)
@@ -1,10 +1,6 @@
-http://git.ipfire.org/?p=people/ms/linux.git;a=shortlog;h=refs/heads/linux-3.10.y-layer7
-
-diff --git a/include/linux/netfilter/xt_layer7.h b/include/linux/netfilter/xt_layer7.h
-new file mode 100644
-index 0000000..c38d3c4
---- /dev/null
-+++ b/include/linux/netfilter/xt_layer7.h
+diff -Naur linux-3.14.22.org/include/linux/netfilter/xt_layer7.h linux-3.14.22/include/linux/netfilter/xt_layer7.h
+--- linux-3.14.22.org/include/linux/netfilter/xt_layer7.h      1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/include/linux/netfilter/xt_layer7.h  2014-10-24 15:33:21.281274380 +0200
 @@ -0,0 +1,14 @@
 +#ifndef _XT_LAYER7_H
 +#define _XT_LAYER7_H
@@ -20,11 +16,10 @@ index 0000000..c38d3c4
 +};
 +
 +#endif /* _XT_LAYER7_H */
-diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
-index 644d9c2..b226a8f 100644
---- a/include/net/netfilter/nf_conntrack.h
-+++ b/include/net/netfilter/nf_conntrack.h
-@@ -105,6 +105,22 @@ struct nf_conn {
+diff -Naur linux-3.14.22.org/include/net/netfilter/nf_conntrack.h linux-3.14.22/include/net/netfilter/nf_conntrack.h
+--- linux-3.14.22.org/include/net/netfilter/nf_conntrack.h     2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/include/net/netfilter/nf_conntrack.h 2014-10-24 15:33:21.281274380 +0200
+@@ -105,6 +105,22 @@
        struct net *ct_net;
  #endif
  
@@ -47,25 +42,23 @@ index 644d9c2..b226a8f 100644
        /* Storage reserved for other modules, must be the last member */
        union nf_conntrack_proto proto;
  };
-diff --git a/include/uapi/linux/netfilter/Kbuild b/include/uapi/linux/netfilter/Kbuild
-index 4111577..a95e6b5 100644
---- a/include/uapi/linux/netfilter/Kbuild
-+++ b/include/uapi/linux/netfilter/Kbuild
-@@ -53,6 +53,7 @@ header-y += xt_hashlimit.h
- header-y += xt_helper.h
+diff -Naur linux-3.14.22.org/include/uapi/linux/netfilter/Kbuild linux-3.14.22/include/uapi/linux/netfilter/Kbuild
+--- linux-3.14.22.org/include/uapi/linux/netfilter/Kbuild      2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/include/uapi/linux/netfilter/Kbuild  2014-10-24 15:34:39.721663344 +0200
+@@ -59,6 +59,7 @@
  header-y += xt_iprange.h
  header-y += xt_ipvs.h
+ header-y += xt_l2tp.h
 +header-y += xt_layer7.h
  header-y += xt_length.h
  header-y += xt_limit.h
  header-y += xt_mac.h
-diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
-index 56d22ca..7827ba4 100644
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -1011,6 +1011,26 @@ config NETFILTER_XT_MATCH_IPVS
+diff -Naur linux-3.14.22.org/net/netfilter/Kconfig linux-3.14.22/net/netfilter/Kconfig
+--- linux-3.14.22.org/net/netfilter/Kconfig    2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/net/netfilter/Kconfig        2014-10-24 15:33:21.281274380 +0200
+@@ -1153,6 +1153,26 @@
  
-         If unsure, say N.
+       To compile it as a module, choose M here. If unsure, say N.
  
 +config NETFILTER_XT_MATCH_LAYER7
 +      tristate '"layer7" match support'
@@ -90,7 +83,7 @@ index 56d22ca..7827ba4 100644
  config NETFILTER_XT_MATCH_LENGTH
        tristate '"length" match support'
        depends on NETFILTER_ADVANCED
-@@ -1205,6 +1225,12 @@ config NETFILTER_XT_MATCH_STATE
+@@ -1347,6 +1367,12 @@
  
          To compile it as a module, choose M here.  If unsure, say N.
  
@@ -103,11 +96,10 @@ index 56d22ca..7827ba4 100644
  config NETFILTER_XT_MATCH_STATISTIC
        tristate '"statistic" match support'
        depends on NETFILTER_ADVANCED
-diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
-index a1abf87..acec24e 100644
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -134,6 +134,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_RECENT) += xt_recent.o
+diff -Naur linux-3.14.22.org/net/netfilter/Makefile linux-3.14.22/net/netfilter/Makefile
+--- linux-3.14.22.org/net/netfilter/Makefile   2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/net/netfilter/Makefile       2014-10-24 15:33:21.281274380 +0200
+@@ -158,6 +158,7 @@
  obj-$(CONFIG_NETFILTER_XT_MATCH_SCTP) += xt_sctp.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_SOCKET) += xt_socket.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_STATE) += xt_state.o
@@ -115,11 +107,10 @@ index a1abf87..acec24e 100644
  obj-$(CONFIG_NETFILTER_XT_MATCH_STATISTIC) += xt_statistic.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_STRING) += xt_string.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_TCPMSS) += xt_tcpmss.o
-diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
-index 0283bae..cae3790 100644
---- a/net/netfilter/nf_conntrack_core.c
-+++ b/net/netfilter/nf_conntrack_core.c
-@@ -224,6 +224,13 @@ destroy_conntrack(struct nf_conntrack *nfct)
+diff -Naur linux-3.14.22.org/net/netfilter/nf_conntrack_core.c linux-3.14.22/net/netfilter/nf_conntrack_core.c
+--- linux-3.14.22.org/net/netfilter/nf_conntrack_core.c        2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/net/netfilter/nf_conntrack_core.c    2014-10-24 15:33:21.281274380 +0200
+@@ -220,6 +220,13 @@
         * too. */
        nf_ct_remove_expectations(ct);
  
@@ -133,11 +124,10 @@ index 0283bae..cae3790 100644
        /* We overload first tuple to link into unconfirmed or dying list.*/
        BUG_ON(hlist_nulls_unhashed(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode));
        hlist_nulls_del_rcu(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode);
-diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
-index bd700b4..5d045ca 100644
---- a/net/netfilter/nf_conntrack_standalone.c
-+++ b/net/netfilter/nf_conntrack_standalone.c
-@@ -240,6 +240,12 @@ static int ct_seq_show(struct seq_file *s, void *v)
+diff -Naur linux-3.14.22.org/net/netfilter/nf_conntrack_standalone.c linux-3.14.22/net/netfilter/nf_conntrack_standalone.c
+--- linux-3.14.22.org/net/netfilter/nf_conntrack_standalone.c  2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/net/netfilter/nf_conntrack_standalone.c      2014-10-24 15:33:21.285274399 +0200
+@@ -240,6 +240,12 @@
        if (ct_show_delta_time(s, ct))
                goto release;
  
@@ -150,11 +140,9 @@ index bd700b4..5d045ca 100644
        if (seq_printf(s, "use=%u\n", atomic_read(&ct->ct_general.use)))
                goto release;
  
-diff --git a/net/netfilter/regexp/regexp.c b/net/netfilter/regexp/regexp.c
-new file mode 100644
-index 0000000..9006988
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.c
+diff -Naur linux-3.14.22.org/net/netfilter/regexp/regexp.c linux-3.14.22/net/netfilter/regexp/regexp.c
+--- linux-3.14.22.org/net/netfilter/regexp/regexp.c    1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/net/netfilter/regexp/regexp.c        2014-10-24 15:33:21.285274399 +0200
 @@ -0,0 +1,1197 @@
 +/*
 + * regcomp and regexec -- regsub and regerror are elsewhere
@@ -1353,11 +1341,9 @@ index 0000000..9006988
 +#endif
 +
 +
-diff --git a/net/netfilter/regexp/regexp.h b/net/netfilter/regexp/regexp.h
-new file mode 100644
-index 0000000..a72eba7
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.h
+diff -Naur linux-3.14.22.org/net/netfilter/regexp/regexp.h linux-3.14.22/net/netfilter/regexp/regexp.h
+--- linux-3.14.22.org/net/netfilter/regexp/regexp.h    1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/net/netfilter/regexp/regexp.h        2014-10-24 15:33:21.285274399 +0200
 @@ -0,0 +1,41 @@
 +/*
 + * Definitions etc. for regexp(3) routines.
@@ -1400,22 +1386,18 @@ index 0000000..a72eba7
 +void regerror(char *s);
 +
 +#endif
-diff --git a/net/netfilter/regexp/regmagic.h b/net/netfilter/regexp/regmagic.h
-new file mode 100644
-index 0000000..5acf447
---- /dev/null
-+++ b/net/netfilter/regexp/regmagic.h
+diff -Naur linux-3.14.22.org/net/netfilter/regexp/regmagic.h linux-3.14.22/net/netfilter/regexp/regmagic.h
+--- linux-3.14.22.org/net/netfilter/regexp/regmagic.h  1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/net/netfilter/regexp/regmagic.h      2014-10-24 15:33:21.285274399 +0200
 @@ -0,0 +1,5 @@
 +/*
 + * The first byte of the regexp internal "program" is actually this magic
 + * number; the start node begins in the second byte.
 + */
 +#define       MAGIC   0234
-diff --git a/net/netfilter/regexp/regsub.c b/net/netfilter/regexp/regsub.c
-new file mode 100644
-index 0000000..339631f
---- /dev/null
-+++ b/net/netfilter/regexp/regsub.c
+diff -Naur linux-3.14.22.org/net/netfilter/regexp/regsub.c linux-3.14.22/net/netfilter/regexp/regsub.c
+--- linux-3.14.22.org/net/netfilter/regexp/regsub.c    1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/net/netfilter/regexp/regsub.c        2014-10-24 15:33:21.285274399 +0200
 @@ -0,0 +1,95 @@
 +/*
 + * regsub
@@ -1512,11 +1494,9 @@ index 0000000..339631f
 +      }
 +      *dst++ = '\0';
 +}
-diff --git a/net/netfilter/xt_layer7.c b/net/netfilter/xt_layer7.c
-new file mode 100644
-index 0000000..1573e9d
---- /dev/null
-+++ b/net/netfilter/xt_layer7.c
+diff -Naur linux-3.14.22.org/net/netfilter/xt_layer7.c linux-3.14.22/net/netfilter/xt_layer7.c
+--- linux-3.14.22.org/net/netfilter/xt_layer7.c        1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/net/netfilter/xt_layer7.c    2014-10-24 15:33:21.285274399 +0200
 @@ -0,0 +1,665 @@
 +/*
 +  Kernel module to match application layer (OSI layer 7) data in connections.
similarity index 84%
rename from src/patches/linux-3.9-dvbsky-wot2.patch
rename to src/patches/linux-3.14.22-dvbsky.patch
index e084c8cc658823810c9991c5c099f6ed78f7459d..00180c45f87cb0f9af7090f6c9bcf5a397d75194 100644 (file)
@@ -1,12 +1,13 @@
-diff -urN a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kconfig
---- a/drivers/media/dvb-frontends/Kconfig      2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/dvb-frontends/Kconfig      2013-05-03 17:03:57.000000000 +0800
-@@ -200,6 +200,20 @@
-       help
-         A DVB-S/S2 tuner module. Say Y when you want to support this frontend.
+diff --git a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kconfig
+index dd12a1e..969cd15 100644
+--- a/drivers/media/dvb-frontends/Kconfig
++++ b/drivers/media/dvb-frontends/Kconfig
+@@ -726,6 +726,20 @@ config DVB_TDA665x
+         Currently supported tuners:
+         * Panasonic ENV57H12D5 (ET-50DT)
  
-+config DVB_M88DS3103
-+      tristate "Montage M88DS3103 based"
++config DVB_DVBSKY_M88DS3103
++      tristate "Montage M88DS3103 based(DVBSky)"
 +      depends on DVB_CORE && I2C
 +      default m if !MEDIA_SUBDRV_AUTOSELECT
 +      help
@@ -18,19 +19,32 @@ diff -urN a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kc
 +      default m if !MEDIA_SUBDRV_AUTOSELECT
 +      help
 +        A DVB-C tuner module. Say Y when you want to support this frontend.
-+                
- config DVB_SI21XX
-       tristate "Silicon Labs SI21XX based"
++
+ config DVB_IX2505V
+       tristate "Sharp IX2505V silicon tuner"
        depends on DVB_CORE && I2C
-diff -urN a/drivers/media/dvb-frontends/m88dc2800.c b/drivers/media/dvb-frontends/m88dc2800.c
---- a/drivers/media/dvb-frontends/m88dc2800.c  1970-01-01 08:00:00.000000000 +0800
-+++ b/drivers/media/dvb-frontends/m88dc2800.c  2013-01-26 16:03:21.000000000 +0800
-@@ -0,0 +1,2124 @@
+diff --git a/drivers/media/dvb-frontends/Makefile b/drivers/media/dvb-frontends/Makefile
+index 0c75a6a..37c57f9 100644
+--- a/drivers/media/dvb-frontends/Makefile
++++ b/drivers/media/dvb-frontends/Makefile
+@@ -106,3 +106,5 @@ obj-$(CONFIG_DVB_RTL2832) += rtl2832.o
+ obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o
+ obj-$(CONFIG_DVB_AF9033) += af9033.o
++obj-$(CONFIG_DVB_DVBSKY_M88DS3103) += dvbsky_m88ds3103.o
++obj-$(CONFIG_DVB_M88DC2800) += m88dc2800.o
+diff --git a/drivers/media/dvb-frontends/dvbsky_m88ds3103.c b/drivers/media/dvb-frontends/dvbsky_m88ds3103.c
+new file mode 100644
+index 0000000..5ad1157
+--- /dev/null
++++ b/drivers/media/dvb-frontends/dvbsky_m88ds3103.c
+@@ -0,0 +1,1723 @@
 +/*
-+    M88DC2800/M88TC2800  - DVB-C demodulator and tuner from Montage
++    Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver
 +
-+    Copyright (C) 2012 Max nibble<nibble.max@gmail.com>
-+    Copyright (C) 2011 Montage Technology / www.montage-tech.com
++    Copyright (C) 2011 Max nibble<nibble.max@gmail.com>
++    Copyright (C) 2010 Montage Technology<www.montage-tech.com>
++    Copyright (C) 2009 Konstantin Dimitrov.
 +
 +    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
@@ -45,44 +59,18 @@ diff -urN a/drivers/media/dvb-frontends/m88dc2800.c b/drivers/media/dvb-frontend
 +    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.
-+*/
++ */
 +
-+#include <linux/delay.h>
-+#include <linux/errno.h>
-+#include <linux/init.h>
++#include <linux/slab.h>
 +#include <linux/kernel.h>
 +#include <linux/module.h>
-+#include <linux/string.h>
-+#include <linux/slab.h>
-+#include <asm/div64.h>
-+#include "dvb_frontend.h"
-+#include "m88dc2800.h"
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/firmware.h>
 +
-+struct m88dc2800_state {
-+      struct i2c_adapter *i2c;
-+      const struct m88dc2800_config *config;
-+      struct dvb_frontend frontend;
-+      u32 freq;
-+      u32 ber;
-+      u32 sym;
-+      u16 qam;
-+      u8 inverted;
-+      u32 xtal;
-+      /* tuner state */
-+      u8 tuner_init_OK;       /* Tuner initialize status */
-+      u8 tuner_dev_addr;      /* Tuner device address */
-+      u32 tuner_freq;         /* RF frequency to be set, unit: KHz */
-+      u16 tuner_qam;          /* Reserved */
-+      u16 tuner_mode;
-+      u8 tuner_bandwidth;     /* Bandwidth of the channel, unit: MHz, 6/7/8 */
-+      u8 tuner_loopthrough;   /* Tuner loop through switch, 0/1 */
-+      u32 tuner_crystal;      /* Tuner crystal frequency, unit: KHz */
-+      u32 tuner_dac;          /* Tuner DAC frequency, unit: KHz */
-+      u16 tuner_mtt;          /* Tuner chip version, D1: 0x0d, E0: 0x0e, E1: 0x8e */
-+      u16 tuner_custom_cfg;
-+      u32 tuner_version;      /* Tuner driver version number */
-+      u32 tuner_time;
-+};
++#include "dvb_frontend.h"
++#include "dvbsky_m88ds3103.h"
++#include "dvbsky_m88ds3103_priv.h"
 +
 +static int debug;
 +module_param(debug, int, 0644);
@@ -91,4304 +79,4356 @@ diff -urN a/drivers/media/dvb-frontends/m88dc2800.c b/drivers/media/dvb-frontend
 +#define dprintk(args...) \
 +      do { \
 +              if (debug) \
-+                      printk(KERN_INFO "m88dc2800: " args); \
++                      printk(KERN_INFO "m88ds3103: " args); \
 +      } while (0)
 +
++#define _AUTO_S2_
 +
-+static int m88dc2800_i2c_write(struct m88dc2800_state *state, u8 addr,
-+                             u8 * p_data, u8 len)
++/*demod register operations.*/
++static int m88ds3103_writereg(struct m88ds3103_state *state, int reg, int data)
 +{
-+      struct i2c_msg msg = { .flags = 0 };
++      u8 buf[] = { reg, data };
++      struct i2c_msg msg = { .addr = state->config->demod_address,
++              .flags = 0, .buf = buf, .len = 2 };
++      int err;
 +
-+      msg.addr = addr;
-+      msg.buf = p_data;
-+      msg.len = len;
++      if (debug > 1)
++              printk("m88ds3103: %s: write reg 0x%02x, value 0x%02x\n",
++                      __func__, reg, data);
 +
-+      return i2c_transfer(state->i2c, &msg, 1);
++      err = i2c_transfer(state->i2c, &msg, 1);
++      if (err != 1) {
++              printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x,"
++                       " value == 0x%02x)\n", __func__, err, reg, data);
++              return -EREMOTEIO;
++      }
++      return 0;
 +}
 +
-+static int m88dc2800_i2c_read(struct m88dc2800_state *state, u8 addr,
-+                            u8 * p_data, u8 len)
++static int m88ds3103_readreg(struct m88ds3103_state *state, u8 reg)
 +{
-+      struct i2c_msg msg = { .flags = I2C_M_RD };
++      int ret;
++      u8 b0[] = { reg };
++      u8 b1[] = { 0 };
++      struct i2c_msg msg[] = {
++              { .addr = state->config->demod_address, .flags = 0,
++                      .buf = b0, .len = 1 },
++              { .addr = state->config->demod_address, .flags = I2C_M_RD,
++                      .buf = b1, .len = 1 }
++      };
++      ret = i2c_transfer(state->i2c, msg, 2);
 +
-+      msg.addr = addr;
-+      msg.buf = p_data;
-+      msg.len = len;
++      if (ret != 2) {
++              printk(KERN_ERR "%s: reg=0x%x (error=%d)\n",
++                      __func__, reg, ret);
++              return ret;
++      }
 +
-+      return i2c_transfer(state->i2c, &msg, 1);
++      if (debug > 1)
++              printk(KERN_INFO "m88ds3103: read reg 0x%02x, value 0x%02x\n",
++                      reg, b1[0]);
++
++      return b1[0];
 +}
 +
-+/*demod register operations.*/
-+static int WriteReg(struct m88dc2800_state *state, u8 reg, u8 data)
++/*tuner register operations.*/
++static int m88ds3103_tuner_writereg(struct m88ds3103_state *state, int reg, int data)
 +{
 +      u8 buf[] = { reg, data };
-+      u8 addr = state->config->demod_address;
++      struct i2c_msg msg = { .addr = 0x60,
++              .flags = 0, .buf = buf, .len = 2 };
 +      int err;
 +
-+      dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__, reg, data);
-+
-+      err = m88dc2800_i2c_write(state, addr, buf, 2);
-+
++      m88ds3103_writereg(state, 0x03, 0x11);
++      err = i2c_transfer(state->i2c, &msg, 1);
++      
 +      if (err != 1) {
-+              printk(KERN_ERR
-+                     "%s: writereg error(err == %i, reg == 0x%02x,"
-+                     " value == 0x%02x)\n", __func__, err, reg, data);
-+              return -EIO;
++              printk("%s: writereg error(err == %i, reg == 0x%02x,"
++                       " value == 0x%02x)\n", __func__, err, reg, data);
++              return -EREMOTEIO;
 +      }
++
 +      return 0;
 +}
 +
-+static int ReadReg(struct m88dc2800_state *state, u8 reg)
++static int m88ds3103_tuner_readreg(struct m88ds3103_state *state, u8 reg)
 +{
 +      int ret;
 +      u8 b0[] = { reg };
 +      u8 b1[] = { 0 };
-+      u8 addr = state->config->demod_address;
++      struct i2c_msg msg[] = {
++              { .addr = 0x60, .flags = 0,
++                      .buf = b0, .len = 1 },
++              { .addr = 0x60, .flags = I2C_M_RD,
++                      .buf = b1, .len = 1 }
++      };
 +
-+      ret = m88dc2800_i2c_write(state, addr, b0, 1);
++      m88ds3103_writereg(state, 0x03, (0x11 + state->config->tuner_readstops));       
++      ret = i2c_transfer(state->i2c, msg, 2);
 +
-+      if (ret != 1) {
-+              printk(KERN_ERR "%s: reg=0x%x (error=%d)\n",
-+                     __func__, reg, ret);
-+              return -EIO;
++      if (ret != 2) {
++              printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret);
++              return ret;
 +      }
 +
-+      ret = m88dc2800_i2c_read(state, addr, b1, 1);
-+
-+      dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__, reg, b1[0]);
 +      return b1[0];
 +}
 +
-+static int _mt_fe_tn_set_reg(struct m88dc2800_state *state, u8 reg,
-+                           u8 data)
++/* Bulk demod I2C write, for firmware download. */
++static int m88ds3103_writeregN(struct m88ds3103_state *state, int reg,
++                              const u8 *data, u16 len)
 +{
-+      int ret;
-+      u8 buf[2];
-+      u8 addr = state->tuner_dev_addr;
++      int ret = -EREMOTEIO;
++      struct i2c_msg msg;
++      u8 *buf;
 +
-+      buf[1] = ReadReg(state, 0x86);
-+      buf[1] |= 0x80;
-+      ret = WriteReg(state, 0x86, buf[1]);
++      buf = kmalloc(len + 1, GFP_KERNEL);
++      if (buf == NULL) {
++              printk("Unable to kmalloc\n");
++              ret = -ENOMEM;
++              goto error;
++      }
 +
-+      buf[0] = reg;
-+      buf[1] = data;
++      *(buf) = reg;
++      memcpy(buf + 1, data, len);
 +
-+      ret = m88dc2800_i2c_write(state, addr, buf, 2);
-+      if (ret != 1)
-+              return -EIO;
-+      return 0;
-+}
++      msg.addr = state->config->demod_address;
++      msg.flags = 0;
++      msg.buf = buf;
++      msg.len = len + 1;
 +
-+static int _mt_fe_tn_get_reg(struct m88dc2800_state *state, u8 reg,
-+                           u8 * p_data)
-+{
-+      int ret;
-+      u8 buf[2];
-+      u8 addr = state->tuner_dev_addr;
++      if (debug > 1)
++              printk(KERN_INFO "m88ds3103: %s:  write regN 0x%02x, len = %d\n",
++                      __func__, reg, len);
 +
-+      buf[1] = ReadReg(state, 0x86);
-+      buf[1] |= 0x80;
-+      ret = WriteReg(state, 0x86, buf[1]);
++      ret = i2c_transfer(state->i2c, &msg, 1);
++      if (ret != 1) {
++              printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x\n",
++                       __func__, ret, reg);
++              ret = -EREMOTEIO;
++      }
++      
++error:
++      kfree(buf);
 +
-+      buf[0] = reg;
-+      ret = m88dc2800_i2c_write(state, addr, buf, 1);
++      return ret;
++}
 +
-+      msleep(1);
++static int m88ds3103_load_firmware(struct dvb_frontend *fe)
++{
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      const struct firmware *fw;
++      int i, ret = 0;
 +
-+      buf[1] = ReadReg(state, 0x86);
-+      buf[1] |= 0x80;
-+      ret = WriteReg(state, 0x86, buf[1]);
++      dprintk("%s()\n", __func__);
++              
++      if (state->skip_fw_load)
++              return 0;
++      /* Load firmware */
++      /* request the firmware, this will block until someone uploads it */    
++      if(state->demod_id == DS3000_ID){
++              printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
++                              DS3000_DEFAULT_FIRMWARE);               
++              ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE,
++                                      state->i2c->dev.parent);
++      }else if(state->demod_id == DS3103_ID){
++              printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
++                              DS3103_DEFAULT_FIRMWARE);
++              ret = request_firmware(&fw, DS3103_DEFAULT_FIRMWARE,
++                                      state->i2c->dev.parent);
++      }
++      
++      printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
++      if (ret) {
++              printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
++                              "found?)\n", __func__);
++              return ret;
++      }
 +
-+      return m88dc2800_i2c_read(state, addr, p_data, 1);
-+}
++      /* Make sure we don't recurse back through here during loading */
++      state->skip_fw_load = 1;
++
++      dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n",
++                      fw->size,
++                      fw->data[0],
++                      fw->data[1],
++                      fw->data[fw->size - 2],
++                      fw->data[fw->size - 1]);
++                      
++      /* stop internal mcu. */
++      m88ds3103_writereg(state, 0xb2, 0x01);
++      /* split firmware to download.*/
++      for(i = 0; i < FW_DOWN_LOOP; i++){
++              ret = m88ds3103_writeregN(state, 0xb0, &(fw->data[FW_DOWN_SIZE*i]), FW_DOWN_SIZE);
++              if(ret != 1) break;             
++      }
++      /* start internal mcu. */
++      if(ret == 1)
++              m88ds3103_writereg(state, 0xb2, 0x00);
++              
++      release_firmware(fw);
++
++      dprintk("%s: Firmware upload %s\n", __func__,
++                      ret == 1 ? "complete" : "failed");
++
++      if(ret == 1) ret = 0;
++      
++      /* Ensure firmware is always loaded if required */
++      state->skip_fw_load = 0;
++
++      return ret;
++}
++
++
++static int m88ds3103_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
++{
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      u8 data;
++
++      dprintk("%s(%d)\n", __func__, voltage);
++
++      dprintk("m88ds3103:pin_ctrl = (%02x)\n", state->config->pin_ctrl);
++      
++      if(state->config->set_voltage)
++              state->config->set_voltage(fe, voltage);
++      
++      data = m88ds3103_readreg(state, 0xa2);
++      
++        if(state->config->pin_ctrl & 0x80){ /*If control pin is assigned.*/
++              data &= ~0x03; /* bit0 V/H, bit1 off/on */
++              if(state->config->pin_ctrl & 0x02)
++                   data |= 0x02;
++
++              switch (voltage) {
++              case SEC_VOLTAGE_18:
++                   if((state->config->pin_ctrl & 0x01) == 0)
++                        data |= 0x01;
++                   break;
++              case SEC_VOLTAGE_13:
++                   if(state->config->pin_ctrl & 0x01)
++                        data |= 0x01;
++                   break;
++              case SEC_VOLTAGE_OFF:
++                   if(state->config->pin_ctrl & 0x02)
++                         data &= ~0x02;                       
++                   else
++                         data |= 0x02;
++                   break;
++               }
++        }
++
++      m88ds3103_writereg(state, 0xa2, data);
 +
-+/* Tuner operation functions.*/
-+static int _mt_fe_tn_set_RF_front_tc2800(struct m88dc2800_state *state)
-+{
-+      u32 freq_KHz = state->tuner_freq;
-+      u8 a, b, c;
-+      if (state->tuner_mtt == 0xD1) { /* D1 */
-+              if (freq_KHz <= 123000) {
-+                      if (freq_KHz <= 56000) {
-+                              a = 0x00; b = 0x00; c = 0x00;
-+                      } else if (freq_KHz <= 64000) {
-+                              a = 0x10; b = 0x01; c = 0x08;
-+                      } else if (freq_KHz <= 72000) {
-+                              a = 0x20; b = 0x02; c = 0x10;
-+                      } else if (freq_KHz <= 80000) {
-+                              a = 0x30; b = 0x03; c = 0x18;
-+                      } else if (freq_KHz <= 88000) {
-+                              a = 0x40; b = 0x04; c = 0x20;
-+                      } else if (freq_KHz <= 96000) {
-+                              a = 0x50; b = 0x05; c = 0x28;
-+                      } else if (freq_KHz <= 104000) {
-+                              a = 0x60; b = 0x06; c = 0x30;
-+                      } else {
-+                              a = 0x70; b = 0x07; c = 0x38;
-+                      }
-+                      _mt_fe_tn_set_reg(state, 0x58, 0x9b);
-+                      _mt_fe_tn_set_reg(state, 0x59, a);
-+                      _mt_fe_tn_set_reg(state, 0x5d, b);
-+                      _mt_fe_tn_set_reg(state, 0x5e, c);
-+                      _mt_fe_tn_set_reg(state, 0x5a, 0x75);
-+                      _mt_fe_tn_set_reg(state, 0x73, 0x0c);
-+              } else {        /* if (freq_KHz > 112000) */
-+                      _mt_fe_tn_set_reg(state, 0x58, 0x7b);
-+                      if (freq_KHz <= 304000) {
-+                              if (freq_KHz <= 136000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5e, 0x40);
-+                              } else if (freq_KHz <= 160000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5e, 0x48);
-+                              } else if (freq_KHz <= 184000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5e, 0x50);
-+                              } else if (freq_KHz <= 208000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5e, 0x58);
-+                              } else if (freq_KHz <= 232000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5e, 0x60);
-+                              } else if (freq_KHz <= 256000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5e, 0x68);
-+                              } else if (freq_KHz <= 280000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5e, 0x70);
-+                              } else {        /* if (freq_KHz <= 304000) */
-+                                      _mt_fe_tn_set_reg(state, 0x5e, 0x78);
-+                              }
-+                              if (freq_KHz <= 171000) {
-+                                      _mt_fe_tn_set_reg(state, 0x73, 0x08);
-+                              } else if (freq_KHz <= 211000) {
-+                                      _mt_fe_tn_set_reg(state, 0x73, 0x0a);
-+                              } else {
-+                                      _mt_fe_tn_set_reg(state, 0x73, 0x0e);
-+                              }
-+                      } else {        /* if (freq_KHz > 304000) */
-+                              _mt_fe_tn_set_reg(state, 0x5e, 0x88);
-+                              if (freq_KHz <= 400000) {
-+                                      _mt_fe_tn_set_reg(state, 0x73, 0x0c);
-+                              } else if (freq_KHz <= 450000) {
-+                                      _mt_fe_tn_set_reg(state, 0x73, 0x09);
-+                              } else if (freq_KHz <= 550000) {
-+                                      _mt_fe_tn_set_reg(state, 0x73, 0x0e);
-+                              } else if (freq_KHz <= 650000) {
-+                                      _mt_fe_tn_set_reg(state, 0x73, 0x0d);
-+                              } else {        /*if (freq_KHz > 650000) */
-+                                      _mt_fe_tn_set_reg(state, 0x73, 0x0e);
-+                              }
-+                      }
-+              }
-+              if (freq_KHz > 800000)
-+                      _mt_fe_tn_set_reg(state, 0x87, 0x24);
-+              else if (freq_KHz > 700000)
-+                      _mt_fe_tn_set_reg(state, 0x87, 0x34);
-+              else if (freq_KHz > 500000)
-+                      _mt_fe_tn_set_reg(state, 0x87, 0x44);
-+              else if (freq_KHz > 300000)
-+                      _mt_fe_tn_set_reg(state, 0x87, 0x43);
-+              else if (freq_KHz > 220000)
-+                      _mt_fe_tn_set_reg(state, 0x87, 0x54);
-+              else if (freq_KHz > 110000)
-+                      _mt_fe_tn_set_reg(state, 0x87, 0x14);
-+              else
-+                      _mt_fe_tn_set_reg(state, 0x87, 0x54);
-+              if (freq_KHz > 600000)
-+                      _mt_fe_tn_set_reg(state, 0x6a, 0x53);
-+              else if (freq_KHz > 500000)
-+                      _mt_fe_tn_set_reg(state, 0x6a, 0x57);
-+              else
-+                      _mt_fe_tn_set_reg(state, 0x6a, 0x59);
-+              if (freq_KHz < 200000) {
-+                      _mt_fe_tn_set_reg(state, 0x20, 0x5d);
-+              } else if (freq_KHz < 500000) {
-+                      _mt_fe_tn_set_reg(state, 0x20, 0x7d);
-+              } else {
-+                      _mt_fe_tn_set_reg(state, 0x20, 0xfd);
-+              }               /* end of 0xD1 */
-+      } else if (state->tuner_mtt == 0xE1) {  /* E1 */
-+              if (freq_KHz <= 112000) {       /* 123MHz */
-+                      if (freq_KHz <= 56000) {
-+                              _mt_fe_tn_set_reg(state, 0x5c, 0x01);
-+                      } else if (freq_KHz <= 64000) {
-+                              _mt_fe_tn_set_reg(state, 0x5c, 0x09);
-+                      } else if (freq_KHz <= 72000) {
-+                              _mt_fe_tn_set_reg(state, 0x5c, 0x11);
-+                      } else if (freq_KHz <= 80000) {
-+                              _mt_fe_tn_set_reg(state, 0x5c, 0x19);
-+                      } else if (freq_KHz <= 88000) {
-+                              _mt_fe_tn_set_reg(state, 0x5c, 0x21);
-+                      } else if (freq_KHz <= 96000) {
-+                              _mt_fe_tn_set_reg(state, 0x5c, 0x29);
-+                      } else if (freq_KHz <= 104000) {
-+                              _mt_fe_tn_set_reg(state, 0x5c, 0x31);
-+                      } else {        /* if (freq_KHz <= 112000) */
-+                              _mt_fe_tn_set_reg(state, 0x5c, 0x39);
-+                      }
-+                      _mt_fe_tn_set_reg(state, 0x5b, 0x30);
-+              } else {        /* if (freq_KHz > 112000) */
-+                      if (freq_KHz <= 304000) {
-+                              if (freq_KHz <= 136000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x41);
-+                              } else if (freq_KHz <= 160000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x49);
-+                              } else if (freq_KHz <= 184000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x51);
-+                              } else if (freq_KHz <= 208000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x59);
-+                              } else if (freq_KHz <= 232000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x61);
-+                              } else if (freq_KHz <= 256000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x69);
-+                              } else if (freq_KHz <= 280000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x71);
-+                              } else {        /* if (freq_KHz <= 304000) */
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x79);
-+                              }
-+                              if (freq_KHz <= 150000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5b, 0x28);
-+                              } else if (freq_KHz <= 256000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5b, 0x29);
-+                              } else {
-+                                      _mt_fe_tn_set_reg(state, 0x5b, 0x2a);
-+                              }
-+                      } else {        /* if (freq_KHz > 304000) */
-+                              if (freq_KHz <= 400000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x89);
-+                              } else if (freq_KHz <= 450000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x91);
-+                              } else if (freq_KHz <= 650000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0x98);
-+                              } else if (freq_KHz <= 850000) {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0xa0);
-+                              } else {
-+                                      _mt_fe_tn_set_reg(state, 0x5c, 0xa8);
-+                              }
-+                              _mt_fe_tn_set_reg(state, 0x5b, 0x08);
-+                      }
-+              }
-+      }                       /* end of 0xE1 */
 +      return 0;
 +}
 +
-+static int _mt_fe_tn_cali_PLL_tc2800(struct m88dc2800_state *state,
-+                                   u32 freq_KHz,
-+                                   u32 cali_freq_thres_div2,
-+                                   u32 cali_freq_thres_div3r,
-+                                   u32 cali_freq_thres_div3)
++static int m88ds3103_read_status(struct dvb_frontend *fe, fe_status_t* status)
 +{
-+      s32 N, F, MUL;
-+      u8 buf, tmp, tmp2;
-+      s32 M;
-+      const s32 crystal_KHz = state->tuner_crystal;
-+       if (state->tuner_mtt == 0xD1) {
-+              M = state->tuner_crystal / 4000;
-+              if (freq_KHz > cali_freq_thres_div2) {
-+                      MUL = 4;
-+                      tmp = 2;
-+              } else if (freq_KHz > 300000) {
-+                      MUL = 8;
-+                      tmp = 3;
-+              } else if (freq_KHz > (cali_freq_thres_div2 / 2)) {
-+                      MUL = 8;
-+                      tmp = 4;
-+              } else if (freq_KHz > (cali_freq_thres_div2 / 4)) {
-+                      MUL = 16;
-+                      tmp = 5;
-+              } else if (freq_KHz > (cali_freq_thres_div2 / 8)) {
-+                      MUL = 32;
-+                      tmp = 6;
-+              } else if (freq_KHz > (cali_freq_thres_div2 / 16)) {
-+                      MUL = 64;
-+                      tmp = 7;
-+              } else {        /* invalid */
-+                      MUL = 0;
-+                      tmp = 0;
-+                      return 1;
-+              }
-+      } else if (state->tuner_mtt == 0xE1) {
-+              M = state->tuner_crystal / 1000;
-+              _mt_fe_tn_set_reg(state, 0x30, 0xff);
-+              _mt_fe_tn_set_reg(state, 0x32, 0xe0);
-+              _mt_fe_tn_set_reg(state, 0x33, 0x86);
-+              _mt_fe_tn_set_reg(state, 0x37, 0x70);
-+              _mt_fe_tn_set_reg(state, 0x38, 0x20);
-+              _mt_fe_tn_set_reg(state, 0x39, 0x18);
-+              _mt_fe_tn_set_reg(state, 0x89, 0x83);
-+              if (freq_KHz > cali_freq_thres_div2) {
-+                      M = M / 4;
-+                      MUL = 4;
-+                      tmp = 2;
-+                      tmp2 = M + 16;  /* 48 */
-+              } else if (freq_KHz > cali_freq_thres_div3r) {
-+                      M = M / 3;
-+                      MUL = 6;
-+                      tmp = 2;
-+                      tmp2 = M + 32;  /* 32 */
-+              } else if (freq_KHz > cali_freq_thres_div3) {
-+                      M = M / 3;
-+                      MUL = 6;
-+                      tmp = 2;
-+                      tmp2 = M;       /* 16 */
-+              } else if (freq_KHz > 304000) {
-+                      M = M / 4;
-+                      MUL = 8;
-+                      tmp = 3;
-+                      tmp2 = M + 16;  /* 48 */
-+              } else if (freq_KHz > (cali_freq_thres_div2 / 2)) {
-+                      M = M / 4;
-+                      MUL = 8;
-+                      tmp = 4;
-+                      tmp2 = M + 16;  /* 48 */
-+              } else if (freq_KHz > (cali_freq_thres_div3r / 2)) {
-+                      M = M / 3;
-+                      MUL = 12;
-+                      tmp = 4;
-+                      tmp2 = M + 32;  /* 32 */
-+              } else if (freq_KHz > (cali_freq_thres_div3 / 2)) {
-+                      M = M / 3;
-+                      MUL = 12;
-+                      tmp = 4;
-+                      tmp2 = M;       /* 16 */
-+              } else if (freq_KHz > (cali_freq_thres_div2 / 4)) {
-+                      M = M / 4;
-+                      MUL = 16;
-+                      tmp = 5;
-+                      tmp2 = M + 16;  /* 48 */
-+              } else if (freq_KHz > (cali_freq_thres_div3r / 4)) {
-+                      M = M / 3;
-+                      MUL = 24;
-+                      tmp = 5;
-+                      tmp2 = M + 32;  /* 32 */
-+              } else if (freq_KHz > (cali_freq_thres_div3 / 4)) {
-+                      M = M / 3;
-+                      MUL = 24;
-+                      tmp = 5;
-+                      tmp2 = M;       /* 16 */
-+              } else if (freq_KHz > (cali_freq_thres_div2 / 8)) {
-+                      M = M / 4;
-+                      MUL = 32;
-+                      tmp = 6;
-+                      tmp2 = M + 16;  /* 48 */
-+              } else if (freq_KHz > (cali_freq_thres_div3r / 8)) {
-+                      M = M / 3;
-+                      MUL = 48;
-+                      tmp = 6;
-+                      tmp2 = M + 32;  /* 32 */
-+              } else if (freq_KHz > (cali_freq_thres_div3 / 8)) {
-+                      M = M / 3;
-+                      MUL = 48;
-+                      tmp = 6;
-+                      tmp2 = M;       /* 16 */
-+              } else if (freq_KHz > (cali_freq_thres_div2 / 16)) {
-+                      M = M / 4;
-+                      MUL = 64;
-+                      tmp = 7;
-+                      tmp2 = M + 16;  /* 48 */
-+              } else if (freq_KHz > (cali_freq_thres_div3r / 16)) {
-+                      M = M / 3;
-+                      MUL = 96;
-+                      tmp = 7;
-+                      tmp2 = M + 32;  /* 32 */
-+              } else if (freq_KHz > (cali_freq_thres_div3 / 16)) {
-+                      M = M / 3;
-+                      MUL = 96;
-+                      tmp = 7;
-+                      tmp2 = M;       /* 16 */
-+              } else {        /* invalid */
-+                      M = M / 4;
-+                      MUL = 0;
-+                      tmp = 0;
-+                      tmp2 = 48;
-+                      return 1;
-+              }
-+              if (freq_KHz == 291000) {
-+                      M = state->tuner_crystal / 1000 / 3;
-+                      MUL = 12;
-+                      tmp = 4;
-+                      tmp2 = M + 32;  /* 32 */
-+              }
-+              /*
-+                 if (freq_KHz == 578000) {
-+                 M = state->tuner_crystal / 1000 / 4;
-+                 MUL = 4;
-+                 tmp = 2;
-+                 tmp2 = M + 16;       // 48
-+                 }
-+               */
-+              if (freq_KHz == 690000) {
-+                      M = state->tuner_crystal / 1000 / 3;
-+                      MUL = 4;
-+                      tmp = 2;
-+                      tmp2 = M + 16;  /* 48 */
-+              }
-+              _mt_fe_tn_get_reg(state, 0x33, &buf);
-+              buf &= 0xc0;
-+              buf += tmp2;
-+              _mt_fe_tn_set_reg(state, 0x33, buf);
-+      } else {
-+              return 1;
-+      }
-+      _mt_fe_tn_get_reg(state, 0x39, &buf);
-+      buf &= 0xf8;
-+      buf += tmp;
-+      _mt_fe_tn_set_reg(state, 0x39, buf);
-+      N = (freq_KHz * MUL * M / crystal_KHz) / 2 * 2 - 256;
-+      buf = (N >> 8) & 0xcf;
-+      if (state->tuner_mtt == 0xE1) {
-+              buf |= 0x30;
-+      }
-+      _mt_fe_tn_set_reg(state, 0x34, buf);
-+      buf = N & 0xff;
-+      _mt_fe_tn_set_reg(state, 0x35, buf);
-+      F = ((freq_KHz * MUL * M / (crystal_KHz / 1000) / 2) -
-+           (freq_KHz * MUL * M / crystal_KHz / 2 * 1000)) * 64 / 1000;
-+      buf = F & 0xff;
-+      _mt_fe_tn_set_reg(state, 0x36, buf);
-+      if (F == 0) {
-+              if (state->tuner_mtt == 0xD1) {
-+                      _mt_fe_tn_set_reg(state, 0x3d, 0xca);
-+              } else if (state->tuner_mtt == 0xE1) {
-+                      _mt_fe_tn_set_reg(state, 0x3d, 0xfe);
-+              } else {
-+                      return 1;
-+              }
-+              _mt_fe_tn_set_reg(state, 0x3e, 0x9c);
-+              _mt_fe_tn_set_reg(state, 0x3f, 0x34);
-+      }
-+      if (F > 0) {
-+              if (state->tuner_mtt == 0xD1) {
-+                      if ((F == 32) || (F == 16) || (F == 48)) {
-+                              _mt_fe_tn_set_reg(state, 0x3e, 0xa4);
-+                              _mt_fe_tn_set_reg(state, 0x3d, 0x4a);
-+                              _mt_fe_tn_set_reg(state, 0x3f, 0x36);
-+                      } else {
-+                              _mt_fe_tn_set_reg(state, 0x3e, 0xa4);
-+                              _mt_fe_tn_set_reg(state, 0x3d, 0x4a);
-+                              _mt_fe_tn_set_reg(state, 0x3f, 0x36);
-+                      }
-+              } else if (state->tuner_mtt == 0xE1) {
-+                      _mt_fe_tn_set_reg(state, 0x3e, 0xa4);
-+                      _mt_fe_tn_set_reg(state, 0x3d, 0x7e);
-+                      _mt_fe_tn_set_reg(state, 0x3f, 0x36);
-+                      _mt_fe_tn_set_reg(state, 0x89, 0x84);
-+                      _mt_fe_tn_get_reg(state, 0x39, &buf);
-+                      buf = buf & 0x1f;
-+                      _mt_fe_tn_set_reg(state, 0x39, buf);
-+                      _mt_fe_tn_get_reg(state, 0x32, &buf);
-+                      buf = buf | 0x02;
-+                      _mt_fe_tn_set_reg(state, 0x32, buf);
-+              } else {
-+                      return 1;
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      int lock = 0;
++      
++      *status = 0;
++      
++      switch (state->delivery_system){
++      case SYS_DVBS:
++              lock = m88ds3103_readreg(state, 0xd1);
++              dprintk("%s: SYS_DVBS status=%x.\n", __func__, lock);
++              
++              if ((lock & 0x07) == 0x07){
++                      /*if((m88ds3103_readreg(state, 0x0d) & 0x07) == 0x07)*/
++                              *status = FE_HAS_SIGNAL | FE_HAS_CARRIER 
++                                      | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
++                      
 +              }
++              break;
++      case SYS_DVBS2:
++              lock = m88ds3103_readreg(state, 0x0d);
++              dprintk("%s: SYS_DVBS2 status=%x.\n", __func__, lock);
++
++              if ((lock & 0x8f) == 0x8f)
++                      *status = FE_HAS_SIGNAL | FE_HAS_CARRIER 
++                              | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
++                      
++              break;
++      default:
++              break;
 +      }
-+      _mt_fe_tn_set_reg(state, 0x41, 0x00);
-+      if (state->tuner_mtt == 0xD1) {
-+              msleep(5);
-+      } else if (state->tuner_mtt == 0xE1) {
-+              msleep(2);
-+      } else {
-+              return 1;
-+      }
-+      _mt_fe_tn_set_reg(state, 0x41, 0x02);
-+      _mt_fe_tn_set_reg(state, 0x30, 0x7f);
-+      _mt_fe_tn_set_reg(state, 0x30, 0xff);
-+      _mt_fe_tn_set_reg(state, 0x31, 0x80);
-+      _mt_fe_tn_set_reg(state, 0x31, 0x00);
 +
 +      return 0;
 +}
 +
-+static int _mt_fe_tn_set_PLL_freq_tc2800(struct m88dc2800_state *state)
++static int m88ds3103_read_ber(struct dvb_frontend *fe, u32* ber)
 +{
-+      u8 buf, buf1;
-+      u32 freq_thres_div2_KHz, freq_thres_div3r_KHz,
-+          freq_thres_div3_KHz;
-+      const u32 freq_KHz = state->tuner_freq;
-+      if (state->tuner_mtt == 0xD1) {
-+              _mt_fe_tn_set_reg(state, 0x32, 0xe1);
-+              _mt_fe_tn_set_reg(state, 0x33, 0xa6);
-+              _mt_fe_tn_set_reg(state, 0x37, 0x7f);
-+              _mt_fe_tn_set_reg(state, 0x38, 0x20);
-+              _mt_fe_tn_set_reg(state, 0x39, 0x18);
-+              _mt_fe_tn_set_reg(state, 0x40, 0x40);
-+               freq_thres_div2_KHz = 520000;
-+              _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz,
-+                                         freq_thres_div2_KHz, 0, 0);
-+               msleep(5);
-+              _mt_fe_tn_get_reg(state, 0x3a, &buf);
-+              buf1 = buf;
-+              buf = buf & 0x03;
-+              buf1 = buf1 & 0x01;
-+              if ((buf1 == 0) || (buf == 3)) {
-+                      freq_thres_div2_KHz = 420000;
-+                      _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz,
-+                                                 freq_thres_div2_KHz, 0,
-+                                                 0);
-+                      msleep(5);
-+                       _mt_fe_tn_get_reg(state, 0x3a, &buf);
-+                      buf = buf & 0x07;
-+                      if (buf == 5) {
-+                              freq_thres_div2_KHz = 520000;
-+                              _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz,
-+                                                         freq_thres_div2_KHz,
-+                                                         0, 0);
-+                              msleep(5);
-+                      }
-+              }
-+               _mt_fe_tn_get_reg(state, 0x38, &buf);
-+              _mt_fe_tn_set_reg(state, 0x38, buf);
-+               _mt_fe_tn_get_reg(state, 0x32, &buf);
-+              buf = buf | 0x10;
-+              _mt_fe_tn_set_reg(state, 0x32, buf);
-+               _mt_fe_tn_set_reg(state, 0x30, 0x7f);
-+              _mt_fe_tn_set_reg(state, 0x30, 0xff);
-+               _mt_fe_tn_get_reg(state, 0x32, &buf);
-+              buf = buf & 0xdf;
-+              _mt_fe_tn_set_reg(state, 0x32, buf);
-+              _mt_fe_tn_set_reg(state, 0x40, 0x0);
-+               _mt_fe_tn_set_reg(state, 0x30, 0x7f);
-+              _mt_fe_tn_set_reg(state, 0x30, 0xff);
-+              _mt_fe_tn_set_reg(state, 0x31, 0x80);
-+              _mt_fe_tn_set_reg(state, 0x31, 0x00);
-+              msleep(5);
-+               _mt_fe_tn_get_reg(state, 0x39, &buf);
-+              buf = buf >> 5;
-+              if (buf < 5) {
-+                      _mt_fe_tn_get_reg(state, 0x39, &buf);
-+                      buf = buf | 0xa0;
-+                      buf = buf & 0xbf;
-+                      _mt_fe_tn_set_reg(state, 0x39, buf);
-+                       _mt_fe_tn_get_reg(state, 0x32, &buf);
-+                      buf = buf | 0x02;
-+                      _mt_fe_tn_set_reg(state, 0x32, buf);
-+              }
-+               _mt_fe_tn_get_reg(state, 0x37, &buf);
-+              if (buf > 0x70) {
-+                      buf = 0x7f;
-+                      _mt_fe_tn_set_reg(state, 0x40, 0x40);
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      u8 tmp1, tmp2, tmp3;
++      u32 ldpc_frame_cnt, pre_err_packags, code_rate_fac = 0;
++
++      dprintk("%s()\n", __func__);
++
++      switch (state->delivery_system) {
++      case SYS_DVBS:
++              m88ds3103_writereg(state, 0xf9, 0x04);
++              tmp3 = m88ds3103_readreg(state, 0xf8);
++              if ((tmp3&0x10) == 0){
++                      tmp1 = m88ds3103_readreg(state, 0xf7);
++                      tmp2 = m88ds3103_readreg(state, 0xf6);
++                      tmp3 |= 0x10;
++                      m88ds3103_writereg(state, 0xf8, tmp3);
++                      state->preBer = (tmp1<<8) | tmp2;
 +              }
-+              _mt_fe_tn_set_reg(state, 0x37, buf);
-+                _mt_fe_tn_get_reg(state, 0x38, &buf);
-+              if (buf < 0x0f) {
-+                      buf = (buf & 0x0f) << 2;
-+                      buf = buf + 0x0f;
-+                      _mt_fe_tn_set_reg(state, 0x37, buf);
-+              } else if (buf < 0x1f) {
-+                      buf = buf + 0x0f;
-+                      _mt_fe_tn_set_reg(state, 0x37, buf);
++              break;
++      case SYS_DVBS2:
++              tmp1 = m88ds3103_readreg(state, 0x7e) & 0x0f;
++              switch(tmp1){
++              case 0: code_rate_fac = 16008 - 80; break;
++              case 1: code_rate_fac = 21408 - 80; break;
++              case 2: code_rate_fac = 25728 - 80; break;
++              case 3: code_rate_fac = 32208 - 80; break;
++              case 4: code_rate_fac = 38688 - 80; break;
++              case 5: code_rate_fac = 43040 - 80; break;
++              case 6: code_rate_fac = 48408 - 80; break;
++              case 7: code_rate_fac = 51648 - 80; break;
++              case 8: code_rate_fac = 53840 - 80; break;
++              case 9: code_rate_fac = 57472 - 80; break;
++              case 10: code_rate_fac = 58192 - 80; break;
 +              }
-+               _mt_fe_tn_get_reg(state, 0x32, &buf);
-+              buf = (buf | 0x20) & 0xef;
-+              _mt_fe_tn_set_reg(state, 0x32, buf);
-+               _mt_fe_tn_set_reg(state, 0x41, 0x00);
-+              msleep(5);
-+              _mt_fe_tn_set_reg(state, 0x41, 0x02);
-+      } else if (state->tuner_mtt == 0xE1) {
-+              freq_thres_div2_KHz = 580000;
-+              freq_thres_div3r_KHz = 500000;
-+              freq_thres_div3_KHz = 440000;
-+              _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz,
-+                                         freq_thres_div2_KHz,
-+                                         freq_thres_div3r_KHz,
-+                                         freq_thres_div3_KHz);
-+              msleep(3);
-+              _mt_fe_tn_get_reg(state, 0x38, &buf);
-+              _mt_fe_tn_set_reg(state, 0x38, buf);
-+              _mt_fe_tn_set_reg(state, 0x30, 0x7f);
-+              _mt_fe_tn_set_reg(state, 0x30, 0xff);
-+              _mt_fe_tn_set_reg(state, 0x31, 0x80);
-+              _mt_fe_tn_set_reg(state, 0x31, 0x00);
-+              msleep(3);
-+              _mt_fe_tn_get_reg(state, 0x38, &buf);
-+              _mt_fe_tn_set_reg(state, 0x38, buf);
-+              _mt_fe_tn_get_reg(state, 0x32, &buf);
-+              buf = buf | 0x10;
-+              _mt_fe_tn_set_reg(state, 0x32, buf);
-+               _mt_fe_tn_set_reg(state, 0x30, 0x7f);
-+              _mt_fe_tn_set_reg(state, 0x30, 0xff);
-+              _mt_fe_tn_get_reg(state, 0x32, &buf);
-+              buf = buf & 0xdf;
-+              _mt_fe_tn_set_reg(state, 0x32, buf);
-+              _mt_fe_tn_set_reg(state, 0x31, 0x80);
-+              _mt_fe_tn_set_reg(state, 0x31, 0x00);
-+              msleep(3);
-+              _mt_fe_tn_get_reg(state, 0x37, &buf);
-+              _mt_fe_tn_set_reg(state, 0x37, buf);
-+              /*
-+                 if ((freq_KHz == 802000) || (freq_KHz == 826000)) {
-+                 _mt_fe_tn_set_reg(state, 0x37, 0x5e);
-+                 }
-+               */
-+              _mt_fe_tn_get_reg(state, 0x32, &buf);
-+              buf = (buf & 0xef) | 0x30;
-+              _mt_fe_tn_set_reg(state, 0x32, buf);
-+               _mt_fe_tn_set_reg(state, 0x41, 0x00);
-+              msleep(2);
-+              _mt_fe_tn_set_reg(state, 0x41, 0x02);
-+      } else {
-+              return 1;
++              
++              tmp1 = m88ds3103_readreg(state, 0xd7) & 0xff;
++              tmp2 = m88ds3103_readreg(state, 0xd6) & 0xff;
++              tmp3 = m88ds3103_readreg(state, 0xd5) & 0xff;           
++              ldpc_frame_cnt = (tmp1 << 16) | (tmp2 << 8) | tmp3;
++
++              tmp1 = m88ds3103_readreg(state, 0xf8) & 0xff;
++              tmp2 = m88ds3103_readreg(state, 0xf7) & 0xff;
++              pre_err_packags = tmp1<<8 | tmp2;
++              
++              if (ldpc_frame_cnt > 1000){
++                      m88ds3103_writereg(state, 0xd1, 0x01);
++                      m88ds3103_writereg(state, 0xf9, 0x01);
++                      m88ds3103_writereg(state, 0xf9, 0x00);
++                      m88ds3103_writereg(state, 0xd1, 0x00);
++                      state->preBer = pre_err_packags;
++              }                               
++              break;
++      default:
++              break;
 +      }
++      *ber = state->preBer;
++      
 +      return 0;
 +}
 +
-+static int _mt_fe_tn_set_BB_tc2800(struct m88dc2800_state *state)
++static int m88ds3103_read_signal_strength(struct dvb_frontend *fe,
++                                              u16 *signal_strength)
 +{
-+      return 0;
-+}
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      u16 gain;
++      u8 gain1, gain2, gain3 = 0;
 +
-+ static int _mt_fe_tn_set_appendix_tc2800(struct m88dc2800_state *state)
++      dprintk("%s()\n", __func__);
 +
-+{
-+      u8 buf;
-+      const u32 freq_KHz = state->tuner_freq;
-+      if (state->tuner_mtt == 0xD1) {
-+              if ((freq_KHz == 123000) || (freq_KHz == 147000) ||
-+                  (freq_KHz == 171000) || (freq_KHz == 195000)) {
-+                      _mt_fe_tn_set_reg(state, 0x20, 0x1b);
-+              }
-+              if ((freq_KHz == 371000) || (freq_KHz == 419000) ||
-+                  (freq_KHz == 610000) || (freq_KHz == 730000) ||
-+                  (freq_KHz == 754000) || (freq_KHz == 826000)) {
-+                      _mt_fe_tn_get_reg(state, 0x0d, &buf);
-+                      _mt_fe_tn_set_reg(state, 0x0d, (u8) (buf + 1));
-+              }
-+              if ((freq_KHz == 522000) || (freq_KHz == 578000) ||
-+                  (freq_KHz == 634000) || (freq_KHz == 690000) ||
-+                  (freq_KHz == 834000)) {
-+                      _mt_fe_tn_get_reg(state, 0x0d, &buf);
-+                      _mt_fe_tn_set_reg(state, 0x0d, (u8) (buf - 1));
-+              }
-+      } else if (state->tuner_mtt == 0xE1) {
-+              _mt_fe_tn_set_reg(state, 0x20, 0xfc);
-+              if (freq_KHz == 123000 || freq_KHz == 147000 ||
-+                  freq_KHz == 171000 || freq_KHz == 195000 ||
-+                  freq_KHz == 219000 || freq_KHz == 267000 ||
-+                  freq_KHz == 291000 || freq_KHz == 339000 ||
-+                  freq_KHz == 387000 || freq_KHz == 435000 ||
-+                  freq_KHz == 482000 || freq_KHz == 530000 ||
-+                  freq_KHz == 722000 ||
-+                  (state->tuner_custom_cfg == 1 && freq_KHz == 315000)) {
-+                      _mt_fe_tn_set_reg(state, 0x20, 0x5c);
-+              }
++      gain1 = m88ds3103_tuner_readreg(state, 0x3d) & 0x1f;
++      dprintk("%s: gain1 = 0x%02x \n", __func__, gain1);
++      
++      if (gain1 > 15) gain1 = 15;
++      gain2 = m88ds3103_tuner_readreg(state, 0x21) & 0x1f;
++      dprintk("%s: gain2 = 0x%02x \n", __func__, gain2);
++      
++      if(state->tuner_id == TS2022_ID){
++              gain3 = (m88ds3103_tuner_readreg(state, 0x66)>>3) & 0x07;
++              dprintk("%s: gain3 = 0x%02x \n", __func__, gain3);
++              
++              if (gain2 > 16) gain2 = 16;
++              if (gain2 < 2) gain2 = 2;                       
++              if (gain3 > 6) gain3 = 6;
++      }else{
++              if (gain2 > 13) gain2 = 13;
++              gain3 = 0;
 +      }
++
++      gain = gain1*23 + gain2*35 + gain3*29;
++      *signal_strength = 60000 - gain*55;
++
 +      return 0;
 +}
 +
-+ static int _mt_fe_tn_set_DAC_tc2800(struct m88dc2800_state *state)
++
++static int m88ds3103_read_snr(struct dvb_frontend *fe, u16 *p_snr)
 +{
-+      u8 buf, tempnumber;
-+      s32 N;
-+      s32 f1f2number, f1, f2, delta1, Totalnum1;
-+      s32 cntT, cntin, NCOI, z0, z1, z2, tmp;
-+      u32 fc, fadc, fsd, f2d;
-+      u32 FreqTrue108_Hz;
-+      s32 M = state->tuner_crystal / 4000;
-+      /* const u8 bandwidth = state->tuner_bandwidth; */
-+      const u16 DAC_fre = 108;
-+      const u32 crystal_KHz = state->tuner_crystal;
-+      const u32 DACFreq_KHz = state->tuner_dac;
-+      const u32 freq_KHz = state->tuner_freq;
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      u8 val, npow1, npow2, spow1, cnt;
++      u16 tmp, snr;
++      u32 npow, spow, snr_total;      
++      static const u16 mes_log10[] ={
++              0,      3010,   4771,   6021,   6990,   7781,   8451,   9031,   9542,   10000,
++              10414,  10792,  11139,  11461,  11761,  12041,  12304,  12553,  12788,  13010,
++              13222,  13424,  13617,  13802,  13979,  14150,  14314,  14472,  14624,  14771,
++              14914,  15052,  15185,  15315,  15441,  15563,  15682,  15798,  15911,  16021,
++              16128,  16232,  16335,  16435,  16532,  16628,  16721,  16812,  16902,  16990,
++              17076,  17160,  17243,  17324,  17404,  17482,  17559,  17634,  17709,  17782,
++              17853,  17924,  17993,  18062,  18129,  18195,  18261,  18325,  18388,  18451,
++              18513,  18573,  18633,  18692,  18751,  18808,  18865,  18921,  18976,  19031
++      };
++      static const u16 mes_loge[] ={
++              0,      6931,   10986,  13863,  16094,  17918,  19459,  20794,  21972,  23026,
++              23979,  24849,  25649,  26391,  27081,  27726,  28332,  28904,  29444,  29957,
++              30445,  30910,  31355,  31781,  32189,  32581,  32958,  33322,  33673,  34012,
++              34340,  34657,
++      };
 +
-+      if (state->tuner_mtt == 0xE1) {
-+              _mt_fe_tn_get_reg(state, 0x33, &buf);
-+              M = buf & 0x0f;
-+              if (M == 0)
-+                      M = 6;
-+      }
-+      _mt_fe_tn_get_reg(state, 0x34, &buf);
-+      N = buf & 0x07;
-+      _mt_fe_tn_get_reg(state, 0x35, &buf);
-+      N = (N << 8) + buf;
-+      buf = ((N + 256) * crystal_KHz / M / DAC_fre + 500) / 1000;
-+      if (state->tuner_mtt == 0xE1) {
-+              _mt_fe_tn_set_appendix_tc2800(state);
-+              if (freq_KHz == 187000 || freq_KHz == 195000 ||
-+                  freq_KHz == 131000 || freq_KHz == 211000 ||
-+                  freq_KHz == 219000 || freq_KHz == 227000 ||
-+                  freq_KHz == 267000 || freq_KHz == 299000 ||
-+                  freq_KHz == 347000 || freq_KHz == 363000 ||
-+                  freq_KHz == 395000 || freq_KHz == 403000 ||
-+                  freq_KHz == 435000 || freq_KHz == 482000 ||
-+                  freq_KHz == 474000 || freq_KHz == 490000 ||
-+                  freq_KHz == 610000 || freq_KHz == 642000 ||
-+                  freq_KHz == 666000 || freq_KHz == 722000 ||
-+                  freq_KHz == 754000 ||
-+                  ((freq_KHz == 379000 || freq_KHz == 467000 ||
-+                    freq_KHz == 762000) && state->tuner_custom_cfg != 1)) {
-+                      buf = buf + 1;
++      dprintk("%s()\n", __func__);
++
++      snr = 0;
++      
++      switch (state->delivery_system){
++      case SYS_DVBS:
++              cnt = 10; snr_total = 0;
++              while(cnt > 0){
++                      val = m88ds3103_readreg(state, 0xff);
++                      snr_total += val;
++                      cnt--;
 +              }
-+              if (freq_KHz == 123000 || freq_KHz == 139000 ||
-+                  freq_KHz == 147000 || freq_KHz == 171000 ||
-+                  freq_KHz == 179000 || freq_KHz == 203000 ||
-+                  freq_KHz == 235000 || freq_KHz == 251000 ||
-+                  freq_KHz == 259000 || freq_KHz == 283000 ||
-+                  freq_KHz == 331000 || freq_KHz == 363000 ||
-+                  freq_KHz == 371000 || freq_KHz == 387000 ||
-+                  freq_KHz == 411000 || freq_KHz == 427000 ||
-+                  freq_KHz == 443000 || freq_KHz == 451000 ||
-+                  freq_KHz == 459000 || freq_KHz == 506000 ||
-+                  freq_KHz == 514000 || freq_KHz == 538000 ||
-+                  freq_KHz == 546000 || freq_KHz == 554000 ||
-+                  freq_KHz == 562000 || freq_KHz == 570000 ||
-+                  freq_KHz == 578000 || freq_KHz == 602000 ||
-+                  freq_KHz == 626000 || freq_KHz == 658000 ||
-+                  freq_KHz == 690000 || freq_KHz == 714000 ||
-+                  freq_KHz == 746000 || freq_KHz == 522000 ||
-+                  freq_KHz == 826000 || freq_KHz == 155000 ||
-+                  freq_KHz == 530000 ||
-+                  ((freq_KHz == 275000 || freq_KHz == 355000) &&
-+                   state->tuner_custom_cfg != 1) ||
-+                  ((freq_KHz == 467000 || freq_KHz == 762000 ||
-+                    freq_KHz == 778000 || freq_KHz == 818000) &&
-+                   state->tuner_custom_cfg == 1)) {
-+                      buf = buf - 1;
++              tmp = (u16)(snr_total/80);
++              if(tmp > 0){
++                      if (tmp > 32) tmp = 32;
++                      snr = (mes_loge[tmp - 1] * 100) / 45;
++              }else{
++                      snr = 0;
++              }
++              break;
++      case SYS_DVBS2:
++              cnt  = 10; npow = 0; spow = 0;
++              while(cnt >0){
++                      npow1 = m88ds3103_readreg(state, 0x8c) & 0xff;
++                      npow2 = m88ds3103_readreg(state, 0x8d) & 0xff;
++                      npow += (((npow1 & 0x3f) + (u16)(npow2 << 6)) >> 2);
++
++                      spow1 = m88ds3103_readreg(state, 0x8e) & 0xff;
++                      spow += ((spow1 * spow1) >> 1);
++                      cnt--;
 +              }
++              npow /= 10; spow /= 10;
++              if(spow == 0){
++                      snr = 0;
++              }else if(npow == 0){
++                      snr = 19;
++              }else{
++                      if(spow > npow){
++                              tmp = (u16)(spow / npow);
++                              if (tmp > 80) tmp = 80;
++                              snr = mes_log10[tmp - 1]*3;
++                      }else{
++                              tmp = (u16)(npow / spow);
++                              if (tmp > 80) tmp = 80;
++                              snr = -(mes_log10[tmp - 1] / 1000);
++                      }
++              }                       
++              break;
++      default:
++              break;
 +      }
-+       _mt_fe_tn_set_reg(state, 0x0e, buf);
-+      _mt_fe_tn_set_reg(state, 0x0d, buf);
-+      f1f2number =
-+          (((DACFreq_KHz * M * buf) / crystal_KHz) << 16) / (N + 256) +
-+          (((DACFreq_KHz * M * buf) % crystal_KHz) << 16) / ((N + 256) *
-+                                                              crystal_KHz);
-+      _mt_fe_tn_set_reg(state, 0xf1, (f1f2number & 0xff00) >> 8);
-+      _mt_fe_tn_set_reg(state, 0xf2, f1f2number & 0x00ff);
-+       FreqTrue108_Hz =
-+          (N + 256) * crystal_KHz / (M * buf) * 1000 +
-+          (((N + 256) * crystal_KHz) % (M * buf)) * 1000 / (M * buf);
-+      f1 = 4096;
-+      fc = FreqTrue108_Hz;
-+      fadc = fc / 4;
-+      fsd = 27000000;
-+      f2d = state->tuner_bandwidth * 1000 / 2 - 150;
-+      f2 = (fsd / 250) * f2d / ((fc + 500) / 1000);
-+      delta1 = ((f1 - f2) << 15) / f2;
-+      Totalnum1 = ((f1 - f2) << 15) - delta1 * f2;
-+      cntT = f2;
-+      cntin = Totalnum1;
-+      NCOI = delta1;
-+       z0 = cntin;
-+      z1 = cntT;
-+      z2 = NCOI;
-+      tempnumber = (z0 & 0xff00) >> 8;
-+      _mt_fe_tn_set_reg(state, 0xc9, (u8) (tempnumber & 0x0f));
-+      tempnumber = (z0 & 0xff);
-+      _mt_fe_tn_set_reg(state, 0xca, tempnumber);
-+       tempnumber = (z1 & 0xff00) >> 8;
-+      _mt_fe_tn_set_reg(state, 0xcb, tempnumber);
-+      tempnumber = (z1 & 0xff);
-+      _mt_fe_tn_set_reg(state, 0xcc, tempnumber);
-+       tempnumber = (z2 & 0xff00) >> 8;
-+      _mt_fe_tn_set_reg(state, 0xcd, tempnumber);
-+      tempnumber = (z2 & 0xff);
-+      _mt_fe_tn_set_reg(state, 0xce, tempnumber);
-+       tmp = f1;
-+      f1 = f2;
-+      f2 = tmp / 2;
-+      delta1 = ((f1 - f2) << 15) / f2;
-+      Totalnum1 = ((f1 - f2) << 15) - delta1 * f2;
-+      NCOI = (f1 << 15) / f2 - (1 << 15);
-+      cntT = f2;
-+      cntin = Totalnum1;
-+      z0 = cntin;
-+      z1 = cntT;
-+      z2 = NCOI;
-+      tempnumber = (z0 & 0xff00) >> 8;
-+      _mt_fe_tn_set_reg(state, 0xd9, (u8) (tempnumber & 0x0f));
-+      tempnumber = (z0 & 0xff);
-+      _mt_fe_tn_set_reg(state, 0xda, tempnumber);
-+       tempnumber = (z1 & 0xff00) >> 8;
-+      _mt_fe_tn_set_reg(state, 0xdb, tempnumber);
-+      tempnumber = (z1 & 0xff);
-+      _mt_fe_tn_set_reg(state, 0xdc, tempnumber);
-+       tempnumber = (z2 & 0xff00) >> 8;
-+      _mt_fe_tn_set_reg(state, 0xdd, tempnumber);
-+      tempnumber = (z2 & 0xff);
-+      _mt_fe_tn_set_reg(state, 0xde, tempnumber);
++      *p_snr = snr;
 +
 +      return 0;
 +}
 +
-+static int _mt_fe_tn_preset_tc2800(struct m88dc2800_state *state)
++
++static int m88ds3103_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
 +{
-+      if (state->tuner_mtt == 0xD1) {
-+              _mt_fe_tn_set_reg(state, 0x19, 0x4a);
-+              _mt_fe_tn_set_reg(state, 0x1b, 0x4b);
-+               _mt_fe_tn_set_reg(state, 0x04, 0x04);
-+              _mt_fe_tn_set_reg(state, 0x17, 0x0d);
-+              _mt_fe_tn_set_reg(state, 0x62, 0x6c);
-+              _mt_fe_tn_set_reg(state, 0x63, 0xf4);
-+              _mt_fe_tn_set_reg(state, 0x1f, 0x0e);
-+              _mt_fe_tn_set_reg(state, 0x6b, 0xf4);
-+              _mt_fe_tn_set_reg(state, 0x14, 0x01);
-+              _mt_fe_tn_set_reg(state, 0x5a, 0x75);
-+              _mt_fe_tn_set_reg(state, 0x66, 0x74);
-+              _mt_fe_tn_set_reg(state, 0x72, 0xe0);
-+              _mt_fe_tn_set_reg(state, 0x70, 0x07);
-+              _mt_fe_tn_set_reg(state, 0x15, 0x7b);
-+              _mt_fe_tn_set_reg(state, 0x55, 0x71);
-+               _mt_fe_tn_set_reg(state, 0x75, 0x55);
-+              _mt_fe_tn_set_reg(state, 0x76, 0xac);
-+              _mt_fe_tn_set_reg(state, 0x77, 0x6c);
-+              _mt_fe_tn_set_reg(state, 0x78, 0x8b);
-+              _mt_fe_tn_set_reg(state, 0x79, 0x42);
-+              _mt_fe_tn_set_reg(state, 0x7a, 0xd2);
-+               _mt_fe_tn_set_reg(state, 0x81, 0x01);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x00);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x02);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x04);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x06);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x08);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x09);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x29);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x49);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x58);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x59);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x98);
-+              _mt_fe_tn_set_reg(state, 0x82, 0x99);
-+              _mt_fe_tn_set_reg(state, 0x10, 0x05);
-+              _mt_fe_tn_set_reg(state, 0x10, 0x0d);
-+              _mt_fe_tn_set_reg(state, 0x11, 0x95);
-+              _mt_fe_tn_set_reg(state, 0x11, 0x9d);
-+              if (state->tuner_loopthrough != 0) {
-+                      _mt_fe_tn_set_reg(state, 0x67, 0x25);
-+              } else {
-+                      _mt_fe_tn_set_reg(state, 0x67, 0x05);
-+              }
-+      } else if (state->tuner_mtt == 0xE1) {
-+              _mt_fe_tn_set_reg(state, 0x1b, 0x47);
-+              if (state->tuner_mode == 0) {   /* DVB-C */
-+                      _mt_fe_tn_set_reg(state, 0x66, 0x74);
-+                      _mt_fe_tn_set_reg(state, 0x62, 0x2c);
-+                      _mt_fe_tn_set_reg(state, 0x63, 0x54);
-+                      _mt_fe_tn_set_reg(state, 0x68, 0x0b);
-+                      _mt_fe_tn_set_reg(state, 0x14, 0x00);
-+              } else {                        /* CTTB */
-+                      _mt_fe_tn_set_reg(state, 0x66, 0x74);
-+                      _mt_fe_tn_set_reg(state, 0x62, 0x0c);
-+                      _mt_fe_tn_set_reg(state, 0x63, 0x54);
-+                      _mt_fe_tn_set_reg(state, 0x68, 0x0b);
-+                      _mt_fe_tn_set_reg(state, 0x14, 0x05);
-+              }
-+              _mt_fe_tn_set_reg(state, 0x6f, 0x00);
-+              _mt_fe_tn_set_reg(state, 0x84, 0x04);
-+              _mt_fe_tn_set_reg(state, 0x5e, 0xbe);
-+              _mt_fe_tn_set_reg(state, 0x87, 0x07);
-+              _mt_fe_tn_set_reg(state, 0x8a, 0x1f);
-+              _mt_fe_tn_set_reg(state, 0x8b, 0x1f);
-+              _mt_fe_tn_set_reg(state, 0x88, 0x30);
-+              _mt_fe_tn_set_reg(state, 0x58, 0x34);
-+              _mt_fe_tn_set_reg(state, 0x61, 0x8c);
-+              _mt_fe_tn_set_reg(state, 0x6a, 0x42);
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      u8 tmp1, tmp2, tmp3, data;
++
++      dprintk("%s()\n", __func__);
++
++      switch (state->delivery_system) {
++      case SYS_DVBS:
++              data = m88ds3103_readreg(state, 0xf8);
++              data |= 0x40;
++              m88ds3103_writereg(state, 0xf8, data);          
++              tmp1 = m88ds3103_readreg(state, 0xf5);
++              tmp2 = m88ds3103_readreg(state, 0xf4);
++              *ucblocks = (tmp1 <<8) | tmp2;          
++              data &= ~0x20;
++              m88ds3103_writereg(state, 0xf8, data);
++              data |= 0x20;
++              m88ds3103_writereg(state, 0xf8, data);
++              data &= ~0x40;
++              m88ds3103_writereg(state, 0xf8, data);
++              break;
++      case SYS_DVBS2:
++              tmp1 = m88ds3103_readreg(state, 0xda);
++              tmp2 = m88ds3103_readreg(state, 0xd9);
++              tmp3 = m88ds3103_readreg(state, 0xd8);
++              *ucblocks = (tmp1 <<16)|(tmp2 <<8)|tmp3;
++              data = m88ds3103_readreg(state, 0xd1);
++              data |= 0x01;
++              m88ds3103_writereg(state, 0xd1, data);
++              data &= ~0x01;
++              m88ds3103_writereg(state, 0xd1, data);
++              break;
++      default:
++              break;
 +      }
 +      return 0;
 +}
 +
-+static int mt_fe_tn_wakeup_tc2800(struct m88dc2800_state *state)
++static int m88ds3103_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
 +{
-+      _mt_fe_tn_set_reg(state, 0x16, 0xb1);
-+      _mt_fe_tn_set_reg(state, 0x09, 0x7d);
-+      return 0;
-+}
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      u8 data_a1, data_a2;
 +
-+  static int mt_fe_tn_sleep_tc2800(struct m88dc2800_state *state)
-+{
-+      _mt_fe_tn_set_reg(state, 0x16, 0xb0);
-+      _mt_fe_tn_set_reg(state, 0x09, 0x6d);
-+      return 0;
-+}
-+
-+ static int mt_fe_tn_init_tc2800(struct m88dc2800_state *state)
-+{
-+      if (state->tuner_init_OK != 1) {
-+              state->tuner_dev_addr = 0x61;   /* TUNER_I2C_ADDR_TC2800 */
-+              state->tuner_freq = 650000;
-+              state->tuner_qam = 0;
-+              state->tuner_mode = 0;  // 0: DVB-C, 1: CTTB
-+              state->tuner_bandwidth = 8;
-+              state->tuner_loopthrough = 0;
-+              state->tuner_crystal = 24000;
-+              state->tuner_dac = 7200;
-+              state->tuner_mtt = 0x00;
-+              state->tuner_custom_cfg = 0;
-+              state->tuner_version = 30022;   /* Driver version number */
-+              state->tuner_time = 12092611;
-+              state->tuner_init_OK = 1;
++      dprintk("%s(%d)\n", __func__, tone);
++      if ((tone != SEC_TONE_ON) && (tone != SEC_TONE_OFF)) {
++              printk(KERN_ERR "%s: Invalid, tone=%d\n", __func__, tone);
++              return -EINVAL;
 +      }
-+      _mt_fe_tn_set_reg(state, 0x2b, 0x46);
-+      _mt_fe_tn_set_reg(state, 0x2c, 0x75);
-+      if (state->tuner_mtt == 0x00) {
-+              u8 tmp = 0;
-+              _mt_fe_tn_get_reg(state, 0x01, &tmp);
-+              printk(KERN_INFO "m88dc2800: tuner id = 0x%02x ", tmp);
-+              switch (tmp) {
-+              case 0x0d:
-+                      state->tuner_mtt = 0xD1;
-+                      break;
-+              case 0x8e:
-+              default:
-+                      state->tuner_mtt = 0xE1;
-+                      break;
-+              }
++
++      data_a1 = m88ds3103_readreg(state, 0xa1);
++      data_a2 = m88ds3103_readreg(state, 0xa2);
++      if(state->demod_id == DS3103_ID)
++              data_a2 &= 0xdf; /* Normal mode */
++      switch (tone) {
++      case SEC_TONE_ON:
++              dprintk("%s: SEC_TONE_ON\n", __func__);
++              data_a1 |= 0x04;
++              data_a1 &= ~0x03;
++              data_a1 &= ~0x40;
++              data_a2 &= ~0xc0;
++              break;
++      case SEC_TONE_OFF:
++              dprintk("%s: SEC_TONE_OFF\n", __func__);
++              data_a2 &= ~0xc0;
++              data_a2 |= 0x80;
++              break;
 +      }
++      m88ds3103_writereg(state, 0xa2, data_a2);
++      m88ds3103_writereg(state, 0xa1, data_a1);
 +      return 0;
 +}
 +
-+ static int mt_fe_tn_set_freq_tc2800(struct m88dc2800_state *state,
-+                                     u32 freq_KHz)
++static int m88ds3103_send_diseqc_msg(struct dvb_frontend *fe,
++                              struct dvb_diseqc_master_cmd *d)
 +{
-+      u8 buf;
-+      u8 buf1;
-+
-+      mt_fe_tn_init_tc2800(state);
-+      state->tuner_freq = freq_KHz;
-+      _mt_fe_tn_set_reg(state, 0x21, freq_KHz > 500000 ? 0xb9 : 0x99);
-+      mt_fe_tn_wakeup_tc2800(state);
-+       _mt_fe_tn_set_reg(state, 0x05, 0x7f);
-+      _mt_fe_tn_set_reg(state, 0x06, 0xf8);
-+       _mt_fe_tn_set_RF_front_tc2800(state);
-+      _mt_fe_tn_set_PLL_freq_tc2800(state);
-+      _mt_fe_tn_set_DAC_tc2800(state);
-+      _mt_fe_tn_set_BB_tc2800(state);
-+      _mt_fe_tn_preset_tc2800(state);
-+       _mt_fe_tn_set_reg(state, 0x05, 0x00);
-+      _mt_fe_tn_set_reg(state, 0x06, 0x00);
-+       if (state->tuner_mtt == 0xD1) {
-+              _mt_fe_tn_set_reg(state, 0x00, 0x01);
-+              _mt_fe_tn_set_reg(state, 0x00, 0x00);
-+               msleep(5);
-+              _mt_fe_tn_set_reg(state, 0x41, 0x00);
-+              msleep(5);
-+              _mt_fe_tn_set_reg(state, 0x41, 0x02);
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      int i, ret = 0;
++      u8 tmp, time_out;
 +
-+              _mt_fe_tn_get_reg(state, 0x69, &buf1);
-+              buf1 = buf1 & 0x0f;
-+              _mt_fe_tn_get_reg(state, 0x61, &buf);
-+              buf = buf & 0x0f;
-+              if (buf == 0x0c)
-+                      _mt_fe_tn_set_reg(state, 0x6a, 0x59);
-+              if (buf1 > 0x02) {
-+                      if (freq_KHz > 600000)
-+                              _mt_fe_tn_set_reg(state, 0x66, 0x44);
-+                      else if (freq_KHz > 500000)
-+                              _mt_fe_tn_set_reg(state, 0x66, 0x64);
-+                      else
-+                              _mt_fe_tn_set_reg(state, 0x66, 0x74);
-+              }               
-+              if (buf1 < 0x03) {
-+                      if (freq_KHz > 800000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x64);
-+                      else if (freq_KHz > 600000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
-+                      else if (freq_KHz > 500000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
-+                      else if (freq_KHz > 300000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x43);
-+                      else if (freq_KHz > 220000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
-+                      else if (freq_KHz > 110000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x14);
-+                      else
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
-+                      msleep(5);
-+              } else if (buf < 0x0c) {
-+                      if (freq_KHz > 800000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x14);
-+                      else if (freq_KHz > 600000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x14);
-+                      else if (freq_KHz > 500000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x34);
-+                      else if (freq_KHz > 300000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x43);
-+                      else if (freq_KHz > 220000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
-+                      else if (freq_KHz > 110000)
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x14);
-+                      else
-+                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
-+                      msleep(5);
-+              }
-+      } else if ((state->tuner_mtt == 0xE1)) {
-+              _mt_fe_tn_set_reg(state, 0x00, 0x01);
-+              _mt_fe_tn_set_reg(state, 0x00, 0x00);
-+               msleep(20);
-+               _mt_fe_tn_get_reg(state, 0x32, &buf);
-+              buf = (buf & 0xef) | 0x28;
-+              _mt_fe_tn_set_reg(state, 0x32, buf);
-+               msleep(50);
-+              _mt_fe_tn_get_reg(state, 0x38, &buf);
-+              _mt_fe_tn_set_reg(state, 0x38, buf);
-+              _mt_fe_tn_get_reg(state, 0x32, &buf);
-+              buf = (buf & 0xf7) | 0x10;
-+              _mt_fe_tn_set_reg(state, 0x32, buf);
-+               msleep(10);
-+               _mt_fe_tn_get_reg(state, 0x69, &buf);
-+              buf = buf & 0x03;
-+              _mt_fe_tn_set_reg(state, 0x2a, buf);
-+              if (buf > 0) {
-+                      msleep(20);
-+                      _mt_fe_tn_get_reg(state, 0x84, &buf);
-+                      buf = buf & 0x1f;
-+                      _mt_fe_tn_set_reg(state, 0x68, 0x0a);
-+                      _mt_fe_tn_get_reg(state, 0x88, &buf1);
-+                      buf1 = buf1 & 0x1f;
-+                      if (buf <= buf1)
-+                              _mt_fe_tn_set_reg(state, 0x66, 0x44);
-+                      else
-+                              _mt_fe_tn_set_reg(state, 0x66, 0x74);
-+              } else {
-+                      if (freq_KHz <= 600000)
-+                              _mt_fe_tn_set_reg(state, 0x68, 0x0c);
-+                      else
-+                              _mt_fe_tn_set_reg(state, 0x68, 0x0e);
-+                      _mt_fe_tn_set_reg(state, 0x30, 0xfb);
-+                      _mt_fe_tn_set_reg(state, 0x30, 0xff);
-+                      _mt_fe_tn_set_reg(state, 0x31, 0x04);
-+                      _mt_fe_tn_set_reg(state, 0x31, 0x00);
-+              }
-+              if (state->tuner_loopthrough != 0) {
-+                      _mt_fe_tn_get_reg(state, 0x28, &buf);
-+                      if (buf == 0) {
-+                              _mt_fe_tn_set_reg(state, 0x28, 0xff);
-+                              _mt_fe_tn_get_reg(state, 0x61, &buf);
-+                              buf = buf & 0x0f;
-+                              if (buf > 9)
-+                                      _mt_fe_tn_set_reg(state, 0x67, 0x74);
-+                              else if (buf > 6)
-+                                      _mt_fe_tn_set_reg(state, 0x67, 0x64);
-+                              else if (buf > 3)
-+                                      _mt_fe_tn_set_reg(state, 0x67, 0x54);
-+                              else
-+                                      _mt_fe_tn_set_reg(state, 0x67, 0x44);
-+                      }
-+              } else {
-+                      _mt_fe_tn_set_reg(state, 0x67, 0x34);
++      /* Dump DiSEqC message */
++      if (debug) {
++              printk(KERN_INFO "m88ds3103: %s(", __func__);
++              for (i = 0 ; i < d->msg_len ;) {
++                      printk(KERN_INFO "0x%02x", d->msg[i]);
++                      if (++i < d->msg_len)
++                              printk(KERN_INFO ", ");
 +              }
-+      } else {
-+              return 1;
 +      }
-+      return 0;
++
++      tmp = m88ds3103_readreg(state, 0xa2);
++      tmp &= ~0xc0;
++      if(state->demod_id == DS3103_ID)
++              tmp &= ~0x20;
++      m88ds3103_writereg(state, 0xa2, tmp);
++      
++      for (i = 0; i < d->msg_len; i ++)
++              m88ds3103_writereg(state, (0xa3+i), d->msg[i]);
++
++      tmp = m88ds3103_readreg(state, 0xa1);   
++      tmp &= ~0x38;
++      tmp &= ~0x40;
++      tmp |= ((d->msg_len-1) << 3) | 0x07;
++      tmp &= ~0x80;
++      m88ds3103_writereg(state, 0xa1, tmp);
++      /*      1.5 * 9 * 8     = 108ms */
++      time_out = 150;
++      while (time_out > 0){
++              msleep(10);
++              time_out -= 10;
++              tmp = m88ds3103_readreg(state, 0xa1);           
++              if ((tmp & 0x40) == 0)
++                      break;
++      }
++      if (time_out == 0){
++              tmp = m88ds3103_readreg(state, 0xa1);
++              tmp &= ~0x80;
++              tmp |= 0x40;
++              m88ds3103_writereg(state, 0xa1, tmp);
++              ret = 1;
++      }
++      tmp = m88ds3103_readreg(state, 0xa2);
++      tmp &= ~0xc0;
++      tmp |= 0x80;
++      m88ds3103_writereg(state, 0xa2, tmp);   
++      return ret;
 +}
 +
 +
-+/*
-+static int mt_fe_tn_set_BB_filter_band_tc2800(struct m88dc2800_state *state,
-+                                            u8 bandwidth)
++static int m88ds3103_diseqc_send_burst(struct dvb_frontend *fe,
++                                      fe_sec_mini_cmd_t burst)
 +{
-+      u8 buf, tmp;
-+
-+      _mt_fe_tn_get_reg(state, 0x53, &tmp);
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      u8      val, time_out;
++      
++      dprintk("%s()\n", __func__);
 +
-+      if (bandwidth == 6)
-+              buf = 0x01 << 1;
-+      else if (bandwidth == 7)
-+              buf = 0x02 << 1;
-+      else if (bandwidth == 8)
-+              buf = 0x04 << 1;
++      val = m88ds3103_readreg(state, 0xa2);
++      val &= ~0xc0;
++      if(state->demod_id == DS3103_ID)
++              val &= 0xdf; /* Normal mode */
++      m88ds3103_writereg(state, 0xa2, val);
++      /* DiSEqC burst */
++      if (burst == SEC_MINI_B)
++              m88ds3103_writereg(state, 0xa1, 0x01);
 +      else
-+              buf = 0x04 << 1;
++              m88ds3103_writereg(state, 0xa1, 0x02);
 +
-+      tmp &= 0xf1;
-+      tmp |= buf;
-+      _mt_fe_tn_set_reg(state, 0x53, tmp);
-+      state->tuner_bandwidth = bandwidth;
++      msleep(13);
++
++      time_out = 5;
++      do{
++              val = m88ds3103_readreg(state, 0xa1);
++              if ((val & 0x40) == 0)
++                      break;
++              msleep(1);
++              time_out --;
++      } while (time_out > 0);
++
++      val = m88ds3103_readreg(state, 0xa2);
++      val &= ~0xc0;
++      val |= 0x80;
++      m88ds3103_writereg(state, 0xa2, val);
++      
 +      return 0;
 +}
-+*/
 +
-+static s32 mt_fe_tn_get_signal_strength_tc2800(struct m88dc2800_state
-+                                             *state)
++static void m88ds3103_release(struct dvb_frontend *fe)
 +{
-+      s32 level = -107;
-+      s32 tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
-+      s32 val1, val2, val;
-+      s32 result2, result3, result4, result5, result6;
-+      s32 append;
-+      u8 tmp;
-+      s32 freq_KHz = (s32) state->tuner_freq;
-+      if (state->tuner_mtt == 0xD1) {
-+              _mt_fe_tn_get_reg(state, 0x61, &tmp);
-+              tmp1 = tmp & 0x0f;
-+               _mt_fe_tn_get_reg(state, 0x69, &tmp);
-+              tmp2 = tmp & 0x0f;
-+               _mt_fe_tn_get_reg(state, 0x73, &tmp);
-+              tmp3 = tmp & 0x07;
-+               _mt_fe_tn_get_reg(state, 0x7c, &tmp);
-+              tmp4 = (tmp >> 4) & 0x0f;
-+               _mt_fe_tn_get_reg(state, 0x7b, &tmp);
-+              tmp5 = tmp & 0x0f;
-+               _mt_fe_tn_get_reg(state, 0x7f, &tmp);
-+              tmp6 = (tmp >> 5) & 0x01;
-+              if (tmp1 > 6) {
-+                      val1 = 0;
-+                      if (freq_KHz <= 200000) {
-+                              val2 = (tmp1 - 6) * 267;
-+                      } else if (freq_KHz <= 600000) {
-+                              val2 = (tmp1 - 6) * 280;
-+                      } else {
-+                              val2 = (tmp1 - 6) * 290;
-+                      }
-+                      val = val1 + val2;
-+              } else {
-+                      if (tmp1 == 0) {
-+                              val1 = -550;
-+                      } else {
-+                              val1 = 0;
-+                      }
-+                      if ((tmp1 < 4) && (freq_KHz >= 506000)) {
-+                              val1 = -850;
-+                      }
-+                      val2 = 0;
-+                      val = val1 + val2;
-+              }
-+              if (freq_KHz <= 95000) {
-+                      result2 = tmp2 * 289;
-+              } else if (freq_KHz <= 155000) {
-+                      result2 = tmp2 * 278;
-+              } else if (freq_KHz <= 245000) {
-+                      result2 = tmp2 * 267;
-+              } else if (freq_KHz <= 305000) {
-+                      result2 = tmp2 * 256;
-+              } else if (freq_KHz <= 335000) {
-+                      result2 = tmp2 * 244;
-+              } else if (freq_KHz <= 425000) {
-+                      result2 = tmp2 * 233;
-+              } else if (freq_KHz <= 575000) {
-+                      result2 = tmp2 * 222;
-+              } else if (freq_KHz <= 665000) {
-+                      result2 = tmp2 * 211;
-+              } else {
-+                      result2 = tmp2 * 200;
-+              }
-+              result3 = (6 - tmp3) * 100;
-+              result4 = 300 * tmp4;
-+              result5 = 50 * tmp5;
-+              result6 = 300 * tmp6;
-+              if (freq_KHz < 105000) {
-+                      append = -450;
-+              } else if (freq_KHz <= 227000) {
-+                      append = -4 * (freq_KHz / 1000 - 100) + 150;
-+              } else if (freq_KHz <= 305000) {
-+                      append = -4 * (freq_KHz / 1000 - 100);
-+              } else if (freq_KHz <= 419000) {
-+                      append = 500 - 40 * (freq_KHz / 1000 - 300) / 17 + 130;
-+              } else if (freq_KHz <= 640000) {
-+                      append = 500 - 40 * (freq_KHz / 1000 - 300) / 17;
-+              } else {
-+                      append = -500;
-+              }
-+              level = append - (val + result2 + result3 + result4 +
-+                                result5 + result6);
-+              level /= 100;
-+      } else if (state->tuner_mtt == 0xE1) {
-+              _mt_fe_tn_get_reg(state, 0x61, &tmp);
-+              tmp1 = tmp & 0x0f;
-+               _mt_fe_tn_get_reg(state, 0x84, &tmp);
-+              tmp2 = tmp & 0x1f;
-+               _mt_fe_tn_get_reg(state, 0x69, &tmp);
-+              tmp3 = tmp & 0x03;
-+               _mt_fe_tn_get_reg(state, 0x73, &tmp);
-+              tmp4 = tmp & 0x0f;
-+               _mt_fe_tn_get_reg(state, 0x7c, &tmp);
-+              tmp5 = (tmp >> 4) & 0x0f;
-+               _mt_fe_tn_get_reg(state, 0x7b, &tmp);
-+              tmp6 = tmp & 0x0f;
-+              if (freq_KHz < 151000) {
-+                      result2 = (1150 - freq_KHz / 100) * 163 / 33 + 4230;
-+                      result3 = (1150 - freq_KHz / 100) * 115 / 33 + 1850;
-+                      result4 = -3676 * (freq_KHz / 1000) / 100 + 6115;
-+              } else if (freq_KHz < 257000) {
-+                      result2 = (1540 - freq_KHz / 100) * 11 / 4 + 3870;
-+                      result3 = (1540 - freq_KHz / 100) * 205 / 96 + 2100;
-+                      result4 = -21 * freq_KHz / 1000 + 5084;
-+              } else if (freq_KHz < 305000) {
-+                      result2 = (2620 - freq_KHz / 100) * 5 / 3 + 2770;
-+                      result3 = (2620 - freq_KHz / 100) * 10 / 7 + 1700;
-+                      result4 = 650;
-+              } else if (freq_KHz < 449000) {
-+                      result2 = (307 - freq_KHz / 1000) * 82 / 27 + 11270;
-+                      result3 = (3100 - freq_KHz / 100) * 5 / 3 + 10000;
-+                      result4 = 134 * freq_KHz / 10000 + 11875;
-+              } else {
-+                      result2 = (307 - freq_KHz / 1000) * 82 / 27 + 11270;
-+                      result3 = 8400;
-+                      result4 = 5300;
-+              }
-+              if (tmp1 > 6) {
-+                      val1 = result2;
-+                      val2 = 2900;
-+                      val = 500;
-+              } else if (tmp1 > 0) {
-+                      val1 = result3;
-+                      val2 = 2700;
-+                      val = 500;
-+              } else {
-+                      val1 = result4;
-+                      val2 = 2700;
-+                      val = 400;
-+              }
-+              level = val1 - (val2 * tmp1 + 500 * tmp2 + 3000 * tmp3 -
-+                          500 * tmp4 + 3000 * tmp5 + val * tmp6) - 1000;
-+              level /= 1000;
-+      }
-+      return level;
-+}
++      struct m88ds3103_state *state = fe->demodulator_priv;
 +
++      dprintk("%s\n", __func__);
++      kfree(state);
++}
 +
-+/* m88dc2800 operation functions */
-+u8 M88DC2000GetLock(struct m88dc2800_state * state)
++static int m88ds3103_check_id(struct m88ds3103_state *state)
 +{
-+      u8 u8ret = 0;
-+      if (ReadReg(state, 0x80) < 0x06) {
-+              if ((ReadReg(state, 0xdf) & 0x80) == 0x80
-+                   &&(ReadReg(state, 0x91) & 0x23) == 0x03
-+                   &&(ReadReg(state, 0x43) & 0x08) == 0x08)
-+                      u8ret = 1;
-+              else
-+                      u8ret = 0;
-+      } else {
-+              if ((ReadReg(state, 0x85) & 0x08) == 0x08)
-+                      u8ret = 1;
-+              else
-+                      u8ret = 0;
++      int val_00, val_01;
++      
++      /*check demod id*/
++      val_01 = m88ds3103_readreg(state, 0x01);
++      printk(KERN_INFO "DS3000 chip version: %x attached.\n", val_01);
++                      
++      if(val_01 == 0xD0)
++              state->demod_id = DS3103_ID;
++      else if(val_01 == 0xC0)
++              state->demod_id = DS3000_ID;
++      else
++              state->demod_id = UNKNOW_ID;
++              
++      /*check tuner id*/
++      val_00 = m88ds3103_tuner_readreg(state, 0x00);
++      printk(KERN_INFO "TS202x chip version[1]: %x attached.\n", val_00);
++      val_00 &= 0x03;
++      if(val_00 == 0)
++      {
++              m88ds3103_tuner_writereg(state, 0x00, 0x01);
++              msleep(3);              
 +      }
-+      dprintk("%s, lock=%d\n", __func__, u8ret);
-+      return u8ret;
++      m88ds3103_tuner_writereg(state, 0x00, 0x03);
++      msleep(5);
++      
++      val_00 = m88ds3103_tuner_readreg(state, 0x00);
++      printk(KERN_INFO "TS202x chip version[2]: %x attached.\n", val_00);
++      val_00 &= 0xff;
++      if((val_00 == 0x01) || (val_00 == 0x41) || (val_00 == 0x81))
++              state->tuner_id = TS2020_ID;
++      else if(((val_00 & 0xc0)== 0xc0) || (val_00 == 0x83))
++              state->tuner_id = TS2022_ID;
++      else
++              state->tuner_id = UNKNOW_ID;
++                      
++      return state->demod_id; 
 +}
 +
-+static int M88DC2000SetTsType(struct m88dc2800_state *state, u8 type)
++static struct dvb_frontend_ops m88ds3103_ops;
++static int m88ds3103_initilaze(struct dvb_frontend *fe);
++
++struct dvb_frontend *dvbsky_m88ds3103_attach(const struct dvbsky_m88ds3103_config *config,
++                                  struct i2c_adapter *i2c)
 +{
-+      u8 regC2H;
++      struct m88ds3103_state *state = NULL;
 +
-+      if (type == 3) {
-+              WriteReg(state, 0x84, 0x6A);
-+              WriteReg(state, 0xC0, 0x43);
-+              WriteReg(state, 0xE2, 0x06);
-+              regC2H = ReadReg(state, 0xC2);
-+              regC2H &= 0xC0;
-+              regC2H |= 0x1B;
-+              WriteReg(state, 0xC2, regC2H);
-+              WriteReg(state, 0xC1, 0x60);    /* common interface */
-+      } else if (type == 1) {
-+              WriteReg(state, 0x84, 0x6A);
-+              WriteReg(state, 0xC0, 0x47);    /* serial format */
-+              WriteReg(state, 0xE2, 0x02);
-+              regC2H = ReadReg(state, 0xC2);
-+              regC2H &= 0xC7;
-+              WriteReg(state, 0xC2, regC2H);
-+              WriteReg(state, 0xC1, 0x00);
-+      } else {
-+              WriteReg(state, 0x84, 0x6C);
-+              WriteReg(state, 0xC0, 0x43);    /* parallel format */
-+              WriteReg(state, 0xE2, 0x06);
-+              regC2H = ReadReg(state, 0xC2);
-+              regC2H &= 0xC7;
-+              WriteReg(state, 0xC2, regC2H);
-+              WriteReg(state, 0xC1, 0x00);
++      dprintk("%s\n", __func__);
++
++      /* allocate memory for the internal state */
++      state = kzalloc(sizeof(struct m88ds3103_state), GFP_KERNEL);
++      if (state == NULL) {
++              printk(KERN_ERR "Unable to kmalloc\n");
++              goto error2;
 +      }
-+      return 0;
++
++      state->config = config;
++      state->i2c = i2c;
++      state->preBer = 0xffff;
++      state->delivery_system = SYS_DVBS; /*Default to DVB-S.*/
++      
++      /* check demod id */
++      if(m88ds3103_check_id(state) == UNKNOW_ID){
++              printk(KERN_ERR "Unable to find Montage chip\n");
++              goto error3;
++      }
++
++      memcpy(&state->frontend.ops, &m88ds3103_ops,
++                      sizeof(struct dvb_frontend_ops));
++      state->frontend.demodulator_priv = state;
++      
++      m88ds3103_initilaze(&state->frontend);
++      
++      return &state->frontend;
++
++error3:
++      kfree(state);
++error2:
++      return NULL;
 +}
++EXPORT_SYMBOL(dvbsky_m88ds3103_attach);
 +
-+static int M88DC2000RegInitial_TC2800(struct m88dc2800_state *state)
++static int m88ds3103_set_carrier_offset(struct dvb_frontend *fe,
++                                      s32 carrier_offset_khz)
 +{
-+      u8 RegE3H, RegE4H;
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      s32 tmp;
 +
-+      WriteReg(state, 0x00, 0x48);
-+      WriteReg(state, 0x01, 0x09);
-+      WriteReg(state, 0xFB, 0x0A);
-+      WriteReg(state, 0xFC, 0x0B);
-+      WriteReg(state, 0x02, 0x0B);
-+      WriteReg(state, 0x03, 0x18);
-+      WriteReg(state, 0x05, 0x0D);
-+      WriteReg(state, 0x36, 0x80);
-+      WriteReg(state, 0x43, 0x40);
-+      WriteReg(state, 0x55, 0x7A);
-+      WriteReg(state, 0x56, 0xD9);
-+      WriteReg(state, 0x57, 0xDF);
-+      WriteReg(state, 0x58, 0x39);
-+      WriteReg(state, 0x5A, 0x00);
-+      WriteReg(state, 0x5C, 0x71);
-+      WriteReg(state, 0x5D, 0x23);
-+      WriteReg(state, 0x86, 0x40);
-+      WriteReg(state, 0xF9, 0x08);
-+      WriteReg(state, 0x61, 0x40);
-+      WriteReg(state, 0x62, 0x0A);
-+      WriteReg(state, 0x90, 0x06);
-+      WriteReg(state, 0xDE, 0x00);
-+      WriteReg(state, 0xA0, 0x03);
-+      WriteReg(state, 0xDF, 0x81);
-+      WriteReg(state, 0xFA, 0x40);
-+      WriteReg(state, 0x37, 0x10);
-+      WriteReg(state, 0xF0, 0x40);
-+      WriteReg(state, 0xF2, 0x9C);
-+      WriteReg(state, 0xF3, 0x40);
-+      RegE3H = ReadReg(state, 0xE3);
-+      RegE4H = ReadReg(state, 0xE4);
-+      if (((RegE3H & 0xC0) == 0x00) && ((RegE4H & 0xC0) == 0x00)) {
-+              WriteReg(state, 0x30, 0xFF);
-+              WriteReg(state, 0x31, 0x00);
-+              WriteReg(state, 0x32, 0x00);
-+              WriteReg(state, 0x33, 0x00);
-+              WriteReg(state, 0x35, 0x32);
-+              WriteReg(state, 0x40, 0x00);
-+              WriteReg(state, 0x41, 0x10);
-+              WriteReg(state, 0xF1, 0x02);
-+              WriteReg(state, 0xF4, 0x04);
-+              WriteReg(state, 0xF5, 0x00);
-+              WriteReg(state, 0x42, 0x14);
-+              WriteReg(state, 0xE1, 0x25);
-+      } else if (((RegE3H & 0xC0) == 0x80) && ((RegE4H & 0xC0) == 0x40)) {
-+              WriteReg(state, 0x30, 0xFF);
-+              WriteReg(state, 0x31, 0x00);
-+              WriteReg(state, 0x32, 0x00);
-+              WriteReg(state, 0x33, 0x00);
-+              WriteReg(state, 0x35, 0x32);
-+              WriteReg(state, 0x39, 0x00);
-+              WriteReg(state, 0x3A, 0x00);
-+              WriteReg(state, 0x40, 0x00);
-+              WriteReg(state, 0x41, 0x10);
-+              WriteReg(state, 0xF1, 0x00);
-+              WriteReg(state, 0xF4, 0x00);
-+              WriteReg(state, 0xF5, 0x40);
-+              WriteReg(state, 0x42, 0x14);
-+              WriteReg(state, 0xE1, 0x25);
-+      } else if ((RegE3H == 0x80 || RegE3H == 0x81)
-+                  && (RegE4H == 0x80 || RegE4H == 0x81)) {
-+              WriteReg(state, 0x30, 0xFF);
-+              WriteReg(state, 0x31, 0x00);
-+              WriteReg(state, 0x32, 0x00);
-+              WriteReg(state, 0x33, 0x00);
-+              WriteReg(state, 0x35, 0x32);
-+              WriteReg(state, 0x39, 0x00);
-+              WriteReg(state, 0x3A, 0x00);
-+              WriteReg(state, 0xF1, 0x00);
-+              WriteReg(state, 0xF4, 0x00);
-+              WriteReg(state, 0xF5, 0x40);
-+              WriteReg(state, 0x42, 0x24);
-+              WriteReg(state, 0xE1, 0x25);
-+              WriteReg(state, 0x92, 0x7F);
-+              WriteReg(state, 0x93, 0x91);
-+              WriteReg(state, 0x95, 0x00);
-+              WriteReg(state, 0x2B, 0x33);
-+              WriteReg(state, 0x2A, 0x2A);
-+              WriteReg(state, 0x2E, 0x80);
-+              WriteReg(state, 0x25, 0x25);
-+              WriteReg(state, 0x2D, 0xFF);
-+              WriteReg(state, 0x26, 0xFF);
-+              WriteReg(state, 0x27, 0x00);
-+              WriteReg(state, 0x24, 0x25);
-+              WriteReg(state, 0xA4, 0xFF);
-+              WriteReg(state, 0xA3, 0x0D);
-+      } else {
-+              WriteReg(state, 0x30, 0xFF);
-+              WriteReg(state, 0x31, 0x00);
-+              WriteReg(state, 0x32, 0x00);
-+              WriteReg(state, 0x33, 0x00);
-+              WriteReg(state, 0x35, 0x32);
-+              WriteReg(state, 0x39, 0x00);
-+              WriteReg(state, 0x3A, 0x00);
-+              WriteReg(state, 0xF1, 0x00);
-+              WriteReg(state, 0xF4, 0x00);
-+              WriteReg(state, 0xF5, 0x40);
-+              WriteReg(state, 0x42, 0x24);
-+              WriteReg(state, 0xE1, 0x27);
-+              WriteReg(state, 0x92, 0x7F);
-+              WriteReg(state, 0x93, 0x91);
-+              WriteReg(state, 0x95, 0x00);
-+              WriteReg(state, 0x2B, 0x33);
-+              WriteReg(state, 0x2A, 0x2A);
-+              WriteReg(state, 0x2E, 0x80);
-+              WriteReg(state, 0x25, 0x25);
-+              WriteReg(state, 0x2D, 0xFF);
-+              WriteReg(state, 0x26, 0xFF);
-+              WriteReg(state, 0x27, 0x00);
-+              WriteReg(state, 0x24, 0x25);
-+              WriteReg(state, 0xA4, 0xFF);
-+              WriteReg(state, 0xA3, 0x10);
-+      }
-+      WriteReg(state, 0xF6, 0x4E);
-+      WriteReg(state, 0xF7, 0x20);
-+      WriteReg(state, 0x89, 0x02);
-+      WriteReg(state, 0x14, 0x08);
-+      WriteReg(state, 0x6F, 0x0D);
-+      WriteReg(state, 0x10, 0xFF);
-+      WriteReg(state, 0x11, 0x00);
-+      WriteReg(state, 0x12, 0x30);
-+      WriteReg(state, 0x13, 0x23);
-+      WriteReg(state, 0x60, 0x00);
-+      WriteReg(state, 0x69, 0x00);
-+      WriteReg(state, 0x6A, 0x03);
-+      WriteReg(state, 0xE0, 0x75);
-+      WriteReg(state, 0x8D, 0x29);
-+      WriteReg(state, 0x4E, 0xD8);
-+      WriteReg(state, 0x88, 0x80);
-+      WriteReg(state, 0x52, 0x79);
-+      WriteReg(state, 0x53, 0x03);
-+      WriteReg(state, 0x59, 0x30);
-+      WriteReg(state, 0x5E, 0x02);
-+      WriteReg(state, 0x5F, 0x0F);
-+      WriteReg(state, 0x71, 0x03);
-+      WriteReg(state, 0x72, 0x12);
-+      WriteReg(state, 0x73, 0x12);
++      tmp = carrier_offset_khz;
++      tmp *= 65536;
++      
++      tmp = (2*tmp + MT_FE_MCLK_KHZ) / (2*MT_FE_MCLK_KHZ);
++
++      if (tmp < 0)
++              tmp += 65536;
++
++      m88ds3103_writereg(state, 0x5f, tmp >> 8);
++      m88ds3103_writereg(state, 0x5e, tmp & 0xff);
 +
 +      return 0;
 +}
 +
-+static int M88DC2000AutoTSClock_P(struct m88dc2800_state *state, u32 sym,
-+                                u16 qam)
++static int m88ds3103_set_symrate(struct dvb_frontend *fe)
 +{
-+      u32 dataRate;
-+      u8 clk_div, value;
-+      printk(KERN_INFO
-+             "m88dc2800: M88DC2000AutoTSClock_P, symrate=%d qam=%d\n",
-+             sym, qam);
-+      switch (qam) {
-+      case 16:
-+              dataRate = 4;
-+              break;
-+      case 32:
-+              dataRate = 5;
-+              break;
-+      case 128:
-+              dataRate = 7;
-+              break;
-+      case 256:
-+              dataRate = 8;
-+              break;
-+      case 64:
-+      default:
-+              dataRate = 6;
-+              break;
-+      }
-+      dataRate *= sym * 105;
-+      dataRate /= 800;
-+      if (dataRate <= 4115)
-+              clk_div = 0x05;
-+      else if (dataRate <= 4800)
-+              clk_div = 0x04;
-+      else if (dataRate <= 5760)
-+              clk_div = 0x03;
-+      else if (dataRate <= 7200)
-+              clk_div = 0x02;
-+      else if (dataRate <= 9600)
-+              clk_div = 0x01;
-+      else
-+              clk_div = 0x00;
-+      value = ReadReg(state, 0xC2);
-+      value &= 0xc0;
-+      value |= clk_div;
-+      WriteReg(state, 0xC2, value);
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
++      u16 value;
++      
++      value = (((c->symbol_rate / 1000) << 15) + (MT_FE_MCLK_KHZ / 4)) / (MT_FE_MCLK_KHZ / 2);
++      m88ds3103_writereg(state, 0x61, value & 0x00ff);
++      m88ds3103_writereg(state, 0x62, (value & 0xff00) >> 8);
++
 +      return 0;
 +}
 +
-+static int M88DC2000AutoTSClock_C(struct m88dc2800_state *state, u32 sym,
-+                                u16 qam)
++static int m88ds3103_set_CCI(struct dvb_frontend *fe)
 +{
-+      u32 dataRate;
-+      u8 clk_div, value;
-+      printk(KERN_INFO
-+             "m88dc2800: M88DC2000AutoTSClock_C, symrate=%d qam=%d\n",
-+             sym, qam);
-+      switch (qam) {
-+      case 16:
-+              dataRate = 4;
-+              break;
-+      case 32:
-+              dataRate = 5;
-+              break;
-+      case 128:
-+              dataRate = 7;
-+              break;
-+      case 256:
-+              dataRate = 8;
-+              break;
-+      case 64:
-+      default:
-+              dataRate = 6;
-+              break;
-+      }
-+      dataRate *= sym * 105;
-+      dataRate /= 800;
-+      if (dataRate <= 4115)
-+              clk_div = 0x3F;
-+      else if (dataRate <= 4800)
-+              clk_div = 0x36;
-+      else if (dataRate <= 5760)
-+              clk_div = 0x2D;
-+      else if (dataRate <= 7200)
-+              clk_div = 0x24;
-+      else if (dataRate <= 9600)
-+              clk_div = 0x1B;
-+      else
-+              clk_div = 0x12;
-+      value = ReadReg(state, 0xC2);
-+      value &= 0xc0;
-+      value |= clk_div;
-+      WriteReg(state, 0xC2, value);
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      u8 tmp;
++
++      tmp = m88ds3103_readreg(state, 0x56);
++      tmp &= ~0x01;
++      m88ds3103_writereg(state, 0x56, tmp);
++
++      tmp = m88ds3103_readreg(state, 0x76);
++      tmp &= ~0x80;
++      m88ds3103_writereg(state, 0x76, tmp);
++
 +      return 0;
 +}
 +
-+static int M88DC2000SetTxMode(struct m88dc2800_state *state, u8 inverted,
-+                            u8 j83)
++static int m88ds3103_init_reg(struct m88ds3103_state *state, const u8 *p_reg_tab, u32 size)
 +{
-+      u8 value = 0;
-+      if (inverted)
-+              value |= 0x08;  /*      spectrum inverted       */
-+      if (j83)
-+              value |= 0x01;  /*      J83C                    */
-+      WriteReg(state, 0x83, value);
++      u32 i;
++      
++      for(i = 0; i < size; i+=2)
++              m88ds3103_writereg(state, p_reg_tab[i], p_reg_tab[i+1]);
++              
 +      return 0;
 +}
 +
-+static int M88DC2000SoftReset(struct m88dc2800_state *state)
++static int m88ds3103_get_locked_sym_rate(struct m88ds3103_state *state, u32 *sym_rate_KSs)
 +{
-+      WriteReg(state, 0x80, 0x01);
-+      WriteReg(state, 0x82, 0x00);
-+      msleep(1);
-+      WriteReg(state, 0x80, 0x00);
++      u16     tmp;
++      u32     sym_rate_tmp;
++      u8      val_0x6d, val_0x6e;
++
++      val_0x6d = m88ds3103_readreg(state, 0x6d);
++      val_0x6e = m88ds3103_readreg(state, 0x6e);
++
++      tmp = (u16)((val_0x6e<<8) | val_0x6d);
++
++      sym_rate_tmp = (u32)(tmp * MT_FE_MCLK_KHZ);
++      sym_rate_tmp = (u32)(sym_rate_tmp / (1<<16));
++      *sym_rate_KSs = sym_rate_tmp;
++
 +      return 0;
 +}
 +
-+static int M88DC2000SetSym(struct m88dc2800_state *state, u32 sym, u32 xtal)
++static int m88ds3103_get_channel_info(struct m88ds3103_state *state, u8 *p_mode, u8 *p_coderate)
 +{
-+      u8 value;
-+      u8 reg6FH, reg12H;
-+      u64 fValue;
-+      u32 dwValue;
-+
-+      printk(KERN_INFO "%s, sym=%d, xtal=%d\n", __func__, sym, xtal);
-+      fValue = 4294967296 * (sym + 10);
-+      do_div(fValue, xtal);
-+
-+      /* fValue  = 4294967296 * (sym + 10) / xtal; */
-+      dwValue = (u32) fValue;
-+      printk(KERN_INFO "%s, fvalue1=%x\n", __func__, dwValue);
-+      WriteReg(state, 0x58, (u8) ((dwValue >> 24) & 0xff));
-+      WriteReg(state, 0x57, (u8) ((dwValue >> 16) & 0xff));
-+      WriteReg(state, 0x56, (u8) ((dwValue >> 8) & 0xff));
-+      WriteReg(state, 0x55, (u8) ((dwValue >> 0) & 0xff));
++      u8      tmp, val_0x7E;
 +
-+      /* fValue = 2048 * xtal / sym; */
-+      fValue = 2048 * xtal;
-+      do_div(fValue, sym);
-+      dwValue = (u32) fValue;
-+      printk(KERN_INFO "%s, fvalue2=%x\n", __func__, dwValue);
-+      WriteReg(state, 0x5D, (u8) ((dwValue >> 8) & 0xff));
-+      WriteReg(state, 0x5C, (u8) ((dwValue >> 0) & 0xff));
-+      value = ReadReg(state, 0x5A);
-+      if (((dwValue >> 16) & 0x0001) == 0)
-+              value &= 0x7F;
-+      else
-+              value |= 0x80;
-+      WriteReg(state, 0x5A, value);
-+      value = ReadReg(state, 0x89);
-+      if (sym <= 1800)
-+              value |= 0x01;
-+      else
-+              value &= 0xFE;
-+      WriteReg(state, 0x89, value);
-+      if (sym >= 6700) {
-+              reg6FH = 0x0D;
-+              reg12H = 0x30;
-+      } else if (sym >= 4000) {
-+              fValue = 22 * 4096 / sym;
-+              reg6FH = (u8) fValue;
-+              reg12H = 0x30;
-+      } else if (sym >= 2000) {
-+              fValue = 14 * 4096 / sym;
-+              reg6FH = (u8) fValue;
-+              reg12H = 0x20;
-+      } else {
-+              fValue = 7 * 4096 / sym;
-+              reg6FH = (u8) fValue;
-+              reg12H = 0x10;
-+      }
-+      WriteReg(state, 0x6F, reg6FH);
-+      WriteReg(state, 0x12, reg12H);
-+      if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
-+             && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
-+              if (sym < 3000) {
-+                      WriteReg(state, 0x6C, 0x16);
-+                      WriteReg(state, 0x6D, 0x10);
-+                      WriteReg(state, 0x6E, 0x18);
-+              } else {
-+                      WriteReg(state, 0x6C, 0x14);
-+                      WriteReg(state, 0x6D, 0x0E);
-+                      WriteReg(state, 0x6E, 0x36);
-+              }
++      if(state->delivery_system == SYS_DVBS2){
++              val_0x7E = m88ds3103_readreg(state, 0x7e);
++              tmp = (u8)((val_0x7E&0xC0) >> 6);
++              *p_mode = tmp;
++              tmp = (u8)(val_0x7E & 0x0f);
++              *p_coderate = tmp;
 +      } else {
-+              WriteReg(state, 0x6C, 0x16);
-+              WriteReg(state, 0x6D, 0x10);
-+              WriteReg(state, 0x6E, 0x18);
++              *p_mode = 0;
++              tmp = m88ds3103_readreg(state, 0xe6);           
++              tmp = (u8)(tmp >> 5);
++              *p_coderate = tmp;
 +      }
++      
 +      return 0;
 +}
 +
-+static int M88DC2000SetQAM(struct m88dc2800_state *state, u16 qam)
++static int m88ds3103_set_clock_ratio(struct m88ds3103_state *state)
 +{
-+      u8 reg00H, reg4AH, regC2H, reg44H, reg4CH, reg4DH, reg74H, value;
-+      u8 reg8BH, reg8EH;
-+      printk(KERN_INFO "%s, qam=%d\n", __func__, qam);
-+      regC2H = ReadReg(state, 0xC2);
-+      regC2H &= 0xF8;
-+      switch (qam) {
-+      case 16:                /* 16 QAM */
-+              reg00H = 0x08;
-+              reg4AH = 0x0F;
-+              regC2H |= 0x02;
-+              reg44H = 0xAA;
-+              reg4CH = 0x0C;
-+              reg4DH = 0xF7;
-+              reg74H = 0x0E;
-+              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
-+                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
-+                      reg8BH = 0x5A;
-+                      reg8EH = 0xBD;
-+              } else {
-+                      reg8BH = 0x5B;
-+                      reg8EH = 0x9D;
-+              }
-+              WriteReg(state, 0x6E, 0x18);
-+              break;
-+      case 32:                /* 32 QAM */
-+              reg00H = 0x18;
-+              reg4AH = 0xFB;
-+              regC2H |= 0x02;
-+              reg44H = 0xAA;
-+              reg4CH = 0x0C;
-+              reg4DH = 0xF7;
-+              reg74H = 0x0E;
-+              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
-+                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
-+                      reg8BH = 0x5A;
-+                      reg8EH = 0xBD;
-+              } else {
-+                      reg8BH = 0x5B;
-+                      reg8EH = 0x9D;
++      u8      val, mod_fac, tmp1, tmp2;
++      u32     input_datarate, locked_sym_rate_KSs;
++      u32 MClk_KHz = 96000;
++      u8 mod_mode, code_rate, divid_ratio = 0;
++
++      locked_sym_rate_KSs = 0;
++      m88ds3103_get_locked_sym_rate(state, &locked_sym_rate_KSs);
++      if(locked_sym_rate_KSs == 0)
++              return 0;
++
++      m88ds3103_get_channel_info(state, &mod_mode, &code_rate);
++
++      if (state->delivery_system == SYS_DVBS2)
++      {
++              switch(mod_mode) {
++                      case 1: mod_fac = 3; break;
++                      case 2: mod_fac = 4; break;
++                      case 3: mod_fac = 5; break;
++                      default: mod_fac = 2; break;
 +              }
-+              WriteReg(state, 0x6E, 0x18);
-+              break;
-+      case 64:                /* 64 QAM */
-+              reg00H = 0x48;
-+              reg4AH = 0xCD;
-+              regC2H |= 0x02;
-+              reg44H = 0xAA;
-+              reg4CH = 0x0C;
-+              reg4DH = 0xF7;
-+              reg74H = 0x0E;
-+              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
-+                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
-+                      reg8BH = 0x5A;
-+                      reg8EH = 0xBD;
-+              } else {
-+                      reg8BH = 0x5B;
-+                      reg8EH = 0x9D;
++
++              switch(code_rate) {
++                      case 0: input_datarate = locked_sym_rate_KSs*mod_fac/8/4; break;
++                      case 1: input_datarate = locked_sym_rate_KSs*mod_fac/8/3;       break;
++                      case 2: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/5;     break;
++                      case 3: input_datarate = locked_sym_rate_KSs*mod_fac/8/2;       break;
++                      case 4: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/5;     break;
++                      case 5: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3;     break;
++                      case 6: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/4;     break;
++                      case 7: input_datarate = locked_sym_rate_KSs*mod_fac*4/8/5;     break;
++                      case 8: input_datarate = locked_sym_rate_KSs*mod_fac*5/8/6;     break;
++                      case 9: input_datarate = locked_sym_rate_KSs*mod_fac*8/8/9;     break;
++                      case 10: input_datarate = locked_sym_rate_KSs*mod_fac*9/8/10; break;
++                      default: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3; break;
 +              }
-+              break;
-+      case 128:               /* 128 QAM */
-+              reg00H = 0x28;
-+              reg4AH = 0xFF;
-+              regC2H |= 0x02;
-+              reg44H = 0xA9;
-+              reg4CH = 0x08;
-+              reg4DH = 0xF5;
-+              reg74H = 0x0E;
-+              reg8BH = 0x5B;
-+              reg8EH = 0x9D;
-+              break;
-+      case 256:               /* 256 QAM */
-+              reg00H = 0x38;
-+              reg4AH = 0xCD;
-+              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
-+                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
-+                      regC2H |= 0x02;
-+              } else {
-+                      regC2H |= 0x01;
-+              }
-+              reg44H = 0xA9;
-+              reg4CH = 0x08;
-+              reg4DH = 0xF5;
-+              reg74H = 0x0E;
-+              reg8BH = 0x5B;
-+              reg8EH = 0x9D;
-+              break;
-+      default:                /* 64 QAM */
-+              reg00H = 0x48;
-+              reg4AH = 0xCD;
-+              regC2H |= 0x02;
-+              reg44H = 0xAA;
-+              reg4CH = 0x0C;
-+              reg4DH = 0xF7;
-+              reg74H = 0x0E;
-+              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
-+                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
-+                      reg8BH = 0x5A;
-+                      reg8EH = 0xBD;
-+              } else {
-+                      reg8BH = 0x5B;
-+                      reg8EH = 0x9D;
-+              }
-+              break;
-+      }
-+      WriteReg(state, 0x00, reg00H);
-+      value = ReadReg(state, 0x88);
-+      value |= 0x08;
-+      WriteReg(state, 0x88, value);
-+      WriteReg(state, 0x4B, 0xFF);
-+      WriteReg(state, 0x4A, reg4AH);
-+      value &= 0xF7;
-+      WriteReg(state, 0x88, value);
-+      WriteReg(state, 0xC2, regC2H);
-+      WriteReg(state, 0x44, reg44H);
-+      WriteReg(state, 0x4C, reg4CH);
-+      WriteReg(state, 0x4D, reg4DH);
-+      WriteReg(state, 0x74, reg74H);
-+      WriteReg(state, 0x8B, reg8BH);
-+      WriteReg(state, 0x8E, reg8EH);
-+      return 0;
-+}
 +
-+static int M88DC2000WriteTuner_TC2800(struct m88dc2800_state *state,
-+                                    u32 freq_KHz)
-+{
-+      printk(KERN_INFO "%s, freq=%d KHz\n", __func__, freq_KHz);
-+      return mt_fe_tn_set_freq_tc2800(state, freq_KHz);
-+}
++              if(state->demod_id == DS3000_ID)
++                      input_datarate = input_datarate * 115 / 100;
 +
-+static int m88dc2800_init(struct dvb_frontend *fe)
-+{
-+      dprintk("%s()\n", __func__);
-+      return 0;
-+}
++              if(input_datarate < 4800)  {tmp1 = 15;tmp2 = 15;} //4.8MHz         TS clock
++              else if(input_datarate < 4966)  {tmp1 = 14;tmp2 = 15;} //4.966MHz  TS clock
++              else if(input_datarate < 5143)  {tmp1 = 14;tmp2 = 14;} //5.143MHz  TS clock
++              else if(input_datarate < 5333)  {tmp1 = 13;tmp2 = 14;} //5.333MHz  TS clock
++              else if(input_datarate < 5538)  {tmp1 = 13;tmp2 = 13;} //5.538MHz  TS clock
++              else if(input_datarate < 5760)  {tmp1 = 12;tmp2 = 13;} //5.76MHz   TS clock       allan 0809
++              else if(input_datarate < 6000)  {tmp1 = 12;tmp2 = 12;} //6MHz      TS clock
++              else if(input_datarate < 6260)  {tmp1 = 11;tmp2 = 12;} //6.26MHz   TS clock
++              else if(input_datarate < 6545)  {tmp1 = 11;tmp2 = 11;} //6.545MHz  TS clock
++              else if(input_datarate < 6857)  {tmp1 = 10;tmp2 = 11;} //6.857MHz  TS clock
++              else if(input_datarate < 7200)  {tmp1 = 10;tmp2 = 10;} //7.2MHz    TS clock
++              else if(input_datarate < 7578)  {tmp1 = 9;tmp2 = 10;}  //7.578MHz  TS clock
++              else if(input_datarate < 8000)  {tmp1 = 9;tmp2 = 9;}   //8MHz      TS clock
++              else if(input_datarate < 8470)  {tmp1 = 8;tmp2 = 9;}   //8.47MHz   TS clock
++              else if(input_datarate < 9000)  {tmp1 = 8;tmp2 = 8;}   //9MHz      TS clock
++              else if(input_datarate < 9600)  {tmp1 = 7;tmp2 = 8;}   //9.6MHz    TS clock
++              else if(input_datarate < 10285) {tmp1 = 7;tmp2 = 7;}   //10.285MHz TS clock
++              else if(input_datarate < 12000) {tmp1 = 6;tmp2 = 6;}   //12MHz     TS clock
++              else if(input_datarate < 14400) {tmp1 = 5;tmp2 = 5;}   //14.4MHz   TS clock
++              else if(input_datarate < 18000) {tmp1 = 4;tmp2 = 4;}   //18MHz     TS clock
++              else                                                    {tmp1 = 3;tmp2 = 3;}   //24MHz     TS clock
 +
-+static int m88dc2800_set_parameters(struct dvb_frontend *fe)
-+{
-+      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
-+      u8 is_annex_c, is_update;
-+      u16 temp_qam;
-+      s32 waiting_time;
-+      struct m88dc2800_state *state = fe->demodulator_priv;
++              if(state->demod_id == DS3000_ID) {
++                      val = (u8)((tmp1<<4) + tmp2);
++                      m88ds3103_writereg(state, 0xfe, val);
++              } else {
++                      tmp1 = m88ds3103_readreg(state, 0x22);
++                      tmp2 = m88ds3103_readreg(state, 0x24);
 +
-+      is_annex_c = c->delivery_system == SYS_DVBC_ANNEX_C ? 1 : 0;
++                      tmp1 >>= 6;
++                      tmp1 &= 0x03;
++                      tmp2 >>= 6;
++                      tmp2 &= 0x03;
 +
-+      switch (c->modulation) {
-+      case QAM_16:
-+              temp_qam = 16;
-+              break;
-+      case QAM_32:
-+              temp_qam = 32;
-+              break;
-+      case QAM_128:
-+              temp_qam = 128;
-+              break;
-+      case QAM_256:
-+              temp_qam = 256;
-+              break;
-+      default:                /* QAM_64 */
-+              temp_qam = 64;
-+              break;
-+      }
++                      if((tmp1 == 0x00) && (tmp2 == 0x01))
++                              MClk_KHz = 144000;
++                      else if((tmp1 == 0x00) && (tmp2 == 0x03))
++                              MClk_KHz = 72000;
++                      else if((tmp1 == 0x01) && (tmp2 == 0x01))
++                              MClk_KHz = 115200;
++                      else if((tmp1 == 0x02) && (tmp2 == 0x01))
++                              MClk_KHz = 96000;
++                      else if((tmp1 == 0x03) && (tmp2 == 0x00))
++                              MClk_KHz = 192000;
++                      else
++                              return 0;
 +
-+      state->inverted = c->inversion == INVERSION_ON ? 1 : 0;
++                      if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/
++                              input_datarate = 5200;
++                              
++                      if(input_datarate != 0)
++                              divid_ratio = (u8)(MClk_KHz / input_datarate);
++                      else
++                              divid_ratio = 0xFF;
 +
-+      printk(KERN_INFO
-+           "m88dc2800: state, freq=%d qam=%d sym=%d inverted=%d xtal=%d\n",
-+           state->freq, state->qam, state->sym, state->inverted,
-+           state->xtal);
-+      printk(KERN_INFO
-+           "m88dc2800: set frequency to %d qam=%d symrate=%d annex-c=%d\n",
-+           c->frequency, temp_qam, c->symbol_rate, is_annex_c);
++                      if(divid_ratio > 128)
++                              divid_ratio = 128;
 +
-+      is_update = 0;
-+      WriteReg(state, 0x80, 0x01);
-+      if (c->frequency != state->freq) {
-+              M88DC2000WriteTuner_TC2800(state, c->frequency / 1000);
-+              state->freq = c->frequency;
-+      }
-+      if (c->symbol_rate != state->sym) {
-+              M88DC2000SetSym(state, c->symbol_rate / 1000, state->xtal);
-+              state->sym = c->symbol_rate;
-+              is_update = 1;
-+      }
-+      if (temp_qam != state->qam) {
-+              M88DC2000SetQAM(state, temp_qam);
-+              state->qam = temp_qam;
-+              is_update = 1;
-+      }
++                      if(divid_ratio < 2)
++                              divid_ratio = 2;
 +
-+      if (is_update != 0) {
-+              if (state->config->ts_mode == 3)
-+                      M88DC2000AutoTSClock_C(state, state->sym / 1000,
-+                                             temp_qam);
-+              else
-+                      M88DC2000AutoTSClock_P(state, state->sym / 1000,
-+                                             temp_qam);
-+      }
++                      tmp1 = (u8)(divid_ratio / 2);
++                      tmp2 = (u8)(divid_ratio / 2);
 +
-+      M88DC2000SetTxMode(state, state->inverted, is_annex_c);
-+      M88DC2000SoftReset(state);
-+      if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
-+          && ((ReadReg(state, 0xE4) & 0x80) == 0x80))
-+              waiting_time = 800;
-+      else
-+              waiting_time = 500;
-+      while (waiting_time > 0) {
-+              msleep(50);
-+              waiting_time -= 50;
-+              if (M88DC2000GetLock(state))
-+                      return 0;
-+      }
++                      if((divid_ratio % 2) != 0)
++                              tmp2 += 1;
 +
-+      state->inverted = (state->inverted != 0) ? 0 : 1;
-+      M88DC2000SetTxMode(state, state->inverted, is_annex_c);
-+      M88DC2000SoftReset(state);
-+      if (((ReadReg(state, 0xE3) & 0x80) == 0x80) &&
-+          ((ReadReg(state, 0xE4) & 0x80) == 0x80))
-+              waiting_time = 800;
-+      else
-+              waiting_time = 500;
-+      while (waiting_time > 0) {
-+              msleep(50);
-+              waiting_time -= 50;
-+              if (M88DC2000GetLock(state))
-+                      return 0;
-+      }
-+      return 0;
-+}
++                      tmp1 -= 1;
++                      tmp2 -= 1;
 +
-+static int m88dc2800_read_status(struct dvb_frontend *fe,
-+                               fe_status_t * status)
-+{
-+      struct m88dc2800_state *state = fe->demodulator_priv;
-+      *status = 0;
++                      tmp1 &= 0x3f;
++                      tmp2 &= 0x3f;
 +
-+      if (M88DC2000GetLock(state)) {
-+              *status = FE_HAS_SIGNAL | FE_HAS_CARRIER
-+                  |FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_LOCK;
-+      }
-+      return 0;
-+}
++                      val = m88ds3103_readreg(state, 0xfe);
++                      val &= 0xF0;
++                      val |= (tmp2 >> 2) & 0x0f;
++                      m88ds3103_writereg(state, 0xfe, val);
 +
-+static int m88dc2800_read_ber(struct dvb_frontend *fe, u32 * ber)
-+{
-+      struct m88dc2800_state *state = fe->demodulator_priv;
-+      u16 tmp;
++                      val = (u8)((tmp2 & 0x03) << 6); 
++                      val |= tmp1;
++                      m88ds3103_writereg(state, 0xea, val);
++              }
++      } else {
++              mod_fac = 2;
 +
-+      if (M88DC2000GetLock(state) == 0) {
-+              state->ber = 0;
-+      } else if ((ReadReg(state, 0xA0) & 0x80) != 0x80) {
-+              tmp = ReadReg(state, 0xA2) << 8;
-+              tmp += ReadReg(state, 0xA1);
-+              state->ber = tmp;
-+              WriteReg(state, 0xA0, 0x05);
-+              WriteReg(state, 0xA0, 0x85);
-+      }
-+      *ber = state->ber;
-+      return 0;
-+}
++              switch(code_rate) {
++                      case 4: input_datarate = locked_sym_rate_KSs*mod_fac/2/8;       break;
++                      case 3: input_datarate = locked_sym_rate_KSs*mod_fac*2/3/8;     break;
++                      case 2: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8;     break;
++                      case 1: input_datarate = locked_sym_rate_KSs*mod_fac*5/6/8;     break;
++                      case 0: input_datarate = locked_sym_rate_KSs*mod_fac*7/8/8;     break;
++                      default: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8;    break;
++              }
 +
-+static int m88dc2800_read_signal_strength(struct dvb_frontend *fe,
-+                                        u16 * strength)
-+{
-+      struct m88dc2800_state *state = fe->demodulator_priv;
-+      s16 tuner_strength;
-+
-+      tuner_strength = mt_fe_tn_get_signal_strength_tc2800(state);
-+      *strength = tuner_strength < -107 ? 0 : tuner_strength + 107;
-+
-+      return 0;
-+}
-+
-+static int m88dc2800_read_snr(struct dvb_frontend *fe, u16 * snr)
-+{
-+      static const u32 mes_log[] = {
-+              0, 3010, 4771, 6021, 6990, 7781, 8451, 9031, 9542, 10000,
-+              10414, 10792, 11139, 11461, 11761, 12041, 12304, 12553, 12788,
-+              13010, 13222, 13424, 13617, 13802, 13979, 14150, 14314, 14472,
-+              14624, 14771, 14914, 15052, 15185, 15315, 15441, 15563, 15682,
-+              15798, 15911, 16021, 16128, 16232, 16335, 16435, 16532, 16628,
-+              16721, 16812, 16902, 16990, 17076, 17160, 17243, 17324, 17404,
-+              17482, 17559, 17634, 17709, 17782, 17853, 17924, 17993, 18062,
-+              18129, 18195, 18261, 18325, 18388, 18451, 18513, 18573, 18633,
-+              18692, 18751, 18808, 18865, 18921, 18976, 19031
-+      };
-+      struct m88dc2800_state *state = fe->demodulator_priv;
-+      u8 i;
-+      u32 _snr, mse;
++              if(state->demod_id == DS3000_ID)
++                      input_datarate = input_datarate * 115 / 100;
 +
-+      if ((ReadReg(state, 0x91) & 0x23) != 0x03) {
-+              *snr = 0;
-+              return 0;
-+      }
-+      mse = 0;
-+      for (i = 0; i < 30; i++) {
-+              mse += (ReadReg(state, 0x08) << 8) + ReadReg(state, 0x07);
-+      }
-+      mse /= 30;
-+      if (mse > 80)
-+              mse = 80;
-+      switch (state->qam) {
-+      case 16:
-+              _snr = 34080;
-+              break;          /*      16QAM                           */
-+      case 32:
-+              _snr = 37600;
-+              break;          /*      32QAM                           */
-+      case 64:
-+              _snr = 40310;
-+              break;          /*      64QAM                           */
-+      case 128:
-+              _snr = 43720;
-+              break;          /*      128QAM                          */
-+      case 256:
-+              _snr = 46390;
-+              break;          /*      256QAM                          */
-+      default:
-+              _snr = 40310;
-+              break;
-+      }
-+      _snr -= mes_log[mse - 1];       /*      C - 10*log10(MSE)       */
-+      _snr /= 1000;
-+      if (_snr > 0xff)
-+              _snr = 0xff;
-+      *snr = _snr;
-+      return 0;
-+}
++              if(input_datarate < 6857)               {tmp1 = 7;tmp2 = 7;} //6.857MHz     TS clock
++              else if(input_datarate < 7384)  {tmp1 = 6;tmp2 = 7;} //7.384MHz     TS clock
++              else if(input_datarate < 8000)  {tmp1 = 6;tmp2 = 6;} //8MHz             TS clock
++              else if(input_datarate < 8727)  {tmp1 = 5;tmp2 = 6;} //8.727MHz         TS clock
++              else if(input_datarate < 9600)  {tmp1 = 5;tmp2 = 5;} //9.6MHz           TS clock
++              else if(input_datarate < 10666) {tmp1 = 4;tmp2 = 5;} //10.666MHz        TS clock
++              else if(input_datarate < 12000) {tmp1 = 4;tmp2 = 4;} //12MHz            TS clock
++              else if(input_datarate < 13714) {tmp1 = 3;tmp2 = 4;} //13.714MHz        TS clock
++              else if(input_datarate < 16000) {tmp1 = 3;tmp2 = 3;} //16MHz            TS clock
++              else if(input_datarate < 19200) {tmp1 = 2;tmp2 = 3;} //19.2MHz          TS clock
++              else                                                    {tmp1 = 2;tmp2 = 2;} //24MHz            TS clock
 +
-+static int m88dc2800_read_ucblocks(struct dvb_frontend *fe, u32 * ucblocks)
-+{
-+      struct m88dc2800_state *state = fe->demodulator_priv;
-+      u8 u8Value;
++              if(state->demod_id == DS3000_ID) {
++                      val = m88ds3103_readreg(state, 0xfe);
++                      val &= 0xc0;
++                      val |= ((u8)((tmp1<<3) + tmp2));
++                      m88ds3103_writereg(state, 0xfe, val);
++              } else {
++                      if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/
++                              input_datarate = 5200;
++                      
++                      if(input_datarate != 0)
++                              divid_ratio = (u8)(MClk_KHz / input_datarate);
++                      else
++                              divid_ratio = 0xFF;
 +
-+      u8Value = ReadReg(state, 0xdf);
-+      u8Value |= 0x02;        /* Hold */
-+      WriteReg(state, 0xdf, u8Value);
++                      if(divid_ratio > 128)
++                              divid_ratio = 128;
 +
-+      *ucblocks = ReadReg(state, 0xd5);
-+      *ucblocks = (*ucblocks << 8) | ReadReg(state, 0xd4);
++                      if(divid_ratio < 2)
++                              divid_ratio = 2;
 +
-+      u8Value &= 0xfe;        /* Clear */
-+      WriteReg(state, 0xdf, u8Value);
-+      u8Value &= 0xfc;        /* Update */
-+      u8Value |= 0x01;
-+      WriteReg(state, 0xdf, u8Value);
++                      tmp1 = (u8)(divid_ratio / 2);
++                      tmp2 = (u8)(divid_ratio / 2);
 +
-+      return 0;
-+}
++                      if((divid_ratio % 2) != 0)
++                              tmp2 += 1;
 +
-+static int m88dc2800_sleep(struct dvb_frontend *fe)
-+{
-+      struct m88dc2800_state *state = fe->demodulator_priv;
++                      tmp1 -= 1;
++                      tmp2 -= 1;
 +
-+      mt_fe_tn_sleep_tc2800(state);
-+      state->freq = 0;
++                      tmp1 &= 0x3f;
++                      tmp2 &= 0x3f;
 +
++                      val = m88ds3103_readreg(state, 0xfe);
++                      val &= 0xF0;
++                      val |= (tmp2 >> 2) & 0x0f;
++                      m88ds3103_writereg(state, 0xfe, val);
++                      
++                      val = (u8)((tmp2 & 0x03) << 6);
++                      val |= tmp1;
++                      m88ds3103_writereg(state, 0xea, val);
++              }
++      }
 +      return 0;
 +}
 +
-+static void m88dc2800_release(struct dvb_frontend *fe)
-+{
-+      struct m88dc2800_state *state = fe->demodulator_priv;
-+      kfree(state);
-+}
-+
-+static struct dvb_frontend_ops m88dc2800_ops;
-+
-+struct dvb_frontend *m88dc2800_attach(const struct m88dc2800_config
-+                                    *config, struct i2c_adapter *i2c)
++static int m88ds3103_demod_connect(struct dvb_frontend *fe, s32 carrier_offset_khz) 
 +{
-+      struct m88dc2800_state *state = NULL;
-+
-+      /* allocate memory for the internal state */
-+      state = kzalloc(sizeof(struct m88dc2800_state), GFP_KERNEL);
-+      if (state == NULL)
-+              goto error;
-+
-+      /* setup the state */
-+      state->config = config;
-+      state->i2c = i2c;
-+      state->xtal = 28800;
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
++      u16 value;
++      u8 val1,val2,data;
++      
++      dprintk("connect delivery system = %d\n", state->delivery_system);
++      
++      /* ds3000 global reset */
++      m88ds3103_writereg(state, 0x07, 0x80);
++      m88ds3103_writereg(state, 0x07, 0x00);
++      /* ds3000 build-in uC reset */
++      m88ds3103_writereg(state, 0xb2, 0x01);
++      /* ds3000 software reset */
++      m88ds3103_writereg(state, 0x00, 0x01);
 +
-+      WriteReg(state, 0x80, 0x01);
-+      M88DC2000RegInitial_TC2800(state);
-+      M88DC2000SetTsType(state, state->config->ts_mode);
-+      mt_fe_tn_init_tc2800(state);
++      switch (state->delivery_system) {
++      case SYS_DVBS:
++              /* initialise the demod in DVB-S mode */
++              if(state->demod_id == DS3000_ID){
++                      m88ds3103_init_reg(state, ds3000_dvbs_init_tab, sizeof(ds3000_dvbs_init_tab));
++                      
++                      value = m88ds3103_readreg(state, 0xfe);
++                      value &= 0xc0;
++                      value |= 0x1b;
++                      m88ds3103_writereg(state, 0xfe, value);
++                      
++                      if(state->config->ci_mode)
++                              val1 = 0x80;
++                      else if(state->config->ts_mode)
++                              val1 = 0x60;
++                      else
++                              val1 = 0x20;
++                      m88ds3103_writereg(state, 0xfd, val1);
++                      
++              }else if(state->demod_id == DS3103_ID){
++                      m88ds3103_init_reg(state, ds3103_dvbs_init_tab, sizeof(ds3103_dvbs_init_tab));
++                      
++                      /* set ts clock */
++                      if(state->config->ci_mode == 2){
++                              val1 = 6; val2 = 6;
++                      }else if(state->config->ts_mode == 0)   {
++                              val1 = 3; val2 = 3;
++                      }else{
++                              val1 = 0; val2 = 0;
++                      }
++                      val1 -= 1; val2 -= 1;
++                      val1 &= 0x3f; val2 &= 0x3f;
++                      data = m88ds3103_readreg(state, 0xfe);
++                      data &= 0xf0;
++                      data |= (val2 >> 2) & 0x0f;
++                      m88ds3103_writereg(state, 0xfe, data);
++                      data = (val2 & 0x03) << 6;
++                      data |= val1;
++                      m88ds3103_writereg(state, 0xea, data);
++                      
++                      m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d));
++                      m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30));
++                      
++                      /* set master clock */
++                      val1 = m88ds3103_readreg(state, 0x22);
++                      val2 = m88ds3103_readreg(state, 0x24);
++                      
++                      val1 &= 0x3f;
++                      val2 &= 0x3f;
++                      val1 |= 0x80;
++                      val2 |= 0x40;
 +
-+      /* create dvb_frontend */
-+      memcpy(&state->frontend.ops, &m88dc2800_ops,
-+             sizeof(struct dvb_frontend_ops));
-+      state->frontend.demodulator_priv = state;
-+      return &state->frontend;
++                      m88ds3103_writereg(state, 0x22, val1);
++                      m88ds3103_writereg(state, 0x24, val2);  
++                      
++                      if(state->config->ci_mode){
++                              if(state->config->ci_mode == 2)
++                                      val1 = 0x43;
++                              else
++                                      val1 = 0x03;
++                      }
++                      else if(state->config->ts_mode)
++                              val1 = 0x06;
++                      else
++                              val1 = 0x42;
++                      m88ds3103_writereg(state, 0xfd, val1);          
++              }
++              break;
++      case SYS_DVBS2:
++              /* initialise the demod in DVB-S2 mode */
++              if(state->demod_id == DS3000_ID){
++                      m88ds3103_init_reg(state, ds3000_dvbs2_init_tab, sizeof(ds3000_dvbs2_init_tab));
++              
++                      if (c->symbol_rate >= 30000000)
++                              m88ds3103_writereg(state, 0xfe, 0x54);
++                      else
++                              m88ds3103_writereg(state, 0xfe, 0x98);
++                                                              
++              }else if(state->demod_id == DS3103_ID){
++                      m88ds3103_init_reg(state, ds3103_dvbs2_init_tab, sizeof(ds3103_dvbs2_init_tab));
 +
-+      error:
-+      kfree(state);
-+      return NULL;
-+}
-+
-+EXPORT_SYMBOL(m88dc2800_attach);
-+
-+static struct dvb_frontend_ops m88dc2800_ops = {
-+      .delsys = {SYS_DVBC_ANNEX_A, SYS_DVBC_ANNEX_C},
-+      .info = {
-+               .name = "Montage M88DC2800 DVB-C",
-+               .frequency_stepsize = 62500,
-+               .frequency_min = 48000000,
-+               .frequency_max = 870000000,
-+               .symbol_rate_min = 870000,
-+               .symbol_rate_max = 9000000,
-+               .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 |
-+                       FE_CAN_QAM_128 | FE_CAN_QAM_256 | FE_CAN_FEC_AUTO
-+      },
-+      .release = m88dc2800_release,
-+      .init = m88dc2800_init,
-+      .sleep = m88dc2800_sleep,
-+      .set_frontend = m88dc2800_set_parameters,
-+      .read_status = m88dc2800_read_status,
-+      .read_ber = m88dc2800_read_ber,
-+      .read_signal_strength = m88dc2800_read_signal_strength,
-+      .read_snr = m88dc2800_read_snr,
-+      .read_ucblocks = m88dc2800_read_ucblocks,
-+};
-+
-+MODULE_DESCRIPTION("Montage DVB-C demodulator driver");
-+MODULE_AUTHOR("Max Nibble <nibble.max@gmail.com>");
-+MODULE_LICENSE("GPL");
-+MODULE_VERSION("1.00");
-diff -urN a/drivers/media/dvb-frontends/m88dc2800.h b/drivers/media/dvb-frontends/m88dc2800.h
---- a/drivers/media/dvb-frontends/m88dc2800.h  1970-01-01 08:00:00.000000000 +0800
-+++ b/drivers/media/dvb-frontends/m88dc2800.h  2013-01-26 14:57:32.000000000 +0800
-@@ -0,0 +1,43 @@
-+/*
-+    M88DC2800/M88TC2800  - DVB-C demodulator and tuner from Montage
-+
-+    Copyright (C) 2012 Max Nibble <nibble.max@gmail.com>
-+    Copyright (C) 2011 Montage Technology - www.montage-tech.com
++                      /* set ts clock */
++                      if(state->config->ci_mode == 2){
++                              val1 = 6; val2 = 6;
++                      }else if(state->config->ts_mode == 0){
++                              val1 = 5; val2 = 4;
++                      }else{
++                              val1 = 0; val2 = 0;
++                      }
++                      val1 -= 1; val2 -= 1;
++                      val1 &= 0x3f; val2 &= 0x3f;
++                      data = m88ds3103_readreg(state, 0xfe);
++                      data &= 0xf0;
++                      data |= (val2 >> 2) & 0x0f;
++                      m88ds3103_writereg(state, 0xfe, data);
++                      data = (val2 & 0x03) << 6;
++                      data |= val1;
++                      m88ds3103_writereg(state, 0xea, data);
++                      
++                      m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d));
++                      m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30));
++                      
++                      /* set master clock */
++                      val1 = m88ds3103_readreg(state, 0x22);
++                      val2 = m88ds3103_readreg(state, 0x24);
++                      
++                      val1 &= 0x3f;
++                      val2 &= 0x3f;
++                      if((state->config->ci_mode == 2) || (state->config->ts_mode == 1)){
++                              val1 |= 0x80;
++                              val2 |= 0x40;
++                      }else{
++                              if (c->symbol_rate >= 28000000){
++                                      val1 |= 0xc0;
++                              }else if (c->symbol_rate >= 18000000){
++                                      val2 |= 0x40;
++                              }else{
++                                      val1 |= 0x80;
++                                      val2 |= 0x40;
++                              }                               
++                      }
++                      m88ds3103_writereg(state, 0x22, val1);
++                      m88ds3103_writereg(state, 0x24, val2);                                  
++              }
++              
++              if(state->config->ci_mode){
++                      if(state->config->ci_mode == 2)
++                              val1 = 0x43;
++                      else
++                              val1 = 0x03;
++              }
++              else if(state->config->ts_mode)
++                      val1 = 0x06;
++              else
++                      val1 = 0x42;
++              m88ds3103_writereg(state, 0xfd, val1);
++              
++              break;
++      default:
++              return 1;
++      }
++      /* disable 27MHz clock output */
++      m88ds3103_writereg(state, 0x29, 0x80);
++      /* enable ac coupling */
++      m88ds3103_writereg(state, 0x25, 0x8a);
 +
-+    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.
++      if ((c->symbol_rate / 1000) <= 3000){
++              m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 32 * 100 / 64 = 400*/
++              m88ds3103_writereg(state, 0xc8, 0x20);
++              m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/
++              m88ds3103_writereg(state, 0xc7, 0x00);
++      }else if((c->symbol_rate / 1000) <= 10000){
++              m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 16 * 100 / 64 = 200*/
++              m88ds3103_writereg(state, 0xc8, 0x10);
++              m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/
++              m88ds3103_writereg(state, 0xc7, 0x00);
++      }else{
++              m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 6 * 100 / 64 = 75*/
++              m88ds3103_writereg(state, 0xc8, 0x06);
++              m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/
++              m88ds3103_writereg(state, 0xc7, 0x00);
++      }
 +
-+    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.
++      m88ds3103_set_symrate(fe);
++      
++      m88ds3103_set_CCI(fe);
 +
-+    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.
-+*/
++      m88ds3103_set_carrier_offset(fe, carrier_offset_khz);
++              
++      /* ds3000 out of software reset */
++      m88ds3103_writereg(state, 0x00, 0x00);
++      /* start ds3000 build-in uC */
++      m88ds3103_writereg(state, 0xb2, 0x00);  
++      
++      return 0;
++}
 +
-+#ifndef M88DC2800_H
-+#define M88DC2800_H
++static int m88ds3103_set_frontend(struct dvb_frontend *fe)
++{
++      struct m88ds3103_state *state = fe->demodulator_priv;
++      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
 +
-+#include <linux/dvb/frontend.h>
++      int i;
++      fe_status_t status;
++      u8 lpf_mxdiv, mlpf_max, mlpf_min, nlpf, div4, capCode, changePLL;
++      s32 offset_khz, lpf_offset_KHz;
++      u16 value, ndiv, N, lpf_coeff;
++      u32 f3db, gdiv28, realFreq;
++      u8 RFgain;
 +
-+struct m88dc2800_config {
-+      u8 demod_address;
-+      u8 ts_mode;
-+};
++      dprintk("%s() ", __func__);
++      dprintk("c frequency = %d\n", c->frequency);
++      dprintk("symbol rate = %d\n", c->symbol_rate);
++      dprintk("delivery system = %d\n", c->delivery_system);
++      
++      realFreq = c->frequency;
++      lpf_offset_KHz = 0;
++      if(c->symbol_rate < 5000000){
++              lpf_offset_KHz = FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz;
++              realFreq += FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz;
++      }
++      
++      if (state->config->set_ts_params)
++              state->config->set_ts_params(fe, 0);
 +
-+#if defined(CONFIG_DVB_M88DC2800) || (defined(CONFIG_DVB_M88DC2800_MODULE) && defined(MODULE))
-+extern struct dvb_frontend* m88dc2800_attach(const struct m88dc2800_config* config,
-+                                          struct i2c_adapter* i2c);
-+#else
-+static inline struct dvb_frontend* m88dc2800_attach(const struct m88dc2800_config* config,
-+                                          struct i2c_adapter* i2c)
-+{
-+      printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
-+      return NULL;
-+}
-+#endif /* CONFIG_DVB_M88DC2800 */
-+#endif /* M88DC2800_H */
-diff -urN a/drivers/media/dvb-frontends/m88ds3103.c b/drivers/media/dvb-frontends/m88ds3103.c
---- a/drivers/media/dvb-frontends/m88ds3103.c  1970-01-01 08:00:00.000000000 +0800
-+++ b/drivers/media/dvb-frontends/m88ds3103.c  2013-01-30 12:33:47.000000000 +0800
-@@ -0,0 +1,1710 @@
-+/*
-+    Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver
++      div4 = 0;
++      RFgain = 0;
++      if(state->tuner_id == TS2022_ID){
++              m88ds3103_tuner_writereg(state, 0x10, 0x0a);
++              m88ds3103_tuner_writereg(state, 0x11, 0x40);
++              if (realFreq < 1103000) {
++                      m88ds3103_tuner_writereg(state, 0x10, 0x1b);
++                      div4 = 1;
++                      ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ;                              
++              }else {
++                      ndiv = (realFreq * (6 + 8) * 2)/MT_FE_CRYSTAL_KHZ;
++              }
++              ndiv = ndiv + ndiv%2;
++              if(ndiv < 4095)
++                      N = ndiv - 1024;
++              else if (ndiv < 6143)
++                      N = ndiv + 1024;
++              else
++                      N = ndiv + 3072;        
++              
++              m88ds3103_tuner_writereg(state, 0x01, (N & 0x3f00) >> 8);                                                                                       
++      }else{
++              m88ds3103_tuner_writereg(state, 0x10, 0x00);                    
++              if (realFreq < 1146000){
++                      m88ds3103_tuner_writereg(state, 0x10, 0x11);
++                      div4 = 1;
++                      ndiv = (realFreq * (6 + 8) * 4) / MT_FE_CRYSTAL_KHZ;
++              }else{
++                      m88ds3103_tuner_writereg(state, 0x10, 0x01);
++                      ndiv = (realFreq * (6 + 8) * 2) / MT_FE_CRYSTAL_KHZ;
++              }
++              ndiv = ndiv + ndiv%2;
++              N = ndiv - 1024;
++              m88ds3103_tuner_writereg(state, 0x01, (N>>8)&0x0f);
++      }
++      /* set pll */
++      m88ds3103_tuner_writereg(state, 0x02, N & 0x00ff);
++      m88ds3103_tuner_writereg(state, 0x03, 0x06);
++      m88ds3103_tuner_writereg(state, 0x51, 0x0f);
++      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++      m88ds3103_tuner_writereg(state, 0x50, 0x10);
++      m88ds3103_tuner_writereg(state, 0x50, 0x00);    
 +
-+    Copyright (C) 2011 Max nibble<nibble.max@gmail.com>
-+    Copyright (C) 2010 Montage Technology<www.montage-tech.com>
-+    Copyright (C) 2009 Konstantin Dimitrov.
++      if(state->tuner_id == TS2022_ID){
++              if(( realFreq >= 1650000 ) && (realFreq <= 1850000)){
++                      msleep(5);
++                      value = m88ds3103_tuner_readreg(state, 0x14);
++                      value &= 0x7f;
++                      if(value < 64){
++                              m88ds3103_tuner_writereg(state, 0x10, 0x82);
++                              m88ds3103_tuner_writereg(state, 0x11, 0x6f);
 +
-+    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.
++                              m88ds3103_tuner_writereg(state, 0x51, 0x0f);
++                              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++                              m88ds3103_tuner_writereg(state, 0x50, 0x10);
++                              m88ds3103_tuner_writereg(state, 0x50, 0x00);
++                      }
++              }
++              msleep(5);
++              value = m88ds3103_tuner_readreg(state, 0x14);
++              value &= 0x1f;
 +
-+    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.
++              if(value > 19){
++                      value = m88ds3103_tuner_readreg(state, 0x10);
++                      value &= 0x1d;
++                      m88ds3103_tuner_writereg(state, 0x10, value);
++              }                               
++      }else{
++              msleep(5);
++              value = m88ds3103_tuner_readreg(state, 0x66);
++              changePLL = (((value & 0x80) >> 7) != div4);
 +
-+    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.
-+ */
-+
-+#include <linux/slab.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/firmware.h>
++              if(changePLL){
++                      m88ds3103_tuner_writereg(state, 0x10, 0x11);
++                      div4 = 1;
++                      ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ;
++                      ndiv = ndiv + ndiv%2;
++                      N = ndiv - 1024;
++                                      
++                      m88ds3103_tuner_writereg(state, 0x01, (N>>8) & 0x0f);
++                      m88ds3103_tuner_writereg(state, 0x02, N & 0xff);
++                      
++                      m88ds3103_tuner_writereg(state, 0x51, 0x0f);
++                      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++                      m88ds3103_tuner_writereg(state, 0x50, 0x10);
++                      m88ds3103_tuner_writereg(state, 0x50, 0x00);
++              }               
++      }
++      /*set the RF gain*/
++      if(state->tuner_id == TS2020_ID)
++              m88ds3103_tuner_writereg(state, 0x60, 0x79);
++                      
++      m88ds3103_tuner_writereg(state, 0x51, 0x17);
++      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++      m88ds3103_tuner_writereg(state, 0x50, 0x08);
++      m88ds3103_tuner_writereg(state, 0x50, 0x00);
++      msleep(5);
 +
-+#include "dvb_frontend.h"
-+#include "m88ds3103.h"
-+#include "m88ds3103_priv.h"
++      if(state->tuner_id == TS2020_ID){
++              RFgain = m88ds3103_tuner_readreg(state, 0x3d);
++              RFgain &= 0x0f;
++              if(RFgain < 15){
++                      if(RFgain < 4) 
++                              RFgain = 0;
++                      else
++                              RFgain = RFgain -3;
++                      value = ((RFgain << 3) | 0x01) & 0x79;
++                      m88ds3103_tuner_writereg(state, 0x60, value);
++                      m88ds3103_tuner_writereg(state, 0x51, 0x17);
++                      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++                      m88ds3103_tuner_writereg(state, 0x50, 0x08);
++                      m88ds3103_tuner_writereg(state, 0x50, 0x00);
++              }
++      }
++      
++      /* set the LPF */
++      if(state->tuner_id == TS2022_ID){
++              m88ds3103_tuner_writereg(state, 0x25, 0x00);
++              m88ds3103_tuner_writereg(state, 0x27, 0x70);
++              m88ds3103_tuner_writereg(state, 0x41, 0x09);
++              m88ds3103_tuner_writereg(state, 0x08, 0x0b);
++      }
 +
-+static int debug;
-+module_param(debug, int, 0644);
-+MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
++      f3db = ((c->symbol_rate / 1000) *135) / 200 + 2000;
++      f3db += lpf_offset_KHz;
++      if (f3db < 7000)
++              f3db = 7000;
++      if (f3db > 40000)
++              f3db = 40000;
++                      
++      gdiv28 = (MT_FE_CRYSTAL_KHZ / 1000 * 1694 + 500) / 1000;
++      m88ds3103_tuner_writereg(state, 0x04, gdiv28 & 0xff);
++      m88ds3103_tuner_writereg(state, 0x51, 0x1b);
++      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++      m88ds3103_tuner_writereg(state, 0x50, 0x04);
++      m88ds3103_tuner_writereg(state, 0x50, 0x00);
++      msleep(5);
 +
-+#define dprintk(args...) \
-+      do { \
-+              if (debug) \
-+                      printk(KERN_INFO "m88ds3103: " args); \
-+      } while (0)
++      value = m88ds3103_tuner_readreg(state, 0x26);
++      capCode = value & 0x3f;
++      if(state->tuner_id == TS2022_ID){
++              m88ds3103_tuner_writereg(state, 0x41, 0x0d);
 +
-+/*demod register operations.*/
-+static int m88ds3103_writereg(struct m88ds3103_state *state, int reg, int data)
-+{
-+      u8 buf[] = { reg, data };
-+      struct i2c_msg msg = { .addr = state->config->demod_address,
-+              .flags = 0, .buf = buf, .len = 2 };
-+      int err;
++              m88ds3103_tuner_writereg(state, 0x51, 0x1b);
++              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++              m88ds3103_tuner_writereg(state, 0x50, 0x04);
++              m88ds3103_tuner_writereg(state, 0x50, 0x00);
 +
-+      if (debug > 1)
-+              printk("m88ds3103: %s: write reg 0x%02x, value 0x%02x\n",
-+                      __func__, reg, data);
++              msleep(2);
 +
-+      err = i2c_transfer(state->i2c, &msg, 1);
-+      if (err != 1) {
-+              printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x,"
-+                       " value == 0x%02x)\n", __func__, err, reg, data);
-+              return -EREMOTEIO;
++              value = m88ds3103_tuner_readreg(state, 0x26);
++              value &= 0x3f;
++              value = (capCode + value) / 2;          
 +      }
-+      return 0;
-+}
-+
-+static int m88ds3103_readreg(struct m88ds3103_state *state, u8 reg)
-+{
-+      int ret;
-+      u8 b0[] = { reg };
-+      u8 b1[] = { 0 };
-+      struct i2c_msg msg[] = {
-+              { .addr = state->config->demod_address, .flags = 0,
-+                      .buf = b0, .len = 1 },
-+              { .addr = state->config->demod_address, .flags = I2C_M_RD,
-+                      .buf = b1, .len = 1 }
-+      };
-+      ret = i2c_transfer(state->i2c, msg, 2);
++      else
++              value = capCode;
++              
++      gdiv28 = gdiv28 * 207 / (value * 2 + 151);      
++      mlpf_max = gdiv28 * 135 / 100;
++      mlpf_min = gdiv28 * 78 / 100;
++      if (mlpf_max > 63)
++              mlpf_max = 63;
 +
-+      if (ret != 2) {
-+              printk(KERN_ERR "%s: reg=0x%x (error=%d)\n",
-+                      __func__, reg, ret);
-+              return ret;
-+      }
++      if(state->tuner_id == TS2022_ID)
++              lpf_coeff = 3200;
++      else
++              lpf_coeff = 2766;
++              
++      nlpf = (f3db * gdiv28 * 2 / lpf_coeff / (MT_FE_CRYSTAL_KHZ / 1000)  + 1) / 2 ;  
++      if (nlpf > 23) nlpf = 23;
++      if (nlpf < 1) nlpf = 1;
 +
-+      if (debug > 1)
-+              printk(KERN_INFO "m88ds3103: read reg 0x%02x, value 0x%02x\n",
-+                      reg, b1[0]);
++      lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2 / f3db + 1) / 2;
 +
-+      return b1[0];
-+}
++      if (lpf_mxdiv < mlpf_min){
++              nlpf++;
++              lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2  / f3db + 1) / 2;
++      }
 +
-+/*tuner register operations.*/
-+static int m88ds3103_tuner_writereg(struct m88ds3103_state *state, int reg, int data)
-+{
-+      u8 buf[] = { reg, data };
-+      struct i2c_msg msg = { .addr = 0x60,
-+              .flags = 0, .buf = buf, .len = 2 };
-+      int err;
++      if (lpf_mxdiv > mlpf_max)
++              lpf_mxdiv = mlpf_max;
 +
-+      m88ds3103_writereg(state, 0x03, 0x11);
-+      err = i2c_transfer(state->i2c, &msg, 1);
++      m88ds3103_tuner_writereg(state, 0x04, lpf_mxdiv);
++      m88ds3103_tuner_writereg(state, 0x06, nlpf);
++      m88ds3103_tuner_writereg(state, 0x51, 0x1b);
++      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++      m88ds3103_tuner_writereg(state, 0x50, 0x04);
++      m88ds3103_tuner_writereg(state, 0x50, 0x00);
++      msleep(5);
 +      
-+      if (err != 1) {
-+              printk("%s: writereg error(err == %i, reg == 0x%02x,"
-+                       " value == 0x%02x)\n", __func__, err, reg, data);
-+              return -EREMOTEIO;
-+      }
++      if(state->tuner_id == TS2022_ID){
++              msleep(2);
++              value = m88ds3103_tuner_readreg(state, 0x26);
++              capCode = value & 0x3f;
 +
-+      return 0;
-+}
++              m88ds3103_tuner_writereg(state, 0x41, 0x09);
 +
-+static int m88ds3103_tuner_readreg(struct m88ds3103_state *state, u8 reg)
-+{
-+      int ret;
-+      u8 b0[] = { reg };
-+      u8 b1[] = { 0 };
-+      struct i2c_msg msg[] = {
-+              { .addr = 0x60, .flags = 0,
-+                      .buf = b0, .len = 1 },
-+              { .addr = 0x60, .flags = I2C_M_RD,
-+                      .buf = b1, .len = 1 }
-+      };
++              m88ds3103_tuner_writereg(state, 0x51, 0x1b);
++              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++              m88ds3103_tuner_writereg(state, 0x50, 0x04);
++              m88ds3103_tuner_writereg(state, 0x50, 0x00);
 +
-+      m88ds3103_writereg(state, 0x03, 0x11);  
-+      ret = i2c_transfer(state->i2c, msg, 2);
++              msleep(2);
++              value = m88ds3103_tuner_readreg(state, 0x26);
++              value &= 0x3f;
++              value = (capCode + value) / 2;
 +
-+      if (ret != 2) {
-+              printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret);
-+              return ret;
++              value = value | 0x80;
++              m88ds3103_tuner_writereg(state, 0x25, value);
++              m88ds3103_tuner_writereg(state, 0x27, 0x30);
++
++              m88ds3103_tuner_writereg(state, 0x08, 0x09);            
 +      }
 +
-+      return b1[0];
-+}
++      /* Set the BB gain */
++      m88ds3103_tuner_writereg(state, 0x51, 0x1e);
++      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++      m88ds3103_tuner_writereg(state, 0x50, 0x01);
++      m88ds3103_tuner_writereg(state, 0x50, 0x00);
++      if(state->tuner_id == TS2020_ID){
++              if(RFgain == 15){
++                      msleep(40);
++                      value = m88ds3103_tuner_readreg(state, 0x21);
++                      value &= 0x0f;
++                      if(value < 3){
++                              m88ds3103_tuner_writereg(state, 0x60, 0x61);
++                              m88ds3103_tuner_writereg(state, 0x51, 0x17);
++                              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
++                              m88ds3103_tuner_writereg(state, 0x50, 0x08);
++                              m88ds3103_tuner_writereg(state, 0x50, 0x00);
++                      }                       
++              }
++      }
++      msleep(60);
++      
++      offset_khz = (ndiv) * MT_FE_CRYSTAL_KHZ
++              / (6 + 8) / (div4 + 1) / 2 - realFreq;
 +
-+/* Bulk demod I2C write, for firmware download. */
-+static int m88ds3103_writeregN(struct m88ds3103_state *state, int reg,
-+                              const u8 *data, u16 len)
-+{
-+      int ret = -EREMOTEIO;
-+      struct i2c_msg msg;
-+      u8 *buf;
++      m88ds3103_demod_connect(fe, offset_khz+lpf_offset_KHz);
 +
-+      buf = kmalloc(len + 1, GFP_KERNEL);
-+      if (buf == NULL) {
-+              printk("Unable to kmalloc\n");
-+              ret = -ENOMEM;
-+              goto error;
++      for (i = 0; i < 30 ; i++) {
++              m88ds3103_read_status(fe, &status);
++              if (status & FE_HAS_LOCK){
++                      break;
++                }
++              msleep(20);
 +      }
 +
-+      *(buf) = reg;
-+      memcpy(buf + 1, data, len);
-+
-+      msg.addr = state->config->demod_address;
-+      msg.flags = 0;
-+      msg.buf = buf;
-+      msg.len = len + 1;
-+
-+      if (debug > 1)
-+              printk(KERN_INFO "m88ds3103: %s:  write regN 0x%02x, len = %d\n",
-+                      __func__, reg, len);
++#ifdef _AUTO_S2_      
++      if((status & FE_HAS_LOCK) == 0){
++              state->delivery_system = (state->delivery_system == SYS_DVBS) ? SYS_DVBS2 : SYS_DVBS;
++              m88ds3103_demod_connect(fe, offset_khz);
++      
++              for (i = 0; i < 30 ; i++) {
++                      m88ds3103_read_status(fe, &status);
++                      if (status & FE_HAS_LOCK){
++                              break;
++                      }
++                      msleep(20);
++              }
++      }
++#else 
++      state->delivery_system = c->delivery_system;
++#endif        
++      if (status & FE_HAS_LOCK){
++              if(state->config->ci_mode == 2)
++                      m88ds3103_set_clock_ratio(state);
++              if(state->config->start_ctrl){
++                      if(state->first_lock == 0){
++                              state->config->start_ctrl(fe);
++                              state->first_lock = 1;  
++                      }
++              }               
++      }
++              
++      return 0;
++}
 +
-+      ret = i2c_transfer(state->i2c, &msg, 1);
-+      if (ret != 1) {
-+              printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x\n",
-+                       __func__, ret, reg);
-+              ret = -EREMOTEIO;
++static int m88ds3103_tune(struct dvb_frontend *fe,
++                      bool re_tune,
++                      unsigned int mode_flags,
++                      unsigned int *delay,
++                      fe_status_t *status)
++{     
++      *delay = HZ / 5;
++      
++      dprintk("%s() ", __func__);
++      dprintk("re_tune = %d\n", re_tune);
++      
++      if (re_tune) {
++              int ret = m88ds3103_set_frontend(fe);
++              if (ret)
++                      return ret;
 +      }
 +      
-+error:
-+      kfree(buf);
-+
-+      return ret;
++      return m88ds3103_read_status(fe, status);
 +}
 +
-+static int m88ds3103_load_firmware(struct dvb_frontend *fe)
++static enum dvbfe_algo m88ds3103_get_algo(struct dvb_frontend *fe)
++{
++      return DVBFE_ALGO_HW;
++}
++ 
++ /*
++ * Power config will reset and load initial firmware if required
++ */
++static int m88ds3103_initilaze(struct dvb_frontend *fe)
 +{
 +      struct m88ds3103_state *state = fe->demodulator_priv;
-+      const struct firmware *fw;
-+      int i, ret = 0;
++      int ret;
 +
 +      dprintk("%s()\n", __func__);
-+              
-+      if (state->skip_fw_load)
-+              return 0;
-+      /* Load firmware */
-+      /* request the firmware, this will block until someone uploads it */    
-+      if(state->demod_id == DS3000_ID){
-+              printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
-+                              DS3000_DEFAULT_FIRMWARE);               
-+              ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE,
-+                                      state->i2c->dev.parent);
-+      }else if(state->demod_id == DS3103_ID){
-+              printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
-+                              DS3103_DEFAULT_FIRMWARE);
-+              ret = request_firmware(&fw, DS3103_DEFAULT_FIRMWARE,
-+                                      state->i2c->dev.parent);
-+      }
++      /* hard reset */
++      m88ds3103_writereg(state, 0x07, 0x80);
++      m88ds3103_writereg(state, 0x07, 0x00);
++      msleep(1);
 +      
-+      printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
-+      if (ret) {
-+              printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
-+                              "found?)\n", __func__);
-+              return ret;
++      m88ds3103_writereg(state, 0x08, 0x01 | m88ds3103_readreg(state, 0x08));
++      msleep(1);
++
++      if(state->tuner_id == TS2020_ID){
++              /* TS2020 init */
++              m88ds3103_tuner_writereg(state, 0x42, 0x73);
++              msleep(2);
++              m88ds3103_tuner_writereg(state, 0x05, 0x01);
++              m88ds3103_tuner_writereg(state, 0x62, 0xb5);
++              m88ds3103_tuner_writereg(state, 0x07, 0x02);
++              m88ds3103_tuner_writereg(state, 0x08, 0x01);
 +      }
++      else if(state->tuner_id == TS2022_ID){
++              /* TS2022 init */
++              m88ds3103_tuner_writereg(state, 0x62, 0x6c);
++              msleep(2);
++              m88ds3103_tuner_writereg(state, 0x42, 0x6c);
++              msleep(2);
++              m88ds3103_tuner_writereg(state, 0x7d, 0x9d);
++              m88ds3103_tuner_writereg(state, 0x7c, 0x9a);
++              m88ds3103_tuner_writereg(state, 0x7a, 0x76);
 +
-+      /* Make sure we don't recurse back through here during loading */
-+      state->skip_fw_load = 1;
++              m88ds3103_tuner_writereg(state, 0x3b, 0x01);
++              m88ds3103_tuner_writereg(state, 0x63, 0x88);
 +
-+      dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n",
-+                      fw->size,
-+                      fw->data[0],
-+                      fw->data[1],
-+                      fw->data[fw->size - 2],
-+                      fw->data[fw->size - 1]);
-+                      
-+      /* stop internal mcu. */
-+      m88ds3103_writereg(state, 0xb2, 0x01);
-+      /* split firmware to download.*/
-+      for(i = 0; i < FW_DOWN_LOOP; i++){
-+              ret = m88ds3103_writeregN(state, 0xb0, &(fw->data[FW_DOWN_SIZE*i]), FW_DOWN_SIZE);
-+              if(ret != 1) break;             
++              m88ds3103_tuner_writereg(state, 0x61, 0x85);
++              m88ds3103_tuner_writereg(state, 0x22, 0x30);
++              m88ds3103_tuner_writereg(state, 0x30, 0x40);
++              m88ds3103_tuner_writereg(state, 0x20, 0x23);
++              m88ds3103_tuner_writereg(state, 0x24, 0x02);
++              m88ds3103_tuner_writereg(state, 0x12, 0xa0);    
 +      }
-+      /* start internal mcu. */
-+      if(ret == 1)
-+              m88ds3103_writereg(state, 0xb2, 0x00);
 +              
-+      release_firmware(fw);
-+
-+      dprintk("%s: Firmware upload %s\n", __func__,
-+                      ret == 1 ? "complete" : "failed");
-+
-+      if(ret == 1) ret = 0;
++      if(state->demod_id == DS3103_ID){
++              m88ds3103_writereg(state, 0x07, 0xe0);
++              m88ds3103_writereg(state, 0x07, 0x00);
++              msleep(1);              
++      }
++      m88ds3103_writereg(state, 0xb2, 0x01);
 +      
-+      /* Ensure firmware is always loaded if required */
-+      state->skip_fw_load = 0;
++      /* Load the firmware if required */
++      ret = m88ds3103_load_firmware(fe);
++      if (ret != 0){
++              printk(KERN_ERR "%s: Unable initialize firmware\n", __func__);
++              return ret;
++      }
++      if(state->demod_id == DS3103_ID){
++              m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d));
++              m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30));         
++      }
 +
-+      return ret;
++      return 0;
 +}
 +
-+
-+static int m88ds3103_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
++/*
++ * Initialise or wake up device
++ */
++static int m88ds3103_initfe(struct dvb_frontend *fe)
 +{
 +      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 data;
++      u8 val;
 +
-+      dprintk("%s(%d)\n", __func__, voltage);
++      dprintk("%s()\n", __func__);
 +
-+      dprintk("m88ds3103:pin_ctrl = (%02x)\n", state->config->pin_ctrl);
-+      
-+      if(state->config->set_voltage)
-+              state->config->set_voltage(fe, voltage);
++      /* 1st step to wake up demod */
++      m88ds3103_writereg(state, 0x08, 0x01 | m88ds3103_readreg(state, 0x08));
++      m88ds3103_writereg(state, 0x04, 0xfe & m88ds3103_readreg(state, 0x04));
++      m88ds3103_writereg(state, 0x23, 0xef & m88ds3103_readreg(state, 0x23));
 +      
-+      data = m88ds3103_readreg(state, 0xa2);
++      /* 2nd step to wake up tuner */
++      val = m88ds3103_tuner_readreg(state, 0x00) & 0xff;
++      if((val & 0x01) == 0){
++              m88ds3103_tuner_writereg(state, 0x00, 0x01);
++              msleep(50);
++      }
++      m88ds3103_tuner_writereg(state, 0x00, 0x03);
++      msleep(50);
 +      
-+        if(state->config->pin_ctrl & 0x80){ /*If control pin is assigned.*/
-+              data &= ~0x03; /* bit0 V/H, bit1 off/on */
-+              if(state->config->pin_ctrl & 0x02)
-+                   data |= 0x02;
-+
-+              switch (voltage) {
-+              case SEC_VOLTAGE_18:
-+                   if((state->config->pin_ctrl & 0x01) == 0)
-+                        data |= 0x01;
-+                   break;
-+              case SEC_VOLTAGE_13:
-+                   if(state->config->pin_ctrl & 0x01)
-+                        data |= 0x01;
-+                   break;
-+              case SEC_VOLTAGE_OFF:
-+                   if(state->config->pin_ctrl & 0x02)
-+                         data &= ~0x02;                       
-+                   else
-+                         data |= 0x02;
-+                   break;
-+               }
-+        }
-+
-+      m88ds3103_writereg(state, 0xa2, data);
-+
-+      return 0;
++      return 0;       
 +}
 +
-+static int m88ds3103_read_status(struct dvb_frontend *fe, fe_status_t* status)
++/* Put device to sleep */
++static int m88ds3103_sleep(struct dvb_frontend *fe)
 +{
 +      struct m88ds3103_state *state = fe->demodulator_priv;
-+      int lock = 0;
++
++      dprintk("%s()\n", __func__);
 +      
-+      *status = 0;
++      /* 1st step to sleep tuner */
++      m88ds3103_tuner_writereg(state, 0x00, 0x00);
++      
++      /* 2nd step to sleep demod */
++      m88ds3103_writereg(state, 0x08, 0xfe & m88ds3103_readreg(state, 0x08));
++      m88ds3103_writereg(state, 0x04, 0x01 | m88ds3103_readreg(state, 0x04));
++      m88ds3103_writereg(state, 0x23, 0x10 | m88ds3103_readreg(state, 0x23));
 +      
-+      switch (state->delivery_system){
-+      case SYS_DVBS:
-+              lock = m88ds3103_readreg(state, 0xd1);
-+              dprintk("%s: SYS_DVBS status=%x.\n", __func__, lock);
-+              
-+              if ((lock & 0x07) == 0x07){
-+                      /*if((m88ds3103_readreg(state, 0x0d) & 0x07) == 0x07)*/
-+                              *status = FE_HAS_SIGNAL | FE_HAS_CARRIER 
-+                                      | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
-+                      
-+              }
-+              break;
-+      case SYS_DVBS2:
-+              lock = m88ds3103_readreg(state, 0x0d);
-+              dprintk("%s: SYS_DVBS2 status=%x.\n", __func__, lock);
-+
-+              if ((lock & 0x8f) == 0x8f)
-+                      *status = FE_HAS_SIGNAL | FE_HAS_CARRIER 
-+                              | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
-+                      
-+              break;
-+      default:
-+              break;
-+      }
 +
 +      return 0;
 +}
 +
-+static int m88ds3103_read_ber(struct dvb_frontend *fe, u32* ber)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 tmp1, tmp2, tmp3;
-+      u32 ldpc_frame_cnt, pre_err_packags, code_rate_fac = 0;
-+
-+      dprintk("%s()\n", __func__);
-+
-+      switch (state->delivery_system) {
-+      case SYS_DVBS:
-+              m88ds3103_writereg(state, 0xf9, 0x04);
-+              tmp3 = m88ds3103_readreg(state, 0xf8);
-+              if ((tmp3&0x10) == 0){
-+                      tmp1 = m88ds3103_readreg(state, 0xf7);
-+                      tmp2 = m88ds3103_readreg(state, 0xf6);
-+                      tmp3 |= 0x10;
-+                      m88ds3103_writereg(state, 0xf8, tmp3);
-+                      state->preBer = (tmp1<<8) | tmp2;
-+              }
-+              break;
-+      case SYS_DVBS2:
-+              tmp1 = m88ds3103_readreg(state, 0x7e) & 0x0f;
-+              switch(tmp1){
-+              case 0: code_rate_fac = 16008 - 80; break;
-+              case 1: code_rate_fac = 21408 - 80; break;
-+              case 2: code_rate_fac = 25728 - 80; break;
-+              case 3: code_rate_fac = 32208 - 80; break;
-+              case 4: code_rate_fac = 38688 - 80; break;
-+              case 5: code_rate_fac = 43040 - 80; break;
-+              case 6: code_rate_fac = 48408 - 80; break;
-+              case 7: code_rate_fac = 51648 - 80; break;
-+              case 8: code_rate_fac = 53840 - 80; break;
-+              case 9: code_rate_fac = 57472 - 80; break;
-+              case 10: code_rate_fac = 58192 - 80; break;
-+              }
-+              
-+              tmp1 = m88ds3103_readreg(state, 0xd7) & 0xff;
-+              tmp2 = m88ds3103_readreg(state, 0xd6) & 0xff;
-+              tmp3 = m88ds3103_readreg(state, 0xd5) & 0xff;           
-+              ldpc_frame_cnt = (tmp1 << 16) | (tmp2 << 8) | tmp3;
-+
-+              tmp1 = m88ds3103_readreg(state, 0xf8) & 0xff;
-+              tmp2 = m88ds3103_readreg(state, 0xf7) & 0xff;
-+              pre_err_packags = tmp1<<8 | tmp2;
-+              
-+              if (ldpc_frame_cnt > 1000){
-+                      m88ds3103_writereg(state, 0xd1, 0x01);
-+                      m88ds3103_writereg(state, 0xf9, 0x01);
-+                      m88ds3103_writereg(state, 0xf9, 0x00);
-+                      m88ds3103_writereg(state, 0xd1, 0x00);
-+                      state->preBer = pre_err_packags;
-+              }                               
-+              break;
-+      default:
-+              break;
-+      }
-+      *ber = state->preBer;
-+      
-+      return 0;
-+}
++static struct dvb_frontend_ops m88ds3103_ops = {
++      .delsys = { SYS_DVBS, SYS_DVBS2},
++      .info = {
++              .name = "Montage DS3103/TS2022",
++              .type = FE_QPSK,
++              .frequency_min = 950000,
++              .frequency_max = 2150000,
++              .frequency_stepsize = 1011, /* kHz for QPSK frontends */
++              .frequency_tolerance = 5000,
++              .symbol_rate_min = 1000000,
++              .symbol_rate_max = 45000000,
++              .caps = FE_CAN_INVERSION_AUTO |
++                      FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
++                      FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
++                      FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
++                      FE_CAN_2G_MODULATION |
++                      FE_CAN_QPSK | FE_CAN_RECOVER
++      },
 +
-+static int m88ds3103_read_signal_strength(struct dvb_frontend *fe,
-+                                              u16 *signal_strength)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u16 gain;
-+      u8 gain1, gain2, gain3 = 0;
++      .release = m88ds3103_release,
 +
-+      dprintk("%s()\n", __func__);
++      .init = m88ds3103_initfe,
++      .sleep = m88ds3103_sleep,
++      .read_status = m88ds3103_read_status,
++      .read_ber = m88ds3103_read_ber,
++      .read_signal_strength = m88ds3103_read_signal_strength,
++      .read_snr = m88ds3103_read_snr,
++      .read_ucblocks = m88ds3103_read_ucblocks,
++      .set_tone = m88ds3103_set_tone,
++      .set_voltage = m88ds3103_set_voltage,
++      .diseqc_send_master_cmd = m88ds3103_send_diseqc_msg,
++      .diseqc_send_burst = m88ds3103_diseqc_send_burst,
++      .get_frontend_algo = m88ds3103_get_algo,
++      .tune = m88ds3103_tune,
++      .set_frontend = m88ds3103_set_frontend,
++};
 +
-+      gain1 = m88ds3103_tuner_readreg(state, 0x3d) & 0x1f;
-+      dprintk("%s: gain1 = 0x%02x \n", __func__, gain1);
-+      
-+      if (gain1 > 15) gain1 = 15;
-+      gain2 = m88ds3103_tuner_readreg(state, 0x21) & 0x1f;
-+      dprintk("%s: gain2 = 0x%02x \n", __func__, gain2);
-+      
-+      if(state->tuner_id == TS2022_ID){
-+              gain3 = (m88ds3103_tuner_readreg(state, 0x66)>>3) & 0x07;
-+              dprintk("%s: gain3 = 0x%02x \n", __func__, gain3);
-+              
-+              if (gain2 > 16) gain2 = 16;
-+              if (gain2 < 2) gain2 = 2;                       
-+              if (gain3 > 6) gain3 = 6;
-+      }else{
-+              if (gain2 > 13) gain2 = 13;
-+              gain3 = 0;
-+      }
++MODULE_DESCRIPTION("DVB Frontend module for Montage DS3103/TS2022 hardware");
++MODULE_AUTHOR("Max nibble");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/media/dvb-frontends/dvbsky_m88ds3103.h b/drivers/media/dvb-frontends/dvbsky_m88ds3103.h
+new file mode 100644
+index 0000000..e2358d6
+--- /dev/null
++++ b/drivers/media/dvb-frontends/dvbsky_m88ds3103.h
+@@ -0,0 +1,54 @@
++/*
++    Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver
 +
-+      gain = gain1*23 + gain2*35 + gain3*29;
-+      *signal_strength = 60000 - gain*55;
++    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.
 +
-+      return 0;
-+}
++    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.
++ */
 +
-+static int m88ds3103_read_snr(struct dvb_frontend *fe, u16 *p_snr)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 val, npow1, npow2, spow1, cnt;
-+      u16 tmp, snr;
-+      u32 npow, spow, snr_total;      
-+      static const u16 mes_log10[] ={
-+              0,      3010,   4771,   6021,   6990,   7781,   8451,   9031,   9542,   10000,
-+              10414,  10792,  11139,  11461,  11761,  12041,  12304,  12553,  12788,  13010,
-+              13222,  13424,  13617,  13802,  13979,  14150,  14314,  14472,  14624,  14771,
-+              14914,  15052,  15185,  15315,  15441,  15563,  15682,  15798,  15911,  16021,
-+              16128,  16232,  16335,  16435,  16532,  16628,  16721,  16812,  16902,  16990,
-+              17076,  17160,  17243,  17324,  17404,  17482,  17559,  17634,  17709,  17782,
-+              17853,  17924,  17993,  18062,  18129,  18195,  18261,  18325,  18388,  18451,
-+              18513,  18573,  18633,  18692,  18751,  18808,  18865,  18921,  18976,  19031
-+      };
-+      static const u16 mes_loge[] ={
-+              0,      6931,   10986,  13863,  16094,  17918,  19459,  20794,  21972,  23026,
-+              23979,  24849,  25649,  26391,  27081,  27726,  28332,  28904,  29444,  29957,
-+              30445,  30910,  31355,  31781,  32189,  32581,  32958,  33322,  33673,  34012,
-+              34340,  34657,
-+      };
++#ifndef DVBSKY_M88DS3103_H
++#define DVBSKY_M88DS3103_H
 +
-+      dprintk("%s()\n", __func__);
++#include <linux/kconfig.h>
++#include <linux/dvb/frontend.h>
 +
-+      snr = 0;
-+      
-+      switch (state->delivery_system){
-+      case SYS_DVBS:
-+              cnt = 10; snr_total = 0;
-+              while(cnt > 0){
-+                      val = m88ds3103_readreg(state, 0xff);
-+                      snr_total += val;
-+                      cnt--;
-+              }
-+              tmp = (u16)(snr_total/80);
-+              if(tmp > 0){
-+                      if (tmp > 32) tmp = 32;
-+                      snr = (mes_loge[tmp - 1] * 100) / 45;
-+              }else{
-+                      snr = 0;
-+              }
-+              break;
-+      case SYS_DVBS2:
-+              cnt  = 10; npow = 0; spow = 0;
-+              while(cnt >0){
-+                      npow1 = m88ds3103_readreg(state, 0x8c) & 0xff;
-+                      npow2 = m88ds3103_readreg(state, 0x8d) & 0xff;
-+                      npow += (((npow1 & 0x3f) + (u16)(npow2 << 6)) >> 2);
++struct dvbsky_m88ds3103_config {
++      /* the demodulator's i2c address */
++      u8 demod_address;
++      u8 ci_mode;
++      u8 pin_ctrl;
++      u8 ts_mode; /* 0: Parallel, 1: Serial */
++      u8 tuner_readstops;
 +
-+                      spow1 = m88ds3103_readreg(state, 0x8e) & 0xff;
-+                      spow += ((spow1 * spow1) >> 1);
-+                      cnt--;
-+              }
-+              npow /= 10; spow /= 10;
-+              if(spow == 0){
-+                      snr = 0;
-+              }else if(npow == 0){
-+                      snr = 19;
-+              }else{
-+                      if(spow > npow){
-+                              tmp = (u16)(spow / npow);
-+                              if (tmp > 80) tmp = 80;
-+                              snr = mes_log10[tmp - 1]*3;
-+                      }else{
-+                              tmp = (u16)(npow / spow);
-+                              if (tmp > 80) tmp = 80;
-+                              snr = -(mes_log10[tmp - 1] / 1000);
-+                      }
-+              }                       
-+              break;
-+      default:
-+              break;
-+      }
-+      *p_snr = snr;
++      /* Set device param to start dma */
++      int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured);
++    /* Start to transfer data */
++    int (*start_ctrl)(struct dvb_frontend *fe);
++    /* Set LNB voltage */
++    int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
++};
 +
-+      return 0;
++#if IS_ENABLED(CONFIG_DVB_DVBSKY_M88DS3103)
++extern struct dvb_frontend *dvbsky_m88ds3103_attach(
++       const struct dvbsky_m88ds3103_config *config,
++       struct i2c_adapter *i2c);
++#else
++static inline struct dvb_frontend *dvbsky_m88ds3103_attach(
++       const struct dvbsky_m88ds3103_config *config,
++       struct i2c_adapter *i2c)
++{
++      printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++      return NULL;
 +}
++#endif /* CONFIG_DVB_DVBSKY_M88DS3103 */
++#endif /* DVBSKY_M88DS3103_H */
+diff --git a/drivers/media/dvb-frontends/dvbsky_m88ds3103_priv.h b/drivers/media/dvb-frontends/dvbsky_m88ds3103_priv.h
+new file mode 100644
+index 0000000..9966931
+--- /dev/null
++++ b/drivers/media/dvb-frontends/dvbsky_m88ds3103_priv.h
+@@ -0,0 +1,403 @@
++/*
++    Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver
 +
++    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.
 +
-+static int m88ds3103_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 tmp1, tmp2, tmp3, data;
++    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.
 +
-+      dprintk("%s()\n", __func__);
++    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.
++ */
 +
-+      switch (state->delivery_system) {
-+      case SYS_DVBS:
-+              data = m88ds3103_readreg(state, 0xf8);
-+              data |= 0x40;
-+              m88ds3103_writereg(state, 0xf8, data);          
-+              tmp1 = m88ds3103_readreg(state, 0xf5);
-+              tmp2 = m88ds3103_readreg(state, 0xf4);
-+              *ucblocks = (tmp1 <<8) | tmp2;          
-+              data &= ~0x20;
-+              m88ds3103_writereg(state, 0xf8, data);
-+              data |= 0x20;
-+              m88ds3103_writereg(state, 0xf8, data);
-+              data &= ~0x40;
-+              m88ds3103_writereg(state, 0xf8, data);
-+              break;
-+      case SYS_DVBS2:
-+              tmp1 = m88ds3103_readreg(state, 0xda);
-+              tmp2 = m88ds3103_readreg(state, 0xd9);
-+              tmp3 = m88ds3103_readreg(state, 0xd8);
-+              *ucblocks = (tmp1 <<16)|(tmp2 <<8)|tmp3;
-+              data = m88ds3103_readreg(state, 0xd1);
-+              data |= 0x01;
-+              m88ds3103_writereg(state, 0xd1, data);
-+              data &= ~0x01;
-+              m88ds3103_writereg(state, 0xd1, data);
-+              break;
-+      default:
-+              break;
-+      }
-+      return 0;
-+}
-+
-+static int m88ds3103_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 data_a1, data_a2;
-+
-+      dprintk("%s(%d)\n", __func__, tone);
-+      if ((tone != SEC_TONE_ON) && (tone != SEC_TONE_OFF)) {
-+              printk(KERN_ERR "%s: Invalid, tone=%d\n", __func__, tone);
-+              return -EINVAL;
-+      }
-+
-+      data_a1 = m88ds3103_readreg(state, 0xa1);
-+      data_a2 = m88ds3103_readreg(state, 0xa2);
-+      if(state->demod_id == DS3103_ID)
-+              data_a2 &= 0xdf; /* Normal mode */
-+      switch (tone) {
-+      case SEC_TONE_ON:
-+              dprintk("%s: SEC_TONE_ON\n", __func__);
-+              data_a1 |= 0x04;
-+              data_a1 &= ~0x03;
-+              data_a1 &= ~0x40;
-+              data_a2 &= ~0xc0;
-+              break;
-+      case SEC_TONE_OFF:
-+              dprintk("%s: SEC_TONE_OFF\n", __func__);
-+              data_a2 &= ~0xc0;
-+              data_a2 |= 0x80;
-+              break;
-+      }
-+      m88ds3103_writereg(state, 0xa2, data_a2);
-+      m88ds3103_writereg(state, 0xa1, data_a1);
-+      return 0;
-+}
-+
-+static int m88ds3103_send_diseqc_msg(struct dvb_frontend *fe,
-+                              struct dvb_diseqc_master_cmd *d)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      int i, ret = 0;
-+      u8 tmp, time_out;
-+
-+      /* Dump DiSEqC message */
-+      if (debug) {
-+              printk(KERN_INFO "m88ds3103: %s(", __func__);
-+              for (i = 0 ; i < d->msg_len ;) {
-+                      printk(KERN_INFO "0x%02x", d->msg[i]);
-+                      if (++i < d->msg_len)
-+                              printk(KERN_INFO ", ");
-+              }
-+      }
-+
-+      tmp = m88ds3103_readreg(state, 0xa2);
-+      tmp &= ~0xc0;
-+      if(state->demod_id == DS3103_ID)
-+              tmp &= ~0x20;
-+      m88ds3103_writereg(state, 0xa2, tmp);
-+      
-+      for (i = 0; i < d->msg_len; i ++)
-+              m88ds3103_writereg(state, (0xa3+i), d->msg[i]);
-+
-+      tmp = m88ds3103_readreg(state, 0xa1);   
-+      tmp &= ~0x38;
-+      tmp &= ~0x40;
-+      tmp |= ((d->msg_len-1) << 3) | 0x07;
-+      tmp &= ~0x80;
-+      m88ds3103_writereg(state, 0xa1, tmp);
-+      /*      1.5 * 9 * 8     = 108ms */
-+      time_out = 150;
-+      while (time_out > 0){
-+              msleep(10);
-+              time_out -= 10;
-+              tmp = m88ds3103_readreg(state, 0xa1);           
-+              if ((tmp & 0x40) == 0)
-+                      break;
-+      }
-+      if (time_out == 0){
-+              tmp = m88ds3103_readreg(state, 0xa1);
-+              tmp &= ~0x80;
-+              tmp |= 0x40;
-+              m88ds3103_writereg(state, 0xa1, tmp);
-+              ret = 1;
-+      }
-+      tmp = m88ds3103_readreg(state, 0xa2);
-+      tmp &= ~0xc0;
-+      tmp |= 0x80;
-+      m88ds3103_writereg(state, 0xa2, tmp);   
-+      return ret;
-+}
-+
-+
-+static int m88ds3103_diseqc_send_burst(struct dvb_frontend *fe,
-+                                      fe_sec_mini_cmd_t burst)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8      val, time_out;
-+      
-+      dprintk("%s()\n", __func__);
-+
-+      val = m88ds3103_readreg(state, 0xa2);
-+      val &= ~0xc0;
-+      if(state->demod_id == DS3103_ID)
-+              val &= 0xdf; /* Normal mode */
-+      m88ds3103_writereg(state, 0xa2, val);
-+      /* DiSEqC burst */
-+      if (burst == SEC_MINI_B)
-+              m88ds3103_writereg(state, 0xa1, 0x01);
-+      else
-+              m88ds3103_writereg(state, 0xa1, 0x02);
-+
-+      msleep(13);
-+
-+      time_out = 5;
-+      do{
-+              val = m88ds3103_readreg(state, 0xa1);
-+              if ((val & 0x40) == 0)
-+                      break;
-+              msleep(1);
-+              time_out --;
-+      } while (time_out > 0);
-+
-+      val = m88ds3103_readreg(state, 0xa2);
-+      val &= ~0xc0;
-+      val |= 0x80;
-+      m88ds3103_writereg(state, 0xa2, val);
-+      
-+      return 0;
-+}
-+
-+static void m88ds3103_release(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
++#ifndef DVBSKY_M88DS3103_PRIV_H
++#define DVBSKY_M88DS3103_PRIV_H
 +
-+      dprintk("%s\n", __func__);
-+      kfree(state);
-+}
++#define FW_DOWN_SIZE 32
++#define FW_DOWN_LOOP (8192/FW_DOWN_SIZE)
++#define DS3103_DEFAULT_FIRMWARE "dvb-fe-ds3103.fw"
++#define DS3000_DEFAULT_FIRMWARE "dvb-fe-ds300x.fw"
++#define MT_FE_MCLK_KHZ 96000 /* in kHz */
++#define MT_FE_CRYSTAL_KHZ   27000 /* in kHz */
++#define FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz 3000
++#define DS3000_ID     0x3000
++#define DS3103_ID     0x3103
++#define TS2020_ID     0x2020
++#define TS2022_ID     0x2022
++#define UNKNOW_ID     0x0000
 +
-+static int m88ds3103_check_id(struct m88ds3103_state *state)
-+{
-+      int val_00, val_01;
-+      
-+      /*check demod id*/
-+      val_01 = m88ds3103_readreg(state, 0x01);
-+      printk(KERN_INFO "DS3000 chip version: %x attached.\n", val_01);
-+                      
-+      if(val_01 == 0xD0)
-+              state->demod_id = DS3103_ID;
-+      else if(val_01 == 0xC0)
-+              state->demod_id = DS3000_ID;
-+      else
-+              state->demod_id = UNKNOW_ID;
-+              
-+      /*check tuner id*/
-+      val_00 = m88ds3103_tuner_readreg(state, 0x00);
-+      printk(KERN_INFO "TS202x chip version[1]: %x attached.\n", val_00);
-+      val_00 &= 0x03;
-+      if(val_00 == 0)
-+      {
-+              m88ds3103_tuner_writereg(state, 0x00, 0x01);
-+              msleep(3);              
-+      }
-+      m88ds3103_tuner_writereg(state, 0x00, 0x03);
-+      msleep(5);
++struct m88ds3103_state {
++      struct i2c_adapter *i2c;
++      const struct dvbsky_m88ds3103_config *config;
 +      
-+      val_00 = m88ds3103_tuner_readreg(state, 0x00);
-+      printk(KERN_INFO "TS202x chip version[2]: %x attached.\n", val_00);
-+      val_00 &= 0xff;
-+      if((val_00 == 0x01) || (val_00 == 0x41) || (val_00 == 0x81))
-+              state->tuner_id = TS2020_ID;
-+      else if(((val_00 & 0xc0)== 0xc0) || (val_00 == 0x83))
-+              state->tuner_id = TS2022_ID;
-+      else
-+              state->tuner_id = UNKNOW_ID;
-+                      
-+      return state->demod_id; 
-+}
-+
-+static struct dvb_frontend_ops m88ds3103_ops;
-+static int m88ds3103_initilaze(struct dvb_frontend *fe);
-+
-+struct dvb_frontend *m88ds3103_attach(const struct m88ds3103_config *config,
-+                                  struct i2c_adapter *i2c)
-+{
-+      struct m88ds3103_state *state = NULL;
-+
-+      dprintk("%s\n", __func__);
-+
-+      /* allocate memory for the internal state */
-+      state = kzalloc(sizeof(struct m88ds3103_state), GFP_KERNEL);
-+      if (state == NULL) {
-+              printk(KERN_ERR "Unable to kmalloc\n");
-+              goto error2;
-+      }
-+
-+      state->config = config;
-+      state->i2c = i2c;
-+      state->preBer = 0xffff;
-+      state->delivery_system = SYS_DVBS; /*Default to DVB-S.*/
++      struct dvb_frontend frontend;
 +      
-+      /* check demod id */
-+      if(m88ds3103_check_id(state) == UNKNOW_ID){
-+              printk(KERN_ERR "Unable to find Montage chip\n");
-+              goto error3;
-+      }
++      u32 preBer;
++      u8 skip_fw_load;        
++      u8 first_lock; /* The first time of signal lock */
++      u16 demod_id; /* demod chip type */
++      u16 tuner_id; /* tuner chip type */
++      fe_delivery_system_t delivery_system;
++};
 +
-+      memcpy(&state->frontend.ops, &m88ds3103_ops,
-+                      sizeof(struct dvb_frontend_ops));
-+      state->frontend.demodulator_priv = state;
-+      
-+      m88ds3103_initilaze(&state->frontend);
-+      
-+      return &state->frontend;
++/* For M88DS3103 demod dvbs mode.*/
++static u8 ds3103_dvbs_init_tab[] = {
++      0x23, 0x07,
++      0x08, 0x03,
++      0x0c, 0x02,
++      0x21, 0x54,
++      0x25, 0x82,
++      0x27, 0x31,
++      0x30, 0x08,
++      0x31, 0x40,
++      0x32, 0x32,
++      0x33, 0x35,
++      0x35, 0xff,
++      0x3a, 0x00,
++      0x37, 0x10,
++      0x38, 0x10,
++      0x39, 0x02,
++      0x42, 0x60,
++      0x4a, 0x80,
++      0x4b, 0x04,
++      0x4d, 0x91,
++      0x5d, 0xc8,
++      0x50, 0x36,
++      0x51, 0x36,
++      0x52, 0x36,
++      0x53, 0x36,
++      0x63, 0x0f,
++      0x64, 0x30,
++      0x65, 0x40,
++      0x68, 0x26,
++      0x69, 0x4c,
++      0x70, 0x20,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x40,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x60,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x80,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0xa0,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x1f,
++      0x76, 0x38,
++      0x77, 0xa6,
++      0x78, 0x0c,
++      0x79, 0x80,
++      0x7f, 0x14,
++      0x7c, 0x00,
++      0xae, 0x82,
++      0x80, 0x64,
++      0x81, 0x66,
++      0x82, 0x44,
++      0x85, 0x04,
++      0xcd, 0xf4,
++      0x90, 0x33,
++      0xa0, 0x44,
++      0xc0, 0x08,
++      0xc3, 0x10,
++      0xc4, 0x08,
++      0xc5, 0xf0,
++      0xc6, 0xff,
++      0xc7, 0x00,
++      0xc8, 0x1a,
++      0xc9, 0x80,
++      0xe0, 0xf8,
++      0xe6, 0x8b,
++      0xd0, 0x40,
++      0xf8, 0x20,
++      0xfa, 0x0f,
++      0x00, 0x00,
++      0xbd, 0x01,
++      0xb8, 0x00,
++};
++/* For M88DS3103 demod dvbs2 mode.*/
++static u8 ds3103_dvbs2_init_tab[] = {
++      0x23, 0x07,
++      0x08, 0x07,
++      0x0c, 0x02,
++      0x21, 0x54,
++      0x25, 0x82,
++      0x27, 0x31,
++      0x30, 0x08,
++      0x32, 0x32,
++      0x33, 0x35,
++      0x35, 0xff,
++      0x3a, 0x00,
++      0x37, 0x10,
++      0x38, 0x10,
++      0x39, 0x02,
++      0x42, 0x60,
++      0x4a, 0x80,
++      0x4b, 0x04,
++      0x4d, 0x91,
++      0x5d, 0xc8,
++      0x50, 0x36,
++      0x51, 0x36,
++      0x52, 0x36,
++      0x53, 0x36,
++      0x63, 0x0f,
++      0x64, 0x10,
++      0x65, 0x20,
++      0x68, 0x46,
++      0x69, 0xcd,
++      0x70, 0x20,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x40,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x60,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x80,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0xa0,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x1f,
++      0x76, 0x38,
++      0x77, 0xa6,
++      0x78, 0x0c,
++      0x79, 0x80,
++      0x7f, 0x14,
++      0x85, 0x08,
++      0xcd, 0xf4,
++      0x90, 0x33,
++      0x86, 0x00,
++      0x87, 0x0f,
++      0x89, 0x00,
++      0x8b, 0x44,
++      0x8c, 0x66,
++      0x9d, 0xc1,
++      0x8a, 0x10,
++      0xad, 0x40,
++      0xa0, 0x44,
++      0xc0, 0x08,
++      0xc1, 0x10,
++      0xc2, 0x08,
++      0xc3, 0x10,
++      0xc4, 0x08,
++      0xc5, 0xf0,
++      0xc6, 0xff,
++      0xc7, 0x00,
++      0xc8, 0x1a,
++      0xc9, 0x80,
++      0xca, 0x23,
++      0xcb, 0x24,
++      0xcc, 0xf4,
++      0xce, 0x74,
++      0x00, 0x00,
++      0xbd, 0x01,
++      0xb8, 0x00,
++};
 +
-+error3:
-+      kfree(state);
-+error2:
-+      return NULL;
++/* For M88DS3000 demod dvbs mode.*/
++static u8 ds3000_dvbs_init_tab[] = {
++      0x23, 0x05,
++      0x08, 0x03,
++      0x0c, 0x02,
++      0x21, 0x54,
++      0x25, 0x82,
++      0x27, 0x31,
++      0x30, 0x08,
++      0x31, 0x40,
++      0x32, 0x32,
++      0x33, 0x35,
++      0x35, 0xff,
++      0x3a, 0x00,
++      0x37, 0x10,
++      0x38, 0x10,
++      0x39, 0x02,
++      0x42, 0x60,
++      0x4a, 0x40,
++      0x4b, 0x04,
++      0x4d, 0x91,
++      0x5d, 0xc8,
++      0x50, 0x77,
++      0x51, 0x77,
++      0x52, 0x36,
++      0x53, 0x36,
++      0x56, 0x01,
++      0x63, 0x47,
++      0x64, 0x30,
++      0x65, 0x40,
++      0x68, 0x26,
++      0x69, 0x4c,
++      0x70, 0x20,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x40,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x60,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x80,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0xa0,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x1f,
++      0x76, 0x00,
++      0x77, 0xd1,
++      0x78, 0x0c,
++      0x79, 0x80,
++      0x7f, 0x04,
++      0x7c, 0x00,
++      0x80, 0x86,
++      0x81, 0xa6,
++      0x85, 0x04,
++      0xcd, 0xf4,
++      0x90, 0x33,
++      0xa0, 0x44,
++      0xc0, 0x18,
++      0xc3, 0x10,
++      0xc4, 0x08,
++      0xc5, 0x80,
++      0xc6, 0x80,
++      0xc7, 0x0a,
++      0xc8, 0x1a,
++      0xc9, 0x80,
++      0xfe, 0xb6,
++      0xe0, 0xf8,
++      0xe6, 0x8b,
++      0xd0, 0x40,
++      0xf8, 0x20,
++      0xfa, 0x0f,
++      0xad, 0x20,
++      0xae, 0x07,
++      0xb8, 0x00,
++};
++
++/* For M88DS3000 demod dvbs2 mode.*/
++static u8 ds3000_dvbs2_init_tab[] = {
++      0x23, 0x0f,
++      0x08, 0x07,
++      0x0c, 0x02,
++      0x21, 0x54,
++      0x25, 0x82,
++      0x27, 0x31,
++      0x30, 0x08,
++      0x31, 0x32,
++      0x32, 0x32,
++      0x33, 0x35,
++      0x35, 0xff,
++      0x3a, 0x00,
++      0x37, 0x10,
++      0x38, 0x10,
++      0x39, 0x02,
++      0x42, 0x60,
++      0x4a, 0x80,
++      0x4b, 0x04,
++      0x4d, 0x91,
++      0x5d, 0x88,
++      0x50, 0x36,
++      0x51, 0x36,
++      0x52, 0x36,
++      0x53, 0x36,
++      0x63, 0x60,
++      0x64, 0x10,
++      0x65, 0x10,
++      0x68, 0x04,
++      0x69, 0x29,
++      0x70, 0x20,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x40,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x60,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x80,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0xa0,
++      0x71, 0x70,
++      0x72, 0x04,
++      0x73, 0x00,
++      0x70, 0x1f,
++      0xa0, 0x44,
++      0xc0, 0x08,
++      0xc1, 0x10,
++      0xc2, 0x08,
++      0xc3, 0x10,
++      0xc4, 0x08,
++      0xc5, 0xf0,
++      0xc6, 0xf0,
++      0xc7, 0x0a,
++      0xc8, 0x1a,
++      0xc9, 0x80,
++      0xca, 0x23,
++      0xcb, 0x24,
++      0xce, 0x74,
++      0x56, 0x01,
++      0x90, 0x03,
++      0x76, 0x80,
++      0x77, 0x42,
++      0x78, 0x0a,
++      0x79, 0x80,
++      0xad, 0x40,
++      0xae, 0x07,
++      0x7f, 0xd4,
++      0x7c, 0x00,
++      0x80, 0xa8,
++      0x81, 0xda,
++      0x7c, 0x01,
++      0x80, 0xda,
++      0x81, 0xec,
++      0x7c, 0x02,
++      0x80, 0xca,
++      0x81, 0xeb,
++      0x7c, 0x03,
++      0x80, 0xba,
++      0x81, 0xdb,
++      0x85, 0x08,
++      0x86, 0x00,
++      0x87, 0x02,
++      0x89, 0x80,
++      0x8b, 0x44,
++      0x8c, 0xaa,
++      0x8a, 0x10,
++      0xba, 0x00,
++      0xf5, 0x04,
++      0xd2, 0x32,
++      0xb8, 0x00,
++};
++
++#endif /* DVBSKY_M88DS3103_PRIV_H */
+diff --git a/drivers/media/dvb-frontends/m88dc2800.c b/drivers/media/dvb-frontends/m88dc2800.c
+new file mode 100644
+index 0000000..f876a11
+--- /dev/null
++++ b/drivers/media/dvb-frontends/m88dc2800.c
+@@ -0,0 +1,2124 @@
++/*
++    M88DC2800/M88TC2800  - DVB-C demodulator and tuner from Montage
++
++    Copyright (C) 2012 Max nibble<nibble.max@gmail.com>
++    Copyright (C) 2011 Montage Technology / www.montage-tech.com
++
++    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.
++*/
++
++#include <linux/delay.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/string.h>
++#include <linux/slab.h>
++#include <asm/div64.h>
++#include "dvb_frontend.h"
++#include "m88dc2800.h"
++
++struct m88dc2800_state {
++      struct i2c_adapter *i2c;
++      const struct m88dc2800_config *config;
++      struct dvb_frontend frontend;
++      u32 freq;
++      u32 ber;
++      u32 sym;
++      u16 qam;
++      u8 inverted;
++      u32 xtal;
++      /* tuner state */
++      u8 tuner_init_OK;       /* Tuner initialize status */
++      u8 tuner_dev_addr;      /* Tuner device address */
++      u32 tuner_freq;         /* RF frequency to be set, unit: KHz */
++      u16 tuner_qam;          /* Reserved */
++      u16 tuner_mode;
++      u8 tuner_bandwidth;     /* Bandwidth of the channel, unit: MHz, 6/7/8 */
++      u8 tuner_loopthrough;   /* Tuner loop through switch, 0/1 */
++      u32 tuner_crystal;      /* Tuner crystal frequency, unit: KHz */
++      u32 tuner_dac;          /* Tuner DAC frequency, unit: KHz */
++      u16 tuner_mtt;          /* Tuner chip version, D1: 0x0d, E0: 0x0e, E1: 0x8e */
++      u16 tuner_custom_cfg;
++      u32 tuner_version;      /* Tuner driver version number */
++      u32 tuner_time;
++};
++
++static int debug;
++module_param(debug, int, 0644);
++MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
++
++#define dprintk(args...) \
++      do { \
++              if (debug) \
++                      printk(KERN_INFO "m88dc2800: " args); \
++      } while (0)
++
++
++static int m88dc2800_i2c_write(struct m88dc2800_state *state, u8 addr,
++                             u8 * p_data, u8 len)
++{
++      struct i2c_msg msg = { .flags = 0 };
++
++      msg.addr = addr;
++      msg.buf = p_data;
++      msg.len = len;
++
++      return i2c_transfer(state->i2c, &msg, 1);
++}
++
++static int m88dc2800_i2c_read(struct m88dc2800_state *state, u8 addr,
++                            u8 * p_data, u8 len)
++{
++      struct i2c_msg msg = { .flags = I2C_M_RD };
++
++      msg.addr = addr;
++      msg.buf = p_data;
++      msg.len = len;
++
++      return i2c_transfer(state->i2c, &msg, 1);
++}
++
++/*demod register operations.*/
++static int WriteReg(struct m88dc2800_state *state, u8 reg, u8 data)
++{
++      u8 buf[] = { reg, data };
++      u8 addr = state->config->demod_address;
++      int err;
++
++      dprintk("%s: write reg 0x%02x, value 0x%02x\n", __func__, reg, data);
++
++      err = m88dc2800_i2c_write(state, addr, buf, 2);
++
++      if (err != 1) {
++              printk(KERN_ERR
++                     "%s: writereg error(err == %i, reg == 0x%02x,"
++                     " value == 0x%02x)\n", __func__, err, reg, data);
++              return -EIO;
++      }
++      return 0;
++}
++
++static int ReadReg(struct m88dc2800_state *state, u8 reg)
++{
++      int ret;
++      u8 b0[] = { reg };
++      u8 b1[] = { 0 };
++      u8 addr = state->config->demod_address;
++
++      ret = m88dc2800_i2c_write(state, addr, b0, 1);
++
++      if (ret != 1) {
++              printk(KERN_ERR "%s: reg=0x%x (error=%d)\n",
++                     __func__, reg, ret);
++              return -EIO;
++      }
++
++      ret = m88dc2800_i2c_read(state, addr, b1, 1);
++
++      dprintk("%s: read reg 0x%02x, value 0x%02x\n", __func__, reg, b1[0]);
++      return b1[0];
++}
++
++static int _mt_fe_tn_set_reg(struct m88dc2800_state *state, u8 reg,
++                           u8 data)
++{
++      int ret;
++      u8 buf[2];
++      u8 addr = state->tuner_dev_addr;
++
++      buf[1] = ReadReg(state, 0x86);
++      buf[1] |= 0x80;
++      ret = WriteReg(state, 0x86, buf[1]);
++
++      buf[0] = reg;
++      buf[1] = data;
++
++      ret = m88dc2800_i2c_write(state, addr, buf, 2);
++      if (ret != 1)
++              return -EIO;
++      return 0;
 +}
-+EXPORT_SYMBOL(m88ds3103_attach);
 +
-+static int m88ds3103_set_carrier_offset(struct dvb_frontend *fe,
-+                                      s32 carrier_offset_khz)
++static int _mt_fe_tn_get_reg(struct m88dc2800_state *state, u8 reg,
++                           u8 * p_data)
 +{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      s32 tmp;
++      int ret;
++      u8 buf[2];
++      u8 addr = state->tuner_dev_addr;
 +
-+      tmp = carrier_offset_khz;
-+      tmp *= 65536;
-+      
-+      tmp = (2*tmp + MT_FE_MCLK_KHZ) / (2*MT_FE_MCLK_KHZ);
++      buf[1] = ReadReg(state, 0x86);
++      buf[1] |= 0x80;
++      ret = WriteReg(state, 0x86, buf[1]);
 +
-+      if (tmp < 0)
-+              tmp += 65536;
++      buf[0] = reg;
++      ret = m88dc2800_i2c_write(state, addr, buf, 1);
 +
-+      m88ds3103_writereg(state, 0x5f, tmp >> 8);
-+      m88ds3103_writereg(state, 0x5e, tmp & 0xff);
++      msleep(1);
++
++      buf[1] = ReadReg(state, 0x86);
++      buf[1] |= 0x80;
++      ret = WriteReg(state, 0x86, buf[1]);
++
++      return m88dc2800_i2c_read(state, addr, p_data, 1);
++}
++
++/* Tuner operation functions.*/
++static int _mt_fe_tn_set_RF_front_tc2800(struct m88dc2800_state *state)
++{
++      u32 freq_KHz = state->tuner_freq;
++      u8 a, b, c;
++      if (state->tuner_mtt == 0xD1) { /* D1 */
++              if (freq_KHz <= 123000) {
++                      if (freq_KHz <= 56000) {
++                              a = 0x00; b = 0x00; c = 0x00;
++                      } else if (freq_KHz <= 64000) {
++                              a = 0x10; b = 0x01; c = 0x08;
++                      } else if (freq_KHz <= 72000) {
++                              a = 0x20; b = 0x02; c = 0x10;
++                      } else if (freq_KHz <= 80000) {
++                              a = 0x30; b = 0x03; c = 0x18;
++                      } else if (freq_KHz <= 88000) {
++                              a = 0x40; b = 0x04; c = 0x20;
++                      } else if (freq_KHz <= 96000) {
++                              a = 0x50; b = 0x05; c = 0x28;
++                      } else if (freq_KHz <= 104000) {
++                              a = 0x60; b = 0x06; c = 0x30;
++                      } else {
++                              a = 0x70; b = 0x07; c = 0x38;
++                      }
++                      _mt_fe_tn_set_reg(state, 0x58, 0x9b);
++                      _mt_fe_tn_set_reg(state, 0x59, a);
++                      _mt_fe_tn_set_reg(state, 0x5d, b);
++                      _mt_fe_tn_set_reg(state, 0x5e, c);
++                      _mt_fe_tn_set_reg(state, 0x5a, 0x75);
++                      _mt_fe_tn_set_reg(state, 0x73, 0x0c);
++              } else {        /* if (freq_KHz > 112000) */
++                      _mt_fe_tn_set_reg(state, 0x58, 0x7b);
++                      if (freq_KHz <= 304000) {
++                              if (freq_KHz <= 136000) {
++                                      _mt_fe_tn_set_reg(state, 0x5e, 0x40);
++                              } else if (freq_KHz <= 160000) {
++                                      _mt_fe_tn_set_reg(state, 0x5e, 0x48);
++                              } else if (freq_KHz <= 184000) {
++                                      _mt_fe_tn_set_reg(state, 0x5e, 0x50);
++                              } else if (freq_KHz <= 208000) {
++                                      _mt_fe_tn_set_reg(state, 0x5e, 0x58);
++                              } else if (freq_KHz <= 232000) {
++                                      _mt_fe_tn_set_reg(state, 0x5e, 0x60);
++                              } else if (freq_KHz <= 256000) {
++                                      _mt_fe_tn_set_reg(state, 0x5e, 0x68);
++                              } else if (freq_KHz <= 280000) {
++                                      _mt_fe_tn_set_reg(state, 0x5e, 0x70);
++                              } else {        /* if (freq_KHz <= 304000) */
++                                      _mt_fe_tn_set_reg(state, 0x5e, 0x78);
++                              }
++                              if (freq_KHz <= 171000) {
++                                      _mt_fe_tn_set_reg(state, 0x73, 0x08);
++                              } else if (freq_KHz <= 211000) {
++                                      _mt_fe_tn_set_reg(state, 0x73, 0x0a);
++                              } else {
++                                      _mt_fe_tn_set_reg(state, 0x73, 0x0e);
++                              }
++                      } else {        /* if (freq_KHz > 304000) */
++                              _mt_fe_tn_set_reg(state, 0x5e, 0x88);
++                              if (freq_KHz <= 400000) {
++                                      _mt_fe_tn_set_reg(state, 0x73, 0x0c);
++                              } else if (freq_KHz <= 450000) {
++                                      _mt_fe_tn_set_reg(state, 0x73, 0x09);
++                              } else if (freq_KHz <= 550000) {
++                                      _mt_fe_tn_set_reg(state, 0x73, 0x0e);
++                              } else if (freq_KHz <= 650000) {
++                                      _mt_fe_tn_set_reg(state, 0x73, 0x0d);
++                              } else {        /*if (freq_KHz > 650000) */
++                                      _mt_fe_tn_set_reg(state, 0x73, 0x0e);
++                              }
++                      }
++              }
++              if (freq_KHz > 800000)
++                      _mt_fe_tn_set_reg(state, 0x87, 0x24);
++              else if (freq_KHz > 700000)
++                      _mt_fe_tn_set_reg(state, 0x87, 0x34);
++              else if (freq_KHz > 500000)
++                      _mt_fe_tn_set_reg(state, 0x87, 0x44);
++              else if (freq_KHz > 300000)
++                      _mt_fe_tn_set_reg(state, 0x87, 0x43);
++              else if (freq_KHz > 220000)
++                      _mt_fe_tn_set_reg(state, 0x87, 0x54);
++              else if (freq_KHz > 110000)
++                      _mt_fe_tn_set_reg(state, 0x87, 0x14);
++              else
++                      _mt_fe_tn_set_reg(state, 0x87, 0x54);
++              if (freq_KHz > 600000)
++                      _mt_fe_tn_set_reg(state, 0x6a, 0x53);
++              else if (freq_KHz > 500000)
++                      _mt_fe_tn_set_reg(state, 0x6a, 0x57);
++              else
++                      _mt_fe_tn_set_reg(state, 0x6a, 0x59);
++              if (freq_KHz < 200000) {
++                      _mt_fe_tn_set_reg(state, 0x20, 0x5d);
++              } else if (freq_KHz < 500000) {
++                      _mt_fe_tn_set_reg(state, 0x20, 0x7d);
++              } else {
++                      _mt_fe_tn_set_reg(state, 0x20, 0xfd);
++              }               /* end of 0xD1 */
++      } else if (state->tuner_mtt == 0xE1) {  /* E1 */
++              if (freq_KHz <= 112000) {       /* 123MHz */
++                      if (freq_KHz <= 56000) {
++                              _mt_fe_tn_set_reg(state, 0x5c, 0x01);
++                      } else if (freq_KHz <= 64000) {
++                              _mt_fe_tn_set_reg(state, 0x5c, 0x09);
++                      } else if (freq_KHz <= 72000) {
++                              _mt_fe_tn_set_reg(state, 0x5c, 0x11);
++                      } else if (freq_KHz <= 80000) {
++                              _mt_fe_tn_set_reg(state, 0x5c, 0x19);
++                      } else if (freq_KHz <= 88000) {
++                              _mt_fe_tn_set_reg(state, 0x5c, 0x21);
++                      } else if (freq_KHz <= 96000) {
++                              _mt_fe_tn_set_reg(state, 0x5c, 0x29);
++                      } else if (freq_KHz <= 104000) {
++                              _mt_fe_tn_set_reg(state, 0x5c, 0x31);
++                      } else {        /* if (freq_KHz <= 112000) */
++                              _mt_fe_tn_set_reg(state, 0x5c, 0x39);
++                      }
++                      _mt_fe_tn_set_reg(state, 0x5b, 0x30);
++              } else {        /* if (freq_KHz > 112000) */
++                      if (freq_KHz <= 304000) {
++                              if (freq_KHz <= 136000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x41);
++                              } else if (freq_KHz <= 160000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x49);
++                              } else if (freq_KHz <= 184000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x51);
++                              } else if (freq_KHz <= 208000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x59);
++                              } else if (freq_KHz <= 232000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x61);
++                              } else if (freq_KHz <= 256000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x69);
++                              } else if (freq_KHz <= 280000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x71);
++                              } else {        /* if (freq_KHz <= 304000) */
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x79);
++                              }
++                              if (freq_KHz <= 150000) {
++                                      _mt_fe_tn_set_reg(state, 0x5b, 0x28);
++                              } else if (freq_KHz <= 256000) {
++                                      _mt_fe_tn_set_reg(state, 0x5b, 0x29);
++                              } else {
++                                      _mt_fe_tn_set_reg(state, 0x5b, 0x2a);
++                              }
++                      } else {        /* if (freq_KHz > 304000) */
++                              if (freq_KHz <= 400000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x89);
++                              } else if (freq_KHz <= 450000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x91);
++                              } else if (freq_KHz <= 650000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0x98);
++                              } else if (freq_KHz <= 850000) {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0xa0);
++                              } else {
++                                      _mt_fe_tn_set_reg(state, 0x5c, 0xa8);
++                              }
++                              _mt_fe_tn_set_reg(state, 0x5b, 0x08);
++                      }
++              }
++      }                       /* end of 0xE1 */
++      return 0;
++}
++
++static int _mt_fe_tn_cali_PLL_tc2800(struct m88dc2800_state *state,
++                                   u32 freq_KHz,
++                                   u32 cali_freq_thres_div2,
++                                   u32 cali_freq_thres_div3r,
++                                   u32 cali_freq_thres_div3)
++{
++      s32 N, F, MUL;
++      u8 buf, tmp, tmp2;
++      s32 M;
++      const s32 crystal_KHz = state->tuner_crystal;
++       if (state->tuner_mtt == 0xD1) {
++              M = state->tuner_crystal / 4000;
++              if (freq_KHz > cali_freq_thres_div2) {
++                      MUL = 4;
++                      tmp = 2;
++              } else if (freq_KHz > 300000) {
++                      MUL = 8;
++                      tmp = 3;
++              } else if (freq_KHz > (cali_freq_thres_div2 / 2)) {
++                      MUL = 8;
++                      tmp = 4;
++              } else if (freq_KHz > (cali_freq_thres_div2 / 4)) {
++                      MUL = 16;
++                      tmp = 5;
++              } else if (freq_KHz > (cali_freq_thres_div2 / 8)) {
++                      MUL = 32;
++                      tmp = 6;
++              } else if (freq_KHz > (cali_freq_thres_div2 / 16)) {
++                      MUL = 64;
++                      tmp = 7;
++              } else {        /* invalid */
++                      MUL = 0;
++                      tmp = 0;
++                      return 1;
++              }
++      } else if (state->tuner_mtt == 0xE1) {
++              M = state->tuner_crystal / 1000;
++              _mt_fe_tn_set_reg(state, 0x30, 0xff);
++              _mt_fe_tn_set_reg(state, 0x32, 0xe0);
++              _mt_fe_tn_set_reg(state, 0x33, 0x86);
++              _mt_fe_tn_set_reg(state, 0x37, 0x70);
++              _mt_fe_tn_set_reg(state, 0x38, 0x20);
++              _mt_fe_tn_set_reg(state, 0x39, 0x18);
++              _mt_fe_tn_set_reg(state, 0x89, 0x83);
++              if (freq_KHz > cali_freq_thres_div2) {
++                      M = M / 4;
++                      MUL = 4;
++                      tmp = 2;
++                      tmp2 = M + 16;  /* 48 */
++              } else if (freq_KHz > cali_freq_thres_div3r) {
++                      M = M / 3;
++                      MUL = 6;
++                      tmp = 2;
++                      tmp2 = M + 32;  /* 32 */
++              } else if (freq_KHz > cali_freq_thres_div3) {
++                      M = M / 3;
++                      MUL = 6;
++                      tmp = 2;
++                      tmp2 = M;       /* 16 */
++              } else if (freq_KHz > 304000) {
++                      M = M / 4;
++                      MUL = 8;
++                      tmp = 3;
++                      tmp2 = M + 16;  /* 48 */
++              } else if (freq_KHz > (cali_freq_thres_div2 / 2)) {
++                      M = M / 4;
++                      MUL = 8;
++                      tmp = 4;
++                      tmp2 = M + 16;  /* 48 */
++              } else if (freq_KHz > (cali_freq_thres_div3r / 2)) {
++                      M = M / 3;
++                      MUL = 12;
++                      tmp = 4;
++                      tmp2 = M + 32;  /* 32 */
++              } else if (freq_KHz > (cali_freq_thres_div3 / 2)) {
++                      M = M / 3;
++                      MUL = 12;
++                      tmp = 4;
++                      tmp2 = M;       /* 16 */
++              } else if (freq_KHz > (cali_freq_thres_div2 / 4)) {
++                      M = M / 4;
++                      MUL = 16;
++                      tmp = 5;
++                      tmp2 = M + 16;  /* 48 */
++              } else if (freq_KHz > (cali_freq_thres_div3r / 4)) {
++                      M = M / 3;
++                      MUL = 24;
++                      tmp = 5;
++                      tmp2 = M + 32;  /* 32 */
++              } else if (freq_KHz > (cali_freq_thres_div3 / 4)) {
++                      M = M / 3;
++                      MUL = 24;
++                      tmp = 5;
++                      tmp2 = M;       /* 16 */
++              } else if (freq_KHz > (cali_freq_thres_div2 / 8)) {
++                      M = M / 4;
++                      MUL = 32;
++                      tmp = 6;
++                      tmp2 = M + 16;  /* 48 */
++              } else if (freq_KHz > (cali_freq_thres_div3r / 8)) {
++                      M = M / 3;
++                      MUL = 48;
++                      tmp = 6;
++                      tmp2 = M + 32;  /* 32 */
++              } else if (freq_KHz > (cali_freq_thres_div3 / 8)) {
++                      M = M / 3;
++                      MUL = 48;
++                      tmp = 6;
++                      tmp2 = M;       /* 16 */
++              } else if (freq_KHz > (cali_freq_thres_div2 / 16)) {
++                      M = M / 4;
++                      MUL = 64;
++                      tmp = 7;
++                      tmp2 = M + 16;  /* 48 */
++              } else if (freq_KHz > (cali_freq_thres_div3r / 16)) {
++                      M = M / 3;
++                      MUL = 96;
++                      tmp = 7;
++                      tmp2 = M + 32;  /* 32 */
++              } else if (freq_KHz > (cali_freq_thres_div3 / 16)) {
++                      M = M / 3;
++                      MUL = 96;
++                      tmp = 7;
++                      tmp2 = M;       /* 16 */
++              } else {        /* invalid */
++                      M = M / 4;
++                      MUL = 0;
++                      tmp = 0;
++                      tmp2 = 48;
++                      return 1;
++              }
++              if (freq_KHz == 291000) {
++                      M = state->tuner_crystal / 1000 / 3;
++                      MUL = 12;
++                      tmp = 4;
++                      tmp2 = M + 32;  /* 32 */
++              }
++              /*
++                 if (freq_KHz == 578000) {
++                 M = state->tuner_crystal / 1000 / 4;
++                 MUL = 4;
++                 tmp = 2;
++                 tmp2 = M + 16;       // 48
++                 }
++               */
++              if (freq_KHz == 690000) {
++                      M = state->tuner_crystal / 1000 / 3;
++                      MUL = 4;
++                      tmp = 2;
++                      tmp2 = M + 16;  /* 48 */
++              }
++              _mt_fe_tn_get_reg(state, 0x33, &buf);
++              buf &= 0xc0;
++              buf += tmp2;
++              _mt_fe_tn_set_reg(state, 0x33, buf);
++      } else {
++              return 1;
++      }
++      _mt_fe_tn_get_reg(state, 0x39, &buf);
++      buf &= 0xf8;
++      buf += tmp;
++      _mt_fe_tn_set_reg(state, 0x39, buf);
++      N = (freq_KHz * MUL * M / crystal_KHz) / 2 * 2 - 256;
++      buf = (N >> 8) & 0xcf;
++      if (state->tuner_mtt == 0xE1) {
++              buf |= 0x30;
++      }
++      _mt_fe_tn_set_reg(state, 0x34, buf);
++      buf = N & 0xff;
++      _mt_fe_tn_set_reg(state, 0x35, buf);
++      F = ((freq_KHz * MUL * M / (crystal_KHz / 1000) / 2) -
++           (freq_KHz * MUL * M / crystal_KHz / 2 * 1000)) * 64 / 1000;
++      buf = F & 0xff;
++      _mt_fe_tn_set_reg(state, 0x36, buf);
++      if (F == 0) {
++              if (state->tuner_mtt == 0xD1) {
++                      _mt_fe_tn_set_reg(state, 0x3d, 0xca);
++              } else if (state->tuner_mtt == 0xE1) {
++                      _mt_fe_tn_set_reg(state, 0x3d, 0xfe);
++              } else {
++                      return 1;
++              }
++              _mt_fe_tn_set_reg(state, 0x3e, 0x9c);
++              _mt_fe_tn_set_reg(state, 0x3f, 0x34);
++      }
++      if (F > 0) {
++              if (state->tuner_mtt == 0xD1) {
++                      if ((F == 32) || (F == 16) || (F == 48)) {
++                              _mt_fe_tn_set_reg(state, 0x3e, 0xa4);
++                              _mt_fe_tn_set_reg(state, 0x3d, 0x4a);
++                              _mt_fe_tn_set_reg(state, 0x3f, 0x36);
++                      } else {
++                              _mt_fe_tn_set_reg(state, 0x3e, 0xa4);
++                              _mt_fe_tn_set_reg(state, 0x3d, 0x4a);
++                              _mt_fe_tn_set_reg(state, 0x3f, 0x36);
++                      }
++              } else if (state->tuner_mtt == 0xE1) {
++                      _mt_fe_tn_set_reg(state, 0x3e, 0xa4);
++                      _mt_fe_tn_set_reg(state, 0x3d, 0x7e);
++                      _mt_fe_tn_set_reg(state, 0x3f, 0x36);
++                      _mt_fe_tn_set_reg(state, 0x89, 0x84);
++                      _mt_fe_tn_get_reg(state, 0x39, &buf);
++                      buf = buf & 0x1f;
++                      _mt_fe_tn_set_reg(state, 0x39, buf);
++                      _mt_fe_tn_get_reg(state, 0x32, &buf);
++                      buf = buf | 0x02;
++                      _mt_fe_tn_set_reg(state, 0x32, buf);
++              } else {
++                      return 1;
++              }
++      }
++      _mt_fe_tn_set_reg(state, 0x41, 0x00);
++      if (state->tuner_mtt == 0xD1) {
++              msleep(5);
++      } else if (state->tuner_mtt == 0xE1) {
++              msleep(2);
++      } else {
++              return 1;
++      }
++      _mt_fe_tn_set_reg(state, 0x41, 0x02);
++      _mt_fe_tn_set_reg(state, 0x30, 0x7f);
++      _mt_fe_tn_set_reg(state, 0x30, 0xff);
++      _mt_fe_tn_set_reg(state, 0x31, 0x80);
++      _mt_fe_tn_set_reg(state, 0x31, 0x00);
 +
 +      return 0;
 +}
 +
-+static int m88ds3103_set_symrate(struct dvb_frontend *fe)
++static int _mt_fe_tn_set_PLL_freq_tc2800(struct m88dc2800_state *state)
 +{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
-+      u16 value;
-+      
-+      value = (((c->symbol_rate / 1000) << 15) + (MT_FE_MCLK_KHZ / 4)) / (MT_FE_MCLK_KHZ / 2);
-+      m88ds3103_writereg(state, 0x61, value & 0x00ff);
-+      m88ds3103_writereg(state, 0x62, (value & 0xff00) >> 8);
-+
++      u8 buf, buf1;
++      u32 freq_thres_div2_KHz, freq_thres_div3r_KHz,
++          freq_thres_div3_KHz;
++      const u32 freq_KHz = state->tuner_freq;
++      if (state->tuner_mtt == 0xD1) {
++              _mt_fe_tn_set_reg(state, 0x32, 0xe1);
++              _mt_fe_tn_set_reg(state, 0x33, 0xa6);
++              _mt_fe_tn_set_reg(state, 0x37, 0x7f);
++              _mt_fe_tn_set_reg(state, 0x38, 0x20);
++              _mt_fe_tn_set_reg(state, 0x39, 0x18);
++              _mt_fe_tn_set_reg(state, 0x40, 0x40);
++               freq_thres_div2_KHz = 520000;
++              _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz,
++                                         freq_thres_div2_KHz, 0, 0);
++               msleep(5);
++              _mt_fe_tn_get_reg(state, 0x3a, &buf);
++              buf1 = buf;
++              buf = buf & 0x03;
++              buf1 = buf1 & 0x01;
++              if ((buf1 == 0) || (buf == 3)) {
++                      freq_thres_div2_KHz = 420000;
++                      _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz,
++                                                 freq_thres_div2_KHz, 0,
++                                                 0);
++                      msleep(5);
++                       _mt_fe_tn_get_reg(state, 0x3a, &buf);
++                      buf = buf & 0x07;
++                      if (buf == 5) {
++                              freq_thres_div2_KHz = 520000;
++                              _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz,
++                                                         freq_thres_div2_KHz,
++                                                         0, 0);
++                              msleep(5);
++                      }
++              }
++               _mt_fe_tn_get_reg(state, 0x38, &buf);
++              _mt_fe_tn_set_reg(state, 0x38, buf);
++               _mt_fe_tn_get_reg(state, 0x32, &buf);
++              buf = buf | 0x10;
++              _mt_fe_tn_set_reg(state, 0x32, buf);
++               _mt_fe_tn_set_reg(state, 0x30, 0x7f);
++              _mt_fe_tn_set_reg(state, 0x30, 0xff);
++               _mt_fe_tn_get_reg(state, 0x32, &buf);
++              buf = buf & 0xdf;
++              _mt_fe_tn_set_reg(state, 0x32, buf);
++              _mt_fe_tn_set_reg(state, 0x40, 0x0);
++               _mt_fe_tn_set_reg(state, 0x30, 0x7f);
++              _mt_fe_tn_set_reg(state, 0x30, 0xff);
++              _mt_fe_tn_set_reg(state, 0x31, 0x80);
++              _mt_fe_tn_set_reg(state, 0x31, 0x00);
++              msleep(5);
++               _mt_fe_tn_get_reg(state, 0x39, &buf);
++              buf = buf >> 5;
++              if (buf < 5) {
++                      _mt_fe_tn_get_reg(state, 0x39, &buf);
++                      buf = buf | 0xa0;
++                      buf = buf & 0xbf;
++                      _mt_fe_tn_set_reg(state, 0x39, buf);
++                       _mt_fe_tn_get_reg(state, 0x32, &buf);
++                      buf = buf | 0x02;
++                      _mt_fe_tn_set_reg(state, 0x32, buf);
++              }
++               _mt_fe_tn_get_reg(state, 0x37, &buf);
++              if (buf > 0x70) {
++                      buf = 0x7f;
++                      _mt_fe_tn_set_reg(state, 0x40, 0x40);
++              }
++              _mt_fe_tn_set_reg(state, 0x37, buf);
++                _mt_fe_tn_get_reg(state, 0x38, &buf);
++              if (buf < 0x0f) {
++                      buf = (buf & 0x0f) << 2;
++                      buf = buf + 0x0f;
++                      _mt_fe_tn_set_reg(state, 0x37, buf);
++              } else if (buf < 0x1f) {
++                      buf = buf + 0x0f;
++                      _mt_fe_tn_set_reg(state, 0x37, buf);
++              }
++               _mt_fe_tn_get_reg(state, 0x32, &buf);
++              buf = (buf | 0x20) & 0xef;
++              _mt_fe_tn_set_reg(state, 0x32, buf);
++               _mt_fe_tn_set_reg(state, 0x41, 0x00);
++              msleep(5);
++              _mt_fe_tn_set_reg(state, 0x41, 0x02);
++      } else if (state->tuner_mtt == 0xE1) {
++              freq_thres_div2_KHz = 580000;
++              freq_thres_div3r_KHz = 500000;
++              freq_thres_div3_KHz = 440000;
++              _mt_fe_tn_cali_PLL_tc2800(state, freq_KHz,
++                                         freq_thres_div2_KHz,
++                                         freq_thres_div3r_KHz,
++                                         freq_thres_div3_KHz);
++              msleep(3);
++              _mt_fe_tn_get_reg(state, 0x38, &buf);
++              _mt_fe_tn_set_reg(state, 0x38, buf);
++              _mt_fe_tn_set_reg(state, 0x30, 0x7f);
++              _mt_fe_tn_set_reg(state, 0x30, 0xff);
++              _mt_fe_tn_set_reg(state, 0x31, 0x80);
++              _mt_fe_tn_set_reg(state, 0x31, 0x00);
++              msleep(3);
++              _mt_fe_tn_get_reg(state, 0x38, &buf);
++              _mt_fe_tn_set_reg(state, 0x38, buf);
++              _mt_fe_tn_get_reg(state, 0x32, &buf);
++              buf = buf | 0x10;
++              _mt_fe_tn_set_reg(state, 0x32, buf);
++               _mt_fe_tn_set_reg(state, 0x30, 0x7f);
++              _mt_fe_tn_set_reg(state, 0x30, 0xff);
++              _mt_fe_tn_get_reg(state, 0x32, &buf);
++              buf = buf & 0xdf;
++              _mt_fe_tn_set_reg(state, 0x32, buf);
++              _mt_fe_tn_set_reg(state, 0x31, 0x80);
++              _mt_fe_tn_set_reg(state, 0x31, 0x00);
++              msleep(3);
++              _mt_fe_tn_get_reg(state, 0x37, &buf);
++              _mt_fe_tn_set_reg(state, 0x37, buf);
++              /*
++                 if ((freq_KHz == 802000) || (freq_KHz == 826000)) {
++                 _mt_fe_tn_set_reg(state, 0x37, 0x5e);
++                 }
++               */
++              _mt_fe_tn_get_reg(state, 0x32, &buf);
++              buf = (buf & 0xef) | 0x30;
++              _mt_fe_tn_set_reg(state, 0x32, buf);
++               _mt_fe_tn_set_reg(state, 0x41, 0x00);
++              msleep(2);
++              _mt_fe_tn_set_reg(state, 0x41, 0x02);
++      } else {
++              return 1;
++      }
 +      return 0;
 +}
 +
-+static int m88ds3103_set_CCI(struct dvb_frontend *fe)
++static int _mt_fe_tn_set_BB_tc2800(struct m88dc2800_state *state)
 +{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 tmp;
-+
-+      tmp = m88ds3103_readreg(state, 0x56);
-+      tmp &= ~0x01;
-+      m88ds3103_writereg(state, 0x56, tmp);
-+
-+      tmp = m88ds3103_readreg(state, 0x76);
-+      tmp &= ~0x80;
-+      m88ds3103_writereg(state, 0x76, tmp);
-+
 +      return 0;
 +}
 +
-+static int m88ds3103_init_reg(struct m88ds3103_state *state, const u8 *p_reg_tab, u32 size)
-+{
-+      u32 i;
-+      
-+      for(i = 0; i < size; i+=2)
-+              m88ds3103_writereg(state, p_reg_tab[i], p_reg_tab[i+1]);
-+              
-+      return 0;
-+}
++ static int _mt_fe_tn_set_appendix_tc2800(struct m88dc2800_state *state)
 +
-+static int m88ds3103_get_locked_sym_rate(struct m88ds3103_state *state, u32 *sym_rate_KSs)
 +{
-+      u16     tmp;
-+      u32     sym_rate_tmp;
-+      u8      val_0x6d, val_0x6e;
-+
-+      val_0x6d = m88ds3103_readreg(state, 0x6d);
-+      val_0x6e = m88ds3103_readreg(state, 0x6e);
-+
-+      tmp = (u16)((val_0x6e<<8) | val_0x6d);
-+
-+      sym_rate_tmp = (u32)(tmp * MT_FE_MCLK_KHZ);
-+      sym_rate_tmp = (u32)(sym_rate_tmp / (1<<16));
-+      *sym_rate_KSs = sym_rate_tmp;
-+
++      u8 buf;
++      const u32 freq_KHz = state->tuner_freq;
++      if (state->tuner_mtt == 0xD1) {
++              if ((freq_KHz == 123000) || (freq_KHz == 147000) ||
++                  (freq_KHz == 171000) || (freq_KHz == 195000)) {
++                      _mt_fe_tn_set_reg(state, 0x20, 0x1b);
++              }
++              if ((freq_KHz == 371000) || (freq_KHz == 419000) ||
++                  (freq_KHz == 610000) || (freq_KHz == 730000) ||
++                  (freq_KHz == 754000) || (freq_KHz == 826000)) {
++                      _mt_fe_tn_get_reg(state, 0x0d, &buf);
++                      _mt_fe_tn_set_reg(state, 0x0d, (u8) (buf + 1));
++              }
++              if ((freq_KHz == 522000) || (freq_KHz == 578000) ||
++                  (freq_KHz == 634000) || (freq_KHz == 690000) ||
++                  (freq_KHz == 834000)) {
++                      _mt_fe_tn_get_reg(state, 0x0d, &buf);
++                      _mt_fe_tn_set_reg(state, 0x0d, (u8) (buf - 1));
++              }
++      } else if (state->tuner_mtt == 0xE1) {
++              _mt_fe_tn_set_reg(state, 0x20, 0xfc);
++              if (freq_KHz == 123000 || freq_KHz == 147000 ||
++                  freq_KHz == 171000 || freq_KHz == 195000 ||
++                  freq_KHz == 219000 || freq_KHz == 267000 ||
++                  freq_KHz == 291000 || freq_KHz == 339000 ||
++                  freq_KHz == 387000 || freq_KHz == 435000 ||
++                  freq_KHz == 482000 || freq_KHz == 530000 ||
++                  freq_KHz == 722000 ||
++                  (state->tuner_custom_cfg == 1 && freq_KHz == 315000)) {
++                      _mt_fe_tn_set_reg(state, 0x20, 0x5c);
++              }
++      }
 +      return 0;
 +}
 +
-+static int m88ds3103_get_channel_info(struct m88ds3103_state *state, u8 *p_mode, u8 *p_coderate)
++ static int _mt_fe_tn_set_DAC_tc2800(struct m88dc2800_state *state)
 +{
-+      u8      tmp, val_0x7E;
++      u8 buf, tempnumber;
++      s32 N;
++      s32 f1f2number, f1, f2, delta1, Totalnum1;
++      s32 cntT, cntin, NCOI, z0, z1, z2, tmp;
++      u32 fc, fadc, fsd, f2d;
++      u32 FreqTrue108_Hz;
++      s32 M = state->tuner_crystal / 4000;
++      /* const u8 bandwidth = state->tuner_bandwidth; */
++      const u16 DAC_fre = 108;
++      const u32 crystal_KHz = state->tuner_crystal;
++      const u32 DACFreq_KHz = state->tuner_dac;
++      const u32 freq_KHz = state->tuner_freq;
 +
-+      if(state->delivery_system == SYS_DVBS2){
-+              val_0x7E = m88ds3103_readreg(state, 0x7e);
-+              tmp = (u8)((val_0x7E&0xC0) >> 6);
-+              *p_mode = tmp;
-+              tmp = (u8)(val_0x7E & 0x0f);
-+              *p_coderate = tmp;
-+      } else {
-+              *p_mode = 0;
-+              tmp = m88ds3103_readreg(state, 0xe6);           
-+              tmp = (u8)(tmp >> 5);
-+              *p_coderate = tmp;
++      if (state->tuner_mtt == 0xE1) {
++              _mt_fe_tn_get_reg(state, 0x33, &buf);
++              M = buf & 0x0f;
++              if (M == 0)
++                      M = 6;
 +      }
-+      
++      _mt_fe_tn_get_reg(state, 0x34, &buf);
++      N = buf & 0x07;
++      _mt_fe_tn_get_reg(state, 0x35, &buf);
++      N = (N << 8) + buf;
++      buf = ((N + 256) * crystal_KHz / M / DAC_fre + 500) / 1000;
++      if (state->tuner_mtt == 0xE1) {
++              _mt_fe_tn_set_appendix_tc2800(state);
++              if (freq_KHz == 187000 || freq_KHz == 195000 ||
++                  freq_KHz == 131000 || freq_KHz == 211000 ||
++                  freq_KHz == 219000 || freq_KHz == 227000 ||
++                  freq_KHz == 267000 || freq_KHz == 299000 ||
++                  freq_KHz == 347000 || freq_KHz == 363000 ||
++                  freq_KHz == 395000 || freq_KHz == 403000 ||
++                  freq_KHz == 435000 || freq_KHz == 482000 ||
++                  freq_KHz == 474000 || freq_KHz == 490000 ||
++                  freq_KHz == 610000 || freq_KHz == 642000 ||
++                  freq_KHz == 666000 || freq_KHz == 722000 ||
++                  freq_KHz == 754000 ||
++                  ((freq_KHz == 379000 || freq_KHz == 467000 ||
++                    freq_KHz == 762000) && state->tuner_custom_cfg != 1)) {
++                      buf = buf + 1;
++              }
++              if (freq_KHz == 123000 || freq_KHz == 139000 ||
++                  freq_KHz == 147000 || freq_KHz == 171000 ||
++                  freq_KHz == 179000 || freq_KHz == 203000 ||
++                  freq_KHz == 235000 || freq_KHz == 251000 ||
++                  freq_KHz == 259000 || freq_KHz == 283000 ||
++                  freq_KHz == 331000 || freq_KHz == 363000 ||
++                  freq_KHz == 371000 || freq_KHz == 387000 ||
++                  freq_KHz == 411000 || freq_KHz == 427000 ||
++                  freq_KHz == 443000 || freq_KHz == 451000 ||
++                  freq_KHz == 459000 || freq_KHz == 506000 ||
++                  freq_KHz == 514000 || freq_KHz == 538000 ||
++                  freq_KHz == 546000 || freq_KHz == 554000 ||
++                  freq_KHz == 562000 || freq_KHz == 570000 ||
++                  freq_KHz == 578000 || freq_KHz == 602000 ||
++                  freq_KHz == 626000 || freq_KHz == 658000 ||
++                  freq_KHz == 690000 || freq_KHz == 714000 ||
++                  freq_KHz == 746000 || freq_KHz == 522000 ||
++                  freq_KHz == 826000 || freq_KHz == 155000 ||
++                  freq_KHz == 530000 ||
++                  ((freq_KHz == 275000 || freq_KHz == 355000) &&
++                   state->tuner_custom_cfg != 1) ||
++                  ((freq_KHz == 467000 || freq_KHz == 762000 ||
++                    freq_KHz == 778000 || freq_KHz == 818000) &&
++                   state->tuner_custom_cfg == 1)) {
++                      buf = buf - 1;
++              }
++      }
++       _mt_fe_tn_set_reg(state, 0x0e, buf);
++      _mt_fe_tn_set_reg(state, 0x0d, buf);
++      f1f2number =
++          (((DACFreq_KHz * M * buf) / crystal_KHz) << 16) / (N + 256) +
++          (((DACFreq_KHz * M * buf) % crystal_KHz) << 16) / ((N + 256) *
++                                                              crystal_KHz);
++      _mt_fe_tn_set_reg(state, 0xf1, (f1f2number & 0xff00) >> 8);
++      _mt_fe_tn_set_reg(state, 0xf2, f1f2number & 0x00ff);
++       FreqTrue108_Hz =
++          (N + 256) * crystal_KHz / (M * buf) * 1000 +
++          (((N + 256) * crystal_KHz) % (M * buf)) * 1000 / (M * buf);
++      f1 = 4096;
++      fc = FreqTrue108_Hz;
++      fadc = fc / 4;
++      fsd = 27000000;
++      f2d = state->tuner_bandwidth * 1000 / 2 - 150;
++      f2 = (fsd / 250) * f2d / ((fc + 500) / 1000);
++      delta1 = ((f1 - f2) << 15) / f2;
++      Totalnum1 = ((f1 - f2) << 15) - delta1 * f2;
++      cntT = f2;
++      cntin = Totalnum1;
++      NCOI = delta1;
++       z0 = cntin;
++      z1 = cntT;
++      z2 = NCOI;
++      tempnumber = (z0 & 0xff00) >> 8;
++      _mt_fe_tn_set_reg(state, 0xc9, (u8) (tempnumber & 0x0f));
++      tempnumber = (z0 & 0xff);
++      _mt_fe_tn_set_reg(state, 0xca, tempnumber);
++       tempnumber = (z1 & 0xff00) >> 8;
++      _mt_fe_tn_set_reg(state, 0xcb, tempnumber);
++      tempnumber = (z1 & 0xff);
++      _mt_fe_tn_set_reg(state, 0xcc, tempnumber);
++       tempnumber = (z2 & 0xff00) >> 8;
++      _mt_fe_tn_set_reg(state, 0xcd, tempnumber);
++      tempnumber = (z2 & 0xff);
++      _mt_fe_tn_set_reg(state, 0xce, tempnumber);
++       tmp = f1;
++      f1 = f2;
++      f2 = tmp / 2;
++      delta1 = ((f1 - f2) << 15) / f2;
++      Totalnum1 = ((f1 - f2) << 15) - delta1 * f2;
++      NCOI = (f1 << 15) / f2 - (1 << 15);
++      cntT = f2;
++      cntin = Totalnum1;
++      z0 = cntin;
++      z1 = cntT;
++      z2 = NCOI;
++      tempnumber = (z0 & 0xff00) >> 8;
++      _mt_fe_tn_set_reg(state, 0xd9, (u8) (tempnumber & 0x0f));
++      tempnumber = (z0 & 0xff);
++      _mt_fe_tn_set_reg(state, 0xda, tempnumber);
++       tempnumber = (z1 & 0xff00) >> 8;
++      _mt_fe_tn_set_reg(state, 0xdb, tempnumber);
++      tempnumber = (z1 & 0xff);
++      _mt_fe_tn_set_reg(state, 0xdc, tempnumber);
++       tempnumber = (z2 & 0xff00) >> 8;
++      _mt_fe_tn_set_reg(state, 0xdd, tempnumber);
++      tempnumber = (z2 & 0xff);
++      _mt_fe_tn_set_reg(state, 0xde, tempnumber);
++
 +      return 0;
 +}
 +
-+static int m88ds3103_set_clock_ratio(struct m88ds3103_state *state)
++static int _mt_fe_tn_preset_tc2800(struct m88dc2800_state *state)
 +{
-+      u8      val, mod_fac, tmp1, tmp2;
-+      u32     input_datarate, locked_sym_rate_KSs;
-+      u32 MClk_KHz = 96000;
-+      u8 mod_mode, code_rate, divid_ratio = 0;
-+
-+      locked_sym_rate_KSs = 0;
-+      m88ds3103_get_locked_sym_rate(state, &locked_sym_rate_KSs);
-+      if(locked_sym_rate_KSs == 0)
-+              return 0;
-+
-+      m88ds3103_get_channel_info(state, &mod_mode, &code_rate);
-+
-+      if (state->delivery_system == SYS_DVBS2)
-+      {
-+              switch(mod_mode) {
-+                      case 1: mod_fac = 3; break;
-+                      case 2: mod_fac = 4; break;
-+                      case 3: mod_fac = 5; break;
-+                      default: mod_fac = 2; break;
-+              }
-+
-+              switch(code_rate) {
-+                      case 0: input_datarate = locked_sym_rate_KSs*mod_fac/8/4; break;
-+                      case 1: input_datarate = locked_sym_rate_KSs*mod_fac/8/3;       break;
-+                      case 2: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/5;     break;
-+                      case 3: input_datarate = locked_sym_rate_KSs*mod_fac/8/2;       break;
-+                      case 4: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/5;     break;
-+                      case 5: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3;     break;
-+                      case 6: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/4;     break;
-+                      case 7: input_datarate = locked_sym_rate_KSs*mod_fac*4/8/5;     break;
-+                      case 8: input_datarate = locked_sym_rate_KSs*mod_fac*5/8/6;     break;
-+                      case 9: input_datarate = locked_sym_rate_KSs*mod_fac*8/8/9;     break;
-+                      case 10: input_datarate = locked_sym_rate_KSs*mod_fac*9/8/10; break;
-+                      default: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3; break;
-+              }
-+
-+              if(state->demod_id == DS3000_ID)
-+                      input_datarate = input_datarate * 115 / 100;
-+
-+              if(input_datarate < 4800)  {tmp1 = 15;tmp2 = 15;} //4.8MHz         TS clock
-+              else if(input_datarate < 4966)  {tmp1 = 14;tmp2 = 15;} //4.966MHz  TS clock
-+              else if(input_datarate < 5143)  {tmp1 = 14;tmp2 = 14;} //5.143MHz  TS clock
-+              else if(input_datarate < 5333)  {tmp1 = 13;tmp2 = 14;} //5.333MHz  TS clock
-+              else if(input_datarate < 5538)  {tmp1 = 13;tmp2 = 13;} //5.538MHz  TS clock
-+              else if(input_datarate < 5760)  {tmp1 = 12;tmp2 = 13;} //5.76MHz   TS clock       allan 0809
-+              else if(input_datarate < 6000)  {tmp1 = 12;tmp2 = 12;} //6MHz      TS clock
-+              else if(input_datarate < 6260)  {tmp1 = 11;tmp2 = 12;} //6.26MHz   TS clock
-+              else if(input_datarate < 6545)  {tmp1 = 11;tmp2 = 11;} //6.545MHz  TS clock
-+              else if(input_datarate < 6857)  {tmp1 = 10;tmp2 = 11;} //6.857MHz  TS clock
-+              else if(input_datarate < 7200)  {tmp1 = 10;tmp2 = 10;} //7.2MHz    TS clock
-+              else if(input_datarate < 7578)  {tmp1 = 9;tmp2 = 10;}  //7.578MHz  TS clock
-+              else if(input_datarate < 8000)  {tmp1 = 9;tmp2 = 9;}   //8MHz      TS clock
-+              else if(input_datarate < 8470)  {tmp1 = 8;tmp2 = 9;}   //8.47MHz   TS clock
-+              else if(input_datarate < 9000)  {tmp1 = 8;tmp2 = 8;}   //9MHz      TS clock
-+              else if(input_datarate < 9600)  {tmp1 = 7;tmp2 = 8;}   //9.6MHz    TS clock
-+              else if(input_datarate < 10285) {tmp1 = 7;tmp2 = 7;}   //10.285MHz TS clock
-+              else if(input_datarate < 12000) {tmp1 = 6;tmp2 = 6;}   //12MHz     TS clock
-+              else if(input_datarate < 14400) {tmp1 = 5;tmp2 = 5;}   //14.4MHz   TS clock
-+              else if(input_datarate < 18000) {tmp1 = 4;tmp2 = 4;}   //18MHz     TS clock
-+              else                                                    {tmp1 = 3;tmp2 = 3;}   //24MHz     TS clock
-+
-+              if(state->demod_id == DS3000_ID) {
-+                      val = (u8)((tmp1<<4) + tmp2);
-+                      m88ds3103_writereg(state, 0xfe, val);
++      if (state->tuner_mtt == 0xD1) {
++              _mt_fe_tn_set_reg(state, 0x19, 0x4a);
++              _mt_fe_tn_set_reg(state, 0x1b, 0x4b);
++               _mt_fe_tn_set_reg(state, 0x04, 0x04);
++              _mt_fe_tn_set_reg(state, 0x17, 0x0d);
++              _mt_fe_tn_set_reg(state, 0x62, 0x6c);
++              _mt_fe_tn_set_reg(state, 0x63, 0xf4);
++              _mt_fe_tn_set_reg(state, 0x1f, 0x0e);
++              _mt_fe_tn_set_reg(state, 0x6b, 0xf4);
++              _mt_fe_tn_set_reg(state, 0x14, 0x01);
++              _mt_fe_tn_set_reg(state, 0x5a, 0x75);
++              _mt_fe_tn_set_reg(state, 0x66, 0x74);
++              _mt_fe_tn_set_reg(state, 0x72, 0xe0);
++              _mt_fe_tn_set_reg(state, 0x70, 0x07);
++              _mt_fe_tn_set_reg(state, 0x15, 0x7b);
++              _mt_fe_tn_set_reg(state, 0x55, 0x71);
++               _mt_fe_tn_set_reg(state, 0x75, 0x55);
++              _mt_fe_tn_set_reg(state, 0x76, 0xac);
++              _mt_fe_tn_set_reg(state, 0x77, 0x6c);
++              _mt_fe_tn_set_reg(state, 0x78, 0x8b);
++              _mt_fe_tn_set_reg(state, 0x79, 0x42);
++              _mt_fe_tn_set_reg(state, 0x7a, 0xd2);
++               _mt_fe_tn_set_reg(state, 0x81, 0x01);
++              _mt_fe_tn_set_reg(state, 0x82, 0x00);
++              _mt_fe_tn_set_reg(state, 0x82, 0x02);
++              _mt_fe_tn_set_reg(state, 0x82, 0x04);
++              _mt_fe_tn_set_reg(state, 0x82, 0x06);
++              _mt_fe_tn_set_reg(state, 0x82, 0x08);
++              _mt_fe_tn_set_reg(state, 0x82, 0x09);
++              _mt_fe_tn_set_reg(state, 0x82, 0x29);
++              _mt_fe_tn_set_reg(state, 0x82, 0x49);
++              _mt_fe_tn_set_reg(state, 0x82, 0x58);
++              _mt_fe_tn_set_reg(state, 0x82, 0x59);
++              _mt_fe_tn_set_reg(state, 0x82, 0x98);
++              _mt_fe_tn_set_reg(state, 0x82, 0x99);
++              _mt_fe_tn_set_reg(state, 0x10, 0x05);
++              _mt_fe_tn_set_reg(state, 0x10, 0x0d);
++              _mt_fe_tn_set_reg(state, 0x11, 0x95);
++              _mt_fe_tn_set_reg(state, 0x11, 0x9d);
++              if (state->tuner_loopthrough != 0) {
++                      _mt_fe_tn_set_reg(state, 0x67, 0x25);
 +              } else {
-+                      tmp1 = m88ds3103_readreg(state, 0x22);
-+                      tmp2 = m88ds3103_readreg(state, 0x24);
-+
-+                      tmp1 >>= 6;
-+                      tmp1 &= 0x03;
-+                      tmp2 >>= 6;
-+                      tmp2 &= 0x03;
-+
-+                      if((tmp1 == 0x00) && (tmp2 == 0x01))
-+                              MClk_KHz = 144000;
-+                      else if((tmp1 == 0x00) && (tmp2 == 0x03))
-+                              MClk_KHz = 72000;
-+                      else if((tmp1 == 0x01) && (tmp2 == 0x01))
-+                              MClk_KHz = 115200;
-+                      else if((tmp1 == 0x02) && (tmp2 == 0x01))
-+                              MClk_KHz = 96000;
-+                      else if((tmp1 == 0x03) && (tmp2 == 0x00))
-+                              MClk_KHz = 192000;
-+                      else
-+                              return 0;
-+
-+                      if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/
-+                              input_datarate = 5200;
-+                              
-+                      if(input_datarate != 0)
-+                              divid_ratio = (u8)(MClk_KHz / input_datarate);
-+                      else
-+                              divid_ratio = 0xFF;
-+
-+                      if(divid_ratio > 128)
-+                              divid_ratio = 128;
-+
-+                      if(divid_ratio < 2)
-+                              divid_ratio = 2;
-+
-+                      tmp1 = (u8)(divid_ratio / 2);
-+                      tmp2 = (u8)(divid_ratio / 2);
-+
-+                      if((divid_ratio % 2) != 0)
-+                              tmp2 += 1;
-+
-+                      tmp1 -= 1;
-+                      tmp2 -= 1;
-+
-+                      tmp1 &= 0x3f;
-+                      tmp2 &= 0x3f;
-+
-+                      val = m88ds3103_readreg(state, 0xfe);
-+                      val &= 0xF0;
-+                      val |= (tmp2 >> 2) & 0x0f;
-+                      m88ds3103_writereg(state, 0xfe, val);
-+
-+                      val = (u8)((tmp2 & 0x03) << 6); 
-+                      val |= tmp1;
-+                      m88ds3103_writereg(state, 0xea, val);
++                      _mt_fe_tn_set_reg(state, 0x67, 0x05);
 +              }
-+      } else {
-+              mod_fac = 2;
-+
-+              switch(code_rate) {
-+                      case 4: input_datarate = locked_sym_rate_KSs*mod_fac/2/8;       break;
-+                      case 3: input_datarate = locked_sym_rate_KSs*mod_fac*2/3/8;     break;
-+                      case 2: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8;     break;
-+                      case 1: input_datarate = locked_sym_rate_KSs*mod_fac*5/6/8;     break;
-+                      case 0: input_datarate = locked_sym_rate_KSs*mod_fac*7/8/8;     break;
-+                      default: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8;    break;
++      } else if (state->tuner_mtt == 0xE1) {
++              _mt_fe_tn_set_reg(state, 0x1b, 0x47);
++              if (state->tuner_mode == 0) {   /* DVB-C */
++                      _mt_fe_tn_set_reg(state, 0x66, 0x74);
++                      _mt_fe_tn_set_reg(state, 0x62, 0x2c);
++                      _mt_fe_tn_set_reg(state, 0x63, 0x54);
++                      _mt_fe_tn_set_reg(state, 0x68, 0x0b);
++                      _mt_fe_tn_set_reg(state, 0x14, 0x00);
++              } else {                        /* CTTB */
++                      _mt_fe_tn_set_reg(state, 0x66, 0x74);
++                      _mt_fe_tn_set_reg(state, 0x62, 0x0c);
++                      _mt_fe_tn_set_reg(state, 0x63, 0x54);
++                      _mt_fe_tn_set_reg(state, 0x68, 0x0b);
++                      _mt_fe_tn_set_reg(state, 0x14, 0x05);
 +              }
++              _mt_fe_tn_set_reg(state, 0x6f, 0x00);
++              _mt_fe_tn_set_reg(state, 0x84, 0x04);
++              _mt_fe_tn_set_reg(state, 0x5e, 0xbe);
++              _mt_fe_tn_set_reg(state, 0x87, 0x07);
++              _mt_fe_tn_set_reg(state, 0x8a, 0x1f);
++              _mt_fe_tn_set_reg(state, 0x8b, 0x1f);
++              _mt_fe_tn_set_reg(state, 0x88, 0x30);
++              _mt_fe_tn_set_reg(state, 0x58, 0x34);
++              _mt_fe_tn_set_reg(state, 0x61, 0x8c);
++              _mt_fe_tn_set_reg(state, 0x6a, 0x42);
++      }
++      return 0;
++}
 +
-+              if(state->demod_id == DS3000_ID)
-+                      input_datarate = input_datarate * 115 / 100;
-+
-+              if(input_datarate < 6857)               {tmp1 = 7;tmp2 = 7;} //6.857MHz     TS clock
-+              else if(input_datarate < 7384)  {tmp1 = 6;tmp2 = 7;} //7.384MHz     TS clock
-+              else if(input_datarate < 8000)  {tmp1 = 6;tmp2 = 6;} //8MHz             TS clock
-+              else if(input_datarate < 8727)  {tmp1 = 5;tmp2 = 6;} //8.727MHz         TS clock
-+              else if(input_datarate < 9600)  {tmp1 = 5;tmp2 = 5;} //9.6MHz           TS clock
-+              else if(input_datarate < 10666) {tmp1 = 4;tmp2 = 5;} //10.666MHz        TS clock
-+              else if(input_datarate < 12000) {tmp1 = 4;tmp2 = 4;} //12MHz            TS clock
-+              else if(input_datarate < 13714) {tmp1 = 3;tmp2 = 4;} //13.714MHz        TS clock
-+              else if(input_datarate < 16000) {tmp1 = 3;tmp2 = 3;} //16MHz            TS clock
-+              else if(input_datarate < 19200) {tmp1 = 2;tmp2 = 3;} //19.2MHz          TS clock
-+              else                                                    {tmp1 = 2;tmp2 = 2;} //24MHz            TS clock
-+
-+              if(state->demod_id == DS3000_ID) {
-+                      val = m88ds3103_readreg(state, 0xfe);
-+                      val &= 0xc0;
-+                      val |= ((u8)((tmp1<<3) + tmp2));
-+                      m88ds3103_writereg(state, 0xfe, val);
-+              } else {
-+                      if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/
-+                              input_datarate = 5200;
-+                      
-+                      if(input_datarate != 0)
-+                              divid_ratio = (u8)(MClk_KHz / input_datarate);
-+                      else
-+                              divid_ratio = 0xFF;
-+
-+                      if(divid_ratio > 128)
-+                              divid_ratio = 128;
-+
-+                      if(divid_ratio < 2)
-+                              divid_ratio = 2;
-+
-+                      tmp1 = (u8)(divid_ratio / 2);
-+                      tmp2 = (u8)(divid_ratio / 2);
-+
-+                      if((divid_ratio % 2) != 0)
-+                              tmp2 += 1;
-+
-+                      tmp1 -= 1;
-+                      tmp2 -= 1;
++static int mt_fe_tn_wakeup_tc2800(struct m88dc2800_state *state)
++{
++      _mt_fe_tn_set_reg(state, 0x16, 0xb1);
++      _mt_fe_tn_set_reg(state, 0x09, 0x7d);
++      return 0;
++}
 +
-+                      tmp1 &= 0x3f;
-+                      tmp2 &= 0x3f;
++  static int mt_fe_tn_sleep_tc2800(struct m88dc2800_state *state)
++{
++      _mt_fe_tn_set_reg(state, 0x16, 0xb0);
++      _mt_fe_tn_set_reg(state, 0x09, 0x6d);
++      return 0;
++}
 +
-+                      val = m88ds3103_readreg(state, 0xfe);
-+                      val &= 0xF0;
-+                      val |= (tmp2 >> 2) & 0x0f;
-+                      m88ds3103_writereg(state, 0xfe, val);
-+                      
-+                      val = (u8)((tmp2 & 0x03) << 6);
-+                      val |= tmp1;
-+                      m88ds3103_writereg(state, 0xea, val);
++ static int mt_fe_tn_init_tc2800(struct m88dc2800_state *state)
++{
++      if (state->tuner_init_OK != 1) {
++              state->tuner_dev_addr = 0x61;   /* TUNER_I2C_ADDR_TC2800 */
++              state->tuner_freq = 650000;
++              state->tuner_qam = 0;
++              state->tuner_mode = 0;  // 0: DVB-C, 1: CTTB
++              state->tuner_bandwidth = 8;
++              state->tuner_loopthrough = 0;
++              state->tuner_crystal = 24000;
++              state->tuner_dac = 7200;
++              state->tuner_mtt = 0x00;
++              state->tuner_custom_cfg = 0;
++              state->tuner_version = 30022;   /* Driver version number */
++              state->tuner_time = 12092611;
++              state->tuner_init_OK = 1;
++      }
++      _mt_fe_tn_set_reg(state, 0x2b, 0x46);
++      _mt_fe_tn_set_reg(state, 0x2c, 0x75);
++      if (state->tuner_mtt == 0x00) {
++              u8 tmp = 0;
++              _mt_fe_tn_get_reg(state, 0x01, &tmp);
++              printk(KERN_INFO "m88dc2800: tuner id = 0x%02x ", tmp);
++              switch (tmp) {
++              case 0x0d:
++                      state->tuner_mtt = 0xD1;
++                      break;
++              case 0x8e:
++              default:
++                      state->tuner_mtt = 0xE1;
++                      break;
 +              }
 +      }
 +      return 0;
 +}
 +
-+static int m88ds3103_demod_connect(struct dvb_frontend *fe, s32 carrier_offset_khz) 
++ static int mt_fe_tn_set_freq_tc2800(struct m88dc2800_state *state,
++                                     u32 freq_KHz)
 +{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
-+      u16 value;
-+      u8 val1,val2,data;
-+      
-+      dprintk("connect delivery system = %d\n", state->delivery_system);
-+      
-+      /* ds3000 global reset */
-+      m88ds3103_writereg(state, 0x07, 0x80);
-+      m88ds3103_writereg(state, 0x07, 0x00);
-+      /* ds3000 build-in uC reset */
-+      m88ds3103_writereg(state, 0xb2, 0x01);
-+      /* ds3000 software reset */
-+      m88ds3103_writereg(state, 0x00, 0x01);
++      u8 buf;
++      u8 buf1;
 +
-+      switch (state->delivery_system) {
-+      case SYS_DVBS:
-+              /* initialise the demod in DVB-S mode */
-+              if(state->demod_id == DS3000_ID){
-+                      m88ds3103_init_reg(state, ds3000_dvbs_init_tab, sizeof(ds3000_dvbs_init_tab));
-+                      
-+                      value = m88ds3103_readreg(state, 0xfe);
-+                      value &= 0xc0;
-+                      value |= 0x1b;
-+                      m88ds3103_writereg(state, 0xfe, value);
-+                      
-+                      if(state->config->ci_mode)
-+                              val1 = 0x80;
-+                      else if(state->config->ts_mode)
-+                              val1 = 0x60;
-+                      else
-+                              val1 = 0x20;
-+                      m88ds3103_writereg(state, 0xfd, val1);
-+                      
-+              }else if(state->demod_id == DS3103_ID){
-+                      m88ds3103_init_reg(state, ds3103_dvbs_init_tab, sizeof(ds3103_dvbs_init_tab));
-+                      
-+                      /* set ts clock */
-+                      if(state->config->ci_mode == 2){
-+                              val1 = 6; val2 = 6;
-+                      }else if(state->config->ts_mode == 0)   {
-+                              val1 = 3; val2 = 3;
-+                      }else{
-+                              val1 = 0; val2 = 0;
-+                      }
-+                      val1 -= 1; val2 -= 1;
-+                      val1 &= 0x3f; val2 &= 0x3f;
-+                      data = m88ds3103_readreg(state, 0xfe);
-+                      data &= 0xf0;
-+                      data |= (val2 >> 2) & 0x0f;
-+                      m88ds3103_writereg(state, 0xfe, data);
-+                      data = (val2 & 0x03) << 6;
-+                      data |= val1;
-+                      m88ds3103_writereg(state, 0xea, data);
-+                      
-+                      m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d));
-+                      m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30));
-+                      
-+                      /* set master clock */
-+                      val1 = m88ds3103_readreg(state, 0x22);
-+                      val2 = m88ds3103_readreg(state, 0x24);
-+                      
-+                      val1 &= 0x3f;
-+                      val2 &= 0x3f;
-+                      val1 |= 0x80;
-+                      val2 |= 0x40;
++      mt_fe_tn_init_tc2800(state);
++      state->tuner_freq = freq_KHz;
++      _mt_fe_tn_set_reg(state, 0x21, freq_KHz > 500000 ? 0xb9 : 0x99);
++      mt_fe_tn_wakeup_tc2800(state);
++       _mt_fe_tn_set_reg(state, 0x05, 0x7f);
++      _mt_fe_tn_set_reg(state, 0x06, 0xf8);
++       _mt_fe_tn_set_RF_front_tc2800(state);
++      _mt_fe_tn_set_PLL_freq_tc2800(state);
++      _mt_fe_tn_set_DAC_tc2800(state);
++      _mt_fe_tn_set_BB_tc2800(state);
++      _mt_fe_tn_preset_tc2800(state);
++       _mt_fe_tn_set_reg(state, 0x05, 0x00);
++      _mt_fe_tn_set_reg(state, 0x06, 0x00);
++       if (state->tuner_mtt == 0xD1) {
++              _mt_fe_tn_set_reg(state, 0x00, 0x01);
++              _mt_fe_tn_set_reg(state, 0x00, 0x00);
++               msleep(5);
++              _mt_fe_tn_set_reg(state, 0x41, 0x00);
++              msleep(5);
++              _mt_fe_tn_set_reg(state, 0x41, 0x02);
 +
-+                      m88ds3103_writereg(state, 0x22, val1);
-+                      m88ds3103_writereg(state, 0x24, val2);  
-+                      
-+                      if(state->config->ci_mode)
-+                              val1 = 0x03;
-+                      else if(state->config->ts_mode)
-+                              val1 = 0x06;
++              _mt_fe_tn_get_reg(state, 0x69, &buf1);
++              buf1 = buf1 & 0x0f;
++              _mt_fe_tn_get_reg(state, 0x61, &buf);
++              buf = buf & 0x0f;
++              if (buf == 0x0c)
++                      _mt_fe_tn_set_reg(state, 0x6a, 0x59);
++              if (buf1 > 0x02) {
++                      if (freq_KHz > 600000)
++                              _mt_fe_tn_set_reg(state, 0x66, 0x44);
++                      else if (freq_KHz > 500000)
++                              _mt_fe_tn_set_reg(state, 0x66, 0x64);
 +                      else
-+                              val1 = 0x42;
-+                      m88ds3103_writereg(state, 0xfd, val1);          
-+              }
-+              break;
-+      case SYS_DVBS2:
-+              /* initialise the demod in DVB-S2 mode */
-+              if(state->demod_id == DS3000_ID){
-+                      m88ds3103_init_reg(state, ds3000_dvbs2_init_tab, sizeof(ds3000_dvbs2_init_tab));
-+              
-+                      if (c->symbol_rate >= 30000000)
-+                              m88ds3103_writereg(state, 0xfe, 0x54);
++                              _mt_fe_tn_set_reg(state, 0x66, 0x74);
++              }               
++              if (buf1 < 0x03) {
++                      if (freq_KHz > 800000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x64);
++                      else if (freq_KHz > 600000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
++                      else if (freq_KHz > 500000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
++                      else if (freq_KHz > 300000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x43);
++                      else if (freq_KHz > 220000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
++                      else if (freq_KHz > 110000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x14);
 +                      else
-+                              m88ds3103_writereg(state, 0xfe, 0x98);
-+                                                              
-+              }else if(state->demod_id == DS3103_ID){
-+                      m88ds3103_init_reg(state, ds3103_dvbs2_init_tab, sizeof(ds3103_dvbs2_init_tab));
-+
-+                      /* set ts clock */
-+                      if(state->config->ci_mode == 2){
-+                              val1 = 6; val2 = 6;
-+                      }else if(state->config->ts_mode == 0){
-+                              val1 = 5; val2 = 4;
-+                      }else{
-+                              val1 = 0; val2 = 0;
-+                      }
-+                      val1 -= 1; val2 -= 1;
-+                      val1 &= 0x3f; val2 &= 0x3f;
-+                      data = m88ds3103_readreg(state, 0xfe);
-+                      data &= 0xf0;
-+                      data |= (val2 >> 2) & 0x0f;
-+                      m88ds3103_writereg(state, 0xfe, data);
-+                      data = (val2 & 0x03) << 6;
-+                      data |= val1;
-+                      m88ds3103_writereg(state, 0xea, data);
-+                      
-+                      m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d));
-+                      m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30));
-+                      
-+                      /* set master clock */
-+                      val1 = m88ds3103_readreg(state, 0x22);
-+                      val2 = m88ds3103_readreg(state, 0x24);
-+                      
-+                      val1 &= 0x3f;
-+                      val2 &= 0x3f;
-+                      if((state->config->ci_mode == 2) || (state->config->ts_mode == 1)){
-+                              val1 |= 0x80;
-+                              val2 |= 0x40;
-+                      }else{
-+                              if (c->symbol_rate >= 28000000){
-+                                      val1 |= 0xc0;
-+                              }else if (c->symbol_rate >= 18000000){
-+                                      val2 |= 0x40;
-+                              }else{
-+                                      val1 |= 0x80;
-+                                      val2 |= 0x40;
-+                              }                               
++                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
++                      msleep(5);
++              } else if (buf < 0x0c) {
++                      if (freq_KHz > 800000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x14);
++                      else if (freq_KHz > 600000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x14);
++                      else if (freq_KHz > 500000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x34);
++                      else if (freq_KHz > 300000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x43);
++                      else if (freq_KHz > 220000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
++                      else if (freq_KHz > 110000)
++                              _mt_fe_tn_set_reg(state, 0x87, 0x14);
++                      else
++                              _mt_fe_tn_set_reg(state, 0x87, 0x54);
++                      msleep(5);
++              }
++      } else if ((state->tuner_mtt == 0xE1)) {
++              _mt_fe_tn_set_reg(state, 0x00, 0x01);
++              _mt_fe_tn_set_reg(state, 0x00, 0x00);
++               msleep(20);
++               _mt_fe_tn_get_reg(state, 0x32, &buf);
++              buf = (buf & 0xef) | 0x28;
++              _mt_fe_tn_set_reg(state, 0x32, buf);
++               msleep(50);
++              _mt_fe_tn_get_reg(state, 0x38, &buf);
++              _mt_fe_tn_set_reg(state, 0x38, buf);
++              _mt_fe_tn_get_reg(state, 0x32, &buf);
++              buf = (buf & 0xf7) | 0x10;
++              _mt_fe_tn_set_reg(state, 0x32, buf);
++               msleep(10);
++               _mt_fe_tn_get_reg(state, 0x69, &buf);
++              buf = buf & 0x03;
++              _mt_fe_tn_set_reg(state, 0x2a, buf);
++              if (buf > 0) {
++                      msleep(20);
++                      _mt_fe_tn_get_reg(state, 0x84, &buf);
++                      buf = buf & 0x1f;
++                      _mt_fe_tn_set_reg(state, 0x68, 0x0a);
++                      _mt_fe_tn_get_reg(state, 0x88, &buf1);
++                      buf1 = buf1 & 0x1f;
++                      if (buf <= buf1)
++                              _mt_fe_tn_set_reg(state, 0x66, 0x44);
++                      else
++                              _mt_fe_tn_set_reg(state, 0x66, 0x74);
++              } else {
++                      if (freq_KHz <= 600000)
++                              _mt_fe_tn_set_reg(state, 0x68, 0x0c);
++                      else
++                              _mt_fe_tn_set_reg(state, 0x68, 0x0e);
++                      _mt_fe_tn_set_reg(state, 0x30, 0xfb);
++                      _mt_fe_tn_set_reg(state, 0x30, 0xff);
++                      _mt_fe_tn_set_reg(state, 0x31, 0x04);
++                      _mt_fe_tn_set_reg(state, 0x31, 0x00);
++              }
++              if (state->tuner_loopthrough != 0) {
++                      _mt_fe_tn_get_reg(state, 0x28, &buf);
++                      if (buf == 0) {
++                              _mt_fe_tn_set_reg(state, 0x28, 0xff);
++                              _mt_fe_tn_get_reg(state, 0x61, &buf);
++                              buf = buf & 0x0f;
++                              if (buf > 9)
++                                      _mt_fe_tn_set_reg(state, 0x67, 0x74);
++                              else if (buf > 6)
++                                      _mt_fe_tn_set_reg(state, 0x67, 0x64);
++                              else if (buf > 3)
++                                      _mt_fe_tn_set_reg(state, 0x67, 0x54);
++                              else
++                                      _mt_fe_tn_set_reg(state, 0x67, 0x44);
 +                      }
-+                      m88ds3103_writereg(state, 0x22, val1);
-+                      m88ds3103_writereg(state, 0x24, val2);                                  
++              } else {
++                      _mt_fe_tn_set_reg(state, 0x67, 0x34);
 +              }
-+              
-+              if(state->config->ci_mode)
-+                      val1 = 0x03;
-+              else if(state->config->ts_mode)
-+                      val1 = 0x06;
-+              else
-+                      val1 = 0x42;
-+              m88ds3103_writereg(state, 0xfd, val1);
-+              
-+              break;
-+      default:
++      } else {
 +              return 1;
 +      }
-+      /* disable 27MHz clock output */
-+      m88ds3103_writereg(state, 0x29, 0x80);
-+      /* enable ac coupling */
-+      m88ds3103_writereg(state, 0x25, 0x8a);
-+
-+      if ((c->symbol_rate / 1000) <= 3000){
-+              m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 32 * 100 / 64 = 400*/
-+              m88ds3103_writereg(state, 0xc8, 0x20);
-+              m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/
-+              m88ds3103_writereg(state, 0xc7, 0x00);
-+      }else if((c->symbol_rate / 1000) <= 10000){
-+              m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 16 * 100 / 64 = 200*/
-+              m88ds3103_writereg(state, 0xc8, 0x10);
-+              m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/
-+              m88ds3103_writereg(state, 0xc7, 0x00);
-+      }else{
-+              m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 6 * 100 / 64 = 75*/
-+              m88ds3103_writereg(state, 0xc8, 0x06);
-+              m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/
-+              m88ds3103_writereg(state, 0xc7, 0x00);
-+      }
-+
-+      m88ds3103_set_symrate(fe);
-+      
-+      m88ds3103_set_CCI(fe);
-+
-+      m88ds3103_set_carrier_offset(fe, carrier_offset_khz);
-+              
-+      /* ds3000 out of software reset */
-+      m88ds3103_writereg(state, 0x00, 0x00);
-+      /* start ds3000 build-in uC */
-+      m88ds3103_writereg(state, 0xb2, 0x00);  
-+      
 +      return 0;
 +}
 +
-+static int m88ds3103_set_frontend(struct dvb_frontend *fe)
++
++/*
++static int mt_fe_tn_set_BB_filter_band_tc2800(struct m88dc2800_state *state,
++                                            u8 bandwidth)
 +{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
++      u8 buf, tmp;
 +
-+      int i;
-+      fe_status_t status;
-+      u8 lpf_mxdiv, mlpf_max, mlpf_min, nlpf, div4, capCode, changePLL;
-+      s32 offset_khz, lpf_offset_KHz;
-+      u16 value, ndiv, lpf_coeff;
-+      u32 f3db, gdiv28, realFreq;
-+      u8 RFgain;
++      _mt_fe_tn_get_reg(state, 0x53, &tmp);
 +
-+      dprintk("%s() ", __func__);
-+      dprintk("c frequency = %d\n", c->frequency);
-+      dprintk("symbol rate = %d\n", c->symbol_rate);
-+      dprintk("delivery system = %d\n", c->delivery_system);
-+      
-+      realFreq = c->frequency;
-+      lpf_offset_KHz = 0;
-+      if(c->symbol_rate < 5000000){
-+              lpf_offset_KHz = FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz;
-+              realFreq += FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz;
-+      }
-+      
-+      if (state->config->set_ts_params)
-+              state->config->set_ts_params(fe, 0);
++      if (bandwidth == 6)
++              buf = 0x01 << 1;
++      else if (bandwidth == 7)
++              buf = 0x02 << 1;
++      else if (bandwidth == 8)
++              buf = 0x04 << 1;
++      else
++              buf = 0x04 << 1;
 +
-+      div4 = 0;
-+      RFgain = 0;
-+      if(state->tuner_id == TS2022_ID){
-+              m88ds3103_tuner_writereg(state, 0x10, 0x0a);
-+              m88ds3103_tuner_writereg(state, 0x11, 0x40);
-+              if (realFreq < 1103000) {
-+                      m88ds3103_tuner_writereg(state, 0x10, 0x1b);
-+                      div4 = 1;
-+                      ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ;                              
-+              }else {
-+                      ndiv = (realFreq * (6 + 8) * 2)/MT_FE_CRYSTAL_KHZ;
++      tmp &= 0xf1;
++      tmp |= buf;
++      _mt_fe_tn_set_reg(state, 0x53, tmp);
++      state->tuner_bandwidth = bandwidth;
++      return 0;
++}
++*/
++
++static s32 mt_fe_tn_get_signal_strength_tc2800(struct m88dc2800_state
++                                             *state)
++{
++      s32 level = -107;
++      s32 tmp1, tmp2, tmp3, tmp4, tmp5, tmp6;
++      s32 val1, val2, val;
++      s32 result2, result3, result4, result5, result6;
++      s32 append;
++      u8 tmp;
++      s32 freq_KHz = (s32) state->tuner_freq;
++      if (state->tuner_mtt == 0xD1) {
++              _mt_fe_tn_get_reg(state, 0x61, &tmp);
++              tmp1 = tmp & 0x0f;
++               _mt_fe_tn_get_reg(state, 0x69, &tmp);
++              tmp2 = tmp & 0x0f;
++               _mt_fe_tn_get_reg(state, 0x73, &tmp);
++              tmp3 = tmp & 0x07;
++               _mt_fe_tn_get_reg(state, 0x7c, &tmp);
++              tmp4 = (tmp >> 4) & 0x0f;
++               _mt_fe_tn_get_reg(state, 0x7b, &tmp);
++              tmp5 = tmp & 0x0f;
++               _mt_fe_tn_get_reg(state, 0x7f, &tmp);
++              tmp6 = (tmp >> 5) & 0x01;
++              if (tmp1 > 6) {
++                      val1 = 0;
++                      if (freq_KHz <= 200000) {
++                              val2 = (tmp1 - 6) * 267;
++                      } else if (freq_KHz <= 600000) {
++                              val2 = (tmp1 - 6) * 280;
++                      } else {
++                              val2 = (tmp1 - 6) * 290;
++                      }
++                      val = val1 + val2;
++              } else {
++                      if (tmp1 == 0) {
++                              val1 = -550;
++                      } else {
++                              val1 = 0;
++                      }
++                      if ((tmp1 < 4) && (freq_KHz >= 506000)) {
++                              val1 = -850;
++                      }
++                      val2 = 0;
++                      val = val1 + val2;
++              }
++              if (freq_KHz <= 95000) {
++                      result2 = tmp2 * 289;
++              } else if (freq_KHz <= 155000) {
++                      result2 = tmp2 * 278;
++              } else if (freq_KHz <= 245000) {
++                      result2 = tmp2 * 267;
++              } else if (freq_KHz <= 305000) {
++                      result2 = tmp2 * 256;
++              } else if (freq_KHz <= 335000) {
++                      result2 = tmp2 * 244;
++              } else if (freq_KHz <= 425000) {
++                      result2 = tmp2 * 233;
++              } else if (freq_KHz <= 575000) {
++                      result2 = tmp2 * 222;
++              } else if (freq_KHz <= 665000) {
++                      result2 = tmp2 * 211;
++              } else {
++                      result2 = tmp2 * 200;
++              }
++              result3 = (6 - tmp3) * 100;
++              result4 = 300 * tmp4;
++              result5 = 50 * tmp5;
++              result6 = 300 * tmp6;
++              if (freq_KHz < 105000) {
++                      append = -450;
++              } else if (freq_KHz <= 227000) {
++                      append = -4 * (freq_KHz / 1000 - 100) + 150;
++              } else if (freq_KHz <= 305000) {
++                      append = -4 * (freq_KHz / 1000 - 100);
++              } else if (freq_KHz <= 419000) {
++                      append = 500 - 40 * (freq_KHz / 1000 - 300) / 17 + 130;
++              } else if (freq_KHz <= 640000) {
++                      append = 500 - 40 * (freq_KHz / 1000 - 300) / 17;
++              } else {
++                      append = -500;
++              }
++              level = append - (val + result2 + result3 + result4 +
++                                result5 + result6);
++              level /= 100;
++      } else if (state->tuner_mtt == 0xE1) {
++              _mt_fe_tn_get_reg(state, 0x61, &tmp);
++              tmp1 = tmp & 0x0f;
++               _mt_fe_tn_get_reg(state, 0x84, &tmp);
++              tmp2 = tmp & 0x1f;
++               _mt_fe_tn_get_reg(state, 0x69, &tmp);
++              tmp3 = tmp & 0x03;
++               _mt_fe_tn_get_reg(state, 0x73, &tmp);
++              tmp4 = tmp & 0x0f;
++               _mt_fe_tn_get_reg(state, 0x7c, &tmp);
++              tmp5 = (tmp >> 4) & 0x0f;
++               _mt_fe_tn_get_reg(state, 0x7b, &tmp);
++              tmp6 = tmp & 0x0f;
++              if (freq_KHz < 151000) {
++                      result2 = (1150 - freq_KHz / 100) * 163 / 33 + 4230;
++                      result3 = (1150 - freq_KHz / 100) * 115 / 33 + 1850;
++                      result4 = -3676 * (freq_KHz / 1000) / 100 + 6115;
++              } else if (freq_KHz < 257000) {
++                      result2 = (1540 - freq_KHz / 100) * 11 / 4 + 3870;
++                      result3 = (1540 - freq_KHz / 100) * 205 / 96 + 2100;
++                      result4 = -21 * freq_KHz / 1000 + 5084;
++              } else if (freq_KHz < 305000) {
++                      result2 = (2620 - freq_KHz / 100) * 5 / 3 + 2770;
++                      result3 = (2620 - freq_KHz / 100) * 10 / 7 + 1700;
++                      result4 = 650;
++              } else if (freq_KHz < 449000) {
++                      result2 = (307 - freq_KHz / 1000) * 82 / 27 + 11270;
++                      result3 = (3100 - freq_KHz / 100) * 5 / 3 + 10000;
++                      result4 = 134 * freq_KHz / 10000 + 11875;
++              } else {
++                      result2 = (307 - freq_KHz / 1000) * 82 / 27 + 11270;
++                      result3 = 8400;
++                      result4 = 5300;
 +              }
-+              ndiv = ndiv + ndiv%2;
-+              if(ndiv < 4095)
-+                      ndiv = ndiv - 1024;
-+              else if (ndiv < 6143)
-+                      ndiv = ndiv + 1024;
-+              else
-+                      ndiv = ndiv + 3072;     
-+              
-+              m88ds3103_tuner_writereg(state, 0x01, (ndiv & 0x3f00) >> 8);                                                                                    
-+      }else{
-+              m88ds3103_tuner_writereg(state, 0x10, 0x00);                    
-+              if (realFreq < 1146000){
-+                      m88ds3103_tuner_writereg(state, 0x10, 0x11);
-+                      div4 = 1;
-+                      ndiv = (realFreq * (6 + 8) * 4) / MT_FE_CRYSTAL_KHZ;
-+              }else{
-+                      m88ds3103_tuner_writereg(state, 0x10, 0x01);
-+                      ndiv = (realFreq * (6 + 8) * 2) / MT_FE_CRYSTAL_KHZ;
++              if (tmp1 > 6) {
++                      val1 = result2;
++                      val2 = 2900;
++                      val = 500;
++              } else if (tmp1 > 0) {
++                      val1 = result3;
++                      val2 = 2700;
++                      val = 500;
++              } else {
++                      val1 = result4;
++                      val2 = 2700;
++                      val = 400;
 +              }
-+              ndiv = ndiv + ndiv%2;
-+              ndiv = ndiv - 1024;
-+              m88ds3103_tuner_writereg(state, 0x01, (ndiv>>8)&0x0f);
++              level = val1 - (val2 * tmp1 + 500 * tmp2 + 3000 * tmp3 -
++                          500 * tmp4 + 3000 * tmp5 + val * tmp6) - 1000;
++              level /= 1000;
 +      }
-+      /* set pll */
-+      m88ds3103_tuner_writereg(state, 0x02, ndiv & 0x00ff);
-+      m88ds3103_tuner_writereg(state, 0x03, 0x06);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x0f);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x10);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);    
++      return level;
++}
 +
-+      if(state->tuner_id == TS2022_ID){
-+              if(( realFreq >= 1650000 ) && (realFreq <= 1850000)){
-+                      msleep(5);
-+                      value = m88ds3103_tuner_readreg(state, 0x14);
-+                      value &= 0x7f;
-+                      if(value < 64){
-+                              m88ds3103_tuner_writereg(state, 0x10, 0x82);
-+                              m88ds3103_tuner_writereg(state, 0x11, 0x6f);
 +
-+                              m88ds3103_tuner_writereg(state, 0x51, 0x0f);
-+                              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+                              m88ds3103_tuner_writereg(state, 0x50, 0x10);
-+                              m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+                      }
-+              }
-+              msleep(5);
-+              value = m88ds3103_tuner_readreg(state, 0x14);
-+              value &= 0x1f;
++/* m88dc2800 operation functions */
++u8 M88DC2000GetLock(struct m88dc2800_state * state)
++{
++      u8 u8ret = 0;
++      if (ReadReg(state, 0x80) < 0x06) {
++              if ((ReadReg(state, 0xdf) & 0x80) == 0x80
++                   &&(ReadReg(state, 0x91) & 0x23) == 0x03
++                   &&(ReadReg(state, 0x43) & 0x08) == 0x08)
++                      u8ret = 1;
++              else
++                      u8ret = 0;
++      } else {
++              if ((ReadReg(state, 0x85) & 0x08) == 0x08)
++                      u8ret = 1;
++              else
++                      u8ret = 0;
++      }
++      dprintk("%s, lock=%d\n", __func__, u8ret);
++      return u8ret;
++}
 +
-+              if(value > 19){
-+                      value = m88ds3103_tuner_readreg(state, 0x10);
-+                      value &= 0x1d;
-+                      m88ds3103_tuner_writereg(state, 0x10, value);
-+              }                               
-+      }else{
-+              msleep(5);
-+              value = m88ds3103_tuner_readreg(state, 0x66);
-+              changePLL = (((value & 0x80) >> 7) != div4);
++static int M88DC2000SetTsType(struct m88dc2800_state *state, u8 type)
++{
++      u8 regC2H;
 +
-+              if(changePLL){
-+                      m88ds3103_tuner_writereg(state, 0x10, 0x11);
-+                      div4 = 1;
-+                      ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ;
-+                      ndiv = ndiv + ndiv%2;
-+                      ndiv = ndiv - 1024;
-+                                      
-+                      m88ds3103_tuner_writereg(state, 0x01, (ndiv>>8) & 0x0f);
-+                      m88ds3103_tuner_writereg(state, 0x02, ndiv & 0xff);
-+                      
-+                      m88ds3103_tuner_writereg(state, 0x51, 0x0f);
-+                      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+                      m88ds3103_tuner_writereg(state, 0x50, 0x10);
-+                      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+              }               
++      if (type == 3) {
++              WriteReg(state, 0x84, 0x6A);
++              WriteReg(state, 0xC0, 0x43);
++              WriteReg(state, 0xE2, 0x06);
++              regC2H = ReadReg(state, 0xC2);
++              regC2H &= 0xC0;
++              regC2H |= 0x1B;
++              WriteReg(state, 0xC2, regC2H);
++              WriteReg(state, 0xC1, 0x60);    /* common interface */
++      } else if (type == 1) {
++              WriteReg(state, 0x84, 0x6A);
++              WriteReg(state, 0xC0, 0x47);    /* serial format */
++              WriteReg(state, 0xE2, 0x02);
++              regC2H = ReadReg(state, 0xC2);
++              regC2H &= 0xC7;
++              WriteReg(state, 0xC2, regC2H);
++              WriteReg(state, 0xC1, 0x00);
++      } else {
++              WriteReg(state, 0x84, 0x6C);
++              WriteReg(state, 0xC0, 0x43);    /* parallel format */
++              WriteReg(state, 0xE2, 0x06);
++              regC2H = ReadReg(state, 0xC2);
++              regC2H &= 0xC7;
++              WriteReg(state, 0xC2, regC2H);
++              WriteReg(state, 0xC1, 0x00);
 +      }
-+      /*set the RF gain*/
-+      if(state->tuner_id == TS2020_ID)
-+              m88ds3103_tuner_writereg(state, 0x60, 0x79);
-+                      
-+      m88ds3103_tuner_writereg(state, 0x51, 0x17);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x08);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+      msleep(5);
++      return 0;
++}
 +
-+      if(state->tuner_id == TS2020_ID){
-+              RFgain = m88ds3103_tuner_readreg(state, 0x3d);
-+              RFgain &= 0x0f;
-+              if(RFgain < 15){
-+                      if(RFgain < 4) 
-+                              RFgain = 0;
-+                      else
-+                              RFgain = RFgain -3;
-+                      value = ((RFgain << 3) | 0x01) & 0x79;
-+                      m88ds3103_tuner_writereg(state, 0x60, value);
-+                      m88ds3103_tuner_writereg(state, 0x51, 0x17);
-+                      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+                      m88ds3103_tuner_writereg(state, 0x50, 0x08);
-+                      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+              }
-+      }
-+      
-+      /* set the LPF */
-+      if(state->tuner_id == TS2022_ID){
-+              m88ds3103_tuner_writereg(state, 0x25, 0x00);
-+              m88ds3103_tuner_writereg(state, 0x27, 0x70);
-+              m88ds3103_tuner_writereg(state, 0x41, 0x09);
-+              m88ds3103_tuner_writereg(state, 0x08, 0x0b);
++static int M88DC2000RegInitial_TC2800(struct m88dc2800_state *state)
++{
++      u8 RegE3H, RegE4H;
++
++      WriteReg(state, 0x00, 0x48);
++      WriteReg(state, 0x01, 0x09);
++      WriteReg(state, 0xFB, 0x0A);
++      WriteReg(state, 0xFC, 0x0B);
++      WriteReg(state, 0x02, 0x0B);
++      WriteReg(state, 0x03, 0x18);
++      WriteReg(state, 0x05, 0x0D);
++      WriteReg(state, 0x36, 0x80);
++      WriteReg(state, 0x43, 0x40);
++      WriteReg(state, 0x55, 0x7A);
++      WriteReg(state, 0x56, 0xD9);
++      WriteReg(state, 0x57, 0xDF);
++      WriteReg(state, 0x58, 0x39);
++      WriteReg(state, 0x5A, 0x00);
++      WriteReg(state, 0x5C, 0x71);
++      WriteReg(state, 0x5D, 0x23);
++      WriteReg(state, 0x86, 0x40);
++      WriteReg(state, 0xF9, 0x08);
++      WriteReg(state, 0x61, 0x40);
++      WriteReg(state, 0x62, 0x0A);
++      WriteReg(state, 0x90, 0x06);
++      WriteReg(state, 0xDE, 0x00);
++      WriteReg(state, 0xA0, 0x03);
++      WriteReg(state, 0xDF, 0x81);
++      WriteReg(state, 0xFA, 0x40);
++      WriteReg(state, 0x37, 0x10);
++      WriteReg(state, 0xF0, 0x40);
++      WriteReg(state, 0xF2, 0x9C);
++      WriteReg(state, 0xF3, 0x40);
++      RegE3H = ReadReg(state, 0xE3);
++      RegE4H = ReadReg(state, 0xE4);
++      if (((RegE3H & 0xC0) == 0x00) && ((RegE4H & 0xC0) == 0x00)) {
++              WriteReg(state, 0x30, 0xFF);
++              WriteReg(state, 0x31, 0x00);
++              WriteReg(state, 0x32, 0x00);
++              WriteReg(state, 0x33, 0x00);
++              WriteReg(state, 0x35, 0x32);
++              WriteReg(state, 0x40, 0x00);
++              WriteReg(state, 0x41, 0x10);
++              WriteReg(state, 0xF1, 0x02);
++              WriteReg(state, 0xF4, 0x04);
++              WriteReg(state, 0xF5, 0x00);
++              WriteReg(state, 0x42, 0x14);
++              WriteReg(state, 0xE1, 0x25);
++      } else if (((RegE3H & 0xC0) == 0x80) && ((RegE4H & 0xC0) == 0x40)) {
++              WriteReg(state, 0x30, 0xFF);
++              WriteReg(state, 0x31, 0x00);
++              WriteReg(state, 0x32, 0x00);
++              WriteReg(state, 0x33, 0x00);
++              WriteReg(state, 0x35, 0x32);
++              WriteReg(state, 0x39, 0x00);
++              WriteReg(state, 0x3A, 0x00);
++              WriteReg(state, 0x40, 0x00);
++              WriteReg(state, 0x41, 0x10);
++              WriteReg(state, 0xF1, 0x00);
++              WriteReg(state, 0xF4, 0x00);
++              WriteReg(state, 0xF5, 0x40);
++              WriteReg(state, 0x42, 0x14);
++              WriteReg(state, 0xE1, 0x25);
++      } else if ((RegE3H == 0x80 || RegE3H == 0x81)
++                  && (RegE4H == 0x80 || RegE4H == 0x81)) {
++              WriteReg(state, 0x30, 0xFF);
++              WriteReg(state, 0x31, 0x00);
++              WriteReg(state, 0x32, 0x00);
++              WriteReg(state, 0x33, 0x00);
++              WriteReg(state, 0x35, 0x32);
++              WriteReg(state, 0x39, 0x00);
++              WriteReg(state, 0x3A, 0x00);
++              WriteReg(state, 0xF1, 0x00);
++              WriteReg(state, 0xF4, 0x00);
++              WriteReg(state, 0xF5, 0x40);
++              WriteReg(state, 0x42, 0x24);
++              WriteReg(state, 0xE1, 0x25);
++              WriteReg(state, 0x92, 0x7F);
++              WriteReg(state, 0x93, 0x91);
++              WriteReg(state, 0x95, 0x00);
++              WriteReg(state, 0x2B, 0x33);
++              WriteReg(state, 0x2A, 0x2A);
++              WriteReg(state, 0x2E, 0x80);
++              WriteReg(state, 0x25, 0x25);
++              WriteReg(state, 0x2D, 0xFF);
++              WriteReg(state, 0x26, 0xFF);
++              WriteReg(state, 0x27, 0x00);
++              WriteReg(state, 0x24, 0x25);
++              WriteReg(state, 0xA4, 0xFF);
++              WriteReg(state, 0xA3, 0x0D);
++      } else {
++              WriteReg(state, 0x30, 0xFF);
++              WriteReg(state, 0x31, 0x00);
++              WriteReg(state, 0x32, 0x00);
++              WriteReg(state, 0x33, 0x00);
++              WriteReg(state, 0x35, 0x32);
++              WriteReg(state, 0x39, 0x00);
++              WriteReg(state, 0x3A, 0x00);
++              WriteReg(state, 0xF1, 0x00);
++              WriteReg(state, 0xF4, 0x00);
++              WriteReg(state, 0xF5, 0x40);
++              WriteReg(state, 0x42, 0x24);
++              WriteReg(state, 0xE1, 0x27);
++              WriteReg(state, 0x92, 0x7F);
++              WriteReg(state, 0x93, 0x91);
++              WriteReg(state, 0x95, 0x00);
++              WriteReg(state, 0x2B, 0x33);
++              WriteReg(state, 0x2A, 0x2A);
++              WriteReg(state, 0x2E, 0x80);
++              WriteReg(state, 0x25, 0x25);
++              WriteReg(state, 0x2D, 0xFF);
++              WriteReg(state, 0x26, 0xFF);
++              WriteReg(state, 0x27, 0x00);
++              WriteReg(state, 0x24, 0x25);
++              WriteReg(state, 0xA4, 0xFF);
++              WriteReg(state, 0xA3, 0x10);
 +      }
++      WriteReg(state, 0xF6, 0x4E);
++      WriteReg(state, 0xF7, 0x20);
++      WriteReg(state, 0x89, 0x02);
++      WriteReg(state, 0x14, 0x08);
++      WriteReg(state, 0x6F, 0x0D);
++      WriteReg(state, 0x10, 0xFF);
++      WriteReg(state, 0x11, 0x00);
++      WriteReg(state, 0x12, 0x30);
++      WriteReg(state, 0x13, 0x23);
++      WriteReg(state, 0x60, 0x00);
++      WriteReg(state, 0x69, 0x00);
++      WriteReg(state, 0x6A, 0x03);
++      WriteReg(state, 0xE0, 0x75);
++      WriteReg(state, 0x8D, 0x29);
++      WriteReg(state, 0x4E, 0xD8);
++      WriteReg(state, 0x88, 0x80);
++      WriteReg(state, 0x52, 0x79);
++      WriteReg(state, 0x53, 0x03);
++      WriteReg(state, 0x59, 0x30);
++      WriteReg(state, 0x5E, 0x02);
++      WriteReg(state, 0x5F, 0x0F);
++      WriteReg(state, 0x71, 0x03);
++      WriteReg(state, 0x72, 0x12);
++      WriteReg(state, 0x73, 0x12);
 +
-+      f3db = ((c->symbol_rate / 1000) *135) / 200 + 2000;
-+      f3db += lpf_offset_KHz;
-+      if (f3db < 7000)
-+              f3db = 7000;
-+      if (f3db > 40000)
-+              f3db = 40000;
-+                      
-+      gdiv28 = (MT_FE_CRYSTAL_KHZ / 1000 * 1694 + 500) / 1000;
-+      m88ds3103_tuner_writereg(state, 0x04, gdiv28 & 0xff);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1b);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x04);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+      msleep(5);
-+
-+      value = m88ds3103_tuner_readreg(state, 0x26);
-+      capCode = value & 0x3f;
-+      if(state->tuner_id == TS2022_ID){
-+              m88ds3103_tuner_writereg(state, 0x41, 0x0d);
-+
-+              m88ds3103_tuner_writereg(state, 0x51, 0x1b);
-+              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+              m88ds3103_tuner_writereg(state, 0x50, 0x04);
-+              m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+
-+              msleep(2);
++      return 0;
++}
 +
-+              value = m88ds3103_tuner_readreg(state, 0x26);
-+              value &= 0x3f;
-+              value = (capCode + value) / 2;          
++static int M88DC2000AutoTSClock_P(struct m88dc2800_state *state, u32 sym,
++                                u16 qam)
++{
++      u32 dataRate;
++      u8 clk_div, value;
++      printk(KERN_INFO
++             "m88dc2800: M88DC2000AutoTSClock_P, symrate=%d qam=%d\n",
++             sym, qam);
++      switch (qam) {
++      case 16:
++              dataRate = 4;
++              break;
++      case 32:
++              dataRate = 5;
++              break;
++      case 128:
++              dataRate = 7;
++              break;
++      case 256:
++              dataRate = 8;
++              break;
++      case 64:
++      default:
++              dataRate = 6;
++              break;
 +      }
++      dataRate *= sym * 105;
++      dataRate /= 800;
++      if (dataRate <= 4115)
++              clk_div = 0x05;
++      else if (dataRate <= 4800)
++              clk_div = 0x04;
++      else if (dataRate <= 5760)
++              clk_div = 0x03;
++      else if (dataRate <= 7200)
++              clk_div = 0x02;
++      else if (dataRate <= 9600)
++              clk_div = 0x01;
 +      else
-+              value = capCode;
-+              
-+      gdiv28 = gdiv28 * 207 / (value * 2 + 151);      
-+      mlpf_max = gdiv28 * 135 / 100;
-+      mlpf_min = gdiv28 * 78 / 100;
-+      if (mlpf_max > 63)
-+              mlpf_max = 63;
-+
-+      if(state->tuner_id == TS2022_ID)
-+              lpf_coeff = 3200;
-+      else
-+              lpf_coeff = 2766;
-+              
-+      nlpf = (f3db * gdiv28 * 2 / lpf_coeff / (MT_FE_CRYSTAL_KHZ / 1000)  + 1) / 2 ;  
-+      if (nlpf > 23) nlpf = 23;
-+      if (nlpf < 1) nlpf = 1;
-+
-+      lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2 / f3db + 1) / 2;
-+
-+      if (lpf_mxdiv < mlpf_min){
-+              nlpf++;
-+              lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2  / f3db + 1) / 2;
-+      }
-+
-+      if (lpf_mxdiv > mlpf_max)
-+              lpf_mxdiv = mlpf_max;
-+
-+      m88ds3103_tuner_writereg(state, 0x04, lpf_mxdiv);
-+      m88ds3103_tuner_writereg(state, 0x06, nlpf);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1b);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x04);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+      msleep(5);
-+      
-+      if(state->tuner_id == TS2022_ID){
-+              msleep(2);
-+              value = m88ds3103_tuner_readreg(state, 0x26);
-+              capCode = value & 0x3f;
-+
-+              m88ds3103_tuner_writereg(state, 0x41, 0x09);
-+
-+              m88ds3103_tuner_writereg(state, 0x51, 0x1b);
-+              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+              m88ds3103_tuner_writereg(state, 0x50, 0x04);
-+              m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+
-+              msleep(2);
-+              value = m88ds3103_tuner_readreg(state, 0x26);
-+              value &= 0x3f;
-+              value = (capCode + value) / 2;
-+
-+              value = value | 0x80;
-+              m88ds3103_tuner_writereg(state, 0x25, value);
-+              m88ds3103_tuner_writereg(state, 0x27, 0x30);
-+
-+              m88ds3103_tuner_writereg(state, 0x08, 0x09);            
-+      }
-+
-+      /* Set the BB gain */
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1e);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x01);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+      if(state->tuner_id == TS2020_ID){
-+              if(RFgain == 15){
-+                      msleep(40);
-+                      value = m88ds3103_tuner_readreg(state, 0x21);
-+                      value &= 0x0f;
-+                      if(value < 3){
-+                              m88ds3103_tuner_writereg(state, 0x60, 0x61);
-+                              m88ds3103_tuner_writereg(state, 0x51, 0x17);
-+                              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+                              m88ds3103_tuner_writereg(state, 0x50, 0x08);
-+                              m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+                      }                       
-+              }
-+      }
-+      msleep(60);
-+      
-+      offset_khz = (ndiv - ndiv % 2 + 1024) * MT_FE_CRYSTAL_KHZ
-+              / (6 + 8) / (div4 + 1) / 2 - realFreq;
-+
-+      m88ds3103_demod_connect(fe, offset_khz+lpf_offset_KHz);
++              clk_div = 0x00;
++      value = ReadReg(state, 0xC2);
++      value &= 0xc0;
++      value |= clk_div;
++      WriteReg(state, 0xC2, value);
++      return 0;
++}
 +
-+      for (i = 0; i < 30 ; i++) {
-+              m88ds3103_read_status(fe, &status);
-+              if (status & FE_HAS_LOCK){
-+                      break;
-+                }
-+              msleep(20);
-+      }
-+      
-+      if((status & FE_HAS_LOCK) == 0){
-+              state->delivery_system = (state->delivery_system == SYS_DVBS) ? SYS_DVBS2 : SYS_DVBS;
-+              m88ds3103_demod_connect(fe, offset_khz);
-+      
-+              for (i = 0; i < 30 ; i++) {
-+                      m88ds3103_read_status(fe, &status);
-+                      if (status & FE_HAS_LOCK){
-+                              break;
-+                      }
-+                      msleep(20);
-+              }
-+      }
-+      
-+      if (status & FE_HAS_LOCK){
-+              if(state->config->ci_mode == 2)
-+                      m88ds3103_set_clock_ratio(state);
-+              if(state->config->start_ctrl){
-+                      if(state->first_lock == 0){
-+                              state->config->start_ctrl(fe);
-+                              state->first_lock = 1;  
-+                      }
-+              }               
++static int M88DC2000AutoTSClock_C(struct m88dc2800_state *state, u32 sym,
++                                u16 qam)
++{
++      u32 dataRate;
++      u8 clk_div, value;
++      printk(KERN_INFO
++             "m88dc2800: M88DC2000AutoTSClock_C, symrate=%d qam=%d\n",
++             sym, qam);
++      switch (qam) {
++      case 16:
++              dataRate = 4;
++              break;
++      case 32:
++              dataRate = 5;
++              break;
++      case 128:
++              dataRate = 7;
++              break;
++      case 256:
++              dataRate = 8;
++              break;
++      case 64:
++      default:
++              dataRate = 6;
++              break;
 +      }
-+              
++      dataRate *= sym * 105;
++      dataRate /= 800;
++      if (dataRate <= 4115)
++              clk_div = 0x3F;
++      else if (dataRate <= 4800)
++              clk_div = 0x36;
++      else if (dataRate <= 5760)
++              clk_div = 0x2D;
++      else if (dataRate <= 7200)
++              clk_div = 0x24;
++      else if (dataRate <= 9600)
++              clk_div = 0x1B;
++      else
++              clk_div = 0x12;
++      value = ReadReg(state, 0xC2);
++      value &= 0xc0;
++      value |= clk_div;
++      WriteReg(state, 0xC2, value);
 +      return 0;
 +}
 +
-+static int m88ds3103_tune(struct dvb_frontend *fe,
-+                      bool re_tune,
-+                      unsigned int mode_flags,
-+                      unsigned int *delay,
-+                      fe_status_t *status)
-+{     
-+      *delay = HZ / 5;
-+      
-+      dprintk("%s() ", __func__);
-+      dprintk("re_tune = %d\n", re_tune);
-+      
-+      if (re_tune) {
-+              int ret = m88ds3103_set_frontend(fe);
-+              if (ret)
-+                      return ret;
-+      }
-+      
-+      return m88ds3103_read_status(fe, status);
++static int M88DC2000SetTxMode(struct m88dc2800_state *state, u8 inverted,
++                            u8 j83)
++{
++      u8 value = 0;
++      if (inverted)
++              value |= 0x08;  /*      spectrum inverted       */
++      if (j83)
++              value |= 0x01;  /*      J83C                    */
++      WriteReg(state, 0x83, value);
++      return 0;
 +}
 +
-+static enum dvbfe_algo m88ds3103_get_algo(struct dvb_frontend *fe)
++static int M88DC2000SoftReset(struct m88dc2800_state *state)
 +{
-+      return DVBFE_ALGO_HW;
++      WriteReg(state, 0x80, 0x01);
++      WriteReg(state, 0x82, 0x00);
++      msleep(1);
++      WriteReg(state, 0x80, 0x00);
++      return 0;
 +}
-+ 
-+ /*
-+ * Power config will reset and load initial firmware if required
-+ */
-+static int m88ds3103_initilaze(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      int ret;
 +
-+      dprintk("%s()\n", __func__);
-+      /* hard reset */
-+      m88ds3103_writereg(state, 0x07, 0x80);
-+      m88ds3103_writereg(state, 0x07, 0x00);
-+      msleep(1);
-+      
-+      m88ds3103_writereg(state, 0x08, 0x01 | m88ds3103_readreg(state, 0x08));
-+      msleep(1);
++static int M88DC2000SetSym(struct m88dc2800_state *state, u32 sym, u32 xtal)
++{
++      u8 value;
++      u8 reg6FH, reg12H;
++      u64 fValue;
++      u32 dwValue;
 +
-+      if(state->tuner_id == TS2020_ID){
-+              /* TS2020 init */
-+              m88ds3103_tuner_writereg(state, 0x42, 0x73);
-+              msleep(2);
-+              m88ds3103_tuner_writereg(state, 0x05, 0x01);
-+              m88ds3103_tuner_writereg(state, 0x62, 0xb5);
-+              m88ds3103_tuner_writereg(state, 0x07, 0x02);
-+              m88ds3103_tuner_writereg(state, 0x08, 0x01);
-+      }
-+      else if(state->tuner_id == TS2022_ID){
-+              /* TS2022 init */
-+              m88ds3103_tuner_writereg(state, 0x62, 0x6c);
-+              msleep(2);
-+              m88ds3103_tuner_writereg(state, 0x42, 0x6c);
-+              msleep(2);
-+              m88ds3103_tuner_writereg(state, 0x7d, 0x9d);
-+              m88ds3103_tuner_writereg(state, 0x7c, 0x9a);
-+              m88ds3103_tuner_writereg(state, 0x7a, 0x76);
++      printk(KERN_INFO "%s, sym=%d, xtal=%d\n", __func__, sym, xtal);
++      fValue = 4294967296 * (sym + 10);
++      do_div(fValue, xtal);
 +
-+              m88ds3103_tuner_writereg(state, 0x3b, 0x01);
-+              m88ds3103_tuner_writereg(state, 0x63, 0x88);
++      /* fValue  = 4294967296 * (sym + 10) / xtal; */
++      dwValue = (u32) fValue;
++      printk(KERN_INFO "%s, fvalue1=%x\n", __func__, dwValue);
++      WriteReg(state, 0x58, (u8) ((dwValue >> 24) & 0xff));
++      WriteReg(state, 0x57, (u8) ((dwValue >> 16) & 0xff));
++      WriteReg(state, 0x56, (u8) ((dwValue >> 8) & 0xff));
++      WriteReg(state, 0x55, (u8) ((dwValue >> 0) & 0xff));
 +
-+              m88ds3103_tuner_writereg(state, 0x61, 0x85);
-+              m88ds3103_tuner_writereg(state, 0x22, 0x30);
-+              m88ds3103_tuner_writereg(state, 0x30, 0x40);
-+              m88ds3103_tuner_writereg(state, 0x20, 0x23);
-+              m88ds3103_tuner_writereg(state, 0x24, 0x02);
-+              m88ds3103_tuner_writereg(state, 0x12, 0xa0);    
-+      }
-+              
-+      if(state->demod_id == DS3103_ID){
-+              m88ds3103_writereg(state, 0x07, 0xe0);
-+              m88ds3103_writereg(state, 0x07, 0x00);
-+              msleep(1);              
++      /* fValue = 2048 * xtal / sym; */
++      fValue = 2048 * xtal;
++      do_div(fValue, sym);
++      dwValue = (u32) fValue;
++      printk(KERN_INFO "%s, fvalue2=%x\n", __func__, dwValue);
++      WriteReg(state, 0x5D, (u8) ((dwValue >> 8) & 0xff));
++      WriteReg(state, 0x5C, (u8) ((dwValue >> 0) & 0xff));
++      value = ReadReg(state, 0x5A);
++      if (((dwValue >> 16) & 0x0001) == 0)
++              value &= 0x7F;
++      else
++              value |= 0x80;
++      WriteReg(state, 0x5A, value);
++      value = ReadReg(state, 0x89);
++      if (sym <= 1800)
++              value |= 0x01;
++      else
++              value &= 0xFE;
++      WriteReg(state, 0x89, value);
++      if (sym >= 6700) {
++              reg6FH = 0x0D;
++              reg12H = 0x30;
++      } else if (sym >= 4000) {
++              fValue = 22 * 4096 / sym;
++              reg6FH = (u8) fValue;
++              reg12H = 0x30;
++      } else if (sym >= 2000) {
++              fValue = 14 * 4096 / sym;
++              reg6FH = (u8) fValue;
++              reg12H = 0x20;
++      } else {
++              fValue = 7 * 4096 / sym;
++              reg6FH = (u8) fValue;
++              reg12H = 0x10;
 +      }
-+      m88ds3103_writereg(state, 0xb2, 0x01);
-+      
-+      /* Load the firmware if required */
-+      ret = m88ds3103_load_firmware(fe);
-+      if (ret != 0){
-+              printk(KERN_ERR "%s: Unable initialize firmware\n", __func__);
-+              return ret;
++      WriteReg(state, 0x6F, reg6FH);
++      WriteReg(state, 0x12, reg12H);
++      if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
++             && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
++              if (sym < 3000) {
++                      WriteReg(state, 0x6C, 0x16);
++                      WriteReg(state, 0x6D, 0x10);
++                      WriteReg(state, 0x6E, 0x18);
++              } else {
++                      WriteReg(state, 0x6C, 0x14);
++                      WriteReg(state, 0x6D, 0x0E);
++                      WriteReg(state, 0x6E, 0x36);
++              }
++      } else {
++              WriteReg(state, 0x6C, 0x16);
++              WriteReg(state, 0x6D, 0x10);
++              WriteReg(state, 0x6E, 0x18);
 +      }
-+      if(state->demod_id == DS3103_ID){
-+              m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d));
-+              m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30));         
++      return 0;
++}
++
++static int M88DC2000SetQAM(struct m88dc2800_state *state, u16 qam)
++{
++      u8 reg00H, reg4AH, regC2H, reg44H, reg4CH, reg4DH, reg74H, value;
++      u8 reg8BH, reg8EH;
++      printk(KERN_INFO "%s, qam=%d\n", __func__, qam);
++      regC2H = ReadReg(state, 0xC2);
++      regC2H &= 0xF8;
++      switch (qam) {
++      case 16:                /* 16 QAM */
++              reg00H = 0x08;
++              reg4AH = 0x0F;
++              regC2H |= 0x02;
++              reg44H = 0xAA;
++              reg4CH = 0x0C;
++              reg4DH = 0xF7;
++              reg74H = 0x0E;
++              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
++                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
++                      reg8BH = 0x5A;
++                      reg8EH = 0xBD;
++              } else {
++                      reg8BH = 0x5B;
++                      reg8EH = 0x9D;
++              }
++              WriteReg(state, 0x6E, 0x18);
++              break;
++      case 32:                /* 32 QAM */
++              reg00H = 0x18;
++              reg4AH = 0xFB;
++              regC2H |= 0x02;
++              reg44H = 0xAA;
++              reg4CH = 0x0C;
++              reg4DH = 0xF7;
++              reg74H = 0x0E;
++              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
++                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
++                      reg8BH = 0x5A;
++                      reg8EH = 0xBD;
++              } else {
++                      reg8BH = 0x5B;
++                      reg8EH = 0x9D;
++              }
++              WriteReg(state, 0x6E, 0x18);
++              break;
++      case 64:                /* 64 QAM */
++              reg00H = 0x48;
++              reg4AH = 0xCD;
++              regC2H |= 0x02;
++              reg44H = 0xAA;
++              reg4CH = 0x0C;
++              reg4DH = 0xF7;
++              reg74H = 0x0E;
++              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
++                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
++                      reg8BH = 0x5A;
++                      reg8EH = 0xBD;
++              } else {
++                      reg8BH = 0x5B;
++                      reg8EH = 0x9D;
++              }
++              break;
++      case 128:               /* 128 QAM */
++              reg00H = 0x28;
++              reg4AH = 0xFF;
++              regC2H |= 0x02;
++              reg44H = 0xA9;
++              reg4CH = 0x08;
++              reg4DH = 0xF5;
++              reg74H = 0x0E;
++              reg8BH = 0x5B;
++              reg8EH = 0x9D;
++              break;
++      case 256:               /* 256 QAM */
++              reg00H = 0x38;
++              reg4AH = 0xCD;
++              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
++                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
++                      regC2H |= 0x02;
++              } else {
++                      regC2H |= 0x01;
++              }
++              reg44H = 0xA9;
++              reg4CH = 0x08;
++              reg4DH = 0xF5;
++              reg74H = 0x0E;
++              reg8BH = 0x5B;
++              reg8EH = 0x9D;
++              break;
++      default:                /* 64 QAM */
++              reg00H = 0x48;
++              reg4AH = 0xCD;
++              regC2H |= 0x02;
++              reg44H = 0xAA;
++              reg4CH = 0x0C;
++              reg4DH = 0xF7;
++              reg74H = 0x0E;
++              if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
++                   && ((ReadReg(state, 0xE4) & 0x80) == 0x80)) {
++                      reg8BH = 0x5A;
++                      reg8EH = 0xBD;
++              } else {
++                      reg8BH = 0x5B;
++                      reg8EH = 0x9D;
++              }
++              break;
 +      }
-+
++      WriteReg(state, 0x00, reg00H);
++      value = ReadReg(state, 0x88);
++      value |= 0x08;
++      WriteReg(state, 0x88, value);
++      WriteReg(state, 0x4B, 0xFF);
++      WriteReg(state, 0x4A, reg4AH);
++      value &= 0xF7;
++      WriteReg(state, 0x88, value);
++      WriteReg(state, 0xC2, regC2H);
++      WriteReg(state, 0x44, reg44H);
++      WriteReg(state, 0x4C, reg4CH);
++      WriteReg(state, 0x4D, reg4DH);
++      WriteReg(state, 0x74, reg74H);
++      WriteReg(state, 0x8B, reg8BH);
++      WriteReg(state, 0x8E, reg8EH);
 +      return 0;
 +}
 +
-+/*
-+ * Initialise or wake up device
-+ */
-+static int m88ds3103_initfe(struct dvb_frontend *fe)
++static int M88DC2000WriteTuner_TC2800(struct m88dc2800_state *state,
++                                    u32 freq_KHz)
 +{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 val;
-+
-+      dprintk("%s()\n", __func__);
-+
-+      /* 1st step to wake up demod */
-+      m88ds3103_writereg(state, 0x08, 0x01 | m88ds3103_readreg(state, 0x08));
-+      m88ds3103_writereg(state, 0x04, 0xfe & m88ds3103_readreg(state, 0x04));
-+      m88ds3103_writereg(state, 0x23, 0xef & m88ds3103_readreg(state, 0x23));
-+      
-+      /* 2nd step to wake up tuner */
-+      val = m88ds3103_tuner_readreg(state, 0x00) & 0xff;
-+      if((val & 0x01) == 0){
-+              m88ds3103_tuner_writereg(state, 0x00, 0x01);
-+              msleep(50);
-+      }
-+      m88ds3103_tuner_writereg(state, 0x00, 0x03);
-+      msleep(50);
-+      
-+      return 0;       
++      printk(KERN_INFO "%s, freq=%d KHz\n", __func__, freq_KHz);
++      return mt_fe_tn_set_freq_tc2800(state, freq_KHz);
 +}
 +
-+/* Put device to sleep */
-+static int m88ds3103_sleep(struct dvb_frontend *fe)
++static int m88dc2800_init(struct dvb_frontend *fe)
 +{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+
 +      dprintk("%s()\n", __func__);
-+      
-+      /* 1st step to sleep tuner */
-+      m88ds3103_tuner_writereg(state, 0x00, 0x00);
-+      
-+      /* 2nd step to sleep demod */
-+      m88ds3103_writereg(state, 0x08, 0xfe & m88ds3103_readreg(state, 0x08));
-+      m88ds3103_writereg(state, 0x04, 0x01 | m88ds3103_readreg(state, 0x04));
-+      m88ds3103_writereg(state, 0x23, 0x10 | m88ds3103_readreg(state, 0x23));
-+      
-+
 +      return 0;
 +}
 +
-+static struct dvb_frontend_ops m88ds3103_ops = {
-+      .delsys = { SYS_DVBS, SYS_DVBS2},
-+      .info = {
-+              .name = "Montage DS3103/TS2022",
-+              .type = FE_QPSK,
-+              .frequency_min = 950000,
-+              .frequency_max = 2150000,
-+              .frequency_stepsize = 1011, /* kHz for QPSK frontends */
-+              .frequency_tolerance = 5000,
-+              .symbol_rate_min = 1000000,
-+              .symbol_rate_max = 45000000,
-+              .caps = FE_CAN_INVERSION_AUTO |
-+                      FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
-+                      FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
-+                      FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
-+                      FE_CAN_2G_MODULATION |
-+                      FE_CAN_QPSK | FE_CAN_RECOVER
-+      },
-+
-+      .release = m88ds3103_release,
-+
-+      .init = m88ds3103_initfe,
-+      .sleep = m88ds3103_sleep,
-+      .read_status = m88ds3103_read_status,
-+      .read_ber = m88ds3103_read_ber,
-+      .read_signal_strength = m88ds3103_read_signal_strength,
-+      .read_snr = m88ds3103_read_snr,
-+      .read_ucblocks = m88ds3103_read_ucblocks,
-+      .set_tone = m88ds3103_set_tone,
-+      .set_voltage = m88ds3103_set_voltage,
-+      .diseqc_send_master_cmd = m88ds3103_send_diseqc_msg,
-+      .diseqc_send_burst = m88ds3103_diseqc_send_burst,
-+      .get_frontend_algo = m88ds3103_get_algo,
-+      .tune = m88ds3103_tune,
-+      .set_frontend = m88ds3103_set_frontend,
-+};
++static int m88dc2800_set_parameters(struct dvb_frontend *fe)
++{
++      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
++      u8 is_annex_c, is_update;
++      u16 temp_qam;
++      s32 waiting_time;
++      struct m88dc2800_state *state = fe->demodulator_priv;
 +
-+MODULE_DESCRIPTION("DVB Frontend module for Montage DS3103/TS2022 hardware");
-+MODULE_AUTHOR("Max nibble");
-+MODULE_LICENSE("GPL");
-diff -urN a/drivers/media/dvb-frontends/m88ds3103.h b/drivers/media/dvb-frontends/m88ds3103.h
---- a/drivers/media/dvb-frontends/m88ds3103.h  1970-01-01 08:00:00.000000000 +0800
-+++ b/drivers/media/dvb-frontends/m88ds3103.h  2013-01-30 12:33:51.000000000 +0800
-@@ -0,0 +1,53 @@
-+/*
-+    Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver
++      is_annex_c = c->delivery_system == SYS_DVBC_ANNEX_C ? 1 : 0;
 +
-+    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.
++      switch (c->modulation) {
++      case QAM_16:
++              temp_qam = 16;
++              break;
++      case QAM_32:
++              temp_qam = 32;
++              break;
++      case QAM_128:
++              temp_qam = 128;
++              break;
++      case QAM_256:
++              temp_qam = 256;
++              break;
++      default:                /* QAM_64 */
++              temp_qam = 64;
++              break;
++      }
 +
-+    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.
++      state->inverted = c->inversion == INVERSION_ON ? 1 : 0;
 +
-+    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.
-+ */
++      printk(KERN_INFO
++           "m88dc2800: state, freq=%d qam=%d sym=%d inverted=%d xtal=%d\n",
++           state->freq, state->qam, state->sym, state->inverted,
++           state->xtal);
++      printk(KERN_INFO
++           "m88dc2800: set frequency to %d qam=%d symrate=%d annex-c=%d\n",
++           c->frequency, temp_qam, c->symbol_rate, is_annex_c);
 +
-+#ifndef M88DS3103_H
-+#define M88DS3103_H
++      is_update = 0;
++      WriteReg(state, 0x80, 0x01);
++      if (c->frequency != state->freq) {
++              M88DC2000WriteTuner_TC2800(state, c->frequency / 1000);
++              state->freq = c->frequency;
++      }
++      if (c->symbol_rate != state->sym) {
++              M88DC2000SetSym(state, c->symbol_rate / 1000, state->xtal);
++              state->sym = c->symbol_rate;
++              is_update = 1;
++      }
++      if (temp_qam != state->qam) {
++              M88DC2000SetQAM(state, temp_qam);
++              state->qam = temp_qam;
++              is_update = 1;
++      }
 +
-+#include <linux/dvb/frontend.h>
++      if (is_update != 0) {
++              if (state->config->ts_mode == 3)
++                      M88DC2000AutoTSClock_C(state, state->sym / 1000,
++                                             temp_qam);
++              else
++                      M88DC2000AutoTSClock_P(state, state->sym / 1000,
++                                             temp_qam);
++      }
 +
-+struct m88ds3103_config {
-+      /* the demodulator's i2c address */
-+      u8 demod_address;
-+      u8 ci_mode;
-+      u8 pin_ctrl;
-+      u8 ts_mode; /* 0: Parallel, 1: Serial */
++      M88DC2000SetTxMode(state, state->inverted, is_annex_c);
++      M88DC2000SoftReset(state);
++      if (((ReadReg(state, 0xE3) & 0x80) == 0x80)
++          && ((ReadReg(state, 0xE4) & 0x80) == 0x80))
++              waiting_time = 800;
++      else
++              waiting_time = 500;
++      while (waiting_time > 0) {
++              msleep(50);
++              waiting_time -= 50;
++              if (M88DC2000GetLock(state))
++                      return 0;
++      }
 +
-+      /* Set device param to start dma */
-+      int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured);
-+    /* Start to transfer data */
-+    int (*start_ctrl)(struct dvb_frontend *fe);
-+    /* Set LNB voltage */
-+    int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
-+};
++      state->inverted = (state->inverted != 0) ? 0 : 1;
++      M88DC2000SetTxMode(state, state->inverted, is_annex_c);
++      M88DC2000SoftReset(state);
++      if (((ReadReg(state, 0xE3) & 0x80) == 0x80) &&
++          ((ReadReg(state, 0xE4) & 0x80) == 0x80))
++              waiting_time = 800;
++      else
++              waiting_time = 500;
++      while (waiting_time > 0) {
++              msleep(50);
++              waiting_time -= 50;
++              if (M88DC2000GetLock(state))
++                      return 0;
++      }
++      return 0;
++}
 +
-+#if defined(CONFIG_DVB_M88DS3103) || \
-+      (defined(CONFIG_DVB_M88DS3103_MODULE) && defined(MODULE))
-+extern struct dvb_frontend *m88ds3103_attach(
-+       const struct m88ds3103_config *config,
-+       struct i2c_adapter *i2c);
-+#else
-+static inline struct dvb_frontend *m88ds3103_attach(
-+       const struct m88ds3103_config *config,
-+       struct i2c_adapter *i2c)
++static int m88dc2800_read_status(struct dvb_frontend *fe,
++                               fe_status_t * status)
 +{
-+      printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
-+      return NULL;
++      struct m88dc2800_state *state = fe->demodulator_priv;
++      *status = 0;
++
++      if (M88DC2000GetLock(state)) {
++              *status = FE_HAS_SIGNAL | FE_HAS_CARRIER
++                  |FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_LOCK;
++      }
++      return 0;
 +}
-+#endif /* CONFIG_DVB_M88DS3103 */
-+#endif /* M88DS3103_H */
-diff -urN a/drivers/media/dvb-frontends/m88ds3103_priv.h b/drivers/media/dvb-frontends/m88ds3103_priv.h
---- a/drivers/media/dvb-frontends/m88ds3103_priv.h     1970-01-01 08:00:00.000000000 +0800
-+++ b/drivers/media/dvb-frontends/m88ds3103_priv.h     2013-01-30 12:33:56.000000000 +0800
-@@ -0,0 +1,403 @@
-+/*
-+    Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver
 +
-+    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.
++static int m88dc2800_read_ber(struct dvb_frontend *fe, u32 * ber)
++{
++      struct m88dc2800_state *state = fe->demodulator_priv;
++      u16 tmp;
 +
-+    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.
++      if (M88DC2000GetLock(state) == 0) {
++              state->ber = 0;
++      } else if ((ReadReg(state, 0xA0) & 0x80) != 0x80) {
++              tmp = ReadReg(state, 0xA2) << 8;
++              tmp += ReadReg(state, 0xA1);
++              state->ber = tmp;
++              WriteReg(state, 0xA0, 0x05);
++              WriteReg(state, 0xA0, 0x85);
++      }
++      *ber = state->ber;
++      return 0;
++}
 +
-+    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.
-+ */
++static int m88dc2800_read_signal_strength(struct dvb_frontend *fe,
++                                        u16 * strength)
++{
++      struct m88dc2800_state *state = fe->demodulator_priv;
++      s16 tuner_strength;
 +
-+#ifndef M88DS3103_PRIV_H
-+#define M88DS3103_PRIV_H
++      tuner_strength = mt_fe_tn_get_signal_strength_tc2800(state);
++      *strength = tuner_strength < -107 ? 0 : tuner_strength + 107;
 +
-+#define FW_DOWN_SIZE 32
-+#define FW_DOWN_LOOP (8192/FW_DOWN_SIZE)
-+#define DS3103_DEFAULT_FIRMWARE "dvb-fe-ds3103.fw"
-+#define DS3000_DEFAULT_FIRMWARE "dvb-fe-ds300x.fw"
-+#define MT_FE_MCLK_KHZ 96000 /* in kHz */
-+#define MT_FE_CRYSTAL_KHZ   27000 /* in kHz */
-+#define FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz 3000
-+#define DS3000_ID     0x3000
-+#define DS3103_ID     0x3103
-+#define TS2020_ID     0x2020
-+#define TS2022_ID     0x2022
-+#define UNKNOW_ID     0x0000
++      return 0;
++}
 +
-+struct m88ds3103_state {
-+      struct i2c_adapter *i2c;
-+      const struct m88ds3103_config *config;
-+      
-+      struct dvb_frontend frontend;
-+      
-+      u32 preBer;
-+      u8 skip_fw_load;        
-+      u8 first_lock; /* The first time of signal lock */
-+      u16 demod_id; /* demod chip type */
-+      u16 tuner_id; /* tuner chip type */
-+      fe_delivery_system_t delivery_system;
-+};
++static int m88dc2800_read_snr(struct dvb_frontend *fe, u16 * snr)
++{
++      static const u32 mes_log[] = {
++              0, 3010, 4771, 6021, 6990, 7781, 8451, 9031, 9542, 10000,
++              10414, 10792, 11139, 11461, 11761, 12041, 12304, 12553, 12788,
++              13010, 13222, 13424, 13617, 13802, 13979, 14150, 14314, 14472,
++              14624, 14771, 14914, 15052, 15185, 15315, 15441, 15563, 15682,
++              15798, 15911, 16021, 16128, 16232, 16335, 16435, 16532, 16628,
++              16721, 16812, 16902, 16990, 17076, 17160, 17243, 17324, 17404,
++              17482, 17559, 17634, 17709, 17782, 17853, 17924, 17993, 18062,
++              18129, 18195, 18261, 18325, 18388, 18451, 18513, 18573, 18633,
++              18692, 18751, 18808, 18865, 18921, 18976, 19031
++      };
++      struct m88dc2800_state *state = fe->demodulator_priv;
++      u8 i;
++      u32 _snr, mse;
 +
-+/* For M88DS3103 demod dvbs mode.*/
-+static u8 ds3103_dvbs_init_tab[] = {
-+      0x23, 0x07,
-+      0x08, 0x03,
-+      0x0c, 0x02,
-+      0x21, 0x54,
-+      0x25, 0x82,
-+      0x27, 0x31,
-+      0x30, 0x08,
-+      0x31, 0x40,
-+      0x32, 0x32,
-+      0x33, 0x35,
-+      0x35, 0xff,
-+      0x3a, 0x00,
-+      0x37, 0x10,
-+      0x38, 0x10,
-+      0x39, 0x02,
-+      0x42, 0x60,
-+      0x4a, 0x80,
-+      0x4b, 0x04,
-+      0x4d, 0x91,
-+      0x5d, 0xc8,
-+      0x50, 0x36,
-+      0x51, 0x36,
-+      0x52, 0x36,
-+      0x53, 0x36,
-+      0x63, 0x0f,
-+      0x64, 0x30,
-+      0x65, 0x40,
-+      0x68, 0x26,
-+      0x69, 0x4c,
-+      0x70, 0x20,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x40,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x60,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x80,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0xa0,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x1f,
-+      0x76, 0x38,
-+      0x77, 0xa6,
-+      0x78, 0x0c,
-+      0x79, 0x80,
-+      0x7f, 0x14,
-+      0x7c, 0x00,
-+      0xae, 0x82,
-+      0x80, 0x64,
-+      0x81, 0x66,
-+      0x82, 0x44,
-+      0x85, 0x04,
-+      0xcd, 0xf4,
-+      0x90, 0x33,
-+      0xa0, 0x44,
-+      0xc0, 0x08,
-+      0xc3, 0x10,
-+      0xc4, 0x08,
-+      0xc5, 0xf0,
-+      0xc6, 0xff,
-+      0xc7, 0x00,
-+      0xc8, 0x1a,
-+      0xc9, 0x80,
-+      0xe0, 0xf8,
-+      0xe6, 0x8b,
-+      0xd0, 0x40,
-+      0xf8, 0x20,
-+      0xfa, 0x0f,
-+      0x00, 0x00,
-+      0xbd, 0x01,
-+      0xb8, 0x00,
-+};
-+/* For M88DS3103 demod dvbs2 mode.*/
-+static u8 ds3103_dvbs2_init_tab[] = {
-+      0x23, 0x07,
-+      0x08, 0x07,
-+      0x0c, 0x02,
-+      0x21, 0x54,
-+      0x25, 0x82,
-+      0x27, 0x31,
-+      0x30, 0x08,
-+      0x32, 0x32,
-+      0x33, 0x35,
-+      0x35, 0xff,
-+      0x3a, 0x00,
-+      0x37, 0x10,
-+      0x38, 0x10,
-+      0x39, 0x02,
-+      0x42, 0x60,
-+      0x4a, 0x80,
-+      0x4b, 0x04,
-+      0x4d, 0x91,
-+      0x5d, 0xc8,
-+      0x50, 0x36,
-+      0x51, 0x36,
-+      0x52, 0x36,
-+      0x53, 0x36,
-+      0x63, 0x0f,
-+      0x64, 0x10,
-+      0x65, 0x20,
-+      0x68, 0x46,
-+      0x69, 0xcd,
-+      0x70, 0x20,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x40,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x60,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x80,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0xa0,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x1f,
-+      0x76, 0x38,
-+      0x77, 0xa6,
-+      0x78, 0x0c,
-+      0x79, 0x80,
-+      0x7f, 0x14,
-+      0x85, 0x08,
-+      0xcd, 0xf4,
-+      0x90, 0x33,
-+      0x86, 0x00,
-+      0x87, 0x0f,
-+      0x89, 0x00,
-+      0x8b, 0x44,
-+      0x8c, 0x66,
-+      0x9d, 0xc1,
-+      0x8a, 0x10,
-+      0xad, 0x40,
-+      0xa0, 0x44,
-+      0xc0, 0x08,
-+      0xc1, 0x10,
-+      0xc2, 0x08,
-+      0xc3, 0x10,
-+      0xc4, 0x08,
-+      0xc5, 0xf0,
-+      0xc6, 0xff,
-+      0xc7, 0x00,
-+      0xc8, 0x1a,
-+      0xc9, 0x80,
-+      0xca, 0x23,
-+      0xcb, 0x24,
-+      0xcc, 0xf4,
-+      0xce, 0x74,
-+      0x00, 0x00,
-+      0xbd, 0x01,
-+      0xb8, 0x00,
-+};
++      if ((ReadReg(state, 0x91) & 0x23) != 0x03) {
++              *snr = 0;
++              return 0;
++      }
++      mse = 0;
++      for (i = 0; i < 30; i++) {
++              mse += (ReadReg(state, 0x08) << 8) + ReadReg(state, 0x07);
++      }
++      mse /= 30;
++      if (mse > 80)
++              mse = 80;
++      switch (state->qam) {
++      case 16:
++              _snr = 34080;
++              break;          /*      16QAM                           */
++      case 32:
++              _snr = 37600;
++              break;          /*      32QAM                           */
++      case 64:
++              _snr = 40310;
++              break;          /*      64QAM                           */
++      case 128:
++              _snr = 43720;
++              break;          /*      128QAM                          */
++      case 256:
++              _snr = 46390;
++              break;          /*      256QAM                          */
++      default:
++              _snr = 40310;
++              break;
++      }
++      _snr -= mes_log[mse - 1];       /*      C - 10*log10(MSE)       */
++      _snr /= 1000;
++      if (_snr > 0xff)
++              _snr = 0xff;
++      *snr = _snr;
++      return 0;
++}
 +
-+/* For M88DS3000 demod dvbs mode.*/
-+static u8 ds3000_dvbs_init_tab[] = {
-+      0x23, 0x05,
-+      0x08, 0x03,
-+      0x0c, 0x02,
-+      0x21, 0x54,
-+      0x25, 0x82,
-+      0x27, 0x31,
-+      0x30, 0x08,
-+      0x31, 0x40,
-+      0x32, 0x32,
-+      0x33, 0x35,
-+      0x35, 0xff,
-+      0x3a, 0x00,
-+      0x37, 0x10,
-+      0x38, 0x10,
-+      0x39, 0x02,
-+      0x42, 0x60,
-+      0x4a, 0x40,
-+      0x4b, 0x04,
-+      0x4d, 0x91,
-+      0x5d, 0xc8,
-+      0x50, 0x77,
-+      0x51, 0x77,
-+      0x52, 0x36,
-+      0x53, 0x36,
-+      0x56, 0x01,
-+      0x63, 0x47,
-+      0x64, 0x30,
-+      0x65, 0x40,
-+      0x68, 0x26,
-+      0x69, 0x4c,
-+      0x70, 0x20,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x40,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x60,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x80,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0xa0,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x1f,
-+      0x76, 0x00,
-+      0x77, 0xd1,
-+      0x78, 0x0c,
-+      0x79, 0x80,
-+      0x7f, 0x04,
-+      0x7c, 0x00,
-+      0x80, 0x86,
-+      0x81, 0xa6,
-+      0x85, 0x04,
-+      0xcd, 0xf4,
-+      0x90, 0x33,
-+      0xa0, 0x44,
-+      0xc0, 0x18,
-+      0xc3, 0x10,
-+      0xc4, 0x08,
-+      0xc5, 0x80,
-+      0xc6, 0x80,
-+      0xc7, 0x0a,
-+      0xc8, 0x1a,
-+      0xc9, 0x80,
-+      0xfe, 0xb6,
-+      0xe0, 0xf8,
-+      0xe6, 0x8b,
-+      0xd0, 0x40,
-+      0xf8, 0x20,
-+      0xfa, 0x0f,
-+      0xad, 0x20,
-+      0xae, 0x07,
-+      0xb8, 0x00,
-+};
++static int m88dc2800_read_ucblocks(struct dvb_frontend *fe, u32 * ucblocks)
++{
++      struct m88dc2800_state *state = fe->demodulator_priv;
++      u8 u8Value;
 +
-+/* For M88DS3000 demod dvbs2 mode.*/
-+static u8 ds3000_dvbs2_init_tab[] = {
-+      0x23, 0x0f,
-+      0x08, 0x07,
-+      0x0c, 0x02,
-+      0x21, 0x54,
-+      0x25, 0x82,
-+      0x27, 0x31,
-+      0x30, 0x08,
-+      0x31, 0x32,
-+      0x32, 0x32,
-+      0x33, 0x35,
-+      0x35, 0xff,
-+      0x3a, 0x00,
-+      0x37, 0x10,
-+      0x38, 0x10,
-+      0x39, 0x02,
-+      0x42, 0x60,
-+      0x4a, 0x80,
-+      0x4b, 0x04,
-+      0x4d, 0x91,
-+      0x5d, 0x88,
-+      0x50, 0x36,
-+      0x51, 0x36,
-+      0x52, 0x36,
-+      0x53, 0x36,
-+      0x63, 0x60,
-+      0x64, 0x10,
-+      0x65, 0x10,
-+      0x68, 0x04,
-+      0x69, 0x29,
-+      0x70, 0x20,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x40,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x60,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x80,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0xa0,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x1f,
-+      0xa0, 0x44,
-+      0xc0, 0x08,
-+      0xc1, 0x10,
-+      0xc2, 0x08,
-+      0xc3, 0x10,
-+      0xc4, 0x08,
-+      0xc5, 0xf0,
-+      0xc6, 0xf0,
-+      0xc7, 0x0a,
-+      0xc8, 0x1a,
-+      0xc9, 0x80,
-+      0xca, 0x23,
-+      0xcb, 0x24,
-+      0xce, 0x74,
-+      0x56, 0x01,
-+      0x90, 0x03,
-+      0x76, 0x80,
-+      0x77, 0x42,
-+      0x78, 0x0a,
-+      0x79, 0x80,
-+      0xad, 0x40,
-+      0xae, 0x07,
-+      0x7f, 0xd4,
-+      0x7c, 0x00,
-+      0x80, 0xa8,
-+      0x81, 0xda,
-+      0x7c, 0x01,
-+      0x80, 0xda,
-+      0x81, 0xec,
-+      0x7c, 0x02,
-+      0x80, 0xca,
-+      0x81, 0xeb,
-+      0x7c, 0x03,
-+      0x80, 0xba,
-+      0x81, 0xdb,
-+      0x85, 0x08,
-+      0x86, 0x00,
-+      0x87, 0x02,
-+      0x89, 0x80,
-+      0x8b, 0x44,
-+      0x8c, 0xaa,
-+      0x8a, 0x10,
-+      0xba, 0x00,
-+      0xf5, 0x04,
-+      0xd2, 0x32,
-+      0xb8, 0x00,
++      u8Value = ReadReg(state, 0xdf);
++      u8Value |= 0x02;        /* Hold */
++      WriteReg(state, 0xdf, u8Value);
++
++      *ucblocks = ReadReg(state, 0xd5);
++      *ucblocks = (*ucblocks << 8) | ReadReg(state, 0xd4);
++
++      u8Value &= 0xfe;        /* Clear */
++      WriteReg(state, 0xdf, u8Value);
++      u8Value &= 0xfc;        /* Update */
++      u8Value |= 0x01;
++      WriteReg(state, 0xdf, u8Value);
++
++      return 0;
++}
++
++static int m88dc2800_sleep(struct dvb_frontend *fe)
++{
++      struct m88dc2800_state *state = fe->demodulator_priv;
++
++      mt_fe_tn_sleep_tc2800(state);
++      state->freq = 0;
++
++      return 0;
++}
++
++static void m88dc2800_release(struct dvb_frontend *fe)
++{
++      struct m88dc2800_state *state = fe->demodulator_priv;
++      kfree(state);
++}
++
++static struct dvb_frontend_ops m88dc2800_ops;
++
++struct dvb_frontend *m88dc2800_attach(const struct m88dc2800_config
++                                    *config, struct i2c_adapter *i2c)
++{
++      struct m88dc2800_state *state = NULL;
++
++      /* allocate memory for the internal state */
++      state = kzalloc(sizeof(struct m88dc2800_state), GFP_KERNEL);
++      if (state == NULL)
++              goto error;
++
++      /* setup the state */
++      state->config = config;
++      state->i2c = i2c;
++      state->xtal = 28800;
++
++      WriteReg(state, 0x80, 0x01);
++      M88DC2000RegInitial_TC2800(state);
++      M88DC2000SetTsType(state, state->config->ts_mode);
++      mt_fe_tn_init_tc2800(state);
++
++      /* create dvb_frontend */
++      memcpy(&state->frontend.ops, &m88dc2800_ops,
++             sizeof(struct dvb_frontend_ops));
++      state->frontend.demodulator_priv = state;
++      return &state->frontend;
++
++      error:
++      kfree(state);
++      return NULL;
++}
++
++EXPORT_SYMBOL(m88dc2800_attach);
++
++static struct dvb_frontend_ops m88dc2800_ops = {
++      .delsys = {SYS_DVBC_ANNEX_A, SYS_DVBC_ANNEX_C},
++      .info = {
++               .name = "Montage M88DC2800 DVB-C",
++               .frequency_stepsize = 62500,
++               .frequency_min = 48000000,
++               .frequency_max = 870000000,
++               .symbol_rate_min = 870000,
++               .symbol_rate_max = 9000000,
++               .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 |
++                       FE_CAN_QAM_128 | FE_CAN_QAM_256 | FE_CAN_FEC_AUTO
++      },
++      .release = m88dc2800_release,
++      .init = m88dc2800_init,
++      .sleep = m88dc2800_sleep,
++      .set_frontend = m88dc2800_set_parameters,
++      .read_status = m88dc2800_read_status,
++      .read_ber = m88dc2800_read_ber,
++      .read_signal_strength = m88dc2800_read_signal_strength,
++      .read_snr = m88dc2800_read_snr,
++      .read_ucblocks = m88dc2800_read_ucblocks,
 +};
 +
-+#endif /* M88DS3103_PRIV_H */
-diff -urN a/drivers/media/dvb-frontends/Makefile b/drivers/media/dvb-frontends/Makefile
---- a/drivers/media/dvb-frontends/Makefile     2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/dvb-frontends/Makefile     2013-05-03 17:04:31.000000000 +0800
-@@ -103,4 +103,5 @@
- obj-$(CONFIG_DVB_RTL2832) += rtl2832.o
- obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o
- obj-$(CONFIG_DVB_AF9033) += af9033.o
--
-+obj-$(CONFIG_DVB_M88DS3103) += m88ds3103.o
-+obj-$(CONFIG_DVB_M88DC2800) += m88dc2800.o
-diff -urN a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax2.c
---- a/drivers/media/pci/cx23885/cimax2.c       2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx23885/cimax2.c       2013-03-31 22:03:29.000000000 +0800
-@@ -415,7 +415,7 @@
++MODULE_DESCRIPTION("Montage DVB-C demodulator driver");
++MODULE_AUTHOR("Max Nibble <nibble.max@gmail.com>");
++MODULE_LICENSE("GPL");
++MODULE_VERSION("1.00");
+diff --git a/drivers/media/dvb-frontends/m88dc2800.h b/drivers/media/dvb-frontends/m88dc2800.h
+new file mode 100644
+index 0000000..2184322
+--- /dev/null
++++ b/drivers/media/dvb-frontends/m88dc2800.h
+@@ -0,0 +1,44 @@
++/*
++    M88DC2800/M88TC2800  - DVB-C demodulator and tuner from Montage
++
++    Copyright (C) 2012 Max Nibble <nibble.max@gmail.com>
++    Copyright (C) 2011 Montage Technology - www.montage-tech.com
++
++    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 M88DC2800_H
++#define M88DC2800_H
++
++#include <linux/kconfig.h>
++#include <linux/dvb/frontend.h>
++
++struct m88dc2800_config {
++      u8 demod_address;
++      u8 ts_mode;
++};
++
++#if IS_ENABLED(CONFIG_DVB_M88DC2800)
++extern struct dvb_frontend* m88dc2800_attach(const struct m88dc2800_config* config,
++                                          struct i2c_adapter* i2c);
++#else
++static inline struct dvb_frontend* m88dc2800_attach(const struct m88dc2800_config* config,
++                                          struct i2c_adapter* i2c)
++{
++      printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
++      return NULL;
++}
++#endif /* CONFIG_DVB_M88DC2800 */
++#endif /* M88DC2800_H */
+diff --git a/drivers/media/pci/cx23885/Kconfig b/drivers/media/pci/cx23885/Kconfig
+index d1dcb1d..285c1ad 100644
+--- a/drivers/media/pci/cx23885/Kconfig
++++ b/drivers/media/pci/cx23885/Kconfig
+@@ -23,6 +23,8 @@ config VIDEO_CX23885
+       select DVB_STB6100 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT
++      select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
++      select DVB_M88DC2800 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_CX24117 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_DS3000 if MEDIA_SUBDRV_AUTOSELECT
+diff --git a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax2.c
+index 16fa7ea..2b63f78 100644
+--- a/drivers/media/pci/cx23885/cimax2.c
++++ b/drivers/media/pci/cx23885/cimax2.c
+@@ -426,7 +426,7 @@ int netup_poll_ci_slot_status(struct dvb_ca_en50221 *en50221,
        return state->status;
  }
  
@@ -4397,7 +4437,7 @@ diff -urN a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax
  {
        struct netup_ci_state *state;
        u8 cimax_init[34] = {
-@@ -464,6 +464,11 @@
+@@ -475,6 +475,11 @@ int netup_ci_init(struct cx23885_tsport *port)
                goto err;
        }
  
@@ -4409,7 +4449,7 @@ diff -urN a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax
        port->port_priv = state;
  
        switch (port->nr) {
-@@ -537,3 +542,19 @@
+@@ -548,3 +553,19 @@ void netup_ci_exit(struct cx23885_tsport *port)
        dvb_ca_en50221_release(&state->ca);
        kfree(state);
  }
@@ -4429,10 +4469,11 @@ diff -urN a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax
 +
 +      return 1;
 +}
-diff -urN a/drivers/media/pci/cx23885/cimax2.h b/drivers/media/pci/cx23885/cimax2.h
---- a/drivers/media/pci/cx23885/cimax2.h       2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx23885/cimax2.h       2013-01-30 12:34:37.000000000 +0800
-@@ -41,7 +41,9 @@
+diff --git a/drivers/media/pci/cx23885/cimax2.h b/drivers/media/pci/cx23885/cimax2.h
+index 518744a..39f3db7 100644
+--- a/drivers/media/pci/cx23885/cimax2.h
++++ b/drivers/media/pci/cx23885/cimax2.h
+@@ -41,7 +41,9 @@ extern int netup_ci_slot_ts_ctl(struct dvb_ca_en50221 *en50221, int slot);
  extern int netup_ci_slot_status(struct cx23885_dev *dev, u32 pci_status);
  extern int netup_poll_ci_slot_status(struct dvb_ca_en50221 *en50221,
                                                int slot, int open);
@@ -4443,10 +4484,13 @@ diff -urN a/drivers/media/pci/cx23885/cimax2.h b/drivers/media/pci/cx23885/cimax
 +extern int dvbsky_ci_slot_status(struct cx23885_dev *dev);
 +
  #endif
-diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c
---- a/drivers/media/pci/cx23885/cx23885-cards.c        2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx23885/cx23885-cards.c        2013-05-03 17:34:46.000000000 +0800
-@@ -569,6 +569,34 @@
+diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c
+old mode 100644
+new mode 100755
+index 79f20c8..889bd4c
+--- a/drivers/media/pci/cx23885/cx23885-cards.c
++++ b/drivers/media/pci/cx23885/cx23885-cards.c
+@@ -613,6 +613,49 @@ struct cx23885_board cx23885_boards[] = {
                .name           = "TeVii S471",
                .portb          = CX23885_MPEG_DVB,
        },
@@ -4477,20 +4521,26 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388
 +              .name           = "DVBSKY T9580",
 +              .portb          = CX23885_MPEG_DVB,
 +              .portc          = CX23885_MPEG_DVB,
++      },
++      [CX23885_BOARD_DVBSKY_T980_CI] = {
++              .ci_type        = 3,
++              .name           = "DVBSKY T980CI DVB-T2/C CI",
++              .portb          = CX23885_MPEG_DVB,
++      },
++      [CX23885_BOARD_DVBSKY_T982] = {
++              .name           = "DVBSKY T982",
++              .portb          = CX23885_MPEG_DVB,
++              .portc          = CX23885_MPEG_DVB,
++      },
++      [CX23885_BOARD_TT_4500_CI] = {
++              .ci_type        = 3,
++              .name           = "TT-budget CT2-4500 CI",
++              .portb          = CX23885_MPEG_DVB,
 +      },
        [CX23885_BOARD_PROF_8000] = {
                .name           = "Prof Revolution DVB-S2 8000",
                .portb          = CX23885_MPEG_DVB,
-@@ -605,7 +633,7 @@
-                                 CX25840_NONE1_CH3,
-                       .amux   = CX25840_AUDIO6,
-               } },
--      }
-+      }       
- };
- const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards);
-@@ -818,6 +846,30 @@
+@@ -874,6 +917,42 @@ struct cx23885_subid cx23885_subids[] = {
                .subdevice = 0x9022,
                .card      = CX23885_BOARD_TEVII_S471,
        }, {
@@ -4517,20 +4567,23 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388
 +              .subvendor = 0x4254,
 +              .subdevice = 0x9580,
 +              .card      = CX23885_BOARD_DVBSKY_T9580,
++      }, {
++              .subvendor = 0x4254,
++              .subdevice = 0x980C,
++              .card      = CX23885_BOARD_DVBSKY_T980_CI,
++      }, {
++              .subvendor = 0x4254,
++              .subdevice = 0x0982,
++              .card      = CX23885_BOARD_DVBSKY_T982,
++      }, {
++              .subvendor = 0x13C2,
++              .subdevice = 0x3013,
++              .card      = CX23885_BOARD_TT_4500_CI,
 +      }, {
                .subvendor = 0x8000,
                .subdevice = 0x3034,
                .card      = CX23885_BOARD_PROF_8000,
-@@ -1224,7 +1276,7 @@
-               cx_set(GP0_IO, 0x00040004);
-               break;
-       case CX23885_BOARD_TBS_6920:
--      case CX23885_BOARD_PROF_8000:
-+      case CX23885_BOARD_PROF_8000:   
-               cx_write(MC417_CTL, 0x00000036);
-               cx_write(MC417_OEN, 0x00001000);
-               cx_set(MC417_RWD, 0x00000002);
-@@ -1394,9 +1446,84 @@
+@@ -1483,9 +1562,75 @@ void cx23885_gpio_setup(struct cx23885_dev *dev)
                cx_set(GP0_IO, 0x00040004);
                mdelay(60);
                break;
@@ -4543,6 +4596,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388
 +              break;
 +      case CX23885_BOARD_DVBSKY_S952:
 +      case CX23885_BOARD_DVBSKY_T9580:
++      case CX23885_BOARD_DVBSKY_T982:
 +              cx_write(MC417_CTL, 0x00000037);/* enable GPIO3-18 pins */
 +              
 +              cx23885_gpio_enable(dev, GPIO_2, 1);
@@ -4556,18 +4610,8 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388
 +              break;
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
-+              /* GPIO-0 INTA from CiMax, input
-+                 GPIO-1 reset CiMax, output, high active
-+                 GPIO-2 reset demod, output, low active
-+                 GPIO-3 to GPIO-10 data/addr for CAM
-+                 GPIO-11 ~CS0 to CiMax1
-+                 GPIO-12 ~CS1 to CiMax2
-+                 GPIO-13 ADL0 load LSB addr
-+                 GPIO-14 ADL1 load MSB addr
-+                 GPIO-15 ~RDY from CiMax
-+                 GPIO-17 ~RD to CiMax
-+                 GPIO-18 ~WR to CiMax
-+               */
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_TT_4500_CI:
 +              cx_set(GP0_IO, 0x00060002); /* GPIO 1/2 as output */
 +              cx_clear(GP0_IO, 0x00010004); /*GPIO 0 as input*/
 +              mdelay(100);/* reset delay */
@@ -4615,7 +4659,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388
  int cx23885_ir_init(struct cx23885_dev *dev)
  {
        static struct v4l2_subdev_io_pin_config ir_rxtx_pin_cfg[] = {
-@@ -1482,6 +1609,23 @@
+@@ -1573,6 +1718,26 @@ int cx23885_ir_init(struct cx23885_dev *dev)
                v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config,
                                 ir_rx_pin_cfg_count, ir_rx_pin_cfg);
                break;
@@ -4625,6 +4669,9 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
 +      case CX23885_BOARD_DVBSKY_T9580:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_DVBSKY_T982:
++      case CX23885_BOARD_TT_4500_CI:
 +              dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE);
 +              if (dev->sd_ir == NULL) {
 +                      ret = -ENODEV;
@@ -4639,37 +4686,56 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
                if (!enable_885_ir)
                        break;
-@@ -1511,9 +1655,15 @@
-               cx23888_ir_remove(dev);
-               dev->sd_ir = NULL;
-               break;
+@@ -1608,13 +1773,22 @@ void cx23885_ir_fini(struct cx23885_dev *dev)
+       case CX23885_BOARD_MYGICA_X8507:
+       case CX23885_BOARD_TBS_6980:
+       case CX23885_BOARD_TBS_6981:
 +      case CX23885_BOARD_BST_PS8512:
 +      case CX23885_BOARD_DVBSKY_S950:
 +      case CX23885_BOARD_DVBSKY_S952:
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
-+      case CX23885_BOARD_DVBSKY_T9580:                
-       case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
-       case CX23885_BOARD_TEVII_S470:
--      case CX23885_BOARD_HAUPPAUGE_HVR1250:
-+      case CX23885_BOARD_HAUPPAUGE_HVR1250:   
-       case CX23885_BOARD_MYGICA_X8507:
++      case CX23885_BOARD_DVBSKY_T9580:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_DVBSKY_T982:
++      case CX23885_BOARD_TT_4500_CI:
                cx23885_irq_remove(dev, PCI_MSK_AV_CORE);
                /* sd_ir is a duplicate pointer to the AV Core, just clear it */
-@@ -1556,6 +1706,12 @@
-               if (dev->sd_ir)
-                       cx23885_irq_add_enable(dev, PCI_MSK_IR);
+               dev->sd_ir = NULL;
                break;
+       }
+ }
+-
++#if 0
+ static int netup_jtag_io(void *device, int tms, int tdi, int read_tdo)
+ {
+       int data;
+@@ -1639,7 +1813,7 @@ static int netup_jtag_io(void *device, int tms, int tdi, int read_tdo)
+       return tdo;
+ }
+-
++#endif
+ void cx23885_ir_pci_int_enable(struct cx23885_dev *dev)
+ {
+       switch (dev->board) {
+@@ -1655,6 +1829,15 @@ void cx23885_ir_pci_int_enable(struct cx23885_dev *dev)
+       case CX23885_BOARD_MYGICA_X8507:
+       case CX23885_BOARD_TBS_6980:
+       case CX23885_BOARD_TBS_6981:
 +      case CX23885_BOARD_BST_PS8512:
 +      case CX23885_BOARD_DVBSKY_S950:
 +      case CX23885_BOARD_DVBSKY_S952:
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
-+      case CX23885_BOARD_DVBSKY_T9580:                
-       case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
-       case CX23885_BOARD_TEVII_S470:
-       case CX23885_BOARD_HAUPPAUGE_HVR1250:
-@@ -1657,6 +1813,10 @@
++      case CX23885_BOARD_DVBSKY_T9580:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_DVBSKY_T982:
++      case CX23885_BOARD_TT_4500_CI:
+               if (dev->sd_ir)
+                       cx23885_irq_add_enable(dev, PCI_MSK_AV_CORE);
+               break;
+@@ -1752,6 +1935,12 @@ void cx23885_card_setup(struct cx23885_dev *dev)
                ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
                ts1->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
                break;
@@ -4677,12 +4743,14 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388
 +      case CX23885_BOARD_DVBSKY_S950:
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_TT_4500_CI:
        case CX23885_BOARD_TEVII_S470:
        case CX23885_BOARD_TEVII_S471:
        case CX23885_BOARD_DVBWORLD_2005:
-@@ -1694,6 +1854,22 @@
-               ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
-               ts1->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
+@@ -1795,6 +1984,23 @@ void cx23885_card_setup(struct cx23885_dev *dev)
+               ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
+               ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
                break;
 +      case CX23885_BOARD_DVBSKY_S952:
 +              ts1->gen_ctrl_val  = 0x5; /* Parallel */
@@ -4693,33 +4761,81 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388
 +              ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
 +              break;
 +      case CX23885_BOARD_DVBSKY_T9580:
++      case CX23885_BOARD_DVBSKY_T982:
 +              ts1->gen_ctrl_val  = 0x5; /* Parallel */
 +              ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
 +              ts1->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
 +              ts2->gen_ctrl_val  = 0x8; /* Serial bus */
 +              ts2->ts_clk_en_val = 0x1; /* Enable TS_CLK */
 +              ts2->src_sel_val   = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO;
-+              break;          
-       case CX23885_BOARD_HAUPPAUGE_HVR1250:
-       case CX23885_BOARD_HAUPPAUGE_HVR1500:
-       case CX23885_BOARD_HAUPPAUGE_HVR1500Q:
-@@ -1749,6 +1925,12 @@
-       case CX23885_BOARD_MPX885:
-       case CX23885_BOARD_MYGICA_X8507:
-       case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
++              break;
+       case CX23885_BOARD_HAUPPAUGE_HVR4400:
+               ts1->gen_ctrl_val  = 0xc; /* Serial bus + punctured clock */
+               ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */
+@@ -1860,6 +2066,15 @@ void cx23885_card_setup(struct cx23885_dev *dev)
+       case CX23885_BOARD_AVERMEDIA_HC81R:
+       case CX23885_BOARD_TBS_6980:
+       case CX23885_BOARD_TBS_6981:
 +      case CX23885_BOARD_BST_PS8512:
 +      case CX23885_BOARD_DVBSKY_S950:
 +      case CX23885_BOARD_DVBSKY_S952:
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
 +      case CX23885_BOARD_DVBSKY_T9580:
-       case CX23885_BOARD_AVERMEDIA_HC81R:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_DVBSKY_T982:
++      case CX23885_BOARD_TT_4500_CI:
                dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev,
                                &dev->i2c_bus[2].i2c_adap,
-diff -urN a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
---- a/drivers/media/pci/cx23885/cx23885-core.c 2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx23885/cx23885-core.c 2013-05-03 17:36:31.000000000 +0800
-@@ -1909,6 +1909,10 @@
+                               "cx25840", 0x88 >> 1, NULL);
+@@ -1879,13 +2094,13 @@ void cx23885_card_setup(struct cx23885_dev *dev)
+               int ret;
+               const struct firmware *fw;
+               const char *filename = "dvb-netup-altera-01.fw";
+-              char *action = "configure";
++//            char *action = "configure";
+               static struct netup_card_info cinfo;
+-              struct altera_config netup_config = {
+-                      .dev = dev,
+-                      .action = action,
+-                      .jtag_io = netup_jtag_io,
+-              };
++//            struct altera_config netup_config = {
++//                    .dev = dev,
++//                    .action = action,
++//                    .jtag_io = netup_jtag_io,
++//            };
+               netup_initialize(dev);
+@@ -1909,8 +2124,8 @@ void cx23885_card_setup(struct cx23885_dev *dev)
+                       printk(KERN_ERR "did not find the firmware file. (%s) "
+                       "Please see linux/Documentation/dvb/ for more details "
+                       "on firmware-problems.", filename);
+-              else
+-                      altera_init(&netup_config, fw);
++              //else
++              //      altera_init(&netup_config, fw);
+               release_firmware(fw);
+               break;
+diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
+index edcd79d..c9afeab 100644
+--- a/drivers/media/pci/cx23885/cx23885-core.c
++++ b/drivers/media/pci/cx23885/cx23885-core.c
+@@ -450,9 +450,9 @@ void cx23885_wakeup(struct cx23885_tsport *port,
+               del_timer(&q->timeout);
+       else
+               mod_timer(&q->timeout, jiffies + BUFFER_TIMEOUT);
+-      if (bc != 1)
++/*    if (bc != 1)
+               printk(KERN_WARNING "%s: %d buffers handled (should be 1)\n",
+-                     __func__, bc);
++                     __func__, bc);*/
+ }
+ int cx23885_sram_channel_setup(struct cx23885_dev *dev,
+@@ -1909,6 +1909,10 @@ static irqreturn_t cx23885_irq(int irq, void *dev_id)
                        (pci_status & PCI_MSK_GPIO0))
                handled += altera_ci_irq(dev);
  
@@ -4730,70 +4846,47 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885
        if (ts1_status) {
                if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB)
                        handled += cx23885_irq_ts(ts1, ts1_status);
-@@ -2144,6 +2148,8 @@
+@@ -2141,6 +2145,10 @@ static int cx23885_initdev(struct pci_dev *pci_dev,
                cx23885_irq_add_enable(dev, PCI_MSK_GPIO1 | PCI_MSK_GPIO0);
                break;
        case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_TT_4500_CI:
                cx23885_irq_add_enable(dev, PCI_MSK_GPIO0);
                break;
        }
-diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c
---- a/drivers/media/pci/cx23885/cx23885-dvb.c  2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx23885/cx23885-dvb.c  2013-05-03 17:38:34.000000000 +0800
+diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c
+index 0549205..7816112 100644
+--- a/drivers/media/pci/cx23885/cx23885-dvb.c
++++ b/drivers/media/pci/cx23885/cx23885-dvb.c
 @@ -51,6 +51,8 @@
  #include "stv6110.h"
  #include "lnbh24.h"
  #include "cx24116.h"
-+#include "m88ds3103.h"
++#include "dvbsky_m88ds3103.h"
 +#include "m88dc2800.h"
+ #include "cx24117.h"
  #include "cimax2.h"
  #include "lgs8gxx.h"
- #include "netup-eeprom.h"
-@@ -64,8 +66,8 @@
- #include "stv0367.h"
- #include "drxk.h"
- #include "mt2063.h"
--#include "stv090x.h"
--#include "stb6100.h"
-+#include "stv090x.h"\r
-+#include "stb6100.h"\r
- #include "stb6100_cfg.h"
- #include "tda10071.h"
- #include "a8293.h"
-@@ -500,42 +502,130 @@
-       .if_khz = 5380,
+@@ -473,6 +475,7 @@ static struct ds3000_config tevii_ds3000_config = {
+ static struct ts2020_config tevii_ts2020_config  = {
+       .tuner_address = 0x60,
+       .clk_out_div = 1,
++      .frequency_div = 1146000,
  };
  
--static struct stv090x_config prof_8000_stv090x_config = {
--      .device                 = STV0903,
--      .demod_mode             = STV090x_SINGLE,
--      .clk_mode               = STV090x_CLK_EXT,
--      .xtal                   = 27000000,
--      .address                = 0x6A,
--      .ts1_mode               = STV090x_TSMODE_PARALLEL_PUNCTURED,
--      .repeater_level         = STV090x_RPTLEVEL_64,
--      .adc1_range             = STV090x_ADC_2Vpp,
--      .diseqc_envelope_mode   = false,
--
--      .tuner_get_frequency    = stb6100_get_frequency,
--      .tuner_set_frequency    = stb6100_set_frequency,
--      .tuner_set_bandwidth    = stb6100_set_bandwidth,
--      .tuner_get_bandwidth    = stb6100_get_bandwidth,
--};
+ static struct cx24116_config dvbworld_cx24116_config = {
+@@ -507,6 +510,93 @@ static struct xc5000_config mygica_x8507_xc5000_config = {
+       .if_khz = 4000,
+ };
  
--static struct stb6100_config prof_8000_stb6100_config = {
--      .tuner_address = 0x60,
--      .refclock = 27000000,
--};
--
--static int p8000_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
 +/* bst control */
 +int bst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
- {
-       struct cx23885_tsport *port = fe->dvb->priv;
-       struct cx23885_dev *dev = port->dev;
++{
++      struct cx23885_tsport *port = fe->dvb->priv;
++      struct cx23885_dev *dev = port->dev;
 +      
 +      cx23885_gpio_enable(dev, GPIO_1, 1);
 +      cx23885_gpio_enable(dev, GPIO_0, 1);
@@ -4814,13 +4907,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/
 +      }
 +      return 0;
 +}
--      if (voltage == SEC_VOLTAGE_18)
--              cx_write(MC417_RWD, 0x00001e00);
--      else if (voltage == SEC_VOLTAGE_13)
--              cx_write(MC417_RWD, 0x00001a00);
--      else
--              cx_write(MC417_RWD, 0x00001800);
++
 +int dvbsky_set_voltage_sec(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
 +{
 +      struct cx23885_tsport *port = fe->dvb->priv;
@@ -4843,11 +4930,11 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/
 +              cx23885_gpio_clear(dev, GPIO_12);
 +              break;
 +      }
-       return 0;
- }
++      return 0;
++}
++
 +/* bestunar single dvb-s2 */
-+static struct m88ds3103_config bst_ds3103_config = {
++static struct dvbsky_m88ds3103_config bst_ds3103_config = {
 +      .demod_address = 0x68,
 +      .ci_mode = 0,
 +      .pin_ctrl = 0x82,
@@ -4855,14 +4942,14 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/
 +      .set_voltage = bst_set_voltage,
 +};
 +/* DVBSKY dual dvb-s2 */
-+static struct m88ds3103_config dvbsky_ds3103_config_pri = {
++static struct dvbsky_m88ds3103_config dvbsky_ds3103_config_pri = {
 +      .demod_address = 0x68,
 +      .ci_mode = 0,
 +      .pin_ctrl = 0x82,
 +      .ts_mode = 0,
 +      .set_voltage = bst_set_voltage, 
 +};
-+static struct m88ds3103_config dvbsky_ds3103_config_sec = {
++static struct dvbsky_m88ds3103_config dvbsky_ds3103_config_sec = {
 +      .demod_address = 0x68,
 +      .ci_mode = 0,
 +      .pin_ctrl = 0x82,
@@ -4870,7 +4957,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/
 +      .set_voltage = dvbsky_set_voltage_sec,  
 +};
 +
-+static struct m88ds3103_config dvbsky_ds3103_ci_config = {
++static struct dvbsky_m88ds3103_config dvbsky_ds3103_ci_config = {
 +      .demod_address = 0x68,
 +      .ci_mode = 2,
 +      .pin_ctrl = 0x82,
@@ -4882,55 +4969,17 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/
 +      .ts_mode = 3,   
 +};
 +
-+static struct stv090x_config prof_8000_stv090x_config = {\r
-+        .device                 = STV0903,\r
-+        .demod_mode             = STV090x_SINGLE,\r
-+        .clk_mode               = STV090x_CLK_EXT,\r
-+        .xtal                   = 27000000,\r
-+        .address                = 0x6A,\r
-+        .ts1_mode               = STV090x_TSMODE_PARALLEL_PUNCTURED,\r
-+        .repeater_level         = STV090x_RPTLEVEL_64,\r
-+        .adc1_range             = STV090x_ADC_2Vpp,\r
-+        .diseqc_envelope_mode   = false,\r
-+\r
-+        .tuner_get_frequency    = stb6100_get_frequency,\r
-+        .tuner_set_frequency    = stb6100_set_frequency,\r
-+        .tuner_set_bandwidth    = stb6100_set_bandwidth,\r
-+        .tuner_get_bandwidth    = stb6100_get_bandwidth,\r
-+};\r
-+\r
-+static struct stb6100_config prof_8000_stb6100_config = {\r
-+      .tuner_address = 0x60,\r
-+      .refclock = 27000000,\r
-+};\r
-+\r
-+static int p8000_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)\r
-+{\r
-+      struct cx23885_tsport *port = fe->dvb->priv;\r
-+      struct cx23885_dev *dev = port->dev;\r
-+\r
-+      if (voltage == SEC_VOLTAGE_18)\r
-+              cx_write(MC417_RWD, 0x00001e00);\r
-+      else if (voltage == SEC_VOLTAGE_13)\r
-+              cx_write(MC417_RWD, 0x00001a00);\r
-+      else\r
-+              cx_write(MC417_RWD, 0x00001800);\r
-+      return 0;\r
-+}
-+
- static int cx23885_dvb_set_frontend(struct dvb_frontend *fe)
- {
-       struct dtv_frontend_properties *p = &fe->dtv_property_cache;
-@@ -1250,23 +1340,79 @@
-                                       &tevii_ds3000_config,
-                                       &i2c_bus->i2c_adap);
+ static struct stv090x_config prof_8000_stv090x_config = {
+       .device                 = STV0903,
+       .demod_mode             = STV090x_SINGLE,
+@@ -1311,6 +1401,92 @@ static int dvb_register(struct cx23885_tsport *port)
+                               &tevii_ts2020_config, &i2c_bus->i2c_adap);
+               }
                break;
--      case CX23885_BOARD_PROF_8000:
--              i2c_bus = &dev->i2c_bus[0];
 +      case CX23885_BOARD_BST_PS8512:
 +      case CX23885_BOARD_DVBSKY_S950:
 +              i2c_bus = &dev->i2c_bus[1];     
-+              fe0->dvb.frontend = dvb_attach(m88ds3103_attach,
++              fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach,
 +                                      &bst_ds3103_config,
 +                                      &i2c_bus->i2c_adap);
 +              break;  
@@ -4940,33 +4989,23 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/
 +              /* port B */
 +              case 1:
 +                      i2c_bus = &dev->i2c_bus[1];
-+                      fe0->dvb.frontend = dvb_attach(m88ds3103_attach,
++                      fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach,
 +                                              &dvbsky_ds3103_config_pri,
 +                                              &i2c_bus->i2c_adap);
 +                      break;
 +              /* port C */
 +              case 2:
 +                      i2c_bus = &dev->i2c_bus[0];
-+                      fe0->dvb.frontend = dvb_attach(m88ds3103_attach,
++                      fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach,
 +                                              &dvbsky_ds3103_config_sec,
 +                                              &i2c_bus->i2c_adap);    
 +                      break;
 +              }
 +              break;
--              fe0->dvb.frontend = dvb_attach(stv090x_attach,
--                                              &prof_8000_stv090x_config,
--                                              &i2c_bus->i2c_adap,
--                                              STV090x_DEMODULATOR_0);
--              if (fe0->dvb.frontend != NULL) {
--                      if (!dvb_attach(stb6100_attach,
--                                      fe0->dvb.frontend,
--                                      &prof_8000_stb6100_config,
--                                      &i2c_bus->i2c_adap))
--                              goto frontend_detach;
++
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +              i2c_bus = &dev->i2c_bus[1];     
-+              fe0->dvb.frontend = dvb_attach(m88ds3103_attach,
++              fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach,
 +                                      &dvbsky_ds3103_ci_config,
 +                                      &i2c_bus->i2c_adap);
 +              break;
@@ -4977,44 +5016,56 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/
 +                                      &dvbsky_dc2800_config,
 +                                      &i2c_bus->i2c_adap);
 +              break;
--                      fe0->dvb.frontend->ops.set_voltage = p8000_set_voltage;
++
 +      case CX23885_BOARD_DVBSKY_T9580:
 +              switch (port->nr) {
 +              /* port B */
 +              case 1:
 +                      i2c_bus = &dev->i2c_bus[1];
-+                      fe0->dvb.frontend = dvb_attach(m88ds3103_attach,
++                      fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach,
 +                                              &dvbsky_ds3103_config_pri,
 +                                              &i2c_bus->i2c_adap);
 +                      break;
 +              /* port C */
-+              case 2:
++//            case 2:
++//                    i2c_bus = &dev->i2c_bus[0];
++//                    fe0->dvb.frontend = dvb_attach(sit2_attach,
++//                                            &dvbsky_sit2_config_pci_s,
++//                                            &i2c_bus->i2c_adap);    
 +                      break;
-               }
-               break;
-+                              
-+      case CX23885_BOARD_PROF_8000:\r
-+              i2c_bus = &dev->i2c_bus[0];\r
-+\r
-+              fe0->dvb.frontend = dvb_attach(stv090x_attach,\r
-+                                              &prof_8000_stv090x_config,\r
-+                                              &i2c_bus->i2c_adap,\r
-+                                              STV090x_DEMODULATOR_0);\r
-+              if (fe0->dvb.frontend != NULL) {\r
-+                      if (!dvb_attach(stb6100_attach,\r
-+                                      fe0->dvb.frontend,\r
-+                                      &prof_8000_stb6100_config,\r
-+                                      &i2c_bus->i2c_adap))\r
-+                              goto frontend_detach;\r
-+\r
-+                      fe0->dvb.frontend->ops.set_voltage = p8000_set_voltage;\r
-+              }\r
++              }
 +              break;
-       case CX23885_BOARD_HAUPPAUGE_HVR4400:
++
++//    case CX23885_BOARD_DVBSKY_T980_CI:
++//    case CX23885_BOARD_TT_4500_CI:
++//            i2c_bus = &dev->i2c_bus[1];     
++//            fe0->dvb.frontend = dvb_attach(sit2_attach,
++//                                    &dvbsky_sit2_config_pci_p,
++//                                    &i2c_bus->i2c_adap);
++//            break;
++
++//    case CX23885_BOARD_DVBSKY_T982:
++//            switch (port->nr) {
++//            /* port B */
++//            case 1:
++//                    i2c_bus = &dev->i2c_bus[1];
++//                    fe0->dvb.frontend = dvb_attach(sit2_attach,
++//                                            &dvbsky_sit2_config_pci_p,
++//                                            &i2c_bus->i2c_adap);
++//                    break;
++//            /* port C */
++//            case 2:
++//                    i2c_bus = &dev->i2c_bus[0];
++//                    fe0->dvb.frontend = dvb_attach(sit2_attach,
++//                                            &dvbsky_sit2_config_pci_s,
++//                                            &i2c_bus->i2c_adap);    
++//                    break;
++//            }
++//            break;
+       case CX23885_BOARD_PROF_8000:
                i2c_bus = &dev->i2c_bus[0];
-               fe0->dvb.frontend = dvb_attach(tda10071_attach,
-@@ -1325,7 +1471,7 @@
+@@ -1386,7 +1562,7 @@ static int dvb_register(struct cx23885_tsport *port)
                printk(KERN_INFO "NetUP Dual DVB-S2 CI card port%d MAC=%pM\n",
                        port->nr, port->frontends.adapter.proposed_mac);
  
@@ -5023,14 +5074,15 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/
                break;
                }
        case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: {
-@@ -1352,6 +1498,41 @@
+@@ -1413,6 +1589,44 @@ static int dvb_register(struct cx23885_tsport *port)
                memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xa0, 6);
                break;
                }
 +      case CX23885_BOARD_BST_PS8512:
 +      case CX23885_BOARD_DVBSKY_S950:
 +      case CX23885_BOARD_DVBSKY_S952:
-+      case CX23885_BOARD_DVBSKY_T9580:{
++      case CX23885_BOARD_DVBSKY_T9580:
++      case CX23885_BOARD_DVBSKY_T982:{
 +              u8 eeprom[256]; /* 24C02 i2c eeprom */
 +
 +              if(port->nr > 2)
@@ -5058,81 +5110,65 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/
 +              netup_ci_init(port, true);
 +              break;
 +              }
-+      case CX23885_BOARD_DVBSKY_C2800E_CI: {
++      case CX23885_BOARD_DVBSKY_C2800E_CI:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_TT_4500_CI: {
 +              netup_ci_init(port, true);
 +              break;
 +              }               
        }
  
        return ret;
-@@ -1434,6 +1615,8 @@
+@@ -1495,6 +1709,10 @@ int cx23885_dvb_unregister(struct cx23885_tsport *port)
  
        switch (port->dev->board) {
        case CX23885_BOARD_NETUP_DUAL_DVBS2_CI:
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_TT_4500_CI:
                netup_ci_exit(port);
                break;
        case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF:
-diff -urN a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h
---- a/drivers/media/pci/cx23885/cx23885.h      2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx23885/cx23885.h      2013-05-03 17:14:20.000000000 +0800
-@@ -94,6 +94,14 @@
- #define CX23885_BOARD_HAUPPAUGE_HVR4400        38
- #define CX23885_BOARD_AVERMEDIA_HC81R          39
-+#define CX23885_BOARD_BASE_INDEX             40
-+#define CX23885_BOARD_BST_PS8512             (CX23885_BOARD_BASE_INDEX)
-+#define CX23885_BOARD_DVBSKY_S952            (CX23885_BOARD_BASE_INDEX+1)
-+#define CX23885_BOARD_DVBSKY_S950            (CX23885_BOARD_BASE_INDEX+2)
-+#define CX23885_BOARD_DVBSKY_S950_CI         (CX23885_BOARD_BASE_INDEX+3)
-+#define CX23885_BOARD_DVBSKY_C2800E_CI               (CX23885_BOARD_BASE_INDEX+4)
-+#define CX23885_BOARD_DVBSKY_T9580           (CX23885_BOARD_BASE_INDEX+5)
-+
- #define GPIO_0 0x00000001
- #define GPIO_1 0x00000002
- #define GPIO_2 0x00000004
-@@ -231,7 +239,7 @@
-        */
-       u32                     clk_freq;
-       struct cx23885_input    input[MAX_CX23885_INPUT];
--      int                     ci_type; /* for NetUP */
-+      int                     ci_type; /* 1 and 2 for NetUP, 3 for DVBSky. */
-       /* Force bottom field first during DMA (888 workaround) */
-       u32                     force_bff;
- };
-diff -urN a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx23885/cx23885-input.c
---- a/drivers/media/pci/cx23885/cx23885-input.c        2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx23885/cx23885-input.c        2013-05-03 17:42:09.000000000 +0800
-@@ -89,6 +89,12 @@
-       case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL:
-       case CX23885_BOARD_TEVII_S470:
-       case CX23885_BOARD_HAUPPAUGE_HVR1250:
+diff --git a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx23885/cx23885-input.c
+index 8a49e7c..1642ae8 100644
+--- a/drivers/media/pci/cx23885/cx23885-input.c
++++ b/drivers/media/pci/cx23885/cx23885-input.c
+@@ -92,6 +92,15 @@ void cx23885_input_rx_work_handler(struct cx23885_dev *dev, u32 events)
+       case CX23885_BOARD_MYGICA_X8507:
+       case CX23885_BOARD_TBS_6980:
+       case CX23885_BOARD_TBS_6981:
 +      case CX23885_BOARD_BST_PS8512:
 +      case CX23885_BOARD_DVBSKY_S950:
 +      case CX23885_BOARD_DVBSKY_S952:
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
 +      case CX23885_BOARD_DVBSKY_T9580:
-       case CX23885_BOARD_MYGICA_X8507:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_DVBSKY_T982:
++      case CX23885_BOARD_TT_4500_CI:
                /*
                 * The only boards we handle right now.  However other boards
-@@ -141,6 +147,12 @@
-       case CX23885_BOARD_HAUPPAUGE_HVR1850:
+                * using the CX2388x integrated IR controller should be similar
+@@ -144,6 +153,15 @@ static int cx23885_input_ir_start(struct cx23885_dev *dev)
        case CX23885_BOARD_HAUPPAUGE_HVR1290:
        case CX23885_BOARD_HAUPPAUGE_HVR1250:
+       case CX23885_BOARD_MYGICA_X8507:
 +      case CX23885_BOARD_BST_PS8512:
 +      case CX23885_BOARD_DVBSKY_S950:
 +      case CX23885_BOARD_DVBSKY_S952:
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
 +      case CX23885_BOARD_DVBSKY_T9580:
-       case CX23885_BOARD_MYGICA_X8507:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_DVBSKY_T982:
++      case CX23885_BOARD_TT_4500_CI:
                /*
                 * The IR controller on this board only returns pulse widths.
-@@ -291,6 +303,18 @@
+                * Any other mode setting will fail to set up the device.
+@@ -302,6 +320,26 @@ int cx23885_input_init(struct cx23885_dev *dev)
                /* A guess at the remote */
-               rc_map = RC_MAP_TEVII_NEC;
+               rc_map = RC_MAP_TOTAL_MEDIA_IN_HAND_02;
                break;
 +      case CX23885_BOARD_BST_PS8512:
 +      case CX23885_BOARD_DVBSKY_S950:
@@ -5140,31 +5176,71 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx2388
 +      case CX23885_BOARD_DVBSKY_S950_CI:
 +      case CX23885_BOARD_DVBSKY_C2800E_CI:
 +      case CX23885_BOARD_DVBSKY_T9580:
++      case CX23885_BOARD_DVBSKY_T980_CI:
++      case CX23885_BOARD_DVBSKY_T982:
 +              /* Integrated CX2388[58] IR controller */
 +              driver_type = RC_DRIVER_IR_RAW;
 +              allowed_protos = RC_BIT_ALL;
 +              /* A guess at the remote */
 +              rc_map = RC_MAP_DVBSKY;
 +              break;
-       case CX23885_BOARD_MYGICA_X8507:
++      case CX23885_BOARD_TT_4500_CI:
++              /* Integrated CX2388[58] IR controller */
++              driver_type = RC_DRIVER_IR_RAW;
++              allowed_protos = RC_BIT_ALL;
++              rc_map = RC_MAP_TT_1500;
++              break;
+       case CX23885_BOARD_TBS_6980:
+       case CX23885_BOARD_TBS_6981:
                /* Integrated CX23885 IR controller */
-               driver_type = RC_DRIVER_IR_RAW;
-diff -urN a/drivers/media/pci/cx23885/Kconfig b/drivers/media/pci/cx23885/Kconfig
---- a/drivers/media/pci/cx23885/Kconfig        2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx23885/Kconfig        2013-05-03 17:43:05.000000000 +0800
-@@ -23,6 +23,8 @@
-       select DVB_STB6100 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT
+diff --git a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h
+index 0fa4048..7a39d82 100644
+--- a/drivers/media/pci/cx23885/cx23885.h
++++ b/drivers/media/pci/cx23885/cx23885.h
+@@ -97,6 +97,17 @@
+ #define CX23885_BOARD_TBS_6980                 41
+ #define CX23885_BOARD_LEADTEK_WINFAST_PXPVR2200 42
++#define CX23885_BOARD_DVBSKY_PCIE              43
++#define CX23885_BOARD_BST_PS8512             (CX23885_BOARD_DVBSKY_PCIE+0)
++#define CX23885_BOARD_DVBSKY_S952            (CX23885_BOARD_DVBSKY_PCIE+1)
++#define CX23885_BOARD_DVBSKY_S950            (CX23885_BOARD_DVBSKY_PCIE+2)
++#define CX23885_BOARD_DVBSKY_S950_CI         (CX23885_BOARD_DVBSKY_PCIE+3)
++#define CX23885_BOARD_DVBSKY_C2800E_CI               (CX23885_BOARD_DVBSKY_PCIE+4)
++#define CX23885_BOARD_DVBSKY_T9580           (CX23885_BOARD_DVBSKY_PCIE+5)
++#define CX23885_BOARD_DVBSKY_T980_CI         (CX23885_BOARD_DVBSKY_PCIE+6)
++#define CX23885_BOARD_DVBSKY_T982            (CX23885_BOARD_DVBSKY_PCIE+7)
++#define CX23885_BOARD_TT_4500_CI             (CX23885_BOARD_DVBSKY_PCIE+8)
++
+ #define GPIO_0 0x00000001
+ #define GPIO_1 0x00000002
+ #define GPIO_2 0x00000004
+@@ -234,7 +245,7 @@ struct cx23885_board {
+        */
+       u32                     clk_freq;
+       struct cx23885_input    input[MAX_CX23885_INPUT];
+-      int                     ci_type; /* for NetUP */
++      int                     ci_type; /* 1 and 2 for NetUP, 3 for DVBSky. */
+       /* Force bottom field first during DMA (888 workaround) */
+       u32                     force_bff;
+ };
+diff --git a/drivers/media/pci/cx88/Kconfig b/drivers/media/pci/cx88/Kconfig
+index a63a9ad..7deb300 100644
+--- a/drivers/media/pci/cx88/Kconfig
++++ b/drivers/media/pci/cx88/Kconfig
+@@ -57,6 +57,7 @@ config VIDEO_CX88_DVB
+       select DVB_ISL6421 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_S5H1411 if MEDIA_SUBDRV_AUTOSELECT
        select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT
-+      select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
-+      select DVB_M88DC2800 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_DS3000 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_TS2020 if MEDIA_SUBDRV_AUTOSELECT
-diff -urN a/drivers/media/pci/cx88/cx88-cards.c b/drivers/media/pci/cx88/cx88-cards.c
---- a/drivers/media/pci/cx88/cx88-cards.c      2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx88/cx88-cards.c      2013-05-03 17:06:55.000000000 +0800
-@@ -2309,6 +2309,18 @@
++      select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_STV0299 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_STV0288 if MEDIA_SUBDRV_AUTOSELECT
+       select DVB_STB6000 if MEDIA_SUBDRV_AUTOSELECT
+diff --git a/drivers/media/pci/cx88/cx88-cards.c b/drivers/media/pci/cx88/cx88-cards.c
+index e18a7ac..317511d 100644
+--- a/drivers/media/pci/cx88/cx88-cards.c
++++ b/drivers/media/pci/cx88/cx88-cards.c
+@@ -2314,6 +2314,18 @@ static const struct cx88_board cx88_boards[] = {
                } },
                .mpeg           = CX88_MPEG_DVB,
        },
@@ -5183,7 +5259,7 @@ diff -urN a/drivers/media/pci/cx88/cx88-cards.c b/drivers/media/pci/cx88/cx88-ca
  };
  
  /* ------------------------------------------------------------------ */
-@@ -2813,6 +2825,10 @@
+@@ -2818,6 +2830,10 @@ static const struct cx88_subid cx88_subids[] = {
                .subvendor = 0x1822,
                .subdevice = 0x0023,
                .card      = CX88_BOARD_TWINHAN_VP1027_DVBS,
@@ -5194,7 +5270,7 @@ diff -urN a/drivers/media/pci/cx88/cx88-cards.c b/drivers/media/pci/cx88/cx88-ca
        },
  };
  
-@@ -3547,6 +3563,12 @@
+@@ -3551,6 +3567,12 @@ static void cx88_card_setup(struct cx88_core *core)
                cx_write(MO_SRST_IO, 1);
                msleep(100);
                break;
@@ -5207,18 +5283,19 @@ diff -urN a/drivers/media/pci/cx88/cx88-cards.c b/drivers/media/pci/cx88/cx88-ca
        } /*end switch() */
  
  
-diff -urN a/drivers/media/pci/cx88/cx88-dvb.c b/drivers/media/pci/cx88/cx88-dvb.c
---- a/drivers/media/pci/cx88/cx88-dvb.c        2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx88/cx88-dvb.c        2013-05-03 17:09:09.000000000 +0800
+diff --git a/drivers/media/pci/cx88/cx88-dvb.c b/drivers/media/pci/cx88/cx88-dvb.c
+index 053ed1b..955b916 100644
+--- a/drivers/media/pci/cx88/cx88-dvb.c
++++ b/drivers/media/pci/cx88/cx88-dvb.c
 @@ -54,6 +54,7 @@
  #include "stv0288.h"
  #include "stb6000.h"
  #include "cx24116.h"
-+#include "m88ds3103.h"
++#include "dvbsky_m88ds3103.h"
  #include "stv0900.h"
  #include "stb6100.h"
  #include "stb6100_proc.h"
-@@ -459,6 +460,56 @@
+@@ -459,6 +460,56 @@ static int tevii_dvbs_set_voltage(struct dvb_frontend *fe,
                return core->prev_set_voltage(fe, voltage);
        return 0;
  }
@@ -5275,11 +5352,11 @@ diff -urN a/drivers/media/pci/cx88/cx88-dvb.c b/drivers/media/pci/cx88/cx88-dvb.
  
  static int vp1027_set_voltage(struct dvb_frontend *fe,
                                    fe_sec_voltage_t voltage)
-@@ -706,6 +757,11 @@
+@@ -706,6 +757,11 @@ static struct ts2020_config tevii_ts2020_config  = {
        .clk_out_div = 1,
  };
  
-+static struct m88ds3103_config dvbsky_ds3103_config = {
++static struct dvbsky_m88ds3103_config dvbsky_ds3103_config = {
 +      .demod_address = 0x68,
 +      .set_ts_params = ds3000_set_ts_param,
 +};
@@ -5287,14 +5364,12 @@ diff -urN a/drivers/media/pci/cx88/cx88-dvb.c b/drivers/media/pci/cx88/cx88-dvb.
  static const struct stv0900_config prof_7301_stv0900_config = {
        .demod_address = 0x6a,
  /*    demod_mode = 0,*/
-@@ -1477,6 +1533,35 @@
-                               &tevii_ts2020_config, &core->i2c_adap);
-                       fe0->dvb.frontend->ops.set_voltage =
+@@ -1487,6 +1543,35 @@ static int dvb_register(struct cx8802_dev *dev)
                                                        tevii_dvbs_set_voltage;
-+                }             
-               break;
+               }
+               break;
 +      case CX88_BOARD_BST_PS8312:
-+              fe0->dvb.frontend = dvb_attach(m88ds3103_attach,
++              fe0->dvb.frontend = dvb_attach(dvbsky_m88ds3103_attach,
 +                                              &dvbsky_ds3103_config,
 +                                              &core->i2c_adap);
 +              if (fe0->dvb.frontend != NULL){
@@ -5320,24 +5395,71 @@ diff -urN a/drivers/media/pci/cx88/cx88-dvb.c b/drivers/media/pci/cx88/cx88-dvb.
 +                              fe0->dvb.frontend->ops.set_voltage = bst_dvbs_set_voltage_v2;
 +                      else                    
 +                              fe0->dvb.frontend->ops.set_voltage = bst_dvbs_set_voltage;
-               }
-               break;
++              }
++              break;
        case CX88_BOARD_OMICOM_SS4_PCI:
-diff -urN a/drivers/media/pci/cx88/cx88.h b/drivers/media/pci/cx88/cx88.h
---- a/drivers/media/pci/cx88/cx88.h    2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx88/cx88.h    2013-05-03 17:05:57.000000000 +0800
-@@ -238,6 +238,7 @@
- #define CX88_BOARD_WINFAST_DTV1800H_XC4000 88
- #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36 89
- #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43 90
-+#define CX88_BOARD_BST_PS8312              91
+       case CX88_BOARD_TBS_8920:
+       case CX88_BOARD_PROF_7300:
+diff --git a/drivers/media/pci/cx88/cx88-input.c b/drivers/media/pci/cx88/cx88-input.c
+index f29e18c..9581f4e 100644
+--- a/drivers/media/pci/cx88/cx88-input.c
++++ b/drivers/media/pci/cx88/cx88-input.c
+@@ -129,7 +129,7 @@ static void cx88_ir_handle_key(struct cx88_IR *ir)
+               u32 gpio_key = cx_read(MO_GP0_IO);
  
- enum cx88_itype {
-       CX88_VMUX_COMPOSITE1 = 1,
-diff -urN a/drivers/media/pci/cx88/cx88-input.c b/drivers/media/pci/cx88/cx88-input.c
---- a/drivers/media/pci/cx88/cx88-input.c      2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx88/cx88-input.c      2013-01-26 14:52:03.000000000 +0800
-@@ -419,6 +419,10 @@
+               data = (data << 4) | ((gpio_key & 0xf0) >> 4);
+-
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0)
+               rc_keydown(ir->dev, data, 0);
+       } else if (ir->mask_keydown) {
+@@ -151,6 +151,45 @@ static void cx88_ir_handle_key(struct cx88_IR *ir)
+               rc_keydown_notimeout(ir->dev, data, 0);
+               rc_keyup(ir->dev);
+       }
++#else
++              rc_keydown(ir->dev, RC_TYPE_UNKNOWN, data, 0);
++
++      } else if (ir->core->boardnr == CX88_BOARD_PROLINK_PLAYTVPVR ||
++                 ir->core->boardnr == CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO) {
++              /* bit cleared on keydown, NEC scancode, 0xAAAACC, A = 0x866b */
++              u16 addr;
++              u8 cmd;
++              u32 scancode;
++
++              addr = (data >> 8) & 0xffff;
++              cmd  = (data >> 0) & 0x00ff;
++              scancode = RC_SCANCODE_NECX(addr, cmd);
++
++              if (0 == (gpio & ir->mask_keyup))
++                      rc_keydown_notimeout(ir->dev, RC_TYPE_NEC, scancode, 0);
++              else
++                      rc_keyup(ir->dev);
++
++      } else if (ir->mask_keydown) {
++              /* bit set on keydown */
++              if (gpio & ir->mask_keydown)
++                      rc_keydown_notimeout(ir->dev, RC_TYPE_UNKNOWN, data, 0);
++              else
++                      rc_keyup(ir->dev);
++
++      } else if (ir->mask_keyup) {
++              /* bit cleared on keydown */
++              if (0 == (gpio & ir->mask_keyup))
++                      rc_keydown_notimeout(ir->dev, RC_TYPE_UNKNOWN, data, 0);
++              else
++                      rc_keyup(ir->dev);
++
++      } else {
++              /* can't distinguish keydown/up :-/ */
++              rc_keydown_notimeout(ir->dev, RC_TYPE_UNKNOWN, data, 0);
++              rc_keyup(ir->dev);
++      }
++#endif
+ }
+ static enum hrtimer_restart cx88_ir_work(struct hrtimer *timer)
+@@ -419,6 +458,10 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
                rc_type          = RC_BIT_NEC;
                ir->sampling     = 0xff00; /* address */
                break;
@@ -5348,21 +5470,61 @@ diff -urN a/drivers/media/pci/cx88/cx88-input.c b/drivers/media/pci/cx88/cx88-in
        }
  
        if (!ir_codes) {
-diff -urN a/drivers/media/pci/cx88/Kconfig b/drivers/media/pci/cx88/Kconfig
---- a/drivers/media/pci/cx88/Kconfig   2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/pci/cx88/Kconfig   2013-05-03 17:10:41.000000000 +0800
-@@ -57,6 +57,7 @@
-       select DVB_ISL6421 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_S5H1411 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT
-+      select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_STV0299 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_STV0288 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_STB6000 if MEDIA_SUBDRV_AUTOSELECT
-diff -urN a/drivers/media/rc/keymaps/Makefile b/drivers/media/rc/keymaps/Makefile
---- a/drivers/media/rc/keymaps/Makefile        2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/rc/keymaps/Makefile        2013-05-03 17:43:41.000000000 +0800
-@@ -27,6 +27,7 @@
+@@ -471,7 +514,6 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
+               dev->driver_type = RC_DRIVER_SCANCODE;
+               dev->allowed_protos = rc_type;
+       }
+-
+       ir->core = core;
+       core->ir = ir;
+@@ -538,8 +580,12 @@ void cx88_ir_irq(struct cx88_core *core)
+       }
+       ir_raw_event_handle(ir->dev);
+ }
+-
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0)
+ static int get_key_pvr2000(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
++#else
++static int get_key_pvr2000(struct IR_i2c *ir, enum rc_type *protocol,
++                         u32 *scancode, u8 *toggle)
++#endif
+ {
+       int flags, code;
+@@ -562,9 +608,14 @@ static int get_key_pvr2000(struct IR_i2c *ir, u32 *ir_key, u32 *ir_raw)
+       dprintk("IR Key/Flags: (0x%02x/0x%02x)\n",
+                  code & 0xff, flags & 0xff);
+-
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0)
+       *ir_key = code & 0xff;
+       *ir_raw = code;
++#else
++      *protocol = RC_TYPE_UNKNOWN;
++      *scancode = code & 0xff;
++      *toggle = 0;
++#endif
+       return 1;
+ }
+diff --git a/drivers/media/pci/cx88/cx88.h b/drivers/media/pci/cx88/cx88.h
+index 28893a6..5fa5f48 100644
+--- a/drivers/media/pci/cx88/cx88.h
++++ b/drivers/media/pci/cx88/cx88.h
+@@ -237,6 +237,7 @@ extern const struct sram_channel cx88_sram_channels[];
+ #define CX88_BOARD_WINFAST_DTV1800H_XC4000 88
+ #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F36 89
+ #define CX88_BOARD_WINFAST_TV2000_XP_GLOBAL_6F43 90
++#define CX88_BOARD_BST_PS8312              91
+ enum cx88_itype {
+       CX88_VMUX_COMPOSITE1 = 1,
+diff --git a/drivers/media/rc/keymaps/Makefile b/drivers/media/rc/keymaps/Makefile
+index 0b8c549..abf6079 100644
+--- a/drivers/media/rc/keymaps/Makefile
++++ b/drivers/media/rc/keymaps/Makefile
+@@ -28,6 +28,7 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \
                        rc-dm1105-nec.o \
                        rc-dntv-live-dvb-t.o \
                        rc-dntv-live-dvbt-pro.o \
@@ -5370,9 +5532,11 @@ diff -urN a/drivers/media/rc/keymaps/Makefile b/drivers/media/rc/keymaps/Makefil
                        rc-em-terratec.o \
                        rc-encore-enltv2.o \
                        rc-encore-enltv.o \
-diff -urN a/drivers/media/rc/keymaps/rc-dvbsky.c b/drivers/media/rc/keymaps/rc-dvbsky.c
---- a/drivers/media/rc/keymaps/rc-dvbsky.c     1970-01-01 08:00:00.000000000 +0800
-+++ b/drivers/media/rc/keymaps/rc-dvbsky.c     2013-01-26 14:52:49.000000000 +0800
+diff --git a/drivers/media/rc/keymaps/rc-dvbsky.c b/drivers/media/rc/keymaps/rc-dvbsky.c
+new file mode 100644
+index 0000000..bfc41fb
+--- /dev/null
++++ b/drivers/media/rc/keymaps/rc-dvbsky.c
 @@ -0,0 +1,78 @@
 +/* rc-dvbsky.c - Keytable for Dvbsky Remote Controllers
 + *
@@ -5452,12 +5616,44 @@ diff -urN a/drivers/media/rc/keymaps/rc-dvbsky.c b/drivers/media/rc/keymaps/rc-d
 +
 +MODULE_LICENSE("GPL");
 +MODULE_AUTHOR("Nibble Max <nibble.max@gmail.com>");
-diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2/dvbsky.c
---- a/drivers/media/usb/dvb-usb-v2/dvbsky.c    1970-01-01 08:00:00.000000000 +0800
-+++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c    2013-05-03 17:47:38.000000000 +0800
-@@ -0,0 +1,665 @@
+diff --git a/drivers/media/usb/dvb-usb-v2/Kconfig b/drivers/media/usb/dvb-usb-v2/Kconfig
+index 2059d0c..5ff51aa 100644
+--- a/drivers/media/usb/dvb-usb-v2/Kconfig
++++ b/drivers/media/usb/dvb-usb-v2/Kconfig
+@@ -147,3 +147,11 @@ config DVB_USB_RTL28XXU
+       help
+         Say Y here to support the Realtek RTL28xxU DVB USB receiver.
++config DVB_USB_DVBSKY
++      tristate "DVBSky USB2.0 support"
++      depends on DVB_USB_V2
++      select DVB_SIT2 if MEDIA_SUBDRV_AUTOSELECT
++      select DVB_DVBSKY_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
++      help
++        Say Y here to support the USB receivers from DVBSky.
++
+diff --git a/drivers/media/usb/dvb-usb-v2/Makefile b/drivers/media/usb/dvb-usb-v2/Makefile
+index 2c06714..926f12d 100644
+--- a/drivers/media/usb/dvb-usb-v2/Makefile
++++ b/drivers/media/usb/dvb-usb-v2/Makefile
+@@ -40,6 +40,9 @@ obj-$(CONFIG_DVB_USB_MXL111SF) += mxl111sf-tuner.o
+ dvb-usb-rtl28xxu-objs := rtl28xxu.o
+ obj-$(CONFIG_DVB_USB_RTL28XXU) += dvb-usb-rtl28xxu.o
++dvb-usb-dvbsky-objs := dvbsky.o
++obj-$(CONFIG_DVB_USB_DVBSKY) += dvb-usb-dvbsky.o
++
+ ccflags-y += -I$(srctree)/drivers/media/dvb-core
+ ccflags-y += -I$(srctree)/drivers/media/dvb-frontends
+ ccflags-y += -I$(srctree)/drivers/media/tuners
+diff --git a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2/dvbsky.c
+new file mode 100644
+index 0000000..cd9c039
+--- /dev/null
++++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c
+@@ -0,0 +1,892 @@
 +/*
-+ * Driver for DVBSky USB2.0 receiver
++ * Driver for DVBSky receiver
 + *
 + * Copyright (C) 2013 Max nibble <nibble.max@gmail.com>
 + *
@@ -5484,14 +5680,16 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +
 +#include "dvb_ca_en50221.h"
 +#include "dvb_usb.h"
-+#include "m88ds3103.h"
++#include "dvbsky_m88ds3103.h"
 +
 +static int dvbsky_debug;
 +module_param(dvbsky_debug, int, 0644);
 +MODULE_PARM_DESC(dvbsky_debug, "Activates dvbsky usb debugging (default:0)");
 +
++#define DVBSKY_MSG_DELAY      0/*2000*/
 +#define DVBSKY_CI_CTL         0x04
 +#define DVBSKY_CI_RD          1
++#define DVBSKY_BUF_LEN        64
 +
 +#define dprintk(args...) \
 +      do { \
@@ -5503,6 +5701,8 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +
 +struct dvbsky_state {
 +      struct mutex stream_mutex;
++      u8 ibuf[DVBSKY_BUF_LEN];
++      u8 obuf[DVBSKY_BUF_LEN];
 +      u8 has_ci;
 +      u8 ci_attached;
 +      struct dvb_ca_en50221 ci;
@@ -5512,6 +5712,26 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +      int ci_status;
 +};
 +
++static int dvbsky_usb_generic_rw(struct dvb_usb_device *d,
++              u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen)
++{
++      int ret;
++      struct dvbsky_state *state = d_to_priv(d);
++
++      mutex_lock(&d->usb_mutex);
++      if (wlen != 0)
++              memcpy(state->obuf, wbuf, wlen);
++
++      ret = dvb_usbv2_generic_rw_locked(d, state->obuf, wlen,
++                      state->ibuf, rlen);
++
++      if (!ret && (rlen != 0))
++              memcpy(rbuf, state->ibuf, rlen);
++
++      mutex_unlock(&d->usb_mutex);
++      return ret;
++}
++
 +static int dvbsky_stream_ctrl(struct dvb_usb_device *d, u8 onoff)
 +{
 +      struct dvbsky_state *state = d_to_priv(d);
@@ -5520,10 +5740,10 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +      u8 obuf_post[3] = { 0x36, 3, 0 };
 +      dprintk("%s() -off \n", __func__);
 +      mutex_lock(&state->stream_mutex);
-+      ret = dvb_usbv2_generic_write(d, obuf_pre, 3);
++      ret = dvbsky_usb_generic_rw(d, obuf_pre, 3, NULL, 0);
 +      if (!ret && onoff) {
-+              msleep(10);
-+              ret = dvb_usbv2_generic_write(d, obuf_post, 3);
++              msleep(20);
++              ret = dvbsky_usb_generic_rw(d, obuf_post, 3, NULL, 0);
 +              dprintk("%s() -on \n", __func__);
 +      }
 +      mutex_unlock(&state->stream_mutex);
@@ -5562,7 +5782,7 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +                                              u8 *buf, int len)
 +{
 +      int ret;
-+      u8 buffer[len + 1];
++      u8 buffer[64];
 +
 +      struct i2c_msg msg = {
 +              .addr   = addr,
@@ -5570,6 +5790,11 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +              .buf    = &buffer[0],
 +              .len    = len + 1
 +      };
++      
++      if(len + 1 > sizeof(buffer)) {
++              dprintk("%s: len overflow.\n", __func__);
++              return -1;              
++      }
 +
 +      buffer[0] = reg;
 +      memcpy(&buffer[1], buf, len);
@@ -5624,7 +5849,10 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +              command_size = 4;
 +              respond_size = 1;
 +      }
-+      ret = dvb_usbv2_generic_rw(d, command, command_size, respond, respond_size);
++      ret = dvbsky_usb_generic_rw(d, command, command_size, respond, respond_size);
++      if(ret)
++              dev_err(&d->udev->dev, "%s: %s() " \
++                                      "failed=%d\n", KBUILD_MODNAME, __func__, ret);
 +
 +      return (read) ? respond[1] : 0;
 +}
@@ -5839,11 +6067,16 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +/* GPIO */
 +static int dvbsky_gpio_ctrl(struct dvb_usb_device *d, u8 gport, u8 value)
 +{
++      int ret;
 +      u8 obuf[64], ibuf[64];
 +      obuf[0] = 0x0e;
 +      obuf[1] = gport;
 +      obuf[2] = value;
-+      return dvb_usbv2_generic_rw(d, obuf, 3, ibuf, 1);
++      ret = dvbsky_usb_generic_rw(d, obuf, 3, ibuf, 1);
++      if(ret)
++              dev_err(&d->udev->dev, "%s: %s() " \
++                                      "failed=%d\n", KBUILD_MODNAME, __func__, ret);
++      return ret;
 +}
 +
 +/* I2C */
@@ -5875,7 +6108,10 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +                      obuf[1] = 0;
 +                      obuf[2] = msg[0].len;
 +                      obuf[3] = msg[0].addr;
-+                      ret = dvb_usbv2_generic_rw(d, obuf, 4, ibuf, msg[0].len + 1);
++                      ret = dvbsky_usb_generic_rw(d, obuf, 4, ibuf, msg[0].len + 1);
++                      if(ret)
++                              dev_err(&d->udev->dev, "%s: %s() " \
++                                      "failed=%d\n", KBUILD_MODNAME, __func__, ret);
 +                      /*dprintk("%s(): read status = %d\n", __func__, ibuf[0]);*/
 +                      if (!ret)
 +                              memcpy(msg[0].buf, &ibuf[1], msg[0].len);
@@ -5885,7 +6121,10 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +                      obuf[1] = msg[0].addr;
 +                      obuf[2] = msg[0].len;
 +                      memcpy(&obuf[3], msg[0].buf, msg[0].len);
-+                      ret = dvb_usbv2_generic_rw(d, obuf, msg[0].len + 3, ibuf, 1);
++                      ret = dvbsky_usb_generic_rw(d, obuf, msg[0].len + 3, ibuf, 1);
++                      if(ret)
++                              dev_err(&d->udev->dev, "%s: %s() " \
++                                      "failed=%d\n", KBUILD_MODNAME, __func__, ret);
 +                      /*dprintk("%s(): write status = %d\n", __func__, ibuf[0]);*/
 +              }
 +      } else {
@@ -5900,7 +6139,10 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +              obuf[2] = msg[1].len;
 +              obuf[3] = msg[0].addr;
 +              memcpy(&obuf[4], msg[0].buf, msg[0].len);
-+              ret = dvb_usbv2_generic_rw(d, obuf, msg[0].len + 4, ibuf, msg[1].len + 1);
++              ret = dvbsky_usb_generic_rw(d, obuf, msg[0].len + 4, ibuf, msg[1].len + 1);
++              if(ret)
++                      dev_err(&d->udev->dev, "%s: %s() " \
++                                      "failed=%d\n", KBUILD_MODNAME, __func__, ret);
 +              /*dprintk("%s(): write then read status = %d\n", __func__, ibuf[0]);*/
 +              if (!ret)
 +                      memcpy(msg[1].buf, &ibuf[1], msg[1].len);
@@ -5923,20 +6165,27 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +#if IS_ENABLED(CONFIG_RC_CORE)
 +static int dvbsky_rc_query(struct dvb_usb_device *d)
 +{
-+      u32 code = 0xffff;
-+      u8 obuf[2], ibuf[2], toggle;
++      
++      u32 code = 0xffff, scancode;\r
++      u8 rc5_command, rc5_system;\r
++      u8 obuf[2], ibuf[2], toggle;\r
 +      int ret;
-+      obuf[0] = 0x10;
-+      ret = dvb_usbv2_generic_rw(d, obuf, 1, ibuf, 2);
-+      if(ret == 0)
-+              code = (ibuf[0] << 8) | ibuf[1];
-+
-+      if (code != 0xffff) {
-+              dprintk("rc code: %x", code);
-+              toggle = (code & 0x800) ? 1 : 0;
-+              code &= 0x3f;
-+              rc_keydown(d->rc_dev, code, toggle);
-+      }
++      obuf[0] = 0x10;\r
++      ret = dvbsky_usb_generic_rw(d, obuf, 1, ibuf, 2);
++      if(ret)
++              dev_err(&d->udev->dev, "%s: %s() " \
++                                      "failed=%d\n", KBUILD_MODNAME, __func__, ret);\r
++      if(ret == 0)\r
++              code = (ibuf[0] << 8) | ibuf[1];\r
++\r
++      if (code != 0xffff) {\r
++              dprintk("rc code: %x \n", code);\r
++              rc5_command = code & 0x3F;\r
++              rc5_system = (code & 0x7C0) >> 6;\r
++              toggle = (code & 0x800) ? 1 : 0;                \r
++              scancode = rc5_system << 8 | rc5_command;\r
++              rc_keydown(d->rc_dev, scancode, toggle);\r
++      }\r
 +      return 0;
 +}
 +
@@ -5969,6 +6218,60 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +      return dvbsky_gpio_ctrl(d, 0x80, value);
 +}
 +
++static int dvbsky_usb_ci_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
++{
++      struct dvb_usb_device *d = fe_to_d(fe);
++      u8 value;
++
++      if (voltage == SEC_VOLTAGE_OFF)
++              value = 0;
++      else
++              value = 1;
++      return dvbsky_gpio_ctrl(d, 0x00, value);
++}
++
++static int dvbsky_t680c_attach(struct dvb_usb_adapter *adap)
++{
++      struct dvbsky_state *state = adap_to_priv(adap);
++      struct dvb_usb_device *d = adap_to_d(adap);
++      int ret = 0;
++      
++      /*dprintk("%s, build on %s %s()\n", __func__, __DATE__,__TIME__);*/
++
++//    adap->fe[0] = dvb_attach(sit2_attach,
++//                            &dvbsky_usb_sit2_config,
++//                            &d->i2c_adap);
++      if (!adap->fe[0]) {
++              printk(KERN_ERR "dvbsky_t680c_attach fail.");
++              ret = -ENODEV;
++      }
++      
++      state->has_ci = 1;
++
++      return ret;
++}
++
++static int dvbsky_t330_attach(struct dvb_usb_adapter *adap)
++{
++      struct dvbsky_state *state = adap_to_priv(adap);
++      struct dvb_usb_device *d = adap_to_d(adap);
++      int ret = 0;
++      
++      /*dprintk("%s, build on %s %s()\n", __func__, __DATE__,__TIME__);*/
++
++//    adap->fe[0] = dvb_attach(sit2_attach,
++//                            &dvbsky_t330_sit2_config,
++//                            &d->i2c_adap);
++      if (!adap->fe[0]) {
++              printk(KERN_ERR "dvbsky_t330_attach fail.");
++              ret = -ENODEV;
++      }
++      
++      state->has_ci = 0;
++
++      return ret;
++}
++
 +static int dvbsky_read_mac_addr(struct dvb_usb_adapter *adap, u8 mac[6])
 +{
 +      struct dvb_usb_device *d = adap_to_d(adap);
@@ -5997,7 +6300,7 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +      return 0;
 +}
 +
-+static struct m88ds3103_config dvbsky_usb_ds3103_config = {
++static struct dvbsky_m88ds3103_config dvbsky_usb_ds3103_config = {
 +      .demod_address = 0x68,
 +      .ci_mode = 1,
 +      .pin_ctrl = 0x83,
@@ -6013,15 +6316,8 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +      int ret = 0;
 +      
 +      dprintk("%s()\n", __func__);
-+
-+      dvbsky_gpio_ctrl(d, 0x04, 1);
-+              
-+      dvbsky_gpio_ctrl(d, 0x83, 0);
-+      msleep(50);
-+      dvbsky_gpio_ctrl(d, 0x83, 1);
-+      msleep(20);
 +      
-+      adap->fe[0] = dvb_attach(m88ds3103_attach,
++      adap->fe[0] = dvb_attach(dvbsky_m88ds3103_attach,
 +                              &dvbsky_usb_ds3103_config,
 +                              &d->i2c_adap);
 +      if (!adap->fe[0]) {
@@ -6034,8 +6330,50 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +      return ret;
 +}
 +
++static struct dvbsky_m88ds3103_config dvbsky_usb_ds3103_ci_config = {
++      .demod_address = 0x68,
++      .ci_mode = 2,
++      .pin_ctrl = 0x82,
++      .ts_mode = 0,
++      .start_ctrl = dvbsky_sync_ctrl,
++      .set_voltage = dvbsky_usb_ci_set_voltage,
++};
++static int dvbsky_s960c_attach(struct dvb_usb_adapter *adap)
++{
++      struct dvbsky_state *state = adap_to_priv(adap);
++      struct dvb_usb_device *d = adap_to_d(adap);
++      int ret = 0;
++      
++      /*dprintk("%s, build on %s %s()\n", __func__, __DATE__,__TIME__);*/
++              
++      adap->fe[0] = dvb_attach(dvbsky_m88ds3103_attach,
++                              &dvbsky_usb_ds3103_ci_config,
++                              &d->i2c_adap);
++      if (!adap->fe[0]) {
++              printk(KERN_ERR "dvbsky_s960c_attach fail.");
++              ret = -ENODEV;
++      }
++      
++      state->has_ci = 1;
++
++      return ret;
++}
++
 +static int dvbsky_identify_state(struct dvb_usb_device *d, const char **name)
 +{
++      /*
++      printk(KERN_INFO "%s, build on %s %s(),delay=%d\n", 
++      __func__, __DATE__,__TIME__,d->props->generic_bulk_ctrl_delay); 
++      */
++      dvbsky_gpio_ctrl(d, 0x04, 1);
++      msleep(20);
++      dvbsky_gpio_ctrl(d, 0x83, 0);
++      dvbsky_gpio_ctrl(d, 0xc0, 1);
++      msleep(100);
++      dvbsky_gpio_ctrl(d, 0x83, 1);
++      dvbsky_gpio_ctrl(d, 0xc0, 0);
++      msleep(50);
++      
 +      return WARM;
 +}
 +
@@ -6045,18 +6383,15 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +      int ret;
 +
 +      /* use default interface */
++      /*
 +      ret = usb_set_interface(d->udev, 0, 0);
 +      if (ret)
 +              return ret;
-+
++      */
 +      mutex_init(&state->stream_mutex);
 +      
 +      /* attach CI */
-+      if (state->has_ci) {
-+              dvbsky_gpio_ctrl(d, 0xc0, 1);
-+              msleep(100);
-+              dvbsky_gpio_ctrl(d, 0xc0, 0);
-+              msleep(50);
++      if (state->has_ci) {            
 +              state->ci_attached = 0;
 +              ret = dvbsky_ci_init(d);
 +              if (ret)
@@ -6071,6 +6406,87 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +}
 +
 +/* DVB USB Driver stuff */
++static struct dvb_usb_device_properties dvbsky_t330_props = {
++      .driver_name = KBUILD_MODNAME,
++      .owner = THIS_MODULE,
++      .adapter_nr = adapter_nr,
++      .size_of_priv = sizeof(struct dvbsky_state),
++
++      .generic_bulk_ctrl_endpoint = 0x01,
++      .generic_bulk_ctrl_endpoint_response = 0x81,
++      .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY,
++
++      .i2c_algo         = &dvbsky_i2c_algo,
++      .frontend_attach  = dvbsky_t330_attach,
++      .init             = dvbsky_init,
++      .get_rc_config    = dvbsky_get_rc_config,
++      .streaming_ctrl   = dvbsky_streaming_ctrl,
++      .identify_state   = dvbsky_identify_state,
++      .exit             = dvbsky_exit,
++      .read_mac_address = dvbsky_read_mac_addr,
++
++      .num_adapters = 1,
++      .adapter = {
++              {
++                      .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096),
++              }
++      }
++};
++
++static struct dvb_usb_device_properties dvbsky_s960c_props = {
++      .driver_name = KBUILD_MODNAME,
++      .owner = THIS_MODULE,
++      .adapter_nr = adapter_nr,
++      .size_of_priv = sizeof(struct dvbsky_state),
++
++      .generic_bulk_ctrl_endpoint = 0x01,
++      .generic_bulk_ctrl_endpoint_response = 0x81,
++      .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY,
++
++      .i2c_algo         = &dvbsky_i2c_algo,
++      .frontend_attach  = dvbsky_s960c_attach,
++      .init             = dvbsky_init,
++      .get_rc_config    = dvbsky_get_rc_config,
++      .streaming_ctrl   = dvbsky_streaming_ctrl,
++      .identify_state   = dvbsky_identify_state,
++      .exit             = dvbsky_exit,
++      .read_mac_address = dvbsky_read_mac_addr,
++
++      .num_adapters = 1,
++      .adapter = {
++              {
++                      .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096),
++              }
++      }
++};
++
++static struct dvb_usb_device_properties dvbsky_t680c_props = {
++      .driver_name = KBUILD_MODNAME,
++      .owner = THIS_MODULE,
++      .adapter_nr = adapter_nr,
++      .size_of_priv = sizeof(struct dvbsky_state),
++
++      .generic_bulk_ctrl_endpoint = 0x01,
++      .generic_bulk_ctrl_endpoint_response = 0x81,
++      .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY,
++
++      .i2c_algo         = &dvbsky_i2c_algo,
++      .frontend_attach  = dvbsky_t680c_attach,
++      .init             = dvbsky_init,
++      .get_rc_config    = dvbsky_get_rc_config,
++      .streaming_ctrl   = dvbsky_streaming_ctrl,
++      .identify_state   = dvbsky_identify_state,
++      .exit             = dvbsky_exit,
++      .read_mac_address = dvbsky_read_mac_addr,
++
++      .num_adapters = 1,
++      .adapter = {
++              {
++                      .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096),
++              }
++      }
++};
++
 +static struct dvb_usb_device_properties dvbsky_s960_props = {
 +      .driver_name = KBUILD_MODNAME,
 +      .owner = THIS_MODULE,
@@ -6079,6 +6495,7 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +
 +      .generic_bulk_ctrl_endpoint = 0x01,
 +      .generic_bulk_ctrl_endpoint_response = 0x81,
++      .generic_bulk_ctrl_delay = DVBSKY_MSG_DELAY,
 +
 +      .i2c_algo         = &dvbsky_i2c_algo,
 +      .frontend_attach  = dvbsky_s960_attach,
@@ -6098,6 +6515,12 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +};
 +
 +static const struct usb_device_id dvbsky_id_table[] = {
++      { DVB_USB_DEVICE(0x0572, 0x0320,
++              &dvbsky_t330_props, "DVBSky T330 USB Stick", RC_MAP_DVBSKY) },  
++      { DVB_USB_DEVICE(0x0572, 0x960c,
++              &dvbsky_s960c_props, "DVBSky S960CI", RC_MAP_DVBSKY) },
++      { DVB_USB_DEVICE(0x0572, 0x680c,
++              &dvbsky_t680c_props, "DVBSky T680CI", RC_MAP_DVBSKY) },
 +      { DVB_USB_DEVICE(0x0572, 0x6831,
 +              &dvbsky_s960_props, "DVBSky S960/S860", RC_MAP_DVBSKY) },
 +      { }
@@ -6121,37 +6544,11 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2
 +MODULE_AUTHOR("Max nibble <nibble.max@gmail.com>");
 +MODULE_DESCRIPTION("Driver for DVBSky USB2.0");
 +MODULE_LICENSE("GPL");
-diff -urN a/drivers/media/usb/dvb-usb-v2/Kconfig b/drivers/media/usb/dvb-usb-v2/Kconfig
---- a/drivers/media/usb/dvb-usb-v2/Kconfig     2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/usb/dvb-usb-v2/Kconfig     2013-05-03 17:45:35.000000000 +0800
-@@ -149,3 +149,10 @@
-       help
-         Say Y here to support the Realtek RTL28xxU DVB USB receiver.
-+config DVB_USB_DVBSKY
-+      tristate "DVBSky USB2.0 support"
-+      depends on DVB_USB_V2
-+      select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
-+      help
-+        Say Y here to support the USB receivers from DVBSky.
-+
-diff -urN a/drivers/media/usb/dvb-usb-v2/Makefile b/drivers/media/usb/dvb-usb-v2/Makefile
---- a/drivers/media/usb/dvb-usb-v2/Makefile    2013-04-29 08:36:01.000000000 +0800
-+++ b/drivers/media/usb/dvb-usb-v2/Makefile    2013-02-17 12:03:00.000000000 +0800
-@@ -43,6 +43,9 @@
- dvb-usb-rtl28xxu-objs := rtl28xxu.o
- obj-$(CONFIG_DVB_USB_RTL28XXU) += dvb-usb-rtl28xxu.o
-+dvb-usb-dvbsky-objs := dvbsky.o
-+obj-$(CONFIG_DVB_USB_DVBSKY) += dvb-usb-dvbsky.o
-+
- ccflags-y += -I$(srctree)/drivers/media/dvb-core
- ccflags-y += -I$(srctree)/drivers/media/dvb-frontends
- ccflags-y += -I$(srctree)/drivers/media/tuners
-diff -urN a/include/media/rc-map.h b/include/media/rc-map.h
---- a/include/media/rc-map.h   2013-04-29 08:36:01.000000000 +0800
-+++ b/include/media/rc-map.h   2013-05-03 17:02:46.000000000 +0800
-@@ -118,6 +118,7 @@
+diff --git a/include/media/rc-map.h b/include/media/rc-map.h
+index a20ed97..73f8c92 100644
+--- a/include/media/rc-map.h
++++ b/include/media/rc-map.h
+@@ -119,6 +119,7 @@ void rc_map_init(void);
  #define RC_MAP_DM1105_NEC                "rc-dm1105-nec"
  #define RC_MAP_DNTV_LIVE_DVBT_PRO        "rc-dntv-live-dvbt-pro"
  #define RC_MAP_DNTV_LIVE_DVB_T           "rc-dntv-live-dvb-t"
similarity index 71%
rename from src/patches/linux-3.2-imq.patch
rename to src/patches/linux-3.14.22-imq.patch
index 8e8685d1d047a30b7a7e0a341b3f2e9aa9e113f6..219d4fb3a1c12fca3480dab1c83d7153d78f5f8b 100644 (file)
@@ -1,7 +1,151 @@
-diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
---- linux-3.2/drivers/net/imq.c        1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.2-imq/drivers/net/imq.c    2011-11-04 12:16:10.454992642 +0200
-@@ -0,0 +1,850 @@
+diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
+index 494b888..851e01f 100644
+--- a/drivers/net/Kconfig
++++ b/drivers/net/Kconfig
+@@ -203,6 +203,125 @@ config RIONET_RX_SIZE
+       depends on RIONET
+       default "128"
++config IMQ
++      tristate "IMQ (intermediate queueing device) support"
++      depends on NETDEVICES && NETFILTER
++      ---help---
++        The IMQ device(s) is used as placeholder for QoS queueing
++        disciplines. Every packet entering/leaving the IP stack can be
++        directed through the IMQ device where it's enqueued/dequeued to the
++        attached qdisc. This allows you to treat network devices as classes
++        and distribute bandwidth among them. Iptables is used to specify
++        through which IMQ device, if any, packets travel.
++
++        More information at: http://www.linuximq.net/
++
++        To compile this driver as a module, choose M here: the module
++        will be called imq.  If unsure, say N.
++
++choice
++      prompt "IMQ behavior (PRE/POSTROUTING)"
++      depends on IMQ
++      default IMQ_BEHAVIOR_AB
++      help
++        This setting defines how IMQ behaves in respect to its
++        hooking in PREROUTING and POSTROUTING.
++
++        IMQ can work in any of the following ways:
++
++            PREROUTING   |      POSTROUTING
++        -----------------|-------------------
++        #1  After NAT    |      After NAT
++        #2  After NAT    |      Before NAT
++        #3  Before NAT   |      After NAT
++        #4  Before NAT   |      Before NAT
++
++        The default behavior is to hook before NAT on PREROUTING
++        and after NAT on POSTROUTING (#3).
++
++        This settings are specially usefull when trying to use IMQ
++        to shape NATed clients.
++
++        More information can be found at: www.linuximq.net
++
++        If not sure leave the default settings alone.
++
++config IMQ_BEHAVIOR_AA
++      bool "IMQ AA"
++      help
++        This setting defines how IMQ behaves in respect to its
++        hooking in PREROUTING and POSTROUTING.
++
++        Choosing this option will make IMQ hook like this:
++
++        PREROUTING:   After NAT
++        POSTROUTING:  After NAT
++
++        More information can be found at: www.linuximq.net
++
++        If not sure leave the default settings alone.
++
++config IMQ_BEHAVIOR_AB
++      bool "IMQ AB"
++      help
++        This setting defines how IMQ behaves in respect to its
++        hooking in PREROUTING and POSTROUTING.
++
++        Choosing this option will make IMQ hook like this:
++
++        PREROUTING:   After NAT
++        POSTROUTING:  Before NAT
++
++        More information can be found at: www.linuximq.net
++
++        If not sure leave the default settings alone.
++
++config IMQ_BEHAVIOR_BA
++      bool "IMQ BA"
++      help
++        This setting defines how IMQ behaves in respect to its
++        hooking in PREROUTING and POSTROUTING.
++
++        Choosing this option will make IMQ hook like this:
++
++        PREROUTING:   Before NAT
++        POSTROUTING:  After NAT
++
++        More information can be found at: www.linuximq.net
++
++        If not sure leave the default settings alone.
++
++config IMQ_BEHAVIOR_BB
++      bool "IMQ BB"
++      help
++        This setting defines how IMQ behaves in respect to its
++        hooking in PREROUTING and POSTROUTING.
++
++        Choosing this option will make IMQ hook like this:
++
++        PREROUTING:   Before NAT
++        POSTROUTING:  Before NAT
++
++        More information can be found at: www.linuximq.net
++
++        If not sure leave the default settings alone.
++
++endchoice
++
++config IMQ_NUM_DEVS
++      int "Number of IMQ devices"
++      range 2 16
++      depends on IMQ
++      default "16"
++      help
++        This setting defines how many IMQ devices will be created.
++
++        The default value is 16.
++
++        More information can be found at: www.linuximq.net
++
++        If not sure leave the default settings alone.
++
+ config TUN
+       tristate "Universal TUN/TAP device driver support"
+       select CRC32
+diff --git a/drivers/net/Makefile b/drivers/net/Makefile
+index 3fef8a8..12dafc0 100644
+--- a/drivers/net/Makefile
++++ b/drivers/net/Makefile
+@@ -9,6 +9,7 @@ obj-$(CONFIG_BONDING) += bonding/
+ obj-$(CONFIG_DUMMY) += dummy.o
+ obj-$(CONFIG_EQUALIZER) += eql.o
+ obj-$(CONFIG_IFB) += ifb.o
++obj-$(CONFIG_IMQ) += imq.o
+ obj-$(CONFIG_MACVLAN) += macvlan.o
+ obj-$(CONFIG_MACVTAP) += macvtap.o
+ obj-$(CONFIG_MII) += mii.o
+diff --git a/drivers/net/imq.c b/drivers/net/imq.c
+new file mode 100644
+index 0000000..2140535
+--- /dev/null
++++ b/drivers/net/imq.c
+@@ -0,0 +1,1011 @@
 +/*
 + *             Pseudo-driver for the intermediate queue device.
 + *
@@ -125,6 +269,29 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 + *              - Clean-up, move 'get imq device pointer by imqX name' to
 + *                separate function from imq_nf_queue().
 + *
++ *             2012/01/05 - Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
++ *              - Port to 3.2
++ *
++ *             2012/03/19 - Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
++ *              - Port to 3.3
++ *
++ *             2012/12/12 - Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
++ *              - Port to 3.7
++ *              - Fix checkpatch.pl warnings
++ *
++ *             2013/09/10 - Jussi Kivilinna <jussi.kivilinna@iki.fi>
++ *              - Fixed GSO handling for 3.10, see imq_nf_queue() for comments.
++ *              - Don't copy skb->cb_next when copying or cloning skbuffs.
++ *
++ *             2013/09/16 - Jussi Kivilinna <jussi.kivilinna@iki.fi>
++ *              - Port to 3.11
++ *
++ *             2013/11/12 - Jussi Kivilinna <jussi.kivilinna@iki.fi>
++ *              - Port to 3.12
++ *
++ *             2014/02/07 - Jussi Kivilinna <jussi.kivilinna@iki.fi>
++ *              - Port to 3.13
++ *
 + *           Also, many thanks to pablo Sebastian Greco for making the initial
 + *           patch and to those who helped the testing.
 + *
@@ -287,13 +454,15 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
 +      case htons(ETH_P_IPV6): {
 +              const struct ipv6hdr *iph = ipv6_hdr(skb);
++              __be16 fo = 0;
 +
 +              if (unlikely(!pskb_may_pull(skb, sizeof(struct ipv6hdr))))
 +                      goto other;
 +
 +              addr1 = iph->daddr.s6_addr32[3];
 +              addr2 = iph->saddr.s6_addr32[3];
-+              ihl = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &ip_proto);
++              ihl = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &ip_proto,
++                                     &fo);
 +              if (unlikely(ihl < 0))
 +                      goto other;
 +
@@ -504,25 +673,89 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +      return dev;
 +}
 +
++static struct nf_queue_entry *nf_queue_entry_dup(struct nf_queue_entry *e)
++{
++      struct nf_queue_entry *entry = kmemdup(e, e->size, GFP_ATOMIC);
++      if (entry) {
++              if (nf_queue_entry_get_refs(entry))
++                      return entry;
++              kfree(entry);
++      }
++      return NULL;
++}
++
++#ifdef CONFIG_BRIDGE_NETFILTER
++/* When called from bridge netfilter, skb->data must point to MAC header
++ * before calling skb_gso_segment(). Else, original MAC header is lost
++ * and segmented skbs will be sent to wrong destination.
++ */
++static void nf_bridge_adjust_skb_data(struct sk_buff *skb)
++{
++      if (skb->nf_bridge)
++              __skb_push(skb, skb->network_header - skb->mac_header);
++}
++
++static void nf_bridge_adjust_segmented_data(struct sk_buff *skb)
++{
++      if (skb->nf_bridge)
++              __skb_pull(skb, skb->network_header - skb->mac_header);
++}
++#else
++#define nf_bridge_adjust_skb_data(s) do {} while (0)
++#define nf_bridge_adjust_segmented_data(s) do {} while (0)
++#endif
++
++static void free_entry(struct nf_queue_entry *entry)
++{
++      nf_queue_entry_release_refs(entry);
++      kfree(entry);
++}
++
++static int __imq_nf_queue(struct nf_queue_entry *entry, struct net_device *dev);
++
++static int __imq_nf_queue_gso(struct nf_queue_entry *entry,
++                            struct net_device *dev, struct sk_buff *skb)
++{
++      int ret = -ENOMEM;
++      struct nf_queue_entry *entry_seg;
++
++      nf_bridge_adjust_segmented_data(skb);
++
++      if (skb->next == NULL) { /* last packet, no need to copy entry */
++              struct sk_buff *gso_skb = entry->skb;
++              entry->skb = skb;
++              ret = __imq_nf_queue(entry, dev);
++              if (ret)
++                      entry->skb = gso_skb;
++              return ret;
++      }
++
++      skb->next = NULL;
++
++      entry_seg = nf_queue_entry_dup(entry);
++      if (entry_seg) {
++              entry_seg->skb = skb;
++              ret = __imq_nf_queue(entry_seg, dev);
++              if (ret)
++                      free_entry(entry_seg);
++      }
++      return ret;
++}
++
 +static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num)
 +{
++      struct sk_buff *skb, *segs;
 +      struct net_device *dev;
-+      struct sk_buff *skb_orig, *skb, *skb_shared;
-+      struct Qdisc *q;
-+      struct netdev_queue *txq;
-+      spinlock_t *root_lock;
-+      int users, index;
-+      int retval = -EINVAL;
-+      unsigned int orig_queue_index;
++      unsigned int queued;
++      int index, retval, err;
 +
 +      index = entry->skb->imq_flags & IMQ_F_IFMASK;
 +      if (unlikely(index > numdevs - 1)) {
 +              if (net_ratelimit())
-+                      printk(KERN_WARNING
-+                             "IMQ: invalid device specified, highest is %u\n",
-+                             numdevs - 1);
++                      pr_warn("IMQ: invalid device specified, highest is %u\n",
++                              numdevs - 1);
 +              retval = -EINVAL;
-+              goto out;
++              goto out_no_dev;
 +      }
 +
 +      /* check for imq device by index from cache */
@@ -531,16 +764,86 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +              dev = get_imq_device_by_index(index);
 +              if (IS_ERR(dev)) {
 +                      retval = PTR_ERR(dev);
-+                      goto out;
++                      goto out_no_dev;
 +              }
 +      }
 +
 +      if (unlikely(!(dev->flags & IFF_UP))) {
 +              entry->skb->imq_flags = 0;
-+              nf_reinject(entry, NF_ACCEPT);
-+              retval = 0;
-+              goto out;
++              retval = -ECANCELED;
++              goto out_no_dev;
 +      }
++
++      if (!skb_is_gso(entry->skb))
++              return __imq_nf_queue(entry, dev);
++
++      /* Since 3.10.x, GSO handling moved here as result of upstream commit
++       * a5fedd43d5f6c94c71053a66e4c3d2e35f1731a2 (netfilter: move
++       * skb_gso_segment into nfnetlink_queue module).
++       *
++       * Following code replicates the gso handling from
++       * 'net/netfilter/nfnetlink_queue_core.c':nfqnl_enqueue_packet().
++       */
++
++      skb = entry->skb;
++
++      switch (entry->pf) {
++      case NFPROTO_IPV4:
++              skb->protocol = htons(ETH_P_IP);
++              break;
++      case NFPROTO_IPV6:
++              skb->protocol = htons(ETH_P_IPV6);
++              break;
++      }
++
++      nf_bridge_adjust_skb_data(skb);
++      segs = skb_gso_segment(skb, 0);
++      /* Does not use PTR_ERR to limit the number of error codes that can be
++       * returned by nf_queue.  For instance, callers rely on -ECANCELED to
++       * mean 'ignore this hook'.
++       */
++      err = -ENOBUFS;
++      if (IS_ERR(segs))
++              goto out_err;
++      queued = 0;
++      err = 0;
++      do {
++              struct sk_buff *nskb = segs->next;
++              if (nskb && nskb->next)
++                      nskb->cb_next = NULL;
++              if (err == 0)
++                      err = __imq_nf_queue_gso(entry, dev, segs);
++              if (err == 0)
++                      queued++;
++              else
++                      kfree_skb(segs);
++              segs = nskb;
++      } while (segs);
++
++      if (queued) {
++              if (err) /* some segments are already queued */
++                      free_entry(entry);
++              kfree_skb(skb);
++              return 0;
++      }
++
++out_err:
++      nf_bridge_adjust_segmented_data(skb);
++      retval = err;
++out_no_dev:
++      return retval;
++}
++
++static int __imq_nf_queue(struct nf_queue_entry *entry, struct net_device *dev)
++{
++      struct sk_buff *skb_orig, *skb, *skb_shared;
++      struct Qdisc *q;
++      struct netdev_queue *txq;
++      spinlock_t *root_lock;
++      int users;
++      int retval = -EINVAL;
++      unsigned int orig_queue_index;
++
 +      dev->last_rx = jiffies;
 +
 +      skb = entry->skb;
@@ -554,6 +857,7 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +                      retval = -ENOMEM;
 +                      goto out;
 +              }
++              skb->cb_next = NULL;
 +              entry->skb = skb;
 +      }
 +
@@ -590,8 +894,9 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +      users = atomic_read(&skb->users);
 +
 +      skb_shared = skb_get(skb); /* increase reference count by one */
-+      skb_save_cb(skb_shared); /* backup skb->cb, as qdisc layer will
-+                                      overwrite it */
++
++      /* backup skb->cb, as qdisc layer will overwrite it */
++      skb_save_cb(skb_shared);
 +      qdisc_enqueue_root(skb_shared, q); /* might kfree_skb */
 +
 +      if (likely(atomic_read(&skb_shared->users) == users + 1)) {
@@ -614,9 +919,11 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +      } else {
 +              skb_restore_cb(skb_shared); /* restore skb->cb */
 +              skb->nf_queue_entry = NULL;
-+              /* qdisc dropped packet and decreased skb reference count of
++              /*
++               * qdisc dropped packet and decreased skb reference count of
 +               * skb, so we don't really want to and try refree as that would
-+               * actually destroy the skb. */
++               * actually destroy the skb.
++               */
 +              spin_unlock(root_lock);
 +              goto packet_not_eaten_by_imq_dev;
 +      }
@@ -635,7 +942,8 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +      return retval;
 +}
 +
-+static unsigned int imq_nf_hook(unsigned int hook, struct sk_buff *pskb,
++static unsigned int imq_nf_hook(const struct nf_hook_ops *hook_ops,
++                              struct sk_buff *pskb,
 +                              const struct net_device *indev,
 +                              const struct net_device *outdev,
 +                              int (*okfn)(struct sk_buff *))
@@ -692,7 +1000,7 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +      }
 +      return 0;
 +end:
-+      printk(KERN_WARNING "IMQ: imq_validate failed (%d)\n", ret);
++      pr_warn("IMQ: imq_validate failed (%d)\n", ret);
 +      return ret;
 +}
 +
@@ -704,7 +1012,6 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +};
 +
 +static const struct nf_queue_handler imq_nfqh = {
-+      .name  = "imq",
 +      .outfn = imq_nf_queue,
 +};
 +
@@ -750,13 +1057,13 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +      int err, i;
 +
 +      if (numdevs < 1 || numdevs > IMQ_MAX_DEVS) {
-+              printk(KERN_ERR "IMQ: numdevs has to be betweed 1 and %u\n",
++              pr_err("IMQ: numdevs has to be betweed 1 and %u\n",
 +                     IMQ_MAX_DEVS);
 +              return -EINVAL;
 +      }
 +
 +      if (numqueues < 1 || numqueues > IMQ_MAX_QUEUES) {
-+              printk(KERN_ERR "IMQ: numqueues has to be betweed 1 and %u\n",
++              pr_err("IMQ: numqueues has to be betweed 1 and %u\n",
 +                     IMQ_MAX_QUEUES);
 +              return -EINVAL;
 +      }
@@ -790,30 +1097,30 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +
 +      err = imq_init_devs();
 +      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_devs(net)\n");
++              pr_err("IMQ: Error trying imq_init_devs(net)\n");
 +              return err;
 +      }
 +
 +      err = imq_init_hooks();
 +      if (err) {
-+              printk(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
++              pr_err(KERN_ERR "IMQ: Error trying imq_init_hooks()\n");
 +              rtnl_link_unregister(&imq_link_ops);
 +              memset(imq_devs_cache, 0, sizeof(imq_devs_cache));
 +              return err;
 +      }
 +
-+      printk(KERN_INFO "IMQ driver loaded successfully. "
-+              "(numdevs = %d, numqueues = %d)\n", numdevs, numqueues);
++      pr_info("IMQ driver loaded successfully. (numdevs = %d, numqueues = %d)\n",
++              numdevs, numqueues);
 +
 +#if defined(CONFIG_IMQ_BEHAVIOR_BA) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on PREROUTING.\n");
++      pr_info("\tHooking IMQ before NAT on PREROUTING.\n");
 +#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on PREROUTING.\n");
++      pr_info("\tHooking IMQ after NAT on PREROUTING.\n");
 +#endif
 +#if defined(CONFIG_IMQ_BEHAVIOR_AB) || defined(CONFIG_IMQ_BEHAVIOR_BB)
-+      printk(KERN_INFO "\tHooking IMQ before NAT on POSTROUTING.\n");
++      pr_info("\tHooking IMQ before NAT on POSTROUTING.\n");
 +#else
-+      printk(KERN_INFO "\tHooking IMQ after NAT on POSTROUTING.\n");
++      pr_info("\tHooking IMQ after NAT on POSTROUTING.\n");
 +#endif
 +
 +      return 0;
@@ -835,7 +1142,7 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +{
 +      imq_unhook();
 +      imq_cleanup_devs();
-+      printk(KERN_INFO "IMQ driver unloaded successfully.\n");
++      pr_info("IMQ driver unloaded successfully.\n");
 +}
 +
 +module_init(imq_init_module);
@@ -843,158 +1150,18 @@ diff -uNr linux-3.2/drivers/net/imq.c linux-3.2-imq/drivers/net/imq.c
 +
 +module_param(numdevs, int, 0);
 +module_param(numqueues, int, 0);
-+MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will "
-+                      "be created)");
++MODULE_PARM_DESC(numdevs, "number of IMQ devices (how many imq* devices will be created)");
 +MODULE_PARM_DESC(numqueues, "number of queues per IMQ device");
 +MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See "
-+                      "http://www.linuximq.net/ for more information.");
++MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
 +MODULE_LICENSE("GPL");
 +MODULE_ALIAS_RTNL_LINK("imq");
 +
-diff -uNr linux-3.2/drivers/net/Kconfig linux-3.2-imq/drivers/net/Kconfig
---- linux-3.2/drivers/net/Kconfig      2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/drivers/net/Kconfig  2011-11-04 11:12:52.106390309 +0200
-@@ -90,6 +90,125 @@
-         To compile this driver as a module, choose M here: the module
-         will be called eql.  If unsure, say N.
-+config IMQ
-+      tristate "IMQ (intermediate queueing device) support"
-+      depends on NETDEVICES && NETFILTER
-+      ---help---
-+        The IMQ device(s) is used as placeholder for QoS queueing
-+        disciplines. Every packet entering/leaving the IP stack can be
-+        directed through the IMQ device where it's enqueued/dequeued to the
-+        attached qdisc. This allows you to treat network devices as classes
-+        and distribute bandwidth among them. Iptables is used to specify
-+        through which IMQ device, if any, packets travel.
-+
-+        More information at: http://www.linuximq.net/
-+
-+        To compile this driver as a module, choose M here: the module
-+        will be called imq.  If unsure, say N.
-+
-+choice
-+      prompt "IMQ behavior (PRE/POSTROUTING)"
-+      depends on IMQ
-+      default IMQ_BEHAVIOR_AB
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        IMQ can work in any of the following ways:
-+
-+            PREROUTING   |      POSTROUTING
-+        -----------------|-------------------
-+        #1  After NAT    |      After NAT
-+        #2  After NAT    |      Before NAT
-+        #3  Before NAT   |      After NAT
-+        #4  Before NAT   |      Before NAT
-+
-+        The default behavior is to hook before NAT on PREROUTING
-+        and after NAT on POSTROUTING (#3).
-+
-+        This settings are specially usefull when trying to use IMQ
-+        to shape NATed clients.
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AA
-+      bool "IMQ AA"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   After NAT
-+        POSTROUTING:  After NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_AB
-+      bool "IMQ AB"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   After NAT
-+        POSTROUTING:  Before NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BA
-+      bool "IMQ BA"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   Before NAT
-+        POSTROUTING:  After NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+config IMQ_BEHAVIOR_BB
-+      bool "IMQ BB"
-+      help
-+        This setting defines how IMQ behaves in respect to its
-+        hooking in PREROUTING and POSTROUTING.
-+
-+        Choosing this option will make IMQ hook like this:
-+
-+        PREROUTING:   Before NAT
-+        POSTROUTING:  Before NAT
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
-+endchoice
-+
-+config IMQ_NUM_DEVS
-+      int "Number of IMQ devices"
-+      range 2 16
-+      depends on IMQ
-+      default "16"
-+      help
-+        This setting defines how many IMQ devices will be created.
-+
-+        The default value is 16.
-+
-+        More information can be found at: www.linuximq.net
-+
-+        If not sure leave the default settings alone.
-+
- config NET_FC
-       bool "Fibre Channel driver support"
-       depends on SCSI && PCI
-diff -uNr linux-3.2/drivers/net/Makefile linux-3.2-imq/drivers/net/Makefile
---- linux-3.2/drivers/net/Makefile     2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/drivers/net/Makefile 2011-11-04 11:12:52.106390309 +0200
-@@ -8,6 +8,7 @@ 
- obj-$(CONFIG_BONDING) += bonding/
- obj-$(CONFIG_DUMMY) += dummy.o
- obj-$(CONFIG_EQUALIZER) += eql.o
-+obj-$(CONFIG_IMQ) += imq.o
- obj-$(CONFIG_IFB) += ifb.o
- obj-$(CONFIG_MACVLAN) += macvlan.o
- obj-$(CONFIG_MACVTAP) += macvtap.o
-diff -uNr linux-3.2/include/linux/imq.h linux-3.2-imq/include/linux/imq.h
---- linux-3.2/include/linux/imq.h      1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.2-imq/include/linux/imq.h  2011-11-04 11:12:52.109723710 +0200
+diff --git a/include/linux/imq.h b/include/linux/imq.h
+new file mode 100644
+index 0000000..1babb09
+--- /dev/null
++++ b/include/linux/imq.h
 @@ -0,0 +1,13 @@
 +#ifndef _IMQ_H
 +#define _IMQ_H
@@ -1009,9 +1176,11 @@ diff -uNr linux-3.2/include/linux/imq.h linux-3.2-imq/include/linux/imq.h
 +
 +#endif /* _IMQ_H */
 +
-diff -uNr linux-3.2/include/linux/netfilter/xt_IMQ.h linux-3.2-imq/include/linux/netfilter/xt_IMQ.h
---- linux-3.2/include/linux/netfilter/xt_IMQ.h 1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.2-imq/include/linux/netfilter/xt_IMQ.h     2011-11-04 11:12:52.109723710 +0200
+diff --git a/include/linux/netfilter/xt_IMQ.h b/include/linux/netfilter/xt_IMQ.h
+new file mode 100644
+index 0000000..9b07230
+--- /dev/null
++++ b/include/linux/netfilter/xt_IMQ.h
 @@ -0,0 +1,9 @@
 +#ifndef _XT_IMQ_H
 +#define _XT_IMQ_H
@@ -1022,22 +1191,11 @@ diff -uNr linux-3.2/include/linux/netfilter/xt_IMQ.h linux-3.2-imq/include/linux
 +
 +#endif /* _XT_IMQ_H */
 +
-diff -uNr linux-3.2/include/linux/netfilter.h linux-3.2-imq/include/linux/netfilter.h
---- linux-3.2/include/linux/netfilter.h        2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/include/linux/netfilter.h    2011-11-04 11:12:52.109723710 +0200
-@@ -22,7 +22,8 @@
- #define NF_QUEUE 3
- #define NF_REPEAT 4
- #define NF_STOP 5
--#define NF_MAX_VERDICT NF_STOP
-+#define NF_IMQ_QUEUE 6
-+#define NF_MAX_VERDICT NF_IMQ_QUEUE
- /* we overload the higher bits for encoding auxiliary data such as the queue
-  * number or errno values. Not nice, but better than additional function
-diff -uNr linux-3.2/include/linux/netfilter_ipv4/ipt_IMQ.h linux-3.2-imq/include/linux/netfilter_ipv4/ipt_IMQ.h
---- linux-3.2/include/linux/netfilter_ipv4/ipt_IMQ.h   1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.2-imq/include/linux/netfilter_ipv4/ipt_IMQ.h       2011-11-04 11:12:52.109723710 +0200
+diff --git a/include/linux/netfilter_ipv4/ipt_IMQ.h b/include/linux/netfilter_ipv4/ipt_IMQ.h
+new file mode 100644
+index 0000000..7af320f
+--- /dev/null
++++ b/include/linux/netfilter_ipv4/ipt_IMQ.h
 @@ -0,0 +1,10 @@
 +#ifndef _IPT_IMQ_H
 +#define _IPT_IMQ_H
@@ -1049,9 +1207,11 @@ diff -uNr linux-3.2/include/linux/netfilter_ipv4/ipt_IMQ.h linux-3.2-imq/include
 +
 +#endif /* _IPT_IMQ_H */
 +
-diff -uNr linux-3.2/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-3.2-imq/include/linux/netfilter_ipv6/ip6t_IMQ.h
---- linux-3.2/include/linux/netfilter_ipv6/ip6t_IMQ.h  1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.2-imq/include/linux/netfilter_ipv6/ip6t_IMQ.h      2011-11-04 11:12:52.113057113 +0200
+diff --git a/include/linux/netfilter_ipv6/ip6t_IMQ.h b/include/linux/netfilter_ipv6/ip6t_IMQ.h
+new file mode 100644
+index 0000000..198ac01
+--- /dev/null
++++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h
 @@ -0,0 +1,10 @@
 +#ifndef _IP6T_IMQ_H
 +#define _IP6T_IMQ_H
@@ -1063,20 +1223,21 @@ diff -uNr linux-3.2/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-3.2-imq/includ
 +
 +#endif /* _IP6T_IMQ_H */
 +
-diff -uNr linux-3.2/include/linux/skbuff.h linux-3.2-imq/include/linux/skbuff.h
---- linux-3.2/include/linux/skbuff.h   2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/include/linux/skbuff.h       2011-11-04 11:12:52.116390515 +0200
-@@ -30,6 +30,9 @@
- #include <linux/dmaengine.h>
- #include <linux/hrtimer.h>
+diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
+index ad8f859..8473090 100644
+--- a/include/linux/skbuff.h
++++ b/include/linux/skbuff.h
+@@ -33,6 +33,9 @@
  #include <linux/dma-mapping.h>
+ #include <linux/netdev_features.h>
+ #include <net/flow_keys.h>
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +#include <linux/imq.h>
 +#endif
  
- /* Don't change this without changing skb_csum_unnecessary! */
- #define CHECKSUM_NONE 0
-@@ -386,6 +389,9 @@
+ /* A. Checksumming of received packets by device.
+  *
+@@ -441,6 +444,9 @@ struct sk_buff {
         * first. This is owned by whoever has the skb queued ATM.
         */
        char                    cb[48] __aligned(8);
@@ -1086,9 +1247,9 @@ diff -uNr linux-3.2/include/linux/skbuff.h linux-3.2-imq/include/linux/skbuff.h
  
        unsigned long           _skb_refdst;
  #ifdef CONFIG_XFRM
-@@ -424,6 +430,9 @@
- #ifdef NET_SKBUFF_NF_DEFRAG_NEEDED
-       struct sk_buff          *nfct_reasm;
+@@ -476,6 +482,9 @@ struct sk_buff {
+ #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
+       struct nf_conntrack     *nfct;
  #endif
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +      struct nf_queue_entry   *nf_queue_entry;
@@ -1096,33 +1257,32 @@ diff -uNr linux-3.2/include/linux/skbuff.h linux-3.2-imq/include/linux/skbuff.h
  #ifdef CONFIG_BRIDGE_NETFILTER
        struct nf_bridge_info   *nf_bridge;
  #endif
-@@ -449,6 +458,10 @@
-       /* 0/13 bit hole */
+@@ -513,6 +522,9 @@ struct sk_buff {
+        */
+       __u8                    encapsulation:1;
+       /* 6/8 bit hole (depending on ndisc_nodetype presence) */
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +      __u8                    imq_flags:IMQ_F_BITS;
 +#endif
-+
- #ifdef CONFIG_NET_DMA
-       dma_cookie_t            dma_cookie;
- #endif
-@@ -535,6 +548,12 @@
-       return (struct rtable *)skb_dst(skb);
- }
+       kmemcheck_bitfield_end(flags2);
  
+ #if defined CONFIG_NET_DMA || defined CONFIG_NET_RX_BUSY_POLL
+@@ -653,6 +665,12 @@ void kfree_skb_list(struct sk_buff *segs);
+ void skb_tx_error(struct sk_buff *skb);
+ void consume_skb(struct sk_buff *skb);
+ void  __kfree_skb(struct sk_buff *skb);
 +
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern int skb_save_cb(struct sk_buff *skb);
-+extern int skb_restore_cb(struct sk_buff *skb);
++int skb_save_cb(struct sk_buff *skb);
++int skb_restore_cb(struct sk_buff *skb);
 +#endif
 +
- extern void kfree_skb(struct sk_buff *skb);
- extern void consume_skb(struct sk_buff *skb);
extern void          __kfree_skb(struct sk_buff *skb);
-@@ -2368,6 +2387,10 @@
-       dst->nfct_reasm = src->nfct_reasm;
-       nf_conntrack_get_reasm(src->nfct_reasm);
+ extern struct kmem_cache *skbuff_head_cache;
void kfree_skb_partial(struct sk_buff *skb, bool head_stolen);
+@@ -2739,6 +2757,10 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
+       nf_conntrack_get(src->nfct);
+       dst->nfctinfo = src->nfctinfo;
  #endif
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +      dst->imq_flags = src->imq_flags;
@@ -1131,37 +1291,54 @@ diff -uNr linux-3.2/include/linux/skbuff.h linux-3.2-imq/include/linux/skbuff.h
  #ifdef CONFIG_BRIDGE_NETFILTER
        dst->nf_bridge  = src->nf_bridge;
        nf_bridge_get(src->nf_bridge);
-diff -uNr linux-3.2/include/net/netfilter/nf_queue.h linux-3.2-imq/include/net/netfilter/nf_queue.h
---- linux-3.2/include/net/netfilter/nf_queue.h 2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/include/net/netfilter/nf_queue.h     2011-11-04 11:12:52.116390515 +0200
-@@ -30,5 +30,11 @@
-                                      const struct nf_queue_handler *qh);
- extern void nf_unregister_queue_handlers(const struct nf_queue_handler *qh);
- extern void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
-+extern void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
+diff --git a/include/net/netfilter/nf_queue.h b/include/net/netfilter/nf_queue.h
+index 84a53d7..6ffb593 100644
+--- a/include/net/netfilter/nf_queue.h
++++ b/include/net/netfilter/nf_queue.h
+@@ -33,6 +33,12 @@ struct nf_queue_handler {
+ void nf_register_queue_handler(const struct nf_queue_handler *qh);
+ void nf_unregister_queue_handler(void);
+ void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
++void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
 +
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+extern void nf_register_queue_imq_handler(const struct nf_queue_handler *qh);
-+extern void nf_unregister_queue_imq_handler(void);
++void nf_register_queue_imq_handler(const struct nf_queue_handler *qh);
++void nf_unregister_queue_imq_handler(void);
 +#endif
  
- #endif /* _NF_QUEUE_H */
-diff -uNr linux-3.2/net/core/dev.c linux-3.2-imq/net/core/dev.c
---- linux-3.2/net/core/dev.c   2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/net/core/dev.c       2011-11-04 11:12:52.119723915 +0200
-@@ -98,6 +98,9 @@
- #include <net/net_namespace.h>
- #include <net/sock.h>
- #include <linux/rtnetlink.h>
+ bool nf_queue_entry_get_refs(struct nf_queue_entry *entry);
+ void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
+diff --git a/include/uapi/linux/netfilter.h b/include/uapi/linux/netfilter.h
+index ef1b1f8..079e5ff 100644
+--- a/include/uapi/linux/netfilter.h
++++ b/include/uapi/linux/netfilter.h
+@@ -13,7 +13,8 @@
+ #define NF_QUEUE 3
+ #define NF_REPEAT 4
+ #define NF_STOP 5
+-#define NF_MAX_VERDICT NF_STOP
++#define NF_IMQ_QUEUE 6
++#define NF_MAX_VERDICT NF_IMQ_QUEUE
+ /* we overload the higher bits for encoding auxiliary data such as the queue
+  * number or errno values. Not nice, but better than additional function
+diff --git a/net/core/dev.c b/net/core/dev.c
+index 3ed11a5..fd62030 100644
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -132,6 +132,9 @@
+ #include <linux/hashtable.h>
+ #include <linux/vmalloc.h>
+ #include <linux/if_macvlan.h>
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +#include <linux/imq.h>
 +#endif
- #include <linux/proc_fs.h>
- #include <linux/seq_file.h>
- #include <linux/stat.h>
-@@ -2185,7 +2188,12 @@
-               if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
-                       skb_dst_drop(skb);
+ #include "net-sysfs.h"
+@@ -2611,7 +2614,12 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
+                       }
+               }
  
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +              if (!list_empty(&ptype_all) &&
@@ -1171,24 +1348,37 @@ diff -uNr linux-3.2/net/core/dev.c linux-3.2-imq/net/core/dev.c
 +#endif
                        dev_queue_xmit_nit(skb, dev);
  
-               skb_orphan_try(skb);
-diff -uNr linux-3.2/net/core/skbuff.c linux-3.2-imq/net/core/skbuff.c
---- linux-3.2/net/core/skbuff.c        2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/net/core/skbuff.c    2011-11-04 11:12:52.123057315 +0200
-@@ -73,6 +73,9 @@
+               skb_len = skb->len;
+diff --git a/net/core/skbuff.c b/net/core/skbuff.c
+index baf6fc4..7d30d78 100644
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -77,6 +77,115 @@
  
- static struct kmem_cache *skbuff_head_cache __read_mostly;
+ struct kmem_cache *skbuff_head_cache __read_mostly;
  static struct kmem_cache *skbuff_fclone_cache __read_mostly;
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +static struct kmem_cache *skbuff_cb_store_cache __read_mostly;
 +#endif
- static void sock_pipe_buf_release(struct pipe_inode_info *pipe,
-                                 struct pipe_buffer *buf)
-@@ -92,6 +95,82 @@
-       return 1;
- }
++
++static void sock_pipe_buf_release(struct pipe_inode_info *pipe,
++                                struct pipe_buffer *buf)
++{
++      put_page(buf->page);
++}
++
++static void sock_pipe_buf_get(struct pipe_inode_info *pipe,
++                              struct pipe_buffer *buf)
++{
++      get_page(buf->page);
++}
++
++static int sock_pipe_buf_steal(struct pipe_inode_info *pipe,
++                             struct pipe_buffer *buf)
++{
++      return 1;
++}
++
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +/* Control buffer save/restore for IMQ devices */
 +struct skb_cb_table {
@@ -1265,47 +1455,61 @@ diff -uNr linux-3.2/net/core/skbuff.c linux-3.2-imq/net/core/skbuff.c
 +      spin_unlock(&skb_cb_store_lock);
 +}
 +#endif
++
++/* Pipe buffer operations for a socket. */
++static const struct pipe_buf_operations sock_pipe_buf_ops = {
++      .can_merge = 0,
++      .map = generic_pipe_buf_map,
++      .unmap = generic_pipe_buf_unmap,
++      .confirm = generic_pipe_buf_confirm,
++      .release = sock_pipe_buf_release,
++      .steal = sock_pipe_buf_steal,
++      .get = sock_pipe_buf_get,
++};
  
- /* Pipe buffer operations for a socket. */
- static const struct pipe_buf_operations sock_pipe_buf_ops = {
-@@ -403,6 +482,26 @@
+ /**
+  *    skb_panic - private function for out-of-line support
+@@ -563,6 +672,28 @@ static void skb_release_head_state(struct sk_buff *skb)
                WARN_ON(in_irq());
                skb->destructor(skb);
        }
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      /* This should not happen. When it does, avoid memleak by restoring
-+      the chain of cb-backups. */
++      /*
++       * This should not happen. When it does, avoid memleak by restoring
++       * the chain of cb-backups.
++       */
 +      while (skb->cb_next != NULL) {
 +              if (net_ratelimit())
-+                      printk(KERN_WARNING "IMQ: kfree_skb: skb->cb_next: "
-+                              "%08x\n", (unsigned int)skb->cb_next);
++                      pr_warn("IMQ: kfree_skb: skb->cb_next: %08x\n",
++                              (unsigned int)skb->cb_next);
 +
 +              skb_restore_cb(skb);
 +      }
-+      /* This should not happen either, nf_queue_entry is nullified in
++      /*
++       * This should not happen either, nf_queue_entry is nullified in
 +       * imq_dev_xmit(). If we have non-NULL nf_queue_entry then we are
 +       * leaking entry pointers, maybe memory. We don't know if this is
 +       * pointer to already freed memory, or should this be freed.
 +       * If this happens we need to add refcounting, etc for nf_queue_entry.
 +       */
 +      if (skb->nf_queue_entry && net_ratelimit())
-+              printk(KERN_WARNING
-+                              "IMQ: kfree_skb: skb->nf_queue_entry != NULL");
++              pr_warn("%s\n", "IMQ: kfree_skb: skb->nf_queue_entry != NULL");
 +#endif
- #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
+ #if IS_ENABLED(CONFIG_NF_CONNTRACK)
        nf_conntrack_put(skb->nfct);
  #endif
-@@ -547,6 +646,9 @@
+@@ -694,6 +825,10 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
        new->sp                 = secpath_get(old->sp);
  #endif
        memcpy(new->cb, old->cb, sizeof(old->cb));
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      skb_copy_stored_cb(new, old);
++      new->cb_next = NULL;
++      /*skb_copy_stored_cb(new, old);*/
 +#endif
        new->csum               = old->csum;
        new->local_df           = old->local_df;
        new->pkt_type           = old->pkt_type;
-@@ -2907,6 +3009,13 @@
+@@ -3233,6 +3368,13 @@ void __init skb_init(void)
                                                0,
                                                SLAB_HWCACHE_ALIGN|SLAB_PANIC,
                                                NULL);
@@ -1319,12 +1523,13 @@ diff -uNr linux-3.2/net/core/skbuff.c linux-3.2-imq/net/core/skbuff.c
  }
  
  /**
-diff -uNr linux-3.2/net/ipv6/ip6_output.c linux-3.2-imq/net/ipv6/ip6_output.c
---- linux-3.2/net/ipv6/ip6_output.c    2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/net/ipv6/ip6_output.c        2011-11-04 11:12:52.123057315 +0200
-@@ -102,9 +102,6 @@
-       struct net_device *dev = dst->dev;
-       struct neighbour *neigh;
+diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
+index 12f7ef0..deb1c9d 100644
+--- a/net/ipv6/ip6_output.c
++++ b/net/ipv6/ip6_output.c
+@@ -64,9 +64,6 @@ static int ip6_finish_output2(struct sk_buff *skb)
+       struct in6_addr *nexthop;
+       int ret;
  
 -      skb->protocol = htons(ETH_P_IPV6);
 -      skb->dev = dev;
@@ -1332,41 +1537,27 @@ diff -uNr linux-3.2/net/ipv6/ip6_output.c linux-3.2-imq/net/ipv6/ip6_output.c
        if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) {
                struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
  
-@@ -170,6 +167,11 @@
+@@ -143,6 +140,13 @@ int ip6_output(struct sk_buff *skb)
                return 0;
        }
  
-+      /* IMQ-patch: moved setting skb->dev and skb->protocol from
-+       * ip6_finish_output2 to fix crashing at netif_skb_features(). */
++      /*
++       * IMQ-patch: moved setting skb->dev and skb->protocol from
++       * ip6_finish_output2 to fix crashing at netif_skb_features().
++       */
 +      skb->protocol = htons(ETH_P_IPV6);
 +      skb->dev = dev;
 +
        return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, skb, NULL, dev,
                            ip6_finish_output,
                            !(IP6CB(skb)->flags & IP6SKB_REROUTED));
-diff -uNr linux-3.2/net/netfilter/core.c linux-3.2-imq/net/netfilter/core.c
---- linux-3.2/net/netfilter/core.c     2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/net/netfilter/core.c 2011-11-04 11:12:52.123057315 +0200
-@@ -179,9 +179,11 @@
-               ret = NF_DROP_GETERR(verdict);
-               if (ret == 0)
-                       ret = -EPERM;
--      } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE) {
-+      } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE ||
-+                 (verdict & NF_VERDICT_MASK) == NF_IMQ_QUEUE) {
-               int err = nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
--                                              verdict >> NF_VERDICT_QBITS);
-+                                              verdict >> NF_VERDICT_QBITS,
-+                                              verdict & NF_VERDICT_MASK);
-               if (err < 0) {
-                       if (err == -ECANCELED)
-                               goto next_hook;
-diff -uNr linux-3.2/net/netfilter/Kconfig linux-3.2-imq/net/netfilter/Kconfig
---- linux-3.2/net/netfilter/Kconfig    2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/net/netfilter/Kconfig        2011-11-04 11:12:52.123057315 +0200
-@@ -506,6 +506,18 @@
-         For more information on the LEDs available on your system, see
-         Documentation/leds/leds-class.txt
+diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
+index e9410d1..ba801d5 100644
+--- a/net/netfilter/Kconfig
++++ b/net/netfilter/Kconfig
+@@ -751,6 +751,18 @@ config NETFILTER_XT_TARGET_LOG
+         To compile it as a module, choose M here.  If unsure, say N.
  
 +config NETFILTER_XT_TARGET_IMQ
 +        tristate '"IMQ" target support'
@@ -1383,77 +1574,78 @@ diff -uNr linux-3.2/net/netfilter/Kconfig linux-3.2-imq/net/netfilter/Kconfig
  config NETFILTER_XT_TARGET_MARK
        tristate '"MARK" target support'
        depends on NETFILTER_ADVANCED
-diff -uNr linux-3.2/net/netfilter/Makefile linux-3.2-imq/net/netfilter/Makefile
---- linux-3.2/net/netfilter/Makefile   2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/net/netfilter/Makefile       2011-11-04 11:12:52.123057315 +0200
-@@ -56,6 +56,7 @@
- obj-$(CONFIG_NETFILTER_XT_TARGET_CT) += xt_CT.o
+diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
+index bffdad7..050e613 100644
+--- a/net/netfilter/Makefile
++++ b/net/netfilter/Makefile
+@@ -103,6 +103,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CT) += xt_CT.o
  obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
  obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o
+ obj-$(CONFIG_NETFILTER_XT_TARGET_HMARK) += xt_HMARK.o
 +obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o
  obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NFLOG) += xt_NFLOG.o
- obj-$(CONFIG_NETFILTER_XT_TARGET_NFQUEUE) += xt_NFQUEUE.o
-diff -uNr linux-3.2/net/netfilter/nf_internals.h linux-3.2-imq/net/netfilter/nf_internals.h
---- linux-3.2/net/netfilter/nf_internals.h     2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/net/netfilter/nf_internals.h 2011-11-04 11:12:52.123057315 +0200
-@@ -29,7 +29,7 @@
-                   struct net_device *indev,
-                   struct net_device *outdev,
-                   int (*okfn)(struct sk_buff *),
--                  unsigned int queuenum);
-+                  unsigned int queuenum, unsigned int queuetype);
- extern int __init netfilter_queue_init(void);
+ obj-$(CONFIG_NETFILTER_XT_TARGET_LOG) += xt_LOG.o
+ obj-$(CONFIG_NETFILTER_XT_TARGET_NETMAP) += xt_NETMAP.o
+diff --git a/net/netfilter/core.c b/net/netfilter/core.c
+index 1fbab0c..4493417 100644
+--- a/net/netfilter/core.c
++++ b/net/netfilter/core.c
+@@ -191,9 +191,11 @@ next_hook:
+               ret = NF_DROP_GETERR(verdict);
+               if (ret == 0)
+                       ret = -EPERM;
+-      } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE) {
++      } else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE ||
++                 (verdict & NF_VERDICT_MASK) == NF_IMQ_QUEUE) {
+               int err = nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
+-                                              verdict >> NF_VERDICT_QBITS);
++                                              verdict >> NF_VERDICT_QBITS,
++                                              verdict & NF_VERDICT_MASK);
+               if (err < 0) {
+                       if (err == -ECANCELED)
+                               goto next_hook;
+diff --git a/net/netfilter/nf_internals.h b/net/netfilter/nf_internals.h
+index 61a3c92..5388a0e 100644
+--- a/net/netfilter/nf_internals.h
++++ b/net/netfilter/nf_internals.h
+@@ -23,7 +23,7 @@ unsigned int nf_iterate(struct list_head *head, struct sk_buff *skb,
+ int nf_queue(struct sk_buff *skb, struct nf_hook_ops *elem, u_int8_t pf,
+            unsigned int hook, struct net_device *indev,
+            struct net_device *outdev, int (*okfn)(struct sk_buff *),
+-           unsigned int queuenum);
++           unsigned int queuenum, unsigned int queuetype);
+ int __init netfilter_queue_init(void);
  
  /* nf_log.c */
-diff -uNr linux-3.2/net/netfilter/nf_queue.c linux-3.2-imq/net/netfilter/nf_queue.c
---- linux-3.2/net/netfilter/nf_queue.c 2011-10-24 10:10:05.000000000 +0300
-+++ linux-3.2-imq/net/netfilter/nf_queue.c     2011-11-04 11:12:52.123057315 +0200
-@@ -22,6 +22,26 @@
- static DEFINE_MUTEX(queue_handler_mutex);
+diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c
+index 5d24b1f..28317dc 100644
+--- a/net/netfilter/nf_queue.c
++++ b/net/netfilter/nf_queue.c
+@@ -27,6 +27,23 @@
+  */
+ static const struct nf_queue_handler __rcu *queue_handler __read_mostly;
  
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+static const struct nf_queue_handler *queue_imq_handler;
++static const struct nf_queue_handler __rcu *queue_imq_handler __read_mostly;
 +
 +void nf_register_queue_imq_handler(const struct nf_queue_handler *qh)
 +{
-+      mutex_lock(&queue_handler_mutex);
 +      rcu_assign_pointer(queue_imq_handler, qh);
-+      mutex_unlock(&queue_handler_mutex);
 +}
 +EXPORT_SYMBOL_GPL(nf_register_queue_imq_handler);
 +
 +void nf_unregister_queue_imq_handler(void)
 +{
-+      mutex_lock(&queue_handler_mutex);
-+      rcu_assign_pointer(queue_imq_handler, NULL);
-+      mutex_unlock(&queue_handler_mutex);
++      RCU_INIT_POINTER(queue_imq_handler, NULL);
++      synchronize_rcu();
 +}
 +EXPORT_SYMBOL_GPL(nf_unregister_queue_imq_handler);
 +#endif
 +
  /* return EBUSY when somebody else is registered, return EEXIST if the
   * same handler is registered, return 0 in case of success. */
- int nf_register_queue_handler(u_int8_t pf, const struct nf_queue_handler *qh)
-@@ -92,7 +112,7 @@
- }
- EXPORT_SYMBOL_GPL(nf_unregister_queue_handlers);
--static void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
-+void nf_queue_entry_release_refs(struct nf_queue_entry *entry)
- {
-       /* Release those devices we held, or Alexey will kill me. */
-       if (entry->indev)
-@@ -112,6 +132,7 @@
-       /* Drop reference to owner of hook which queued us. */
-       module_put(entry->elem->owner);
- }
-+EXPORT_SYMBOL_GPL(nf_queue_entry_release_refs);
- /*
-  * Any packet that leaves via this function must come back
-@@ -123,7 +144,8 @@
+ void nf_register_queue_handler(const struct nf_queue_handler *qh)
+@@ -105,7 +122,8 @@ int nf_queue(struct sk_buff *skb,
                      struct net_device *indev,
                      struct net_device *outdev,
                      int (*okfn)(struct sk_buff *),
@@ -1463,11 +1655,11 @@ diff -uNr linux-3.2/net/netfilter/nf_queue.c linux-3.2-imq/net/netfilter/nf_queu
  {
        int status = -ENOENT;
        struct nf_queue_entry *entry = NULL;
-@@ -137,7 +159,17 @@
+@@ -115,7 +133,17 @@ int nf_queue(struct sk_buff *skb,
        /* QUEUE == DROP if no one is waiting, to be safe. */
        rcu_read_lock();
  
--      qh = rcu_dereference(queue_handler[pf]);
+-      qh = rcu_dereference(queue_handler);
 +      if (queuetype == NF_IMQ_QUEUE) {
 +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
 +              qh = rcu_dereference(queue_imq_handler);
@@ -1476,57 +1668,31 @@ diff -uNr linux-3.2/net/netfilter/nf_queue.c linux-3.2-imq/net/netfilter/nf_queu
 +              goto err_unlock;
 +#endif
 +      } else {
-+              qh = rcu_dereference(queue_handler[pf]);
++              qh = rcu_dereference(queue_handler);
 +      }
 +
        if (!qh) {
                status = -ESRCH;
                goto err_unlock;
-@@ -209,7 +241,8 @@
-            struct net_device *indev,
-            struct net_device *outdev,
-            int (*okfn)(struct sk_buff *),
--           unsigned int queuenum)
-+           unsigned int queuenum,
-+           unsigned int queuetype)
- {
-       struct sk_buff *segs;
-       int err;
-@@ -217,7 +250,7 @@
-       if (!skb_is_gso(skb))
-               return __nf_queue(skb, elem, pf, hook, indev, outdev, okfn,
--                                queuenum);
-+                                queuenum, queuetype);
-       switch (pf) {
-       case NFPROTO_IPV4:
-@@ -244,7 +277,7 @@
-               segs->next = NULL;
-               if (err == 0)
-                       err = __nf_queue(segs, elem, pf, hook, indev,
--                                         outdev, okfn, queuenum);
-+                                       outdev, okfn, queuenum, queuetype);
-               if (err == 0)
-                       queued++;
-               else
-@@ -299,9 +332,11 @@
+@@ -205,9 +233,11 @@ void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict)
                local_bh_enable();
                break;
        case NF_QUEUE:
 +      case NF_IMQ_QUEUE:
-               err = __nf_queue(skb, elem, entry->pf, entry->hook,
-                                entry->indev, entry->outdev, entry->okfn,
--                               verdict >> NF_VERDICT_QBITS);
-+                               verdict >> NF_VERDICT_QBITS,
-+                               verdict & NF_VERDICT_MASK);
+               err = nf_queue(skb, elem, entry->pf, entry->hook,
+                               entry->indev, entry->outdev, entry->okfn,
+-                              verdict >> NF_VERDICT_QBITS);
++                              verdict >> NF_VERDICT_QBITS,
++                              verdict & NF_VERDICT_MASK);
                if (err < 0) {
                        if (err == -ECANCELED)
                                goto next_hook;
-diff -uNr linux-3.2/net/netfilter/xt_IMQ.c linux-3.2-imq/net/netfilter/xt_IMQ.c
---- linux-3.2/net/netfilter/xt_IMQ.c   1970-01-01 02:00:00.000000000 +0200
-+++ linux-3.2-imq/net/netfilter/xt_IMQ.c       2011-11-04 11:12:52.123057315 +0200
-@@ -0,0 +1,74 @@
+diff --git a/net/netfilter/xt_IMQ.c b/net/netfilter/xt_IMQ.c
+new file mode 100644
+index 0000000..1c3cd66
+--- /dev/null
++++ b/net/netfilter/xt_IMQ.c
+@@ -0,0 +1,72 @@
 +/*
 + * This target marks packets to be enqueued to an imq device
 + */
@@ -1551,9 +1717,8 @@ diff -uNr linux-3.2/net/netfilter/xt_IMQ.c linux-3.2-imq/net/netfilter/xt_IMQ.c
 +      struct xt_imq_info *mr = par->targinfo;
 +
 +      if (mr->todev > IMQ_MAX_DEVS - 1) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS - 1);
++              pr_warn("IMQ: invalid device specified, highest is %u\n",
++                      IMQ_MAX_DEVS - 1);
 +              return -EINVAL;
 +      }
 +
@@ -1595,8 +1760,7 @@ diff -uNr linux-3.2/net/netfilter/xt_IMQ.c linux-3.2-imq/net/netfilter/xt_IMQ.c
 +module_exit(imq_fini);
 +
 +MODULE_AUTHOR("http://www.linuximq.net");
-+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. "
-+                 "See http://www.linuximq.net/ for more information.");
++MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");
 +MODULE_LICENSE("GPL");
 +MODULE_ALIAS("ipt_IMQ");
 +MODULE_ALIAS("ip6t_IMQ");
similarity index 51%
rename from src/patches/linux-3.10.34-iwlwifi-noibss_only_on_radar_chan.patch
rename to src/patches/linux-3.14.22-iwlwifi-noibss_only_on_radar_chan.patch
index cc76fe6ea1239fc47e91cb6e698c84d161b03279..a6a950b910c7dc02099124b08acd825c431300c7 100644 (file)
@@ -1,19 +1,18 @@
-diff -Naur linux-3.10.34.org/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c linux-3.10.34/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c
---- linux-3.10.34.org/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c  2014-03-24 05:42:03.000000000 +0100
-+++ linux-3.10.34/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c      2014-03-25 09:08:28.548634788 +0100
-@@ -613,14 +613,16 @@
+diff -Naur linux-3.14.22.org/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c linux-3.14.22/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c
+--- linux-3.14.22.org/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c  2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/drivers/net/wireless/iwlwifi/iwl-eeprom-parse.c      2014-10-24 17:33:57.165155190 +0200
+@@ -613,14 +613,15 @@
                        /* set no-HT40, will enable as appropriate later */
                        channel->flags = IEEE80211_CHAN_NO_HT40;
  
-+
 +                      if (eeprom_ch->flags & EEPROM_CHANNEL_RADAR) {
 +                              channel->flags |= IEEE80211_CHAN_RADAR;
 +
                        if (!(eeprom_ch->flags & EEPROM_CHANNEL_IBSS))
-                               channel->flags |= IEEE80211_CHAN_NO_IBSS;
+                               channel->flags |= IEEE80211_CHAN_NO_IR;
  
                        if (!(eeprom_ch->flags & EEPROM_CHANNEL_ACTIVE))
-                               channel->flags |= IEEE80211_CHAN_PASSIVE_SCAN;
+                               channel->flags |= IEEE80211_CHAN_NO_IR;
 -
 -                      if (eeprom_ch->flags & EEPROM_CHANNEL_RADAR)
 -                              channel->flags |= IEEE80211_CHAN_RADAR;
diff --git a/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch b/src/patches/linux-3.14.22-kirkwood_legacy_boot.patch
new file mode 100644 (file)
index 0000000..97b2cc1
--- /dev/null
@@ -0,0 +1,1563 @@
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/db88f6281-bp-setup.c linux-3.14.22/arch/arm/mach-kirkwood/db88f6281-bp-setup.c
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/db88f6281-bp-setup.c      1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/arch/arm/mach-kirkwood/db88f6281-bp-setup.c  2014-11-05 22:07:58.828714499 +0100
+@@ -0,0 +1,108 @@
++/*
++ * arch/arm/mach-kirkwood/db88f6281-bp-setup.c
++ *
++ * Marvell DB-88F6281-BP Development Board Setup
++ *
++ * This file is licensed under the terms of the GNU General Public
++ * License version 2.  This program is licensed "as is" without any
++ * warranty of any kind, whether express or implied.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sizes.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/mmc-mvsdio.h>
++#include "common.h"
++#include "mpp.h"
++
++static struct mtd_partition db88f6281_nand_parts[] = {
++      {
++              .name = "u-boot",
++              .offset = 0,
++              .size = SZ_1M
++      }, {
++              .name = "uImage",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = SZ_4M
++      }, {
++              .name = "root",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = MTDPART_SIZ_FULL
++      },
++};
++
++static struct mv643xx_eth_platform_data db88f6281_ge00_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
++};
++
++static struct mv_sata_platform_data db88f6281_sata_data = {
++      .n_ports        = 2,
++};
++
++static struct mvsdio_platform_data db88f6281_mvsdio_data = {
++      .gpio_write_protect     = 37,
++      .gpio_card_detect       = 38,
++};
++
++static unsigned int db88f6281_mpp_config[] __initdata = {
++      MPP0_NF_IO2,
++      MPP1_NF_IO3,
++      MPP2_NF_IO4,
++      MPP3_NF_IO5,
++      MPP4_NF_IO6,
++      MPP5_NF_IO7,
++      MPP18_NF_IO0,
++      MPP19_NF_IO1,
++      MPP37_GPIO,
++      MPP38_GPIO,
++      0
++};
++
++static void __init db88f6281_init(void)
++{
++      /*
++       * Basic setup. Needs to be called early.
++       */
++      kirkwood_init();
++      kirkwood_mpp_conf(db88f6281_mpp_config);
++
++      kirkwood_nand_init(ARRAY_AND_SIZE(db88f6281_nand_parts), 25);
++      kirkwood_ehci_init();
++      kirkwood_ge00_init(&db88f6281_ge00_data);
++      kirkwood_sata_init(&db88f6281_sata_data);
++      kirkwood_uart0_init();
++      kirkwood_sdio_init(&db88f6281_mvsdio_data);
++}
++
++static int __init db88f6281_pci_init(void)
++{
++      if (machine_is_db88f6281_bp()) {
++              u32 dev, rev;
++
++              kirkwood_pcie_id(&dev, &rev);
++              if (dev == MV88F6282_DEV_ID)
++                      kirkwood_pcie_init(KW_PCIE1 | KW_PCIE0);
++              else
++                      kirkwood_pcie_init(KW_PCIE0);
++      }
++      return 0;
++}
++subsys_initcall(db88f6281_pci_init);
++
++MACHINE_START(DB88F6281_BP, "Marvell DB-88F6281-BP Development Board")
++      /* Maintainer: Saeed Bishara <saeed@marvell.com> */
++      .atag_offset    = 0x100,
++      .init_machine   = db88f6281_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dockstar-setup.c linux-3.14.22/arch/arm/mach-kirkwood/dockstar-setup.c
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/dockstar-setup.c  1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/arch/arm/mach-kirkwood/dockstar-setup.c      2014-11-05 22:07:58.828714499 +0100
+@@ -0,0 +1,111 @@
++/*
++ * arch/arm/mach-kirkwood/dockstar-setup.c
++ *
++ * Seagate FreeAgent DockStar Setup
++ *
++ * This file is licensed under the terms of the GNU General Public
++ * License version 2.  This program is licensed "as is" without any
++ * warranty of any kind, whether express or implied.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/ata_platform.h>
++#include <linux/mtd/partitions.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include "common.h"
++#include "mpp.h"
++
++static struct mtd_partition dockstar_nand_parts[] = {
++      {
++              .name = "u-boot",
++              .offset = 0,
++              .size = SZ_1M
++      }, {
++              .name = "uImage",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = SZ_4M
++      }, {
++              .name = "root",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = MTDPART_SIZ_FULL
++      },
++};
++
++static struct mv643xx_eth_platform_data dockstar_ge00_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
++};
++
++static struct gpio_led dockstar_led_pins[] = {
++      {
++              .name                   = "dockstar:green:health",
++              .default_trigger        = "default-on",
++              .gpio                   = 46,
++              .active_low             = 1,
++      },
++      {
++              .name                   = "dockstar:orange:misc",
++              .default_trigger        = "none",
++              .gpio                   = 47,
++              .active_low             = 1,
++      },
++};
++
++static struct gpio_led_platform_data dockstar_led_data = {
++      .leds           = dockstar_led_pins,
++      .num_leds       = ARRAY_SIZE(dockstar_led_pins),
++};
++
++static struct platform_device dockstar_leds = {
++      .name   = "leds-gpio",
++      .id     = -1,
++      .dev    = {
++              .platform_data  = &dockstar_led_data,
++      }
++};
++
++static unsigned int dockstar_mpp_config[] __initdata = {
++      MPP29_GPIO,     /* USB Power Enable */
++      MPP46_GPIO,     /* LED green */
++      MPP47_GPIO,     /* LED orange */
++      0
++};
++
++static void __init dockstar_init(void)
++{
++      /*
++       * Basic setup. Needs to be called early.
++       */
++      kirkwood_init();
++
++      /* setup gpio pin select */
++      kirkwood_mpp_conf(dockstar_mpp_config);
++
++      kirkwood_uart0_init();
++      kirkwood_nand_init(ARRAY_AND_SIZE(dockstar_nand_parts), 25);
++
++      if (gpio_request(29, "USB Power Enable") != 0 ||
++          gpio_direction_output(29, 1) != 0)
++              pr_err("can't set up GPIO 29 (USB Power Enable)\n");
++      kirkwood_ehci_init();
++
++      kirkwood_ge00_init(&dockstar_ge00_data);
++
++      platform_device_register(&dockstar_leds);
++}
++
++MACHINE_START(DOCKSTAR, "Seagate FreeAgent DockStar")
++      .atag_offset    = 0x100,
++      .init_machine   = dockstar_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/dreamplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/dreamplug-setup.c
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/dreamplug-setup.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/arch/arm/mach-kirkwood/dreamplug-setup.c     2014-11-05 22:07:58.833714499 +0100
+@@ -0,0 +1,151 @@
++/*
++ * arch/arm/mach-kirkwood/dreamplug-setup.c
++ *
++ * Marvell DreamPlug Reference Board Setup
++ *
++ * This file is licensed under the terms of the GNU General Public
++ * License version 2.  This program is licensed "as is" without any
++ * warranty of any kind, whether express or implied.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/leds.h>
++#include <linux/spi/flash.h>
++#include <linux/spi/spi.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/mmc-mvsdio.h>
++#include "common.h"
++#include "mpp.h"
++
++static const struct flash_platform_data dreamplug_spi_slave_data = {
++      .type           = "mx25l1606e",
++};
++
++static struct spi_board_info __initdata dreamplug_spi_slave_info[] = {
++      {
++              .modalias       = "m25p80",
++              .platform_data  = &dreamplug_spi_slave_data,
++              .irq            = -1,
++              .max_speed_hz   = 50000000,
++              .bus_num        = 0,
++              .chip_select    = 0,
++      },
++};
++
++static struct mv643xx_eth_platform_data dreamplug_ge00_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
++};
++
++static struct mv643xx_eth_platform_data dreamplug_ge01_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(1),
++};
++
++static struct mv_sata_platform_data dreamplug_sata_data = {
++      .n_ports        = 1,
++};
++
++static struct mvsdio_platform_data dreamplug_mvsdio_data = {
++      /* unfortunately the CD signal has not been connected */
++};
++
++static struct gpio_led dreamplug_led_pins[] = {
++      {
++              .name                   = "dreamplug:blue:bluetooth",
++              .gpio                   = 47,
++              .active_low             = 1,
++      },
++      {
++              .name                   = "dreamplug:green:wlan",
++              .gpio                   = 48,
++              .active_low             = 1,
++      },
++      {
++              .name                   = "dreamplug:blue:wlanap",
++              .gpio                   = 49,
++              .active_low             = 1,
++      },
++};
++
++static struct gpio_led_platform_data dreamplug_led_data = {
++      .leds           = dreamplug_led_pins,
++      .num_leds       = ARRAY_SIZE(dreamplug_led_pins),
++};
++
++static struct platform_device dreamplug_leds = {
++      .name   = "leds-gpio",
++      .id     = -1,
++      .dev    = {
++              .platform_data  = &dreamplug_led_data,
++      }
++};
++
++static unsigned int dreamplug_mpp_config[] __initdata = {
++      MPP0_SPI_SCn,
++      MPP1_SPI_MOSI,
++      MPP2_SPI_SCK,
++      MPP3_SPI_MISO,
++      MPP4_GPIO,
++      MPP5_GPO,
++      MPP7_GPO,
++      MPP18_GPO,
++      MPP19_GPO,
++      MPP47_GPIO,     /* B_BLED */
++      MPP48_GPIO,     /* W_GLED */
++      MPP49_GPIO,     /* W_BLED */
++      0
++};
++
++static void __init dreamplug_legacy_init(void)
++{
++      /*
++       * Basic setup. Needs to be called early.
++       */
++      kirkwood_init();
++      kirkwood_mpp_conf(dreamplug_mpp_config);
++
++      kirkwood_uart0_init();
++
++      spi_register_board_info(dreamplug_spi_slave_info,
++                              ARRAY_SIZE(dreamplug_spi_slave_info));
++
++      kirkwood_spi_init();
++      kirkwood_ehci_init();
++
++      kirkwood_ge00_init(&dreamplug_ge00_data);
++      kirkwood_ge01_init(&dreamplug_ge01_data);
++      kirkwood_sata_init(&dreamplug_sata_data);
++      kirkwood_sdio_init(&dreamplug_mvsdio_data);
++
++      platform_device_register(&dreamplug_leds);
++}
++
++MACHINE_START(DREAMPLUG, "Marvell DreamPlug Reference Board")
++      /* Maintainer: Siddarth Gore <gores <at> marvell.com> */
++      .atag_offset    = 0x100,
++      .init_machine   = dreamplug_legacy_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
++
++MACHINE_START(DREAMPLUG1, "Marvell DreamPlug Reference Board")
++      .atag_offset    = 0x100,
++      .init_machine   = dreamplug_legacy_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++
++MACHINE_END
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/guruplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/guruplug-setup.c
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/guruplug-setup.c  1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/arch/arm/mach-kirkwood/guruplug-setup.c      2014-11-05 22:07:58.838714499 +0100
+@@ -0,0 +1,135 @@
++/*
++ * arch/arm/mach-kirkwood/guruplug-setup.c
++ *
++ * Marvell GuruPlug Reference Board Setup
++ *
++ * This file is licensed under the terms of the GNU General Public
++ * License version 2.  This program is licensed "as is" without any
++ * warranty of any kind, whether express or implied.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/mmc-mvsdio.h>
++#include "common.h"
++#include "mpp.h"
++
++static struct mtd_partition guruplug_nand_parts[] = {
++      {
++              .name = "u-boot",
++              .offset = 0,
++              .size = SZ_1M,
++              .mask_flags = MTD_WRITEABLE, /* read only */
++      }, {
++              .name = "uImage",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = SZ_4M,
++      }, {
++              .name = "root",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = MTDPART_SIZ_FULL,
++      },
++};
++
++static struct mv643xx_eth_platform_data guruplug_ge00_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
++};
++
++static struct mv643xx_eth_platform_data guruplug_ge01_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(1),
++};
++
++static struct mv_sata_platform_data guruplug_sata_data = {
++      .n_ports        = 1,
++};
++
++static struct mvsdio_platform_data guruplug_mvsdio_data = {
++      /* unfortunately the CD signal has not been connected */
++      .gpio_card_detect = -1,
++      .gpio_write_protect = -1,
++};
++
++static struct gpio_led guruplug_led_pins[] = {
++      {
++              .name                   = "guruplug:red:health",
++              .gpio                   = 46,
++              .active_low             = 1,
++      },
++      {
++              .name                   = "guruplug:green:health",
++              .gpio                   = 47,
++              .active_low             = 1,
++      },
++      {
++              .name                   = "guruplug:red:wmode",
++              .gpio                   = 48,
++              .active_low             = 1,
++      },
++      {
++              .name                   = "guruplug:green:wmode",
++              .gpio                   = 49,
++              .active_low             = 1,
++      },
++};
++
++static struct gpio_led_platform_data guruplug_led_data = {
++      .leds           = guruplug_led_pins,
++      .num_leds       = ARRAY_SIZE(guruplug_led_pins),
++};
++
++static struct platform_device guruplug_leds = {
++      .name   = "leds-gpio",
++      .id     = -1,
++      .dev    = {
++              .platform_data  = &guruplug_led_data,
++      }
++};
++
++static unsigned int guruplug_mpp_config[] __initdata = {
++      MPP46_GPIO,     /* M_RLED */
++      MPP47_GPIO,     /* M_GLED */
++      MPP48_GPIO,     /* B_RLED */
++      MPP49_GPIO,     /* B_GLED */
++      0
++};
++
++static void __init guruplug_init(void)
++{
++      /*
++       * Basic setup. Needs to be called early.
++       */
++      kirkwood_init();
++      kirkwood_mpp_conf(guruplug_mpp_config);
++
++      kirkwood_uart0_init();
++      kirkwood_nand_init(ARRAY_AND_SIZE(guruplug_nand_parts), 25);
++
++      kirkwood_ehci_init();
++      kirkwood_ge00_init(&guruplug_ge00_data);
++      kirkwood_ge01_init(&guruplug_ge01_data);
++      kirkwood_sata_init(&guruplug_sata_data);
++      kirkwood_sdio_init(&guruplug_mvsdio_data);
++
++      platform_device_register(&guruplug_leds);
++}
++
++MACHINE_START(GURUPLUG, "Marvell GuruPlug Reference Board")
++      /* Maintainer: Siddarth Gore <gores@marvell.com> */
++      .atag_offset    = 0x100,
++      .init_machine   = guruplug_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/iconnect-setup.c linux-3.14.22/arch/arm/mach-kirkwood/iconnect-setup.c
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/iconnect-setup.c  1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/arch/arm/mach-kirkwood/iconnect-setup.c      2014-11-05 22:07:58.843714499 +0100
+@@ -0,0 +1,214 @@
++/*
++ * arch/arm/mach-kirkwood/iconnect-setup.c
++ *
++ * Iomega iConnect Wireless Data Station Board Setup
++ *
++ * This file is licensed under the terms of the GNU General Public
++ * License version 2.  This program is licensed "as is" without any
++ * warranty of any kind, whether express or implied.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/gpio_keys.h>
++#include <linux/i2c.h>
++#include <linux/input.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include "common.h"
++#include "mpp.h"
++
++static struct mtd_partition iconnect_nand_parts[] = {
++      {
++              .name = "u-boot",
++              .offset = 0,
++              .size = SZ_1M,
++              .mask_flags = MTD_WRITEABLE, /* read only */
++      }, {
++              .name = "uImage",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = 0x440000,
++      }, {
++              .name = "uInit",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = 0x440000,
++      }, {
++              .name = "root",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = MTDPART_SIZ_FULL,
++      },
++};
++
++static struct mv643xx_eth_platform_data iconnect_ge00_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(0xB),
++};
++
++static struct gpio_led iconnect_led_pins[] = {
++      {
++              .name                   = "iconnect:led_level",
++              .default_trigger        = "default-on",
++              .gpio                   = 41,
++              .active_low             = 0,
++      },
++
++      {
++              .name                   = "iconnect:blue:power",
++              .default_trigger        = "default-on",
++              .gpio                   = 42,
++              .active_low             = 0,
++      },
++      {
++              .name                   = "iconnect:red:power",
++              .default_trigger        = "none",
++              .gpio                   = 43,
++              .active_low             = 0,
++      },
++      {
++              .name                   = "iconnect:blue:usb_1",
++              .default_trigger        = "none",
++              .gpio                   = 44,
++              .active_low             = 0,
++      },
++      {
++              .name                   = "iconnect:blue:usb_2",
++              .default_trigger        = "none",
++              .gpio                   = 45,
++              .active_low             = 0,
++      },
++      {
++              .name                   = "iconnect:blue:usb_3",
++              .default_trigger        = "none",
++              .gpio                   = 46,
++              .active_low             = 0,
++      },
++      {
++              .name                   = "iconnect:blue:usb_4",
++              .default_trigger        = "none",
++              .gpio                   = 47,
++              .active_low             = 0,
++      },
++      {
++              .name                   = "iconnect:blue:otb",
++              .default_trigger        = "none",
++              .gpio                   = 48,
++              .active_low             = 0,
++      },
++};
++
++static struct gpio_led_platform_data iconnect_led_data = {
++      .leds           = iconnect_led_pins,
++      .num_leds       = ARRAY_SIZE(iconnect_led_pins),
++};
++
++static struct platform_device iconnect_leds = {
++      .name   = "leds-gpio",
++      .id     = -1,
++      .dev    = {
++              .platform_data  = &iconnect_led_data,
++      }
++};
++
++static struct gpio_keys_button iconnect_buttons[] = {
++      {
++              .code           = KEY_COPY,
++              .gpio           = 35,
++              .desc           = "OTB Button",
++              .active_low     = 1,
++      },
++      {
++              .code           = KEY_RESTART,
++              .gpio           = 12,
++              .desc           = "Reset",
++              .active_low     = 1,
++      },
++};
++
++static struct gpio_keys_platform_data iconnect_button_data = {
++      .buttons        = iconnect_buttons,
++      .nbuttons       = ARRAY_SIZE(iconnect_buttons),
++};
++
++static struct platform_device iconnect_button_device = {
++      .name           = "gpio-keys",
++      .id             = -1,
++      .num_resources  = 0,
++      .dev            = {
++              .platform_data  = &iconnect_button_data,
++      }
++};
++
++static unsigned int iconnect_mpp_config[] __initdata = {
++      MPP0_NF_IO2,
++      MPP1_NF_IO3,
++      MPP2_NF_IO4,
++      MPP3_NF_IO5,
++      MPP4_NF_IO6,
++      MPP5_NF_IO7,
++      MPP18_NF_IO0,
++      MPP19_NF_IO1,
++      MPP12_GPIO,     /* Reset Button */
++      MPP35_GPIO,     /* OTB Button */
++
++      MPP41_GPIO,     /* LED Level */
++      MPP42_GPIO,     /* Power LED blue */
++      MPP43_GPIO,     /* Power LED red */
++      MPP44_GPIO,     /* USB LED 1 */
++      MPP45_GPIO,     /* USB LED 2 */
++      MPP46_GPIO,     /* USB LED 3 */
++      MPP47_GPIO,     /* USB LED 4 */
++      MPP48_GPIO,     /* OTB LED */
++      0
++};
++
++static struct i2c_board_info __initdata iconnect_i2c = {
++      I2C_BOARD_INFO("lm63", 0x4c),
++};
++
++static void __init iconnect_legacy_init(void)
++{
++      /*
++       * Basic setup. Needs to be called early.
++       */
++      kirkwood_init();
++      kirkwood_mpp_conf(iconnect_mpp_config);
++
++      kirkwood_nand_init(ARRAY_AND_SIZE(iconnect_nand_parts), 25);
++      kirkwood_ehci_init();
++      kirkwood_ge00_init(&iconnect_ge00_data);
++
++      kirkwood_uart0_init();
++      platform_device_register(&iconnect_leds);
++      platform_device_register(&iconnect_button_device);
++
++      kirkwood_i2c_init();
++      i2c_register_board_info(0, &iconnect_i2c,1);
++}
++
++static int __init iconnect_pci_init(void)
++{
++      if (machine_is_iconnect()) {
++              kirkwood_pcie_init(KW_PCIE0);
++      }
++      return 0;
++}
++subsys_initcall(iconnect_pci_init);
++
++MACHINE_START(ICONNECT, "Iomega iConnect Wireless Data Station")
++      /* Maintainer: Arne Fitzenreiter <arne_f@ipfire.org> */
++      .atag_offset    = 0x100,
++      .init_machine   = iconnect_legacy_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++
++MACHINE_END
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Kconfig linux-3.14.22/arch/arm/mach-kirkwood/Kconfig
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/Kconfig   2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/arch/arm/mach-kirkwood/Kconfig       2014-11-05 22:07:58.848714499 +0100
+@@ -1,3 +1,5 @@
++
++
+ if ARCH_KIRKWOOD
+ menu "Marvell Kirkwood Implementations"
+@@ -72,6 +74,83 @@
+         Say 'Y' here if you want your kernel to support the
+         HP t5325 Thin Client.
++config MACH_DB88F6281_BP
++      bool "Marvell DB-88F6281-BP Development Board"
++      select KIRKWOOD_LEGACY
++      help
++        Say 'Y' here if you want your kernel to support the
++        Marvell DB-88F6281-BP Development Board.
++
++config MACH_DOCKSTAR
++      bool "Seagate FreeAgent DockStar"
++      select KIRKWOOD_LEGACY
++      help
++        Say 'Y' here if you want your kernel to support the
++        Seagate FreeAgent DockStar.
++
++config MACH_SHEEVAPLUG
++      bool "Marvell SheevaPlug Reference Board"
++      select KIRKWOOD_LEGACY
++      help
++        Say 'Y' here if you want your kernel to support the
++        Marvell SheevaPlug Reference Board.
++
++config MACH_ESATA_SHEEVAPLUG
++      bool "Marvell eSATA SheevaPlug Reference Board"
++      select KIRKWOOD_LEGACY
++      help
++        Say 'Y' here if you want your kernel to support the
++        Marvell eSATA SheevaPlug Reference Board.
++
++config MACH_GURUPLUG
++      bool "Marvell GuruPlug Reference Board"
++      select KIRKWOOD_LEGACY
++      help
++        Say 'Y' here if you want your kernel to support the
++        Marvell GuruPlug Reference Board.
++
++config MACH_INETSPACE_V2
++      bool "LaCie Internet Space v2 NAS Board"
++      select KIRKWOOD_LEGACY
++      help
++        Say 'Y' here if you want your kernel to support the
++        LaCie Internet Space v2 NAS.
++
++config MACH_NETSPACE_MAX_V2
++      bool "LaCie Network Space Max v2 NAS Board"
++      select KIRKWOOD_LEGACY
++      help
++        Say 'Y' here if you want your kernel to support the
++        LaCie Network Space Max v2 NAS.
++
++config MACH_NETSPACE_V2
++      bool "LaCie Network Space v2 NAS Board"
++      select KIRKWOOD_LEGACY
++      help
++        Say 'Y' here if you want your kernel to support the
++        LaCie Network Space v2 NAS.
++
++config MACH_DREAMPLUG
++      select KIRKWOOD_LEGACY
++      bool "Marvell DreamPlug Reference Board"
++      help
++        Say 'Y' here if you want your kernel to support the
++        Marvell DreamPlug Reference Board.
++
++config MACH_ICONNECT
++      select KIRKWOOD_LEGACY
++      bool "Iomega iConnect Wireless Data Station"
++      help
++        Say 'Y' here if you want your kernel to support the
++        Iomega iConnect Wireless Data Station.
++
++config MACH_NAS6210
++      select KIRKWOOD_LEGACY
++      bool "Raidsonic ICY BOX IB-62x0"
++      help
++        Say 'Y' here if you want your kernel to support the
++        Raidsonic ICY BOX IB-62x0.
++
+ config MACH_TS219
+       bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS"
+       select KIRKWOOD_LEGACY
+@@ -113,6 +192,7 @@
+         Say 'Y' here if you want your kernel to support the
+         Marvell 88F6281 GTW GE Board (Flattened Device Tree).
++
+ endmenu
+ endif
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile linux-3.14.22/arch/arm/mach-kirkwood/Makefile
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/Makefile  2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/arch/arm/mach-kirkwood/Makefile      2014-11-05 22:09:01.758714529 +0100
+@@ -2,6 +2,15 @@
+ obj-$(CONFIG_KIRKWOOD_LEGACY) += irq.o mpp.o
+ obj-$(CONFIG_PM)              += pm.o
++obj-$(CONFIG_MACH_DB88F6281_BP)               += db88f6281-bp-setup.o
++obj-$(CONFIG_MACH_DOCKSTAR)           += dockstar-setup.o
++obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG)   += sheevaplug-setup.o
++obj-$(CONFIG_MACH_GURUPLUG)           += guruplug-setup.o
++obj-$(CONFIG_MACH_DREAMPLUG)          += dreamplug-setup.o
++obj-$(CONFIG_MACH_INETSPACE_V2)               += netspace_v2-setup.o lacie_v2-common.o
++obj-$(CONFIG_MACH_NETSPACE_MAX_V2)    += netspace_v2-setup.o lacie_v2-common.o
++obj-$(CONFIG_MACH_NETSPACE_V2)                += netspace_v2-setup.o lacie_v2-common.o
++obj-$(CONFIG_MACH_SHEEVAPLUG)         += sheevaplug-setup.o
+ obj-$(CONFIG_MACH_D2NET_V2)           += d2net_v2-setup.o lacie_v2-common.o
+ obj-$(CONFIG_MACH_NET2BIG_V2)         += netxbig_v2-setup.o lacie_v2-common.o
+ obj-$(CONFIG_MACH_NET5BIG_V2)         += netxbig_v2-setup.o lacie_v2-common.o
+@@ -11,6 +20,8 @@
+ obj-$(CONFIG_MACH_T5325)              += t5325-setup.o
+ obj-$(CONFIG_MACH_TS219)              += ts219-setup.o tsx1x-common.o
+ obj-$(CONFIG_MACH_TS41X)              += ts41x-setup.o tsx1x-common.o
++obj-$(CONFIG_MACH_ICONNECT)           += iconnect-setup.o
++obj-$(CONFIG_MACH_NAS6210)            += nas6210-setup.o
+ obj-$(CONFIG_ARCH_KIRKWOOD_DT)                += board-dt.o
+ obj-$(CONFIG_MACH_MV88F6281GTW_GE_DT) += board-mv88f6281gtw_ge.o
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/nas6210-setup.c linux-3.14.22/arch/arm/mach-kirkwood/nas6210-setup.c
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/nas6210-setup.c   1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/arch/arm/mach-kirkwood/nas6210-setup.c       2014-11-05 22:07:58.858714499 +0100
+@@ -0,0 +1,185 @@
++/*
++ * arch/arm/mach-kirkwood/nas6210-setup.c
++ *
++ * Raidsonic ICYBOX NAS6210 and 6220 Board Setup
++ *
++ * This file is licensed under the terms of the GNU General Public
++ * License version 2.  This program is licensed "as is" without any
++ * warranty of any kind, whether express or implied.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/partitions.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/gpio_keys.h>
++#include <linux/i2c.h>
++#include <linux/input.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include "common.h"
++#include "mpp.h"
++
++#define NAS6210_GPIO_POWER_OFF 24
++
++static struct mtd_partition nas6210_nand_parts[] = {
++      {
++              .name = "u-boot",
++              .offset = 0,
++              .size = SZ_1M,
++              .mask_flags = MTD_WRITEABLE, /* read only */
++      }, {
++              .name = "uImage",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = (SZ_1M*6),
++      }, {
++              .name = "root",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = MTDPART_SIZ_FULL,
++      },
++};
++
++static struct mv643xx_eth_platform_data nas6210_ge00_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
++};
++
++static struct mv_sata_platform_data nas6210_sata_data = {
++      .n_ports        = 2,
++};
++
++static struct gpio_led nas6210_led_pins[] = {
++      {
++              .name                   = "nas6210:green:power",
++              .default_trigger        = "default-on",
++              .gpio                   = 25,
++              .active_low             = 0,
++      },
++      {
++              .name                   = "nas6210:red:power",
++              .default_trigger        = "none",
++              .gpio                   = 22,
++              .active_low             = 0,
++      },
++      {
++              .name                   = "nas6210:red:usb_copy",
++              .default_trigger        = "none",
++              .gpio                   = 27,
++              .active_low             = 0,
++      },
++};
++
++static struct gpio_led_platform_data nas6210_led_data = {
++      .leds           = nas6210_led_pins,
++      .num_leds       = ARRAY_SIZE(nas6210_led_pins),
++};
++
++static struct platform_device nas6210_leds = {
++      .name   = "leds-gpio",
++      .id     = -1,
++      .dev    = {
++              .platform_data  = &nas6210_led_data,
++      }
++};
++
++static struct gpio_keys_button nas6210_buttons[] = {
++      {
++              .code           = KEY_COPY,
++              .gpio           = 29,
++              .desc           = "USB Copy",
++              .active_low     = 1,
++      },
++      {
++              .code           = KEY_RESTART,
++              .gpio           = 28,
++              .desc           = "Reset",
++              .active_low     = 1,
++      },
++};
++
++static struct gpio_keys_platform_data nas6210_button_data = {
++      .buttons        = nas6210_buttons,
++      .nbuttons       = ARRAY_SIZE(nas6210_buttons),
++};
++
++static struct platform_device nas6210_button_device = {
++      .name           = "gpio-keys",
++      .id             = -1,
++      .num_resources  = 0,
++      .dev            = {
++              .platform_data  = &nas6210_button_data,
++      }
++};
++
++static unsigned int nas6210_mpp_config[] __initdata = {
++      MPP0_NF_IO2,
++      MPP1_NF_IO3,
++      MPP2_NF_IO4,
++      MPP3_NF_IO5,
++      MPP4_NF_IO6,
++      MPP5_NF_IO7,
++      MPP18_NF_IO0,
++      MPP19_NF_IO1,
++      MPP22_GPIO,     /* Power LED red */
++      MPP24_GPIO,     /* Power off */
++      MPP25_GPIO,     /* Power LED green */
++      MPP27_GPIO,    /* USB transfer LED */
++      MPP28_GPIO,    /* Reset button */
++      MPP29_GPIO,    /* USB Copy button */
++      0
++};
++
++void nas6210_power_off(void)
++{
++      gpio_set_value(NAS6210_GPIO_POWER_OFF, 1);
++      while(1);
++}
++
++static void __init nas6210_init(void)
++{
++      /*
++       * Basic setup. Needs to be called early.
++       */
++      kirkwood_init();
++      kirkwood_mpp_conf(nas6210_mpp_config);
++
++      kirkwood_nand_init(ARRAY_AND_SIZE(nas6210_nand_parts), 25);
++      kirkwood_ehci_init();
++      kirkwood_ge00_init(&nas6210_ge00_data);
++      kirkwood_sata_init(&nas6210_sata_data);
++      kirkwood_uart0_init();
++      platform_device_register(&nas6210_leds);
++      platform_device_register(&nas6210_button_device);
++
++      if (gpio_request(NAS6210_GPIO_POWER_OFF, "power-off") == 0 &&
++              gpio_direction_output(NAS6210_GPIO_POWER_OFF, 0) == 0)
++                      pm_power_off = nas6210_power_off;
++
++      else
++              pr_err("nas6210: failed to configure power-off gpio pin");
++}
++
++static int __init nas6210_pci_init(void)
++{
++      if (machine_is_nas6210()) {
++              kirkwood_pcie_init(KW_PCIE0);
++      }
++      return 0;
++}
++subsys_initcall(nas6210_pci_init);
++
++MACHINE_START(NAS6210, "RaidSonic ICY BOX IB-NAS62x0")
++      /* Maintainer: Arne Fitzenreiter <arne_f@ipfire.org> */
++      .atag_offset    = 0x00000100,
++      .init_machine   = nas6210_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/netspace_v2-setup.c linux-3.14.22/arch/arm/mach-kirkwood/netspace_v2-setup.c
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/netspace_v2-setup.c       1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/arch/arm/mach-kirkwood/netspace_v2-setup.c   2014-11-05 22:07:58.858714499 +0100
+@@ -0,0 +1,293 @@
++/*
++ * arch/arm/mach-kirkwood/netspace_v2-setup.c
++ *
++ * LaCie Network Space v2 board setup
++ *
++ * Copyright (C) 2009 Simon Guinot <sguinot@lacie.com>
++ * Copyright (C) 2009 Benoît Canet <benoit.canet@gmail.com>
++ *
++ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/ata_platform.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/input.h>
++#include <linux/gpio.h>
++#include <linux/gpio_keys.h>
++#include <linux/leds.h>
++#include <linux/gpio-fan.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/leds-kirkwood-ns2.h>
++#include "common.h"
++#include "mpp.h"
++#include "lacie_v2-common.h"
++
++/*****************************************************************************
++ * Ethernet
++ ****************************************************************************/
++
++static struct mv643xx_eth_platform_data netspace_v2_ge00_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
++};
++
++/*****************************************************************************
++ * SATA
++ ****************************************************************************/
++
++static struct mv_sata_platform_data netspace_v2_sata_data = {
++      .n_ports        = 2,
++};
++
++/*****************************************************************************
++ * GPIO keys
++ ****************************************************************************/
++
++#define NETSPACE_V2_PUSH_BUTTON               32
++
++static struct gpio_keys_button netspace_v2_buttons[] = {
++      [0] = {
++              .code           = KEY_POWER,
++              .gpio           = NETSPACE_V2_PUSH_BUTTON,
++              .desc           = "Power push button",
++              .active_low     = 0,
++      },
++};
++
++static struct gpio_keys_platform_data netspace_v2_button_data = {
++      .buttons        = netspace_v2_buttons,
++      .nbuttons       = ARRAY_SIZE(netspace_v2_buttons),
++};
++
++static struct platform_device netspace_v2_gpio_buttons = {
++      .name           = "gpio-keys",
++      .id             = -1,
++      .dev            = {
++              .platform_data  = &netspace_v2_button_data,
++      },
++};
++
++/*****************************************************************************
++ * GPIO LEDs
++ ****************************************************************************/
++
++#define NETSPACE_V2_GPIO_RED_LED      12
++
++static struct gpio_led netspace_v2_gpio_led_pins[] = {
++      {
++              .name   = "ns_v2:red:fail",
++              .gpio   = NETSPACE_V2_GPIO_RED_LED,
++      },
++};
++
++static struct gpio_led_platform_data netspace_v2_gpio_leds_data = {
++      .num_leds       = ARRAY_SIZE(netspace_v2_gpio_led_pins),
++      .leds           = netspace_v2_gpio_led_pins,
++};
++
++static struct platform_device netspace_v2_gpio_leds = {
++      .name           = "leds-gpio",
++      .id             = -1,
++      .dev            = {
++              .platform_data  = &netspace_v2_gpio_leds_data,
++      },
++};
++
++/*****************************************************************************
++ * Dual-GPIO CPLD LEDs
++ ****************************************************************************/
++
++#define NETSPACE_V2_GPIO_BLUE_LED_SLOW        29
++#define NETSPACE_V2_GPIO_BLUE_LED_CMD 30
++
++static struct ns2_led netspace_v2_led_pins[] = {
++      {
++              .name   = "ns_v2:blue:sata",
++              .cmd    = NETSPACE_V2_GPIO_BLUE_LED_CMD,
++              .slow   = NETSPACE_V2_GPIO_BLUE_LED_SLOW,
++      },
++};
++
++static struct ns2_led_platform_data netspace_v2_leds_data = {
++      .num_leds       = ARRAY_SIZE(netspace_v2_led_pins),
++      .leds           = netspace_v2_led_pins,
++};
++
++static struct platform_device netspace_v2_leds = {
++      .name           = "leds-ns2",
++      .id             = -1,
++      .dev            = {
++              .platform_data  = &netspace_v2_leds_data,
++      },
++};
++
++/*****************************************************************************
++ * GPIO fan
++ ****************************************************************************/
++
++/* Designed for fan 40x40x16: ADDA AD0412LB-D50 6000rpm@12v */
++static struct gpio_fan_speed netspace_max_v2_fan_speed[] = {
++      {    0,  0 },
++      { 1500, 15 },
++      { 1700, 14 },
++      { 1800, 13 },
++      { 2100, 12 },
++      { 3100, 11 },
++      { 3300, 10 },
++      { 4300,  9 },
++      { 5500,  8 },
++};
++
++static unsigned netspace_max_v2_fan_ctrl[] = { 22, 7, 33, 23 };
++
++static struct gpio_fan_alarm netspace_max_v2_fan_alarm = {
++      .gpio           = 25,
++      .active_low     = 1,
++};
++
++static struct gpio_fan_platform_data netspace_max_v2_fan_data = {
++      .num_ctrl       = ARRAY_SIZE(netspace_max_v2_fan_ctrl),
++      .ctrl           = netspace_max_v2_fan_ctrl,
++      .alarm          = &netspace_max_v2_fan_alarm,
++      .num_speed      = ARRAY_SIZE(netspace_max_v2_fan_speed),
++      .speed          = netspace_max_v2_fan_speed,
++};
++
++static struct platform_device netspace_max_v2_gpio_fan = {
++      .name   = "gpio-fan",
++      .id     = -1,
++      .dev    = {
++              .platform_data  = &netspace_max_v2_fan_data,
++      },
++};
++
++/*****************************************************************************
++ * General Setup
++ ****************************************************************************/
++
++static unsigned int netspace_v2_mpp_config[] __initdata = {
++      MPP0_SPI_SCn,
++      MPP1_SPI_MOSI,
++      MPP2_SPI_SCK,
++      MPP3_SPI_MISO,
++      MPP4_NF_IO6,
++      MPP5_NF_IO7,
++      MPP6_SYSRST_OUTn,
++      MPP7_GPO,               /* Fan speed (bit 1) */
++      MPP8_TW0_SDA,
++      MPP9_TW0_SCK,
++      MPP10_UART0_TXD,
++      MPP11_UART0_RXD,
++      MPP12_GPO,              /* Red led */
++      MPP14_GPIO,             /* USB fuse */
++      MPP16_GPIO,             /* SATA 0 power */
++      MPP17_GPIO,             /* SATA 1 power */
++      MPP18_NF_IO0,
++      MPP19_NF_IO1,
++      MPP20_SATA1_ACTn,
++      MPP21_SATA0_ACTn,
++      MPP22_GPIO,             /* Fan speed (bit 0) */
++      MPP23_GPIO,             /* Fan power */
++      MPP24_GPIO,             /* USB mode select */
++      MPP25_GPIO,             /* Fan rotation fail */
++      MPP26_GPIO,             /* USB device vbus */
++      MPP28_GPIO,             /* USB enable host vbus */
++      MPP29_GPIO,             /* Blue led (slow register) */
++      MPP30_GPIO,             /* Blue led (command register) */
++      MPP31_GPIO,             /* Board power off */
++      MPP32_GPIO,             /* Power button (0 = Released, 1 = Pushed) */
++      MPP33_GPO,              /* Fan speed (bit 2) */
++      0
++};
++
++#define NETSPACE_V2_GPIO_POWER_OFF    31
++
++static void netspace_v2_power_off(void)
++{
++      gpio_set_value(NETSPACE_V2_GPIO_POWER_OFF, 1);
++}
++
++static void __init netspace_v2_init(void)
++{
++      /*
++       * Basic setup. Needs to be called early.
++       */
++      kirkwood_init();
++      kirkwood_mpp_conf(netspace_v2_mpp_config);
++
++      if (machine_is_netspace_max_v2())
++              lacie_v2_hdd_power_init(2);
++      else
++              lacie_v2_hdd_power_init(1);
++
++      kirkwood_ehci_init();
++      kirkwood_ge00_init(&netspace_v2_ge00_data);
++      kirkwood_sata_init(&netspace_v2_sata_data);
++      kirkwood_uart0_init();
++      lacie_v2_register_flash();
++      lacie_v2_register_i2c_devices();
++
++      platform_device_register(&netspace_v2_leds);
++      platform_device_register(&netspace_v2_gpio_leds);
++      platform_device_register(&netspace_v2_gpio_buttons);
++      if (machine_is_netspace_max_v2())
++              platform_device_register(&netspace_max_v2_gpio_fan);
++
++      if (gpio_request(NETSPACE_V2_GPIO_POWER_OFF, "power-off") == 0 &&
++          gpio_direction_output(NETSPACE_V2_GPIO_POWER_OFF, 0) == 0)
++              pm_power_off = netspace_v2_power_off;
++      else
++              pr_err("netspace_v2: failed to configure power-off GPIO\n");
++}
++
++#ifdef CONFIG_MACH_NETSPACE_V2
++MACHINE_START(NETSPACE_V2, "LaCie Network Space v2")
++      .atag_offset    = 0x100,
++      .init_machine   = netspace_v2_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
++#endif
++
++#ifdef CONFIG_MACH_INETSPACE_V2
++MACHINE_START(INETSPACE_V2, "LaCie Internet Space v2")
++      .atag_offset    = 0x100,
++      .init_machine   = netspace_v2_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
++#endif
++
++#ifdef CONFIG_MACH_NETSPACE_MAX_V2
++MACHINE_START(NETSPACE_MAX_V2, "LaCie Network Space Max v2")
++      .atag_offset    = 0x100,
++      .init_machine   = netspace_v2_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
++#endif
+diff -Naur linux-3.14.22.org/arch/arm/mach-kirkwood/sheevaplug-setup.c linux-3.14.22/arch/arm/mach-kirkwood/sheevaplug-setup.c
+--- linux-3.14.22.org/arch/arm/mach-kirkwood/sheevaplug-setup.c        1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/arch/arm/mach-kirkwood/sheevaplug-setup.c    2014-11-05 22:07:58.868714499 +0100
+@@ -0,0 +1,161 @@
++/*
++ * arch/arm/mach-kirkwood/sheevaplug-setup.c
++ *
++ * Marvell SheevaPlug Reference Board Setup
++ *
++ * This file is licensed under the terms of the GNU General Public
++ * License version 2.  This program is licensed "as is" without any
++ * warranty of any kind, whether express or implied.
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/ata_platform.h>
++#include <linux/mtd/partitions.h>
++#include <linux/mv643xx_eth.h>
++#include <linux/gpio.h>
++#include <linux/leds.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/kirkwood.h>
++#include <linux/platform_data/mmc-mvsdio.h>
++#include "common.h"
++#include "mpp.h"
++
++static struct mtd_partition sheevaplug_nand_parts[] = {
++      {
++              .name = "u-boot",
++              .offset = 0,
++              .size = SZ_1M
++      }, {
++              .name = "uImage",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = SZ_4M
++      }, {
++              .name = "root",
++              .offset = MTDPART_OFS_NXTBLK,
++              .size = MTDPART_SIZ_FULL
++      },
++};
++
++static struct mv643xx_eth_platform_data sheevaplug_ge00_data = {
++      .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
++};
++
++static struct mv_sata_platform_data sheeva_esata_sata_data = {
++      .n_ports        = 2,
++};
++
++static struct mvsdio_platform_data sheevaplug_mvsdio_data = {
++      /* unfortunately the CD signal has not been connected */
++};
++
++static struct mvsdio_platform_data sheeva_esata_mvsdio_data = {
++      .gpio_write_protect = 44, /* MPP44 used as SD write protect */
++      .gpio_card_detect = 47,   /* MPP47 used as SD card detect */
++};
++
++static struct gpio_led sheevaplug_led_pins[] = {
++      {
++              .name                   = "plug:red:misc",
++              .default_trigger        = "none",
++              .gpio                   = 46,
++              .active_low             = 1,
++      },
++      {
++              .name                   = "plug:green:health",
++              .default_trigger        = "default-on",
++              .gpio                   = 49,
++              .active_low             = 1,
++      },
++};
++
++static struct gpio_led_platform_data sheevaplug_led_data = {
++      .leds           = sheevaplug_led_pins,
++      .num_leds       = ARRAY_SIZE(sheevaplug_led_pins),
++};
++
++static struct platform_device sheevaplug_leds = {
++      .name   = "leds-gpio",
++      .id     = -1,
++      .dev    = {
++              .platform_data  = &sheevaplug_led_data,
++      }
++};
++
++static unsigned int sheevaplug_mpp_config[] __initdata = {
++      MPP29_GPIO,     /* USB Power Enable */
++      MPP46_GPIO,     /* LED Red */
++      MPP49_GPIO,     /* LED */
++      0
++};
++
++static unsigned int sheeva_esata_mpp_config[] __initdata = {
++      MPP29_GPIO,     /* USB Power Enable */
++      MPP44_GPIO,     /* SD Write Protect */
++      MPP47_GPIO,     /* SD Card Detect */
++      MPP49_GPIO,     /* LED Green */
++      0
++};
++
++static void __init sheevaplug_init(void)
++{
++      /*
++       * Basic setup. Needs to be called early.
++       */
++      kirkwood_init();
++
++      /* setup gpio pin select */
++      if (machine_is_esata_sheevaplug())
++              kirkwood_mpp_conf(sheeva_esata_mpp_config);
++      else
++              kirkwood_mpp_conf(sheevaplug_mpp_config);
++
++      kirkwood_uart0_init();
++      kirkwood_nand_init(ARRAY_AND_SIZE(sheevaplug_nand_parts), 25);
++
++      if (gpio_request(29, "USB Power Enable") != 0 ||
++          gpio_direction_output(29, 1) != 0)
++              pr_err("can't set up GPIO 29 (USB Power Enable)\n");
++      kirkwood_ehci_init();
++
++      kirkwood_ge00_init(&sheevaplug_ge00_data);
++
++      /* honor lower power consumption for plugs with out eSATA */
++      if (machine_is_esata_sheevaplug())
++              kirkwood_sata_init(&sheeva_esata_sata_data);
++
++      /* enable sd wp and sd cd on plugs with esata */
++      if (machine_is_esata_sheevaplug())
++              kirkwood_sdio_init(&sheeva_esata_mvsdio_data);
++      else
++              kirkwood_sdio_init(&sheevaplug_mvsdio_data);
++
++      platform_device_register(&sheevaplug_leds);
++}
++
++#ifdef CONFIG_MACH_SHEEVAPLUG
++MACHINE_START(SHEEVAPLUG, "Marvell SheevaPlug Reference Board")
++      /* Maintainer: shadi Ammouri <shadi@marvell.com> */
++      .atag_offset    = 0x100,
++      .init_machine   = sheevaplug_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
++#endif
++
++#ifdef CONFIG_MACH_ESATA_SHEEVAPLUG
++MACHINE_START(ESATA_SHEEVAPLUG, "Marvell eSATA SheevaPlug Reference Board")
++      .atag_offset    = 0x100,
++      .init_machine   = sheevaplug_init,
++      .map_io         = kirkwood_map_io,
++      .init_early     = kirkwood_init_early,
++      .init_irq       = kirkwood_init_irq,
++      .init_time      = kirkwood_timer_init,
++      .restart        = kirkwood_restart,
++MACHINE_END
++#endif
+diff -Naur linux-3.14.22.org/arch/arm/tools/mach-types linux-3.14.22/arch/arm/tools/mach-types
+--- linux-3.14.22.org/arch/arm/tools/mach-types        2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/arch/arm/tools/mach-types    2014-11-05 22:07:58.868714499 +0100
+@@ -447,6 +447,7 @@
+ smartq5                       MACH_SMARTQ5            SMARTQ5                 2534
+ davinci_dm6467tevm    MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM      2548
+ mxt_td60              MACH_MXT_TD60           MXT_TD60                2550
++guruplug              MACH_GURUPLUG           GURUPLUG                2601
+ capc7117              MACH_CAPC7117           CAPC7117                2612
+ icontrol              MACH_ICONTROL           ICONTROL                2624
+ gplugd                        MACH_GPLUGD             GPLUGD                  2625
+@@ -454,7 +455,7 @@
+ mx23evk                       MACH_MX23EVK            MX23EVK                 2629
+ ap4evb                        MACH_AP4EVB             AP4EVB                  2630
+ mityomapl138          MACH_MITYOMAPL138       MITYOMAPL138            2650
+-guruplug              MACH_GURUPLUG           GURUPLUG                2659
++dreamplug1            MACH_DREAMPLUG1         DREAMPLUG1              2659
+ spear310              MACH_SPEAR310           SPEAR310                2660
+ spear320              MACH_SPEAR320           SPEAR320                2661
+ aquila                        MACH_AQUILA             AQUILA                  2676
+@@ -491,6 +492,7 @@
+ t5325                 MACH_T5325              T5325                   2846
+ income                        MACH_INCOME             INCOME                  2849
+ goni                  MACH_GONI               GONI                    2862
++iconnect              MACH_ICONNECT           ICONNECT                2870
+ bv07                  MACH_BV07               BV07                    2882
+ openrd_ultimate               MACH_OPENRD_ULTIMATE    OPENRD_ULTIMATE         2884
+ devixp                        MACH_DEVIXP             DEVIXP                  2885
+@@ -520,6 +522,7 @@
+ vpr200                        MACH_VPR200             VPR200                  3087
+ torbreck              MACH_TORBRECK           TORBRECK                3090
+ prima2_evb            MACH_PRIMA2_EVB         PRIMA2_EVB              3103
++nas6210                       MACH_NAS6210            NAS6210                 3104
+ paz00                 MACH_PAZ00              PAZ00                   3128
+ acmenetusfoxg20               MACH_ACMENETUSFOXG20    ACMENETUSFOXG20         3129
+ ag5evm                        MACH_AG5EVM             AG5EVM                  3189
+@@ -544,6 +547,7 @@
+ nspire                        MACH_NSPIRE             NSPIRE                  3503
+ nokia_rm696           MACH_NOKIA_RM696        NOKIA_RM696             3522
+ mikrap_x168           MACH_MIKRAP_X168        MIKRAP_X168             3543
++dreamplug             MACH_DREAMPLUG          DREAMPLUG               3550
+ deto_macarm9          MACH_DETO_MACARM9       DETO_MACARM9            3568
+ m28evk                        MACH_M28EVK             M28EVK                  3613
+ kota2                 MACH_KOTA2              KOTA2                   3616
similarity index 87%
rename from src/patches/linux-3.10.9-ledtrig-netdev-1.patch
rename to src/patches/linux-3.14.22-ledtrig_netdev.patch
index 8ad1ebd9dc8c84e40a8e5e11631ecd5847736744..4543c9c3ff52f4c7cd894b132773f8ddff70ca32 100644 (file)
@@ -1,22 +1,22 @@
-diff -Naur linux-3.10.9.org/drivers/leds/trigger/Kconfig linux-3.10.9/drivers/leds/trigger/Kconfig
---- linux-3.10.9.org/drivers/leds/trigger/Kconfig      2013-08-21 00:40:47.000000000 +0200
-+++ linux-3.10.9/drivers/leds/trigger/Kconfig  2013-08-30 20:43:19.064025933 +0200
+diff -Naur linux-3.14.22.org/drivers/leds/trigger/Kconfig linux-3.14.22/drivers/leds/trigger/Kconfig
+--- linux-3.14.22.org/drivers/leds/trigger/Kconfig     2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/drivers/leds/trigger/Kconfig 2014-11-06 17:52:02.303748375 +0100
 @@ -108,4 +108,11 @@
          This enables direct flash/torch on/off by the driver, kernel space.
          If unsure, say Y.
  
 +config LEDS_TRIGGER_NETDEV
 +      tristate "LED Netdev Trigger"
-+      depends on LEDS_TRIGGERS
++      depends on NET && LEDS_TRIGGERS
 +      help
 +        This allows LEDs to be controlled by network device activity.
 +        If unsure, say Y.
 +
  endif # LEDS_TRIGGERS
-diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/drivers/leds/trigger/ledtrig-netdev.c
---- linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.10.9/drivers/leds/trigger/ledtrig-netdev.c 2013-08-30 20:44:17.857339974 +0200
-@@ -0,0 +1,451 @@
+diff -Naur linux-3.14.22.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.14.22/drivers/leds/trigger/ledtrig-netdev.c
+--- linux-3.14.22.org/drivers/leds/trigger/ledtrig-netdev.c    1970-01-01 01:00:00.000000000 +0100
++++ linux-3.14.22/drivers/leds/trigger/ledtrig-netdev.c        2014-11-06 17:47:09.913748236 +0100
+@@ -0,0 +1,438 @@
 +/*
 + * LED Kernel Netdev Trigger
 + *
@@ -45,11 +45,6 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +#include <linux/timer.h>
 +#include <linux/ctype.h>
 +#include <linux/leds.h>
-+#include <linux/version.h>
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
-+#include <net/net_namespace.h>
-+#endif
 +
 +#include "../leds.h"
 +
@@ -121,7 +116,7 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +}
 +
 +static ssize_t led_device_name_show(struct device *dev,
-+                                  struct device_attribute *attr, char *buf)
++              struct device_attribute *attr, char *buf)
 +{
 +      struct led_classdev *led_cdev = dev_get_drvdata(dev);
 +      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
@@ -133,12 +128,8 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +      return strlen(buf) + 1;
 +}
 +
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+extern struct net init_net;
-+#endif
-+
 +static ssize_t led_device_name_store(struct device *dev,
-+                                   struct device_attribute *attr, const char *buf, size_t size)
++              struct device_attribute *attr, const char *buf, size_t size)
 +{
 +      struct led_classdev *led_cdev = dev_get_drvdata(dev);
 +      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
@@ -154,11 +145,7 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +
 +      if (trigger_data->device_name[0] != 0) {
 +              /* check for existing device to update from */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
 +              trigger_data->net_dev = dev_get_by_name(&init_net, trigger_data->device_name);
-+#else
-+              trigger_data->net_dev = dev_get_by_name(trigger_data->device_name);
-+#endif
 +              if (trigger_data->net_dev != NULL)
 +                      trigger_data->link_up = (dev_get_flags(trigger_data->net_dev) & IFF_LOWER_UP) != 0;
 +              set_baseline_state(trigger_data); /* updates LEDs, may start timers */
@@ -171,7 +158,7 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +static DEVICE_ATTR(device_name, 0644, led_device_name_show, led_device_name_store);
 +
 +static ssize_t led_mode_show(struct device *dev,
-+                           struct device_attribute *attr, char *buf)
++              struct device_attribute *attr, char *buf)
 +{
 +      struct led_classdev *led_cdev = dev_get_drvdata(dev);
 +      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
@@ -196,17 +183,17 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +}
 +
 +static ssize_t led_mode_store(struct device *dev,
-+                            struct device_attribute *attr, const char *buf, size_t size)
++              struct device_attribute *attr, const char *buf, size_t size)
 +{
 +      struct led_classdev *led_cdev = dev_get_drvdata(dev);
 +      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+      char copybuf[1024];
++      char copybuf[128];
 +      int new_mode = -1;
 +      char *p, *token;
 +
 +      /* take a copy since we don't want to trash the inbound buffer when using strsep */
 +      strncpy(copybuf, buf, sizeof(copybuf));
-+      copybuf[1023] = 0;
++      copybuf[sizeof(copybuf) - 1] = 0;
 +      p = copybuf;
 +
 +      while ((token = strsep(&p, " \t\n")) != NULL) {
@@ -242,7 +229,7 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +static DEVICE_ATTR(mode, 0644, led_mode_show, led_mode_store);
 +
 +static ssize_t led_interval_show(struct device *dev,
-+                               struct device_attribute *attr, char *buf)
++              struct device_attribute *attr, char *buf)
 +{
 +      struct led_classdev *led_cdev = dev_get_drvdata(dev);
 +      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
@@ -255,7 +242,7 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +}
 +
 +static ssize_t led_interval_store(struct device *dev,
-+                                struct device_attribute *attr, const char *buf, size_t size)
++              struct device_attribute *attr, const char *buf, size_t size)
 +{
 +      struct led_classdev *led_cdev = dev_get_drvdata(dev);
 +      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
@@ -264,14 +251,14 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +      unsigned long value = simple_strtoul(buf, &after, 10);
 +      size_t count = after - buf;
 +
-+      if (*after && isspace(*after))
++      if (isspace(*after))
 +              count++;
 +
 +      /* impose some basic bounds on the timer interval */
 +      if (count == size && value >= 5 && value <= 10000) {
 +              write_lock(&trigger_data->lock);
 +              trigger_data->interval = msecs_to_jiffies(value);
-+              set_baseline_state(trigger_data); // resets timer
++              set_baseline_state(trigger_data); /* resets timer */
 +              write_unlock(&trigger_data->lock);
 +              ret = count;
 +      }
@@ -285,7 +272,7 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +                            unsigned long evt,
 +                            void *dv)
 +{
-+      struct net_device *dev = dv;
++      struct net_device *dev = netdev_notifier_info_to_dev((struct netdev_notifier_info *) dv);
 +      struct led_netdev_data *trigger_data = container_of(nb, struct led_netdev_data, notifier);
 +
 +      if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER)
@@ -327,8 +314,8 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +      struct led_netdev_data *trigger_data = (struct led_netdev_data *)arg;
 +      struct rtnl_link_stats64 *dev_stats;
 +      unsigned new_activity;
-+        struct rtnl_link_stats64 temp;
-+      
++      struct rtnl_link_stats64 temp;
++
 +      write_lock(&trigger_data->lock);
 +
 +      if (!trigger_data->link_up || !trigger_data->net_dev || (trigger_data->mode & (MODE_TX | MODE_RX)) == 0) {
@@ -468,9 +455,9 @@ diff -Naur linux-3.10.9.org/drivers/leds/trigger/ledtrig-netdev.c linux-3.10.9/d
 +MODULE_AUTHOR("Oliver Jowett <oliver@opencloud.com>");
 +MODULE_DESCRIPTION("Netdev LED trigger");
 +MODULE_LICENSE("GPL");
-diff -Naur linux-3.10.9.org/drivers/leds/trigger/Makefile linux-3.10.9/drivers/leds/trigger/Makefile
---- linux-3.10.9.org/drivers/leds/trigger/Makefile     2013-08-21 00:40:47.000000000 +0200
-+++ linux-3.10.9/drivers/leds/trigger/Makefile 2013-08-30 20:43:56.414009853 +0200
+diff -Naur linux-3.14.22.org/drivers/leds/trigger/Makefile linux-3.14.22/drivers/leds/trigger/Makefile
+--- linux-3.14.22.org/drivers/leds/trigger/Makefile    2014-10-15 08:42:04.000000000 +0200
++++ linux-3.14.22/drivers/leds/trigger/Makefile        2014-11-06 17:51:29.818748360 +0100
 @@ -8,3 +8,4 @@
  obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
  obj-$(CONFIG_LEDS_TRIGGER_TRANSIENT)  += ledtrig-transient.o
diff --git a/src/patches/linux-3.2-0001-panda-wlan-fix.patch b/src/patches/linux-3.2-0001-panda-wlan-fix.patch
deleted file mode 100644 (file)
index a2aaf20..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c
-index daa056e..fe03b09 100644
---- a/arch/arm/mach-omap2/twl-common.c
-+++ b/arch/arm/mach-omap2/twl-common.c
-@@ -261,6 +261,7 @@ static struct regulator_init_data omap4_vusb_idata = {
- static struct regulator_init_data omap4_clk32kg_idata = {
-       .constraints = {
-               .valid_ops_mask         = REGULATOR_CHANGE_STATUS,
-+              .always_on              = true,
-       },
- };
diff --git a/src/patches/linux-3.2-0002-panda-i2c.patch b/src/patches/linux-3.2-0002-panda-i2c.patch
deleted file mode 100644 (file)
index fa3f6cc..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
-index 7f47092..2a05d3d 100644
---- a/arch/arm/mach-omap2/id.c
-+++ b/arch/arm/mach-omap2/id.c
-@@ -389,8 +389,10 @@ static void __init omap4_check_revision(void)
-                       omap_revision = OMAP4430_REV_ES2_1;
-                       break;
-               case 4:
--              default:
-                       omap_revision = OMAP4430_REV_ES2_2;
-+              case 6:
-+              default:
-+                      omap_revision = OMAP4430_REV_ES2_3;
-               }
-               break;
-       case 0xb94e:
-@@ -403,7 +405,7 @@ static void __init omap4_check_revision(void)
-               break;
-       default:
-               /* Unknown default to latest silicon rev as default */
--              omap_revision = OMAP4430_REV_ES2_2;
-+              omap_revision = OMAP4430_REV_ES2_3;
-       }
-       pr_info("OMAP%04x ES%d.%d\n", omap_rev() >> 16,
-diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
-index 7695e5d..71d3e36 100644
---- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
-+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
-@@ -2257,7 +2257,8 @@ static struct omap_hwmod_class omap44xx_i2c_hwmod_class = {
- };
- static struct omap_i2c_dev_attr i2c_dev_attr = {
--      .flags  = OMAP_I2C_FLAG_BUS_SHIFT_NONE,
-+      .flags  = OMAP_I2C_FLAG_BUS_SHIFT_NONE |
-+                      OMAP_I2C_FLAG_RESET_REGS_POSTIDLE,
- };
- /* i2c1 */
-diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
-index 408a12f..e279395 100644
---- a/arch/arm/plat-omap/include/plat/cpu.h
-+++ b/arch/arm/plat-omap/include/plat/cpu.h
-@@ -391,6 +391,7 @@ IS_OMAP_TYPE(3517, 0x3517)
- #define OMAP4430_REV_ES2_0    (OMAP443X_CLASS | (0x20 << 8))
- #define OMAP4430_REV_ES2_1    (OMAP443X_CLASS | (0x21 << 8))
- #define OMAP4430_REV_ES2_2    (OMAP443X_CLASS | (0x22 << 8))
-+#define OMAP4430_REV_ES2_3    (OMAP443X_CLASS | (0x23 << 8))
- #define OMAP446X_CLASS                0x44600044
- #define OMAP4460_REV_ES1_0    (OMAP446X_CLASS | (0x10 << 8))
diff --git a/src/patches/linux-3.2-panda-reboot.patch b/src/patches/linux-3.2-panda-reboot.patch
deleted file mode 100644 (file)
index 8e37837..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-With commit 3d3f78d752bf, reboot seems to broken on ARM
-machines. CPU dies while doing flush_pmd_entry() as part of
-setup_mm_for_reboot()
-
-I know this is not the fix but intention is to report the
-issue and also provide temporary fix till it get fixed correctly
-
-Signed-off-by: Santosh Shilimkar <santosh.shilimkar@xxxxxx>
-Reported-by: Anand Gadiyar <gadiyar@xxxxxx>
----
-Tested with OMAP4 device.
-
- arch/arm/kernel/process.c |    1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
-
-diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
-index e76fcaa..ac370b2 100644
---- a/arch/arm/kernel/process.c
-+++ b/arch/arm/kernel/process.c
-@@ -247,7 +247,6 @@ void machine_power_off(void)
- void machine_restart(char *cmd)
- {
--      machine_shutdown();
-       arm_pm_restart(reboot_mode, cmd);
- }
--- 
-1.6.0.4
diff --git a/src/patches/linux-3.2.25-arm_kirkwood_setups.patch b/src/patches/linux-3.2.25-arm_kirkwood_setups.patch
deleted file mode 100644 (file)
index 94bbb4b..0000000
+++ /dev/null
@@ -1,692 +0,0 @@
-diff -Naur linux-3.2.25.org/arch/arm/Kconfig linux-3.2.25/arch/arm/Kconfig
---- linux-3.2.25.org/arch/arm/Kconfig  2012-08-02 09:38:04.000000000 -0400
-+++ linux-3.2.25/arch/arm/Kconfig      2012-08-11 04:42:20.985949735 -0400
-@@ -197,7 +197,7 @@
- config ARM_PATCH_PHYS_VIRT
-       bool "Patch physical to virtual translations at runtime" if EMBEDDED
--      default y
-+      default n
-       depends on !XIP_KERNEL && MMU
-       depends on !ARCH_REALVIEW || !SPARSEMEM
-       help
-diff -Naur linux-3.2.25.org/arch/arm/mach-kirkwood/dreamplug-setup.c linux-3.2.25/arch/arm/mach-kirkwood/dreamplug-setup.c
---- linux-3.2.25.org/arch/arm/mach-kirkwood/dreamplug-setup.c  1969-12-31 19:00:00.000000000 -0500
-+++ linux-3.2.25/arch/arm/mach-kirkwood/dreamplug-setup.c      2012-08-11 10:22:53.242276474 -0400
-@@ -0,0 +1,148 @@
-+/*
-+ * arch/arm/mach-kirkwood/dreamplug-setup.c
-+ *
-+ * Marvell DreamPlug Reference Board Setup
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2.  This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/ata_platform.h>
-+#include <linux/mv643xx_eth.h>
-+#include <linux/gpio.h>
-+#include <linux/leds.h>
-+#include <linux/spi/flash.h>
-+#include <linux/spi/spi.h>
-+#include <linux/spi/orion_spi.h>
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <mach/kirkwood.h>
-+#include <plat/mvsdio.h>
-+#include "common.h"
-+#include "mpp.h"
-+
-+static const struct flash_platform_data dreamplug_spi_slave_data = {
-+      .type           = "mx25l1606e",
-+};
-+
-+static struct spi_board_info __initdata dreamplug_spi_slave_info[] = {
-+      {
-+              .modalias       = "m25p80",
-+              .platform_data  = &dreamplug_spi_slave_data,
-+              .irq            = -1,
-+              .max_speed_hz   = 50000000,
-+              .bus_num        = 0,
-+              .chip_select    = 0,
-+      },
-+};
-+
-+static struct mv643xx_eth_platform_data dreamplug_ge00_data = {
-+      .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
-+};
-+
-+static struct mv643xx_eth_platform_data dreamplug_ge01_data = {
-+      .phy_addr       = MV643XX_ETH_PHY_ADDR(1),
-+};
-+
-+static struct mv_sata_platform_data dreamplug_sata_data = {
-+      .n_ports        = 1,
-+};
-+
-+static struct mvsdio_platform_data dreamplug_mvsdio_data = {
-+      /* unfortunately the CD signal has not been connected */
-+};
-+
-+static struct gpio_led dreamplug_led_pins[] = {
-+      {
-+              .name                   = "dreamplug:blue:bluetooth",
-+              .gpio                   = 47,
-+              .active_low             = 1,
-+      },
-+      {
-+              .name                   = "dreamplug:green:wlan",
-+              .gpio                   = 48,
-+              .active_low             = 1,
-+      },
-+      {
-+              .name                   = "dreamplug:blue:wlanap",
-+              .gpio                   = 49,
-+              .active_low             = 1,
-+      },
-+};
-+
-+static struct gpio_led_platform_data dreamplug_led_data = {
-+      .leds           = dreamplug_led_pins,
-+      .num_leds       = ARRAY_SIZE(dreamplug_led_pins),
-+};
-+
-+static struct platform_device dreamplug_leds = {
-+      .name   = "leds-gpio",
-+      .id     = -1,
-+      .dev    = {
-+              .platform_data  = &dreamplug_led_data,
-+      }
-+};
-+
-+static unsigned int dreamplug_mpp_config[] __initdata = {
-+      MPP0_SPI_SCn,
-+      MPP1_SPI_MOSI,
-+      MPP2_SPI_SCK,
-+      MPP3_SPI_MISO,
-+      MPP4_GPIO,
-+      MPP5_GPO,
-+      MPP7_GPO,
-+      MPP18_GPO,
-+      MPP19_GPO,
-+      MPP47_GPIO,     /* B_BLED */
-+      MPP48_GPIO,     /* W_GLED */
-+      MPP49_GPIO,     /* W_BLED */
-+      0
-+};
-+
-+static void __init dreamplug_init(void)
-+{
-+      /*
-+       * Basic setup. Needs to be called early.
-+       */
-+      kirkwood_init();
-+      kirkwood_mpp_conf(dreamplug_mpp_config);
-+
-+      kirkwood_uart0_init();
-+
-+      spi_register_board_info(dreamplug_spi_slave_info,
-+                              ARRAY_SIZE(dreamplug_spi_slave_info));
-+
-+      kirkwood_spi_init();
-+      kirkwood_ehci_init();
-+
-+      kirkwood_ge00_init(&dreamplug_ge00_data);
-+      kirkwood_ge01_init(&dreamplug_ge01_data);
-+      kirkwood_sata_init(&dreamplug_sata_data);
-+      kirkwood_sdio_init(&dreamplug_mvsdio_data);
-+
-+      platform_device_register(&dreamplug_leds);
-+}
-+
-+MACHINE_START(DREAMPLUG, "Marvell DreamPlug Reference Board")
-+      /* Maintainer: Siddarth Gore <gores <at> marvell.com> */
-+      .atag_offset    = 0x100,
-+      .init_machine   = dreamplug_init,
-+      .map_io         = kirkwood_map_io,
-+      .init_early     = kirkwood_init_early,
-+      .init_irq       = kirkwood_init_irq,
-+      .timer          = &kirkwood_timer,
-+MACHINE_END
-+
-+MACHINE_START(DREAMPLUG1, "Marvell DreamPlug Reference Board")
-+      .atag_offset    = 0x100,
-+      .init_machine   = dreamplug_init,
-+      .map_io         = kirkwood_map_io,
-+      .init_early     = kirkwood_init_early,
-+      .init_irq       = kirkwood_init_irq,
-+      .timer          = &kirkwood_timer,
-+MACHINE_END
-diff -Naur linux-3.2.25.org/arch/arm/mach-kirkwood/guruplug-setup.c linux-3.2.25/arch/arm/mach-kirkwood/guruplug-setup.c
---- linux-3.2.25.org/arch/arm/mach-kirkwood/guruplug-setup.c   2012-08-02 09:38:04.000000000 -0400
-+++ linux-3.2.25/arch/arm/mach-kirkwood/guruplug-setup.c       2012-08-05 13:05:22.000000000 -0400
-@@ -11,6 +11,7 @@
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
- #include <linux/ata_platform.h>
- #include <linux/mv643xx_eth.h>
-@@ -27,15 +28,16 @@
-       {
-               .name = "u-boot",
-               .offset = 0,
--              .size = SZ_1M
-+              .size = SZ_1M,
-+              .mask_flags = MTD_WRITEABLE, /* read only */
-       }, {
-               .name = "uImage",
-               .offset = MTDPART_OFS_NXTBLK,
--              .size = SZ_4M
-+              .size = SZ_4M,
-       }, {
-               .name = "root",
-               .offset = MTDPART_OFS_NXTBLK,
--              .size = MTDPART_SIZ_FULL
-+              .size = MTDPART_SIZ_FULL,
-       },
- };
-diff -Naur linux-3.2.25.org/arch/arm/mach-kirkwood/iconnect-setup.c linux-3.2.25/arch/arm/mach-kirkwood/iconnect-setup.c
---- linux-3.2.25.org/arch/arm/mach-kirkwood/iconnect-setup.c   1969-12-31 19:00:00.000000000 -0500
-+++ linux-3.2.25/arch/arm/mach-kirkwood/iconnect-setup.c       2012-08-11 04:58:00.565660184 -0400
-@@ -0,0 +1,212 @@
-+/*
-+ * arch/arm/mach-kirkwood/iconnect-setup.c
-+ *
-+ * Iomega iConnect Wireless Data Station Board Setup
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2.  This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/ata_platform.h>
-+#include <linux/mv643xx_eth.h>
-+#include <linux/gpio.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/i2c.h>
-+#include <linux/input.h>
-+#include <linux/leds.h>
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <mach/kirkwood.h>
-+#include "common.h"
-+#include "mpp.h"
-+
-+static struct mtd_partition iconnect_nand_parts[] = {
-+      {
-+              .name = "u-boot",
-+              .offset = 0,
-+              .size = SZ_1M,
-+              .mask_flags = MTD_WRITEABLE, /* read only */
-+      }, {
-+              .name = "uImage",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = 0x440000,
-+      }, {
-+              .name = "uInit",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = 0x440000,
-+      }, {
-+              .name = "root",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = MTDPART_SIZ_FULL,
-+      },
-+};
-+
-+static struct mv643xx_eth_platform_data iconnect_ge00_data = {
-+      .phy_addr       = MV643XX_ETH_PHY_ADDR(0xB),
-+};
-+
-+static struct gpio_led iconnect_led_pins[] = {
-+      {
-+              .name                   = "iconnect:led_level",
-+              .default_trigger        = "default-on",
-+              .gpio                   = 41,
-+              .active_low             = 0,
-+      },
-+
-+      {
-+              .name                   = "iconnect:blue:power",
-+              .default_trigger        = "default-on",
-+              .gpio                   = 42,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:red:power",
-+              .default_trigger        = "none",
-+              .gpio                   = 43,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:usb_1",
-+              .default_trigger        = "none",
-+              .gpio                   = 44,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:usb_2",
-+              .default_trigger        = "none",
-+              .gpio                   = 45,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:usb_3",
-+              .default_trigger        = "none",
-+              .gpio                   = 46,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:usb_4",
-+              .default_trigger        = "none",
-+              .gpio                   = 47,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "iconnect:blue:otb",
-+              .default_trigger        = "none",
-+              .gpio                   = 48,
-+              .active_low             = 0,
-+      },
-+};
-+
-+static struct gpio_led_platform_data iconnect_led_data = {
-+      .leds           = iconnect_led_pins,
-+      .num_leds       = ARRAY_SIZE(iconnect_led_pins),
-+};
-+
-+static struct platform_device iconnect_leds = {
-+      .name   = "leds-gpio",
-+      .id     = -1,
-+      .dev    = {
-+              .platform_data  = &iconnect_led_data,
-+      }
-+};
-+
-+static struct gpio_keys_button iconnect_buttons[] = {
-+      {
-+              .code           = KEY_COPY,
-+              .gpio           = 35,
-+              .desc           = "OTB Button",
-+              .active_low     = 1,
-+      },
-+      {
-+              .code           = KEY_RESTART,
-+              .gpio           = 12,
-+              .desc           = "Reset",
-+              .active_low     = 1,
-+      },
-+};
-+
-+static struct gpio_keys_platform_data iconnect_button_data = {
-+      .buttons        = iconnect_buttons,
-+      .nbuttons       = ARRAY_SIZE(iconnect_buttons),
-+};
-+
-+static struct platform_device iconnect_button_device = {
-+      .name           = "gpio-keys",
-+      .id             = -1,
-+      .num_resources  = 0,
-+      .dev            = {
-+              .platform_data  = &iconnect_button_data,
-+      }
-+};
-+
-+static unsigned int iconnect_mpp_config[] __initdata = {
-+      MPP0_NF_IO2,
-+      MPP1_NF_IO3,
-+      MPP2_NF_IO4,
-+      MPP3_NF_IO5,
-+      MPP4_NF_IO6,
-+      MPP5_NF_IO7,
-+      MPP18_NF_IO0,
-+      MPP19_NF_IO1,
-+      MPP12_GPIO,     /* Reset Button */
-+      MPP35_GPIO,     /* OTB Button */
-+
-+      MPP41_GPIO,     /* LED Level */
-+      MPP42_GPIO,     /* Power LED blue */
-+      MPP43_GPIO,     /* Power LED red */
-+      MPP44_GPIO,     /* USB LED 1 */
-+      MPP45_GPIO,     /* USB LED 2 */
-+      MPP46_GPIO,     /* USB LED 3 */
-+      MPP47_GPIO,     /* USB LED 4 */
-+      MPP48_GPIO,     /* OTB LED */
-+      0
-+};
-+
-+static struct i2c_board_info __initdata iconnect_i2c = {
-+      I2C_BOARD_INFO("lm63", 0x4c),
-+};
-+
-+static void __init iconnect_init(void)
-+{
-+      /*
-+       * Basic setup. Needs to be called early.
-+       */
-+      kirkwood_init();
-+      kirkwood_mpp_conf(iconnect_mpp_config);
-+
-+      kirkwood_nand_init(ARRAY_AND_SIZE(iconnect_nand_parts), 25);
-+      kirkwood_ehci_init();
-+      kirkwood_ge00_init(&iconnect_ge00_data);
-+
-+      kirkwood_uart0_init();
-+      platform_device_register(&iconnect_leds);
-+      platform_device_register(&iconnect_button_device);
-+
-+      kirkwood_i2c_init();
-+      i2c_register_board_info(0, &iconnect_i2c,1);
-+}
-+
-+static int __init iconnect_pci_init(void)
-+{
-+      if (machine_is_iconnect()) {
-+              kirkwood_pcie_init(KW_PCIE0);
-+      }
-+      return 0;
-+}
-+subsys_initcall(iconnect_pci_init);
-+
-+MACHINE_START(ICONNECT, "Iomega iConnect Wireless Data Station")
-+      /* Maintainer: Arne Fitzenreiter <arne_f@ipfire.org> */
-+      .atag_offset    = 0x100,
-+      .init_machine   = iconnect_init,
-+      .map_io         = kirkwood_map_io,
-+      .init_early     = kirkwood_init_early,
-+      .init_irq       = kirkwood_init_irq,
-+      .timer          = &kirkwood_timer,
-+MACHINE_END
-diff -Naur linux-3.2.25.org/arch/arm/mach-kirkwood/Kconfig linux-3.2.25/arch/arm/mach-kirkwood/Kconfig
---- linux-3.2.25.org/arch/arm/mach-kirkwood/Kconfig    2012-08-02 09:38:04.000000000 -0400
-+++ linux-3.2.25/arch/arm/mach-kirkwood/Kconfig        2012-08-05 12:45:22.015253501 -0400
-@@ -44,6 +44,12 @@
-         Say 'Y' here if you want your kernel to support the
-         Marvell GuruPlug Reference Board.
-+config MACH_DREAMPLUG
-+      bool "Marvell DreamPlug Reference Board"
-+      help
-+        Say 'Y' here if you want your kernel to support the
-+        Marvell DreamPlug Reference Board.
-+
- config MACH_TS219
-       bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS"
-       help
-@@ -130,6 +136,18 @@
-         Say 'Y' here if you want your kernel to support the
-         HP t5325 Thin Client.
-+config MACH_ICONNECT
-+      bool "Iomega iConnect Wireless Data Station"
-+      help
-+        Say 'Y' here if you want your kernel to support the
-+        Iomega iConnect Wireless Data Station.
-+
-+config MACH_NAS6210
-+      bool "Raidsonic ICY BOX IB-62x0"
-+      help
-+        Say 'Y' here if you want your kernel to support the
-+        Raidsonic ICY BOX IB-62x0.
-+
- endmenu
- endif
-diff -Naur linux-3.2.25.org/arch/arm/mach-kirkwood/Makefile linux-3.2.25/arch/arm/mach-kirkwood/Makefile
---- linux-3.2.25.org/arch/arm/mach-kirkwood/Makefile   2012-08-02 09:38:04.000000000 -0400
-+++ linux-3.2.25/arch/arm/mach-kirkwood/Makefile       2012-08-05 12:46:49.015253501 -0400
-@@ -7,6 +7,7 @@
- obj-$(CONFIG_MACH_SHEEVAPLUG)         += sheevaplug-setup.o
- obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG)   += sheevaplug-setup.o
- obj-$(CONFIG_MACH_GURUPLUG)           += guruplug-setup.o
-+obj-$(CONFIG_MACH_DREAMPLUG)          += dreamplug-setup.o
- obj-$(CONFIG_MACH_DOCKSTAR)           += dockstar-setup.o
- obj-$(CONFIG_MACH_TS219)              += ts219-setup.o tsx1x-common.o
- obj-$(CONFIG_MACH_TS41X)              += ts41x-setup.o tsx1x-common.o
-@@ -18,5 +19,7 @@
- obj-$(CONFIG_MACH_NET2BIG_V2)         += netxbig_v2-setup.o lacie_v2-common.o
- obj-$(CONFIG_MACH_NET5BIG_V2)         += netxbig_v2-setup.o lacie_v2-common.o
- obj-$(CONFIG_MACH_T5325)              += t5325-setup.o
-+obj-$(CONFIG_MACH_ICONNECT)           += iconnect-setup.o
-+obj-$(CONFIG_MACH_NAS6210)            += nas6210-setup.o
- obj-$(CONFIG_CPU_IDLE)                        += cpuidle.o
-diff -Naur linux-3.2.25.org/arch/arm/mach-kirkwood/mpp.h linux-3.2.25/arch/arm/mach-kirkwood/mpp.h
---- linux-3.2.25.org/arch/arm/mach-kirkwood/mpp.h      2012-08-02 09:38:04.000000000 -0400
-+++ linux-3.2.25/arch/arm/mach-kirkwood/mpp.h  2012-08-05 13:08:23.835566001 -0400
-@@ -102,6 +102,7 @@
- #define MPP11_SATA0_ACTn      MPP( 11, 0x5, 0, 0, 0,   1,   1,   1,   1 )
- #define MPP12_GPO             MPP( 12, 0x0, 0, 1, 1,   1,   1,   1,   1 )
-+#define MPP12_GPIO            MPP( 12, 0x0, 1, 1, 1,   1,   1,   1,   1 )
- #define MPP12_SD_CLK          MPP( 12, 0x1, 0, 0, 1,   1,   1,   1,   1 )
- #define MPP12_AU_SPDIF0               MPP( 12, 0xa, 0, 0, 0,   0,   0,   0,   1 )
- #define MPP12_SPI_MOSI                MPP( 12, 0xb, 0, 0, 0,   0,   0,   0,   1 )
-diff -Naur linux-3.2.25.org/arch/arm/mach-kirkwood/nas6210-setup.c linux-3.2.25/arch/arm/mach-kirkwood/nas6210-setup.c
---- linux-3.2.25.org/arch/arm/mach-kirkwood/nas6210-setup.c    1969-12-31 19:00:00.000000000 -0500
-+++ linux-3.2.25/arch/arm/mach-kirkwood/nas6210-setup.c        2012-08-11 04:58:35.223186956 -0400
-@@ -0,0 +1,184 @@
-+/*
-+ * arch/arm/mach-kirkwood/nas6210-setup.c
-+ *
-+ * Raidsonic ICYBOX NAS6210 and 6220 Board Setup
-+ *
-+ * This file is licensed under the terms of the GNU General Public
-+ * License version 2.  This program is licensed "as is" without any
-+ * warranty of any kind, whether express or implied.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/ata_platform.h>
-+#include <linux/mv643xx_eth.h>
-+#include <linux/gpio.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/i2c.h>
-+#include <linux/input.h>
-+#include <linux/leds.h>
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <mach/kirkwood.h>
-+#include "common.h"
-+#include "mpp.h"
-+
-+#define NAS6210_GPIO_POWER_OFF 24
-+
-+static struct mtd_partition nas6210_nand_parts[] = {
-+      {
-+              .name = "u-boot",
-+              .offset = 0,
-+              .size = SZ_1M,
-+              .mask_flags = MTD_WRITEABLE, /* read only */
-+      }, {
-+              .name = "uImage",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = (SZ_1M*6),
-+      }, {
-+              .name = "root",
-+              .offset = MTDPART_OFS_NXTBLK,
-+              .size = MTDPART_SIZ_FULL,
-+      },
-+};
-+
-+static struct mv643xx_eth_platform_data nas6210_ge00_data = {
-+      .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
-+};
-+
-+static struct mv_sata_platform_data nas6210_sata_data = {
-+      .n_ports        = 2,
-+};
-+
-+static struct gpio_led nas6210_led_pins[] = {
-+      {
-+              .name                   = "nas6210:green:power",
-+              .default_trigger        = "default-on",
-+              .gpio                   = 25,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "nas6210:red:power",
-+              .default_trigger        = "none",
-+              .gpio                   = 22,
-+              .active_low             = 0,
-+      },
-+      {
-+              .name                   = "nas6210:red:usb_copy",
-+              .default_trigger        = "none",
-+              .gpio                   = 27,
-+              .active_low             = 0,
-+      },
-+};
-+
-+static struct gpio_led_platform_data nas6210_led_data = {
-+      .leds           = nas6210_led_pins,
-+      .num_leds       = ARRAY_SIZE(nas6210_led_pins),
-+};
-+
-+static struct platform_device nas6210_leds = {
-+      .name   = "leds-gpio",
-+      .id     = -1,
-+      .dev    = {
-+              .platform_data  = &nas6210_led_data,
-+      }
-+};
-+
-+static struct gpio_keys_button nas6210_buttons[] = {
-+      {
-+              .code           = KEY_COPY,
-+              .gpio           = 29,
-+              .desc           = "USB Copy",
-+              .active_low     = 1,
-+      },
-+      {
-+              .code           = KEY_RESTART,
-+              .gpio           = 28,
-+              .desc           = "Reset",
-+              .active_low     = 1,
-+      },
-+};
-+
-+static struct gpio_keys_platform_data nas6210_button_data = {
-+      .buttons        = nas6210_buttons,
-+      .nbuttons       = ARRAY_SIZE(nas6210_buttons),
-+};
-+
-+static struct platform_device nas6210_button_device = {
-+      .name           = "gpio-keys",
-+      .id             = -1,
-+      .num_resources  = 0,
-+      .dev            = {
-+              .platform_data  = &nas6210_button_data,
-+      }
-+};
-+
-+static unsigned int nas6210_mpp_config[] __initdata = {
-+      MPP0_NF_IO2,
-+      MPP1_NF_IO3,
-+      MPP2_NF_IO4,
-+      MPP3_NF_IO5,
-+      MPP4_NF_IO6,
-+      MPP5_NF_IO7,
-+      MPP18_NF_IO0,
-+      MPP19_NF_IO1,
-+      MPP22_GPIO,     /* Power LED red */
-+      MPP24_GPIO,     /* Power off */
-+      MPP25_GPIO,     /* Power LED green */
-+      MPP27_GPIO,    /* USB transfer LED */
-+      MPP28_GPIO,    /* Reset button */
-+      MPP29_GPIO,    /* USB Copy button */
-+      0
-+};
-+
-+void nas6210_power_off(void)
-+{
-+      gpio_set_value(NAS6210_GPIO_POWER_OFF, 1);
-+      while(1);
-+}
-+
-+static void __init nas6210_init(void)
-+{
-+      /*
-+       * Basic setup. Needs to be called early.
-+       */
-+      kirkwood_init();
-+      kirkwood_mpp_conf(nas6210_mpp_config);
-+
-+      kirkwood_nand_init(ARRAY_AND_SIZE(nas6210_nand_parts), 25);
-+      kirkwood_ehci_init();
-+      kirkwood_ge00_init(&nas6210_ge00_data);
-+      kirkwood_sata_init(&nas6210_sata_data);
-+      kirkwood_uart0_init();
-+      platform_device_register(&nas6210_leds);
-+      platform_device_register(&nas6210_button_device);
-+
-+      if (gpio_request(NAS6210_GPIO_POWER_OFF, "power-off") == 0 &&
-+              gpio_direction_output(NAS6210_GPIO_POWER_OFF, 0) == 0)
-+                      pm_power_off = nas6210_power_off;
-+
-+      else
-+              pr_err("nas6210: failed to configure power-off gpio pin");
-+}
-+
-+static int __init nas6210_pci_init(void)
-+{
-+      if (machine_is_nas6210()) {
-+              kirkwood_pcie_init(KW_PCIE0);
-+      }
-+      return 0;
-+}
-+subsys_initcall(nas6210_pci_init);
-+
-+MACHINE_START(NAS6210, "RaidSonic ICY BOX IB-NAS62x0")
-+      /* Maintainer: Arne Fitzenreiter <arne_f@ipfire.org> */
-+      .atag_offset    = 0x00000100,
-+      .init_machine   = nas6210_init,
-+      .map_io         = kirkwood_map_io,
-+      .init_early     = kirkwood_init_early,
-+      .init_irq       = kirkwood_init_irq,
-+      .timer          = &kirkwood_timer,
-+MACHINE_END
-diff -Naur linux-3.2.25.org/arch/arm/tools/mach-types linux-3.2.25/arch/arm/tools/mach-types
---- linux-3.2.25.org/arch/arm/tools/mach-types 2012-08-02 09:38:04.000000000 -0400
-+++ linux-3.2.25/arch/arm/tools/mach-types     2012-08-11 10:18:52.849620229 -0400
-@@ -448,6 +448,7 @@
- riot_bei2             MACH_RIOT_BEI2          RIOT_BEI2               2576
- riot_x37              MACH_RIOT_X37           RIOT_X37                2578
- pca101                        MACH_PCA101             PCA101                  2595
-+guruplug              MACH_GURUPLUG           GURUPLUG                2601
- capc7117              MACH_CAPC7117           CAPC7117                2612
- icontrol              MACH_ICONTROL           ICONTROL                2624
- gplugd                        MACH_GPLUGD             GPLUGD                  2625
-@@ -455,7 +456,7 @@
- mx23evk                       MACH_MX23EVK            MX23EVK                 2629
- ap4evb                        MACH_AP4EVB             AP4EVB                  2630
- mityomapl138          MACH_MITYOMAPL138       MITYOMAPL138            2650
--guruplug              MACH_GURUPLUG           GURUPLUG                2659
-+dreamplug1            MACH_DREAMPLUG1         DREAMPLUG1              2659
- spear310              MACH_SPEAR310           SPEAR310                2660
- spear320              MACH_SPEAR320           SPEAR320                2661
- aquila                        MACH_AQUILA             AQUILA                  2676
-@@ -1123,6 +1124,7 @@
- thales_adc            MACH_THALES_ADC         THALES_ADC              3492
- ubisys_p9d_evp                MACH_UBISYS_P9D_EVP     UBISYS_P9D_EVP          3493
- atdgp318              MACH_ATDGP318           ATDGP318                3494
-+dreamplug             MACH_DREAMPLUG          DREAMPLUG               3550
- m28evk                        MACH_M28EVK             M28EVK                  3613
- smdk4212              MACH_SMDK4212           SMDK4212                3638
- smdk4412              MACH_SMDK4412           SMDK4412                3765
diff --git a/src/patches/linux-3.2.27-rpi_fix_dwc_common_build.patch b/src/patches/linux-3.2.27-rpi_fix_dwc_common_build.patch
deleted file mode 100644 (file)
index f46c57c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-diff -Naur linux-3.2.27.org/drivers/usb/host/dwc_common_port/Makefile linux-3.2.27/drivers/usb/host/dwc_common_port/Makefile
---- linux-3.2.27.org/drivers/usb/host/dwc_common_port/Makefile 2012-08-21 05:05:46.000000000 -0400
-+++ linux-3.2.27/drivers/usb/host/dwc_common_port/Makefile     2012-08-21 06:32:23.501695852 -0400
-@@ -30,15 +30,6 @@
- else
--ifeq ($(KDIR),)
--$(error Must give "KDIR=/path/to/kernel/source" on command line or in environment)
--endif
--
--ifeq ($(ARCH),)
--$(error Must give "ARCH=<arch>" on command line or in environment. Also, if \
-- cross-compiling, must give "CROSS_COMPILE=/path/to/compiler/plus/tool-prefix-")
--endif
--
- ifeq ($(DOXYGEN),)
- DOXYGEN               := doxygen
- endif
-diff -Naur linux-3.2.27.org/drivers/usb/host/dwc_common_port/Makefile.linux linux-3.2.27/drivers/usb/host/dwc_common_port/Makefile.linux
---- linux-3.2.27.org/drivers/usb/host/dwc_common_port/Makefile.linux   2012-08-21 05:05:46.000000000 -0400
-+++ linux-3.2.27/drivers/usb/host/dwc_common_port/Makefile.linux       2012-08-21 05:22:35.964969680 -0400
-@@ -21,15 +21,6 @@
- else
--ifeq ($(KDIR),)
--$(error Must give "KDIR=/path/to/kernel/source" on command line or in environment)
--endif
--
--ifeq ($(ARCH),)
--$(error Must give "ARCH=<arch>" on command line or in environment. Also, if \
-- cross-compiling, must give "CROSS_COMPILE=/path/to/compiler/plus/tool-prefix-")
--endif
--
- ifeq ($(DOXYGEN),)
- DOXYGEN               := doxygen
- endif
diff --git a/src/patches/linux-3.2.33-ledtrig-netdev-1.patch b/src/patches/linux-3.2.33-ledtrig-netdev-1.patch
deleted file mode 100644 (file)
index f42ca73..0000000
+++ /dev/null
@@ -1,479 +0,0 @@
-diff -Naur linux-3.2.33.org/drivers/leds/Kconfig linux-3.2.33/drivers/leds/Kconfig
---- linux-3.2.33.org/drivers/leds/Kconfig      2012-10-31 00:27:11.000000000 +0100
-+++ linux-3.2.33/drivers/leds/Kconfig  2012-11-04 12:47:10.661589825 +0100
-@@ -457,4 +457,11 @@
- comment "iptables trigger is under Netfilter config (LED target)"
-       depends on LEDS_TRIGGERS
-+config LEDS_TRIGGER_NETDEV
-+      tristate "LED Netdev Trigger"
-+      depends on LEDS_TRIGGERS
-+      help
-+        This allows LEDs to be controlled by network device activity.
-+        If unsure, say Y.
-+
- endif # NEW_LEDS
-diff -Naur linux-3.2.33.org/drivers/leds/ledtrig-netdev.c linux-3.2.33/drivers/leds/ledtrig-netdev.c
---- linux-3.2.33.org/drivers/leds/ledtrig-netdev.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.2.33/drivers/leds/ledtrig-netdev.c 2012-11-04 13:43:51.414865799 +0100
-@@ -0,0 +1,452 @@
-+/*
-+ * LED Kernel Netdev Trigger
-+ *
-+ * Toggles the LED to reflect the link and traffic state of a named net device
-+ *
-+ * Copyright 2007 Oliver Jowett <oliver@opencloud.com>
-+ *
-+ * Derived from ledtrig-timer.c which is:
-+ *  Copyright 2005-2006 Openedhand Ltd.
-+ *  Author: Richard Purdie <rpurdie@openedhand.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/jiffies.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/list.h>
-+#include <linux/spinlock.h>
-+#include <linux/device.h>
-+#include <linux/sysdev.h>
-+#include <linux/netdevice.h>
-+#include <linux/timer.h>
-+#include <linux/ctype.h>
-+#include <linux/leds.h>
-+#include <linux/version.h>
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
-+#include <net/net_namespace.h>
-+#endif
-+
-+#include "leds.h"
-+
-+/*
-+ * Configurable sysfs attributes:
-+ *
-+ * device_name - network device name to monitor
-+ *
-+ * interval - duration of LED blink, in milliseconds
-+ *
-+ * mode - either "none" (LED is off) or a space separated list of one or more of:
-+ *   link: LED's normal state reflects whether the link is up (has carrier) or not
-+ *   tx:   LED blinks on transmitted data
-+ *   rx:   LED blinks on receive data
-+ *
-+ * Some suggestions:
-+ *
-+ *  Simple link status LED:
-+ *  $ echo netdev >someled/trigger
-+ *  $ echo eth0 >someled/device_name
-+ *  $ echo link >someled/mode
-+ *
-+ *  Ethernet-style link/activity LED:
-+ *  $ echo netdev >someled/trigger
-+ *  $ echo eth0 >someled/device_name
-+ *  $ echo "link tx rx" >someled/mode
-+ *
-+ *  Modem-style tx/rx LEDs:
-+ *  $ echo netdev >led1/trigger
-+ *  $ echo ppp0 >led1/device_name
-+ *  $ echo tx >led1/mode
-+ *  $ echo netdev >led2/trigger
-+ *  $ echo ppp0 >led2/device_name
-+ *  $ echo rx >led2/mode
-+ *
-+ */
-+
-+#define MODE_LINK 1
-+#define MODE_TX   2
-+#define MODE_RX   4
-+
-+struct led_netdev_data {
-+      rwlock_t lock;
-+
-+      struct timer_list timer;
-+      struct notifier_block notifier;
-+
-+      struct led_classdev *led_cdev;
-+      struct net_device *net_dev;
-+
-+      char device_name[IFNAMSIZ];
-+      unsigned interval;
-+      unsigned mode;
-+      unsigned link_up;
-+      unsigned last_activity;
-+};
-+
-+static void set_baseline_state(struct led_netdev_data *trigger_data)
-+{
-+      if ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up)
-+              led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+      else
-+              led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+
-+      if ((trigger_data->mode & (MODE_TX | MODE_RX)) != 0 && trigger_data->link_up)
-+              mod_timer(&trigger_data->timer, jiffies + trigger_data->interval);
-+      else
-+              del_timer(&trigger_data->timer);
-+}
-+
-+static ssize_t led_device_name_show(struct device *dev,
-+                                  struct device_attribute *attr, char *buf)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      read_lock(&trigger_data->lock);
-+      sprintf(buf, "%s\n", trigger_data->device_name);
-+      read_unlock(&trigger_data->lock);
-+
-+      return strlen(buf) + 1;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
-+extern struct net init_net;
-+#endif
-+
-+static ssize_t led_device_name_store(struct device *dev,
-+                                   struct device_attribute *attr, const char *buf, size_t size)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      if (size < 0 || size >= IFNAMSIZ)
-+              return -EINVAL;
-+
-+      write_lock(&trigger_data->lock);
-+
-+      strcpy(trigger_data->device_name, buf);
-+      if (size > 0 && trigger_data->device_name[size-1] == '\n')
-+              trigger_data->device_name[size-1] = 0;
-+
-+      if (trigger_data->device_name[0] != 0) {
-+              /* check for existing device to update from */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
-+              trigger_data->net_dev = dev_get_by_name(&init_net, trigger_data->device_name);
-+#else
-+              trigger_data->net_dev = dev_get_by_name(trigger_data->device_name);
-+#endif
-+              if (trigger_data->net_dev != NULL)
-+                      trigger_data->link_up = (dev_get_flags(trigger_data->net_dev) & IFF_LOWER_UP) != 0;
-+              set_baseline_state(trigger_data); /* updates LEDs, may start timers */
-+      }
-+
-+      write_unlock(&trigger_data->lock);
-+      return size;
-+}
-+
-+static DEVICE_ATTR(device_name, 0644, led_device_name_show, led_device_name_store);
-+
-+static ssize_t led_mode_show(struct device *dev,
-+                           struct device_attribute *attr, char *buf)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      read_lock(&trigger_data->lock);
-+
-+      if (trigger_data->mode == 0) {
-+              strcpy(buf, "none\n");
-+      } else {
-+              if (trigger_data->mode & MODE_LINK)
-+                      strcat(buf, "link ");
-+              if (trigger_data->mode & MODE_TX)
-+                      strcat(buf, "tx ");
-+              if (trigger_data->mode & MODE_RX)
-+                      strcat(buf, "rx ");
-+              strcat(buf, "\n");
-+      }
-+
-+      read_unlock(&trigger_data->lock);
-+
-+      return strlen(buf)+1;
-+}
-+
-+static ssize_t led_mode_store(struct device *dev,
-+                            struct device_attribute *attr, const char *buf, size_t size)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+      char copybuf[1024];
-+      int new_mode = -1;
-+      char *p, *token;
-+
-+      /* take a copy since we don't want to trash the inbound buffer when using strsep */
-+      strncpy(copybuf, buf, sizeof(copybuf));
-+      copybuf[1023] = 0;
-+      p = copybuf;
-+
-+      while ((token = strsep(&p, " \t\n")) != NULL) {
-+              if (!*token)
-+                      continue;
-+
-+              if (new_mode == -1)
-+                      new_mode = 0;
-+
-+              if (!strcmp(token, "none"))
-+                      new_mode = 0;
-+              else if (!strcmp(token, "tx"))
-+                      new_mode |= MODE_TX;
-+              else if (!strcmp(token, "rx"))
-+                      new_mode |= MODE_RX;
-+              else if (!strcmp(token, "link"))
-+                      new_mode |= MODE_LINK;
-+              else
-+                      return -EINVAL;
-+      }
-+
-+      if (new_mode == -1)
-+              return -EINVAL;
-+
-+      write_lock(&trigger_data->lock);
-+      trigger_data->mode = new_mode;
-+      set_baseline_state(trigger_data);
-+      write_unlock(&trigger_data->lock);
-+
-+      return size;
-+}
-+
-+static DEVICE_ATTR(mode, 0644, led_mode_show, led_mode_store);
-+
-+static ssize_t led_interval_show(struct device *dev,
-+                               struct device_attribute *attr, char *buf)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      read_lock(&trigger_data->lock);
-+      sprintf(buf, "%u\n", jiffies_to_msecs(trigger_data->interval));
-+      read_unlock(&trigger_data->lock);
-+
-+      return strlen(buf) + 1;
-+}
-+
-+static ssize_t led_interval_store(struct device *dev,
-+                                struct device_attribute *attr, const char *buf, size_t size)
-+{
-+      struct led_classdev *led_cdev = dev_get_drvdata(dev);
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+      int ret = -EINVAL;
-+      char *after;
-+      unsigned long value = simple_strtoul(buf, &after, 10);
-+      size_t count = after - buf;
-+
-+      if (*after && isspace(*after))
-+              count++;
-+
-+      /* impose some basic bounds on the timer interval */
-+      if (count == size && value >= 5 && value <= 10000) {
-+              write_lock(&trigger_data->lock);
-+              trigger_data->interval = msecs_to_jiffies(value);
-+              set_baseline_state(trigger_data); // resets timer
-+              write_unlock(&trigger_data->lock);
-+              ret = count;
-+      }
-+
-+      return ret;
-+}
-+
-+static DEVICE_ATTR(interval, 0644, led_interval_show, led_interval_store);
-+
-+static int netdev_trig_notify(struct notifier_block *nb,
-+                            unsigned long evt,
-+                            void *dv)
-+{
-+      struct net_device *dev = dv;
-+      struct led_netdev_data *trigger_data = container_of(nb, struct led_netdev_data, notifier);
-+
-+      if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER)
-+              return NOTIFY_DONE;
-+
-+      write_lock(&trigger_data->lock);
-+
-+      if (strcmp(dev->name, trigger_data->device_name))
-+              goto done;
-+
-+      if (evt == NETDEV_REGISTER) {
-+              if (trigger_data->net_dev != NULL)
-+                      dev_put(trigger_data->net_dev);
-+              dev_hold(dev);
-+              trigger_data->net_dev = dev;
-+              trigger_data->link_up = 0;
-+              goto done;
-+      }
-+
-+      if (evt == NETDEV_UNREGISTER && trigger_data->net_dev != NULL) {
-+              dev_put(trigger_data->net_dev);
-+              trigger_data->net_dev = NULL;
-+              goto done;
-+      }
-+
-+      /* UP / DOWN / CHANGE */
-+
-+      trigger_data->link_up = (evt != NETDEV_DOWN && netif_carrier_ok(dev));
-+      set_baseline_state(trigger_data);
-+
-+done:
-+      write_unlock(&trigger_data->lock);
-+      return NOTIFY_DONE;
-+}
-+
-+/* here's the real work! */
-+static void netdev_trig_timer(unsigned long arg)
-+{
-+      struct led_netdev_data *trigger_data = (struct led_netdev_data *)arg;
-+      struct rtnl_link_stats64 *dev_stats;
-+      unsigned new_activity;
-+        struct rtnl_link_stats64 temp;
-+      
-+      write_lock(&trigger_data->lock);
-+
-+      if (!trigger_data->link_up || !trigger_data->net_dev || (trigger_data->mode & (MODE_TX | MODE_RX)) == 0) {
-+              /* we don't need to do timer work, just reflect link state. */
-+              led_set_brightness(trigger_data->led_cdev, ((trigger_data->mode & MODE_LINK) != 0 && trigger_data->link_up) ? LED_FULL : LED_OFF);
-+              goto no_restart;
-+      }
-+
-+      dev_stats = dev_get_stats(trigger_data->net_dev, &temp);
-+      new_activity =
-+              ((trigger_data->mode & MODE_TX) ? dev_stats->tx_packets : 0) +
-+              ((trigger_data->mode & MODE_RX) ? dev_stats->rx_packets : 0);
-+
-+      if (trigger_data->mode & MODE_LINK) {
-+              /* base state is ON (link present) */
-+              /* if there's no link, we don't get this far and the LED is off */
-+
-+              /* OFF -> ON always */
-+              /* ON -> OFF on activity */
-+              if (trigger_data->led_cdev->brightness == LED_OFF) {
-+                      led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+              } else if (trigger_data->last_activity != new_activity) {
-+                      led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+              }
-+      } else {
-+              /* base state is OFF */
-+              /* ON -> OFF always */
-+              /* OFF -> ON on activity */
-+              if (trigger_data->led_cdev->brightness == LED_FULL) {
-+                      led_set_brightness(trigger_data->led_cdev, LED_OFF);
-+              } else if (trigger_data->last_activity != new_activity) {
-+                      led_set_brightness(trigger_data->led_cdev, LED_FULL);
-+              }
-+      }
-+
-+      trigger_data->last_activity = new_activity;
-+      mod_timer(&trigger_data->timer, jiffies + trigger_data->interval);
-+
-+no_restart:
-+      write_unlock(&trigger_data->lock);
-+}
-+
-+static void netdev_trig_activate(struct led_classdev *led_cdev)
-+{
-+      struct led_netdev_data *trigger_data;
-+      int rc;
-+
-+      trigger_data = kzalloc(sizeof(struct led_netdev_data), GFP_KERNEL);
-+      if (!trigger_data)
-+              return;
-+
-+      rwlock_init(&trigger_data->lock);
-+
-+      trigger_data->notifier.notifier_call = netdev_trig_notify;
-+      trigger_data->notifier.priority = 10;
-+
-+      setup_timer(&trigger_data->timer, netdev_trig_timer, (unsigned long) trigger_data);
-+
-+      trigger_data->led_cdev = led_cdev;
-+      trigger_data->net_dev = NULL;
-+      trigger_data->device_name[0] = 0;
-+
-+      trigger_data->mode = 0;
-+      trigger_data->interval = msecs_to_jiffies(50);
-+      trigger_data->link_up = 0;
-+      trigger_data->last_activity = 0;
-+
-+      led_cdev->trigger_data = trigger_data;
-+
-+      rc = device_create_file(led_cdev->dev, &dev_attr_device_name);
-+      if (rc)
-+              goto err_out;
-+      rc = device_create_file(led_cdev->dev, &dev_attr_mode);
-+      if (rc)
-+              goto err_out_device_name;
-+      rc = device_create_file(led_cdev->dev, &dev_attr_interval);
-+      if (rc)
-+              goto err_out_mode;
-+
-+      register_netdevice_notifier(&trigger_data->notifier);
-+      return;
-+
-+err_out_mode:
-+      device_remove_file(led_cdev->dev, &dev_attr_mode);
-+err_out_device_name:
-+      device_remove_file(led_cdev->dev, &dev_attr_device_name);
-+err_out:
-+      led_cdev->trigger_data = NULL;
-+      kfree(trigger_data);
-+}
-+
-+static void netdev_trig_deactivate(struct led_classdev *led_cdev)
-+{
-+      struct led_netdev_data *trigger_data = led_cdev->trigger_data;
-+
-+      if (trigger_data) {
-+              unregister_netdevice_notifier(&trigger_data->notifier);
-+
-+              device_remove_file(led_cdev->dev, &dev_attr_device_name);
-+              device_remove_file(led_cdev->dev, &dev_attr_mode);
-+              device_remove_file(led_cdev->dev, &dev_attr_interval);
-+
-+              write_lock(&trigger_data->lock);
-+
-+              if (trigger_data->net_dev) {
-+                      dev_put(trigger_data->net_dev);
-+                      trigger_data->net_dev = NULL;
-+              }
-+
-+              write_unlock(&trigger_data->lock);
-+
-+              del_timer_sync(&trigger_data->timer);
-+
-+              kfree(trigger_data);
-+      }
-+}
-+
-+static struct led_trigger netdev_led_trigger = {
-+      .name     = "netdev",
-+      .activate = netdev_trig_activate,
-+      .deactivate = netdev_trig_deactivate,
-+};
-+
-+static int __init netdev_trig_init(void)
-+{
-+      return led_trigger_register(&netdev_led_trigger);
-+}
-+
-+static void __exit netdev_trig_exit(void)
-+{
-+      led_trigger_unregister(&netdev_led_trigger);
-+}
-+
-+module_init(netdev_trig_init);
-+module_exit(netdev_trig_exit);
-+
-+MODULE_AUTHOR("Oliver Jowett <oliver@opencloud.com>");
-+MODULE_DESCRIPTION("Netdev LED trigger");
-+MODULE_LICENSE("GPL");
-diff -Naur linux-3.2.33.org/drivers/leds/Makefile linux-3.2.33/drivers/leds/Makefile
---- linux-3.2.33.org/drivers/leds/Makefile     2012-10-31 00:27:11.000000000 +0100
-+++ linux-3.2.33/drivers/leds/Makefile 2012-11-04 12:47:10.661589825 +0100
-@@ -54,3 +54,4 @@
- obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT)  += ledtrig-backlight.o
- obj-$(CONFIG_LEDS_TRIGGER_GPIO)               += ledtrig-gpio.o
- obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
-+obj-$(CONFIG_LEDS_TRIGGER_NETDEV)      += ledtrig-netdev.o
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/src/patches/mktemp-1.5-add_tempfile-3.patch b/src/patches/mktemp-1.5-add_tempfile-3.patch
deleted file mode 100644 (file)
index bf6dfbe..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-Submitted By: Tushar Teredesai <tushar@linuxfromscratch.org>
-Date: 2005-07-25
-Initial Package Version: 1.5
-Upstream Status: Sent, no response yet.
-Origin: http://archive.linuxfromscratch.org/mail-archives/lfs-dev/2003-April/033602.html
-        http://archive.linuxfromscratch.org/mail-archives/lfs-dev/2003-June/035234.html
-               http://linuxfromscratch.org/pipermail/lfs-dev/2005-June/051908.html
-Description: Add tempfile wrapper script. Use "make install-tempfile" to install it.
-
-diff -Naur mktemp-1.5.orig/Makefile.in mktemp-1.5/Makefile.in
---- mktemp-1.5.orig/Makefile.in        2003-03-23 18:09:56.000000000 -0700
-+++ mktemp-1.5/Makefile.in     2005-07-25 11:11:11.000000000 -0600
-@@ -113,6 +113,9 @@
- install-man:
-       $(INSTALL) -m 0444 $(srcdir)/$(PROG).$(mantype) $(mandir)/man1/$(PROG).1
-+install-tempfile: $(srcdir)/tempfile
-+      $(INSTALL) -m 0555 $(srcdir)/tempfile $(bindir)/tempfile
-+
- check:
-       @echo nothing to check
-diff -Naur mktemp-1.5.orig/tempfile mktemp-1.5/tempfile
---- mktemp-1.5.orig/tempfile   1969-12-31 17:00:00.000000000 -0700
-+++ mktemp-1.5/tempfile        2005-07-25 11:13:41.000000000 -0600
-@@ -0,0 +1,85 @@
-+#!/bin/bash
-+# A tempfile wrapper for mktemp
-+# Note: If you can, avoid using tempfile and use mktemp instead.
-+#       This wrapper is provided for compatibility since some scripts use
-+#       tempfile. If possible, the best solution is to patch the scripts
-+#       to use mktemp.
-+#
-+# Copyright (c) Tushar Teredesai <tush@yahoo.com>
-+#
-+# Permission to use, copy, modify, and distribute this software for any
-+# purpose with or without fee is hereby granted, provided that the above
-+# copyright notice and this permission notice appear in all copies.
-+#
-+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-+# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-+# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-+#
-+
-+# Usage info
-+usage()
-+{
-+      echo "Usage: tempfile [OPTION]"
-+      echo
-+      echo "Create a temporary file in a safe manner."
-+      echo "This version is a wrapper that invokes mktemp."
-+      echo "NOTE: Do not use tempfile in your scripts."
-+      echo "      Use mktemp instead."
-+      echo
-+      echo "[-d|--directory] DIR -> place temporary file in DIR"
-+      echo "[-p|--prefix] PREFIX -> ignored"
-+      echo "[-s|--suffix] SUFFIX -> ignored"
-+      echo "[-n|--name] NAME -> ignored"
-+      echo "[-m|--mode] MODE -> ignored"
-+      echo "--version -> output version information and exit"
-+}
-+
-+# parse all arguments
-+while [ $# != 0 ]
-+do
-+      case "$1" in
-+      # -d for tempfile is equivalent to -p for mktemp
-+      -d|--directory)
-+              dir="$2"
-+              shift 2
-+      ;;
-+      --directory=*)
-+              dir="${1#--directory=}"
-+              shift 1
-+      ;;
-+      -d*)
-+              dir="${1#-d}"
-+              shift 1
-+      ;;
-+      # The following switches are ignored.
-+      -p|--prefix|-s|--suffix|-n|--name|-m|--mode)
-+              shift 2
-+      ;;
-+      -p*|--prefix=*|-s*|--suffix=*|-n*|--name=*|-m*|--mode=*)
-+              shift 1
-+      ;;
-+      # --version for tempfile is equivalent to -V for mktemp
-+      --version)
-+              echo "tempfile 1.0 (`mktemp -V 2>/dev/null`)"
-+              exit 0
-+      ;;
-+      # Unknown switch
-+      *)
-+              usage
-+              exit 1
-+      ;;
-+      esac
-+done
-+
-+# Use the dir if $TMPDIR is not set.
-+if [ -z "$TMPDIR" -a ! -z "$dir" ]
-+then
-+      export TMPDIR="$dir"
-+fi
-+# Execute mktemp with proper arguments
-+# the -t behaviour of mktemp is the default for tempfile
-+exec mktemp -t
diff --git a/src/patches/nasm-0.98.39-security_fix-1.patch b/src/patches/nasm-0.98.39-security_fix-1.patch
deleted file mode 100644 (file)
index 795d0a3..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-Submitted By: Ken Moffat <ken@kenmoffat.uklinux.net>
-Date: 2005-08-08
-Initial Package Version: 0.98.39
-Upstream Status: From upstream cvs
-Origin: Extracted by Ken Moffat
-Description:  This is Jindrich Novy's patch to fix another buffer overrun
-in nasm, CAN-2005-1194 (users who can be persuaded to assemble and run a
-malicious source file can have arbitrary code executed via a buffer
-overflow).
-
---- nasm-0.98.39/output/outieee.c.orig 2005-01-15 22:16:08.000000000 +0000
-+++ nasm-0.98.39/output/outieee.c      2005-08-08 22:12:46.000000000 +0100
-@@ -1120,7 +1120,7 @@
-     va_list ap;
-     va_start(ap, format);
--    vsprintf(buffer, format, ap);
-+    vsnprintf(buffer, sizeof(buffer), format, ap);
-     l = strlen(buffer);
-     for (i = 0; i < l; i++)
-         if ((buffer[i] & 0xff) > 31)
diff --git a/src/patches/net-tools-1.60-kernel_headers-2.patch b/src/patches/net-tools-1.60-kernel_headers-2.patch
deleted file mode 100644 (file)
index c881537..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
-Date: 2004-06-24
-Initial Package Version: 2.6
-Origin: Gentoo and Self
-Upstream Status: N/A
-Description: Fixes Compile Issues with the 2.6 Kernel
-
-diff -Naur net-tools-1.60.orig/hostname.c net-tools-1.60/hostname.c
---- net-tools-1.60.orig/hostname.c     2001-04-08 17:04:23.000000000 +0000
-+++ net-tools-1.60/hostname.c  2004-06-24 06:17:32.517305695 +0000
-@@ -42,10 +42,16 @@
- #include "config.h"
- #include "version.h"
- #include "../intl.h"
-+#include <linux/version.h>
- #if HAVE_AFDECnet
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
- #include <netdnet/dn.h>
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
-+#include <linux/dn.h>
-+#endif
-+#endif
- char *Release = RELEASE, *Version = "hostname 1.100 (2001-04-14)";
-diff -Naur net-tools-1.60.orig/lib/x25_sr.c net-tools-1.60/lib/x25_sr.c
---- net-tools-1.60.orig/lib/x25_sr.c   2000-05-20 13:38:10.000000000 +0000
-+++ net-tools-1.60/lib/x25_sr.c        2004-06-24 06:15:45.163773724 +0000
-@@ -22,6 +22,7 @@
- #include <sys/socket.h>
- #include <sys/ioctl.h>
- #include <linux/x25.h>
-+#include <linux/version.h>
- #include <ctype.h>
- #include <errno.h>
- #include <netdb.h>
-@@ -77,7 +78,11 @@
-   rt.sigdigits=sigdigits;
-   /* x25_route_struct.address isn't type struct sockaddr_x25, Why? */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
-   memcpy(&rt.address, &sx25.sx25_addr, sizeof(x25_address));
-+#else
-+  memcpy(&rt.address, &sx25.sx25_addr, sizeof(struct x25_address));
-+#endif
-   while (*args) {
-       if (!strcmp(*args,"device") || !strcmp(*args,"dev")) {
diff --git a/src/patches/netfilter_layer7_2.22_kernel3.0.patch b/src/patches/netfilter_layer7_2.22_kernel3.0.patch
deleted file mode 100644 (file)
index 82d8509..0000000
+++ /dev/null
@@ -1,2160 +0,0 @@
-diff -Naur linux-3.0.24.org/include/linux/netfilter/xt_layer7.h linux-3.0.24/include/linux/netfilter/xt_layer7.h
---- linux-3.0.24.org/include/linux/netfilter/xt_layer7.h       1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.0.24/include/linux/netfilter/xt_layer7.h   2012-03-15 20:08:48.976050501 +0100
-@@ -0,0 +1,13 @@
-+#ifndef _XT_LAYER7_H
-+#define _XT_LAYER7_H
-+
-+#define MAX_PATTERN_LEN 8192
-+#define MAX_PROTOCOL_LEN 256
-+
-+struct xt_layer7_info {
-+    char protocol[MAX_PROTOCOL_LEN];
-+    char pattern[MAX_PATTERN_LEN];
-+    u_int8_t invert;
-+};
-+
-+#endif /* _XT_LAYER7_H */
-diff -Naur linux-3.0.24.org/include/net/netfilter/nf_conntrack.h linux-3.0.24/include/net/netfilter/nf_conntrack.h
---- linux-3.0.24.org/include/net/netfilter/nf_conntrack.h      2012-03-12 18:58:19.000000000 +0100
-+++ linux-3.0.24/include/net/netfilter/nf_conntrack.h  2012-03-15 20:11:43.806042495 +0100
-@@ -134,6 +134,22 @@
-       struct net *ct_net;
- #endif
-+#if defined(CONFIG_NETFILTER_XT_MATCH_LAYER7) || \
-+ defined(CONFIG_NETFILTER_XT_MATCH_LAYER7_MODULE)
-+      struct {
-+              /*
-+               * e.g. "http". NULL before decision. "unknown" after decision
-+               * if no match.
-+               */
-+              char *app_proto;
-+              /*
-+               * application layer data so far. NULL after match decision.
-+               */
-+              char *app_data;
-+              unsigned int app_data_len;
-+      } layer7;
-+#endif
-+
-       /* Storage reserved for other modules, must be the last member */
-       union nf_conntrack_proto proto;
- };
-diff -Naur linux-3.0.24.org/net/netfilter/Kconfig linux-3.0.24/net/netfilter/Kconfig
---- linux-3.0.24.org/net/netfilter/Kconfig     2012-03-12 18:58:19.000000000 +0100
-+++ linux-3.0.24/net/netfilter/Kconfig 2012-03-15 20:46:12.046043918 +0100
-@@ -1020,6 +1020,26 @@
-         To compile it as a module, choose M here.  If unsure, say N.
-+config NETFILTER_XT_MATCH_LAYER7
-+      tristate '"layer7" match support'
-+      depends on NETFILTER_XTABLES
-+      depends on EXPERIMENTAL && (IP_NF_CONNTRACK || NF_CONNTRACK)
-+      help
-+        Say Y if you want to be able to classify connections (and their
-+        packets) based on regular expression matching of their application
-+        layer data.   This is one way to classify applications such as
-+        peer-to-peer filesharing systems that do not always use the same
-+        port.
-+
-+        To compile it as a module, choose M here.  If unsure, say N.
-+
-+config NETFILTER_XT_MATCH_LAYER7_DEBUG
-+        bool 'Layer 7 debugging output'
-+        depends on NETFILTER_XT_MATCH_LAYER7
-+        help
-+          Say Y to get lots of debugging output.
-+
-+
- config NETFILTER_XT_MATCH_STATISTIC
-       tristate '"statistic" match support'
-       depends on NETFILTER_ADVANCED
-diff -Naur linux-3.0.24.org/net/netfilter/Makefile linux-3.0.24/net/netfilter/Makefile
---- linux-3.0.24.org/net/netfilter/Makefile    2012-03-12 18:58:19.000000000 +0100
-+++ linux-3.0.24/net/netfilter/Makefile        2012-03-15 20:08:49.016044445 +0100
-@@ -102,6 +102,7 @@
- obj-$(CONFIG_NETFILTER_XT_MATCH_SCTP) += xt_sctp.o
- obj-$(CONFIG_NETFILTER_XT_MATCH_SOCKET) += xt_socket.o
- obj-$(CONFIG_NETFILTER_XT_MATCH_STATE) += xt_state.o
-+obj-$(CONFIG_NETFILTER_XT_MATCH_LAYER7) += xt_layer7.o
- obj-$(CONFIG_NETFILTER_XT_MATCH_STATISTIC) += xt_statistic.o
- obj-$(CONFIG_NETFILTER_XT_MATCH_STRING) += xt_string.o
- obj-$(CONFIG_NETFILTER_XT_MATCH_TCPMSS) += xt_tcpmss.o
-diff -Naur linux-3.0.24.org/net/netfilter/nf_conntrack_core.c linux-3.0.24/net/netfilter/nf_conntrack_core.c
---- linux-3.0.24.org/net/netfilter/nf_conntrack_core.c 2012-03-12 18:58:19.000000000 +0100
-+++ linux-3.0.24/net/netfilter/nf_conntrack_core.c     2012-03-15 20:08:49.026044761 +0100
-@@ -213,6 +213,14 @@
-        * too. */
-       nf_ct_remove_expectations(ct);
-+      #if defined(CONFIG_NETFILTER_XT_MATCH_LAYER7) || defined(CONFIG_NETFILTER_XT_MATCH_LAYER7_MODULE)
-+      if(ct->layer7.app_proto)
-+              kfree(ct->layer7.app_proto);
-+      if(ct->layer7.app_data)
-+      kfree(ct->layer7.app_data);
-+      #endif
-+
-+
-       /* We overload first tuple to link into unconfirmed list. */
-       if (!nf_ct_is_confirmed(ct)) {
-               BUG_ON(hlist_nulls_unhashed(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode));
-diff -Naur linux-3.0.24.org/net/netfilter/nf_conntrack_standalone.c linux-3.0.24/net/netfilter/nf_conntrack_standalone.c
---- linux-3.0.24.org/net/netfilter/nf_conntrack_standalone.c   2012-03-12 18:58:19.000000000 +0100
-+++ linux-3.0.24/net/netfilter/nf_conntrack_standalone.c       2012-03-15 20:08:49.036047262 +0100
-@@ -239,6 +239,12 @@
-       if (ct_show_delta_time(s, ct))
-               goto release;
-+#if defined(CONFIG_NETFILTER_XT_MATCH_LAYER7) || defined(CONFIG_NETFILTER_XT_MATCH_LAYER7_MODULE)
-+      if(ct->layer7.app_proto &&
-+           seq_printf(s, "l7proto=%s ", ct->layer7.app_proto))
-+              return -ENOSPC;
-+#endif
-+
-       if (seq_printf(s, "use=%u\n", atomic_read(&ct->ct_general.use)))
-               goto release;
-diff -Naur linux-3.0.24.org/net/netfilter/regexp/regexp.c linux-3.0.24/net/netfilter/regexp/regexp.c
---- linux-3.0.24.org/net/netfilter/regexp/regexp.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.0.24/net/netfilter/regexp/regexp.c 2012-03-15 20:08:49.066043520 +0100
-@@ -0,0 +1,1197 @@
-+/*
-+ * regcomp and regexec -- regsub and regerror are elsewhere
-+ * @(#)regexp.c       1.3 of 18 April 87
-+ *
-+ *    Copyright (c) 1986 by University of Toronto.
-+ *    Written by Henry Spencer.  Not derived from licensed software.
-+ *
-+ *    Permission is granted to anyone to use this software for any
-+ *    purpose on any computer system, and to redistribute it freely,
-+ *    subject to the following restrictions:
-+ *
-+ *    1. The author is not responsible for the consequences of use of
-+ *            this software, no matter how awful, even if they arise
-+ *            from defects in it.
-+ *
-+ *    2. The origin of this software must not be misrepresented, either
-+ *            by explicit claim or by omission.
-+ *
-+ *    3. Altered versions must be plainly marked as such, and must not
-+ *            be misrepresented as being the original software.
-+ *
-+ * Beware that some of this code is subtly aware of the way operator
-+ * precedence is structured in regular expressions.  Serious changes in
-+ * regular-expression syntax might require a total rethink.
-+ *
-+ * This code was modified by Ethan Sommer to work within the kernel
-+ * (it now uses kmalloc etc..)
-+ *
-+ * Modified slightly by Matthew Strait to use more modern C.
-+ */
-+
-+#include "regexp.h"
-+#include "regmagic.h"
-+
-+/* added by ethan and matt.  Lets it work in both kernel and user space.
-+(So iptables can use it, for instance.)  Yea, it goes both ways... */
-+#if __KERNEL__
-+  #define malloc(foo) kmalloc(foo,GFP_ATOMIC)
-+#else
-+  #define printk(format,args...) printf(format,##args)
-+#endif
-+
-+void regerror(char * s)
-+{
-+        printk("<3>Regexp: %s\n", s);
-+        /* NOTREACHED */
-+}
-+
-+/*
-+ * The "internal use only" fields in regexp.h are present to pass info from
-+ * compile to execute that permits the execute phase to run lots faster on
-+ * simple cases.  They are:
-+ *
-+ * regstart   char that must begin a match; '\0' if none obvious
-+ * reganch    is the match anchored (at beginning-of-line only)?
-+ * regmust    string (pointer into program) that match must include, or NULL
-+ * regmlen    length of regmust string
-+ *
-+ * Regstart and reganch permit very fast decisions on suitable starting points
-+ * for a match, cutting down the work a lot.  Regmust permits fast rejection
-+ * of lines that cannot possibly match.  The regmust tests are costly enough
-+ * that regcomp() supplies a regmust only if the r.e. contains something
-+ * potentially expensive (at present, the only such thing detected is * or +
-+ * at the start of the r.e., which can involve a lot of backup).  Regmlen is
-+ * supplied because the test in regexec() needs it and regcomp() is computing
-+ * it anyway.
-+ */
-+
-+/*
-+ * Structure for regexp "program".  This is essentially a linear encoding
-+ * of a nondeterministic finite-state machine (aka syntax charts or
-+ * "railroad normal form" in parsing technology).  Each node is an opcode
-+ * plus a "next" pointer, possibly plus an operand.  "Next" pointers of
-+ * all nodes except BRANCH implement concatenation; a "next" pointer with
-+ * a BRANCH on both ends of it is connecting two alternatives.  (Here we
-+ * have one of the subtle syntax dependencies:  an individual BRANCH (as
-+ * opposed to a collection of them) is never concatenated with anything
-+ * because of operator precedence.)  The operand of some types of node is
-+ * a literal string; for others, it is a node leading into a sub-FSM.  In
-+ * particular, the operand of a BRANCH node is the first node of the branch.
-+ * (NB this is *not* a tree structure:  the tail of the branch connects
-+ * to the thing following the set of BRANCHes.)  The opcodes are:
-+ */
-+
-+/* definition number  opnd?   meaning */
-+#define       END     0       /* no   End of program. */
-+#define       BOL     1       /* no   Match "" at beginning of line. */
-+#define       EOL     2       /* no   Match "" at end of line. */
-+#define       ANY     3       /* no   Match any one character. */
-+#define       ANYOF   4       /* str  Match any character in this string. */
-+#define       ANYBUT  5       /* str  Match any character not in this string. */
-+#define       BRANCH  6       /* node Match this alternative, or the next... */
-+#define       BACK    7       /* no   Match "", "next" ptr points backward. */
-+#define       EXACTLY 8       /* str  Match this string. */
-+#define       NOTHING 9       /* no   Match empty string. */
-+#define       STAR    10      /* node Match this (simple) thing 0 or more times. */
-+#define       PLUS    11      /* node Match this (simple) thing 1 or more times. */
-+#define       OPEN    20      /* no   Mark this point in input as start of #n. */
-+                      /*      OPEN+1 is number 1, etc. */
-+#define       CLOSE   30      /* no   Analogous to OPEN. */
-+
-+/*
-+ * Opcode notes:
-+ *
-+ * BRANCH     The set of branches constituting a single choice are hooked
-+ *            together with their "next" pointers, since precedence prevents
-+ *            anything being concatenated to any individual branch.  The
-+ *            "next" pointer of the last BRANCH in a choice points to the
-+ *            thing following the whole choice.  This is also where the
-+ *            final "next" pointer of each individual branch points; each
-+ *            branch starts with the operand node of a BRANCH node.
-+ *
-+ * BACK               Normal "next" pointers all implicitly point forward; BACK
-+ *            exists to make loop structures possible.
-+ *
-+ * STAR,PLUS  '?', and complex '*' and '+', are implemented as circular
-+ *            BRANCH structures using BACK.  Simple cases (one character
-+ *            per match) are implemented with STAR and PLUS for speed
-+ *            and to minimize recursive plunges.
-+ *
-+ * OPEN,CLOSE ...are numbered at compile time.
-+ */
-+
-+/*
-+ * A node is one char of opcode followed by two chars of "next" pointer.
-+ * "Next" pointers are stored as two 8-bit pieces, high order first.  The
-+ * value is a positive offset from the opcode of the node containing it.
-+ * An operand, if any, simply follows the node.  (Note that much of the
-+ * code generation knows about this implicit relationship.)
-+ *
-+ * Using two bytes for the "next" pointer is vast overkill for most things,
-+ * but allows patterns to get big without disasters.
-+ */
-+#define       OP(p)   (*(p))
-+#define       NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377))
-+#define       OPERAND(p)      ((p) + 3)
-+
-+/*
-+ * See regmagic.h for one further detail of program structure.
-+ */
-+
-+
-+/*
-+ * Utility definitions.
-+ */
-+#ifndef CHARBITS
-+#define       UCHARAT(p)      ((int)*(unsigned char *)(p))
-+#else
-+#define       UCHARAT(p)      ((int)*(p)&CHARBITS)
-+#endif
-+
-+#define       FAIL(m) { regerror(m); return(NULL); }
-+#define       ISMULT(c)       ((c) == '*' || (c) == '+' || (c) == '?')
-+#define       META    "^$.[()|?+*\\"
-+
-+/*
-+ * Flags to be passed up and down.
-+ */
-+#define       HASWIDTH        01      /* Known never to match null string. */
-+#define       SIMPLE          02      /* Simple enough to be STAR/PLUS operand. */
-+#define       SPSTART         04      /* Starts with * or +. */
-+#define       WORST           0       /* Worst case. */
-+
-+/*
-+ * Global work variables for regcomp().
-+ */
-+struct match_globals {
-+char *reginput;               /* String-input pointer. */
-+char *regbol;         /* Beginning of input, for ^ check. */
-+char **regstartp;     /* Pointer to startp array. */
-+char **regendp;               /* Ditto for endp. */
-+char *regparse;               /* Input-scan pointer. */
-+int regnpar;          /* () count. */
-+char regdummy;
-+char *regcode;                /* Code-emit pointer; &regdummy = don't. */
-+long regsize;         /* Code size. */
-+};
-+
-+/*
-+ * Forward declarations for regcomp()'s friends.
-+ */
-+#ifndef STATIC
-+#define       STATIC  static
-+#endif
-+STATIC char *reg(struct match_globals *g, int paren,int *flagp);
-+STATIC char *regbranch(struct match_globals *g, int *flagp);
-+STATIC char *regpiece(struct match_globals *g, int *flagp);
-+STATIC char *regatom(struct match_globals *g, int *flagp);
-+STATIC char *regnode(struct match_globals *g, char op);
-+STATIC char *regnext(struct match_globals *g, char *p);
-+STATIC void regc(struct match_globals *g, char b);
-+STATIC void reginsert(struct match_globals *g, char op, char *opnd);
-+STATIC void regtail(struct match_globals *g, char *p, char *val);
-+STATIC void regoptail(struct match_globals *g, char *p, char *val);
-+
-+
-+__kernel_size_t my_strcspn(const char *s1,const char *s2)
-+{
-+        char *scan1;
-+        char *scan2;
-+        int count;
-+
-+        count = 0;
-+        for (scan1 = (char *)s1; *scan1 != '\0'; scan1++) {
-+                for (scan2 = (char *)s2; *scan2 != '\0';)       /* ++ moved down. */
-+                        if (*scan1 == *scan2++)
-+                                return(count);
-+                count++;
-+        }
-+        return(count);
-+}
-+
-+/*
-+ - regcomp - compile a regular expression into internal code
-+ *
-+ * We can't allocate space until we know how big the compiled form will be,
-+ * but we can't compile it (and thus know how big it is) until we've got a
-+ * place to put the code.  So we cheat:  we compile it twice, once with code
-+ * generation turned off and size counting turned on, and once "for real".
-+ * This also means that we don't allocate space until we are sure that the
-+ * thing really will compile successfully, and we never have to move the
-+ * code and thus invalidate pointers into it.  (Note that it has to be in
-+ * one piece because free() must be able to free it all.)
-+ *
-+ * Beware that the optimization-preparation code in here knows about some
-+ * of the structure of the compiled regexp.
-+ */
-+regexp *
-+regcomp(char *exp,int *patternsize)
-+{
-+      register regexp *r;
-+      register char *scan;
-+      register char *longest;
-+      register int len;
-+      int flags;
-+      struct match_globals g;
-+      
-+      /* commented out by ethan
-+         extern char *malloc();
-+      */
-+
-+      if (exp == NULL)
-+              FAIL("NULL argument");
-+
-+      /* First pass: determine size, legality. */
-+      g.regparse = exp;
-+      g.regnpar = 1;
-+      g.regsize = 0L;
-+      g.regcode = &g.regdummy;
-+      regc(&g, MAGIC);
-+      if (reg(&g, 0, &flags) == NULL)
-+              return(NULL);
-+
-+      /* Small enough for pointer-storage convention? */
-+      if (g.regsize >= 32767L)                /* Probably could be 65535L. */
-+              FAIL("regexp too big");
-+
-+      /* Allocate space. */
-+      *patternsize=sizeof(regexp) + (unsigned)g.regsize;
-+      r = (regexp *)malloc(sizeof(regexp) + (unsigned)g.regsize);
-+      if (r == NULL)
-+              FAIL("out of space");
-+
-+      /* Second pass: emit code. */
-+      g.regparse = exp;
-+      g.regnpar = 1;
-+      g.regcode = r->program;
-+      regc(&g, MAGIC);
-+      if (reg(&g, 0, &flags) == NULL)
-+              return(NULL);
-+
-+      /* Dig out information for optimizations. */
-+      r->regstart = '\0';     /* Worst-case defaults. */
-+      r->reganch = 0;
-+      r->regmust = NULL;
-+      r->regmlen = 0;
-+      scan = r->program+1;                    /* First BRANCH. */
-+      if (OP(regnext(&g, scan)) == END) {             /* Only one top-level choice. */
-+              scan = OPERAND(scan);
-+
-+              /* Starting-point info. */
-+              if (OP(scan) == EXACTLY)
-+                      r->regstart = *OPERAND(scan);
-+              else if (OP(scan) == BOL)
-+                      r->reganch++;
-+
-+              /*
-+               * If there's something expensive in the r.e., find the
-+               * longest literal string that must appear and make it the
-+               * regmust.  Resolve ties in favor of later strings, since
-+               * the regstart check works with the beginning of the r.e.
-+               * and avoiding duplication strengthens checking.  Not a
-+               * strong reason, but sufficient in the absence of others.
-+               */
-+              if (flags&SPSTART) {
-+                      longest = NULL;
-+                      len = 0;
-+                      for (; scan != NULL; scan = regnext(&g, scan))
-+                              if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len) {
-+                                      longest = OPERAND(scan);
-+                                      len = strlen(OPERAND(scan));
-+                              }
-+                      r->regmust = longest;
-+                      r->regmlen = len;
-+              }
-+      }
-+
-+      return(r);
-+}
-+
-+/*
-+ - reg - regular expression, i.e. main body or parenthesized thing
-+ *
-+ * Caller must absorb opening parenthesis.
-+ *
-+ * Combining parenthesis handling with the base level of regular expression
-+ * is a trifle forced, but the need to tie the tails of the branches to what
-+ * follows makes it hard to avoid.
-+ */
-+static char *
-+reg(struct match_globals *g, int paren, int *flagp /* Parenthesized? */ )
-+{
-+      register char *ret;
-+      register char *br;
-+      register char *ender;
-+      register int parno = 0; /* 0 makes gcc happy */
-+      int flags;
-+
-+      *flagp = HASWIDTH;      /* Tentatively. */
-+
-+      /* Make an OPEN node, if parenthesized. */
-+      if (paren) {
-+              if (g->regnpar >= NSUBEXP)
-+                      FAIL("too many ()");
-+              parno = g->regnpar;
-+              g->regnpar++;
-+              ret = regnode(g, OPEN+parno);
-+      } else
-+              ret = NULL;
-+
-+      /* Pick up the branches, linking them together. */
-+      br = regbranch(g, &flags);
-+      if (br == NULL)
-+              return(NULL);
-+      if (ret != NULL)
-+              regtail(g, ret, br);    /* OPEN -> first. */
-+      else
-+              ret = br;
-+      if (!(flags&HASWIDTH))
-+              *flagp &= ~HASWIDTH;
-+      *flagp |= flags&SPSTART;
-+      while (*g->regparse == '|') {
-+              g->regparse++;
-+              br = regbranch(g, &flags);
-+              if (br == NULL)
-+                      return(NULL);
-+              regtail(g, ret, br);    /* BRANCH -> BRANCH. */
-+              if (!(flags&HASWIDTH))
-+                      *flagp &= ~HASWIDTH;
-+              *flagp |= flags&SPSTART;
-+      }
-+
-+      /* Make a closing node, and hook it on the end. */
-+      ender = regnode(g, (paren) ? CLOSE+parno : END);        
-+      regtail(g, ret, ender);
-+
-+      /* Hook the tails of the branches to the closing node. */
-+      for (br = ret; br != NULL; br = regnext(g, br))
-+              regoptail(g, br, ender);
-+
-+      /* Check for proper termination. */
-+      if (paren && *g->regparse++ != ')') {
-+              FAIL("unmatched ()");
-+      } else if (!paren && *g->regparse != '\0') {
-+              if (*g->regparse == ')') {
-+                      FAIL("unmatched ()");
-+              } else
-+                      FAIL("junk on end");    /* "Can't happen". */
-+              /* NOTREACHED */
-+      }
-+
-+      return(ret);
-+}
-+
-+/*
-+ - regbranch - one alternative of an | operator
-+ *
-+ * Implements the concatenation operator.
-+ */
-+static char *
-+regbranch(struct match_globals *g, int *flagp)
-+{
-+      register char *ret;
-+      register char *chain;
-+      register char *latest;
-+      int flags;
-+
-+      *flagp = WORST;         /* Tentatively. */
-+
-+      ret = regnode(g, BRANCH);
-+      chain = NULL;
-+      while (*g->regparse != '\0' && *g->regparse != '|' && *g->regparse != ')') {
-+              latest = regpiece(g, &flags);
-+              if (latest == NULL)
-+                      return(NULL);
-+              *flagp |= flags&HASWIDTH;
-+              if (chain == NULL)      /* First piece. */
-+                      *flagp |= flags&SPSTART;
-+              else
-+                      regtail(g, chain, latest);
-+              chain = latest;
-+      }
-+      if (chain == NULL)      /* Loop ran zero times. */
-+              (void) regnode(g, NOTHING);
-+
-+      return(ret);
-+}
-+
-+/*
-+ - regpiece - something followed by possible [*+?]
-+ *
-+ * Note that the branching code sequences used for ? and the general cases
-+ * of * and + are somewhat optimized:  they use the same NOTHING node as
-+ * both the endmarker for their branch list and the body of the last branch.
-+ * It might seem that this node could be dispensed with entirely, but the
-+ * endmarker role is not redundant.
-+ */
-+static char *
-+regpiece(struct match_globals *g, int *flagp)
-+{
-+      register char *ret;
-+      register char op;
-+      register char *next;
-+      int flags;
-+
-+      ret = regatom(g, &flags);
-+      if (ret == NULL)
-+              return(NULL);
-+
-+      op = *g->regparse;
-+      if (!ISMULT(op)) {
-+              *flagp = flags;
-+              return(ret);
-+      }
-+
-+      if (!(flags&HASWIDTH) && op != '?')
-+              FAIL("*+ operand could be empty");
-+      *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH);
-+
-+      if (op == '*' && (flags&SIMPLE))
-+              reginsert(g, STAR, ret);
-+      else if (op == '*') {
-+              /* Emit x* as (x&|), where & means "self". */
-+              reginsert(g, BRANCH, ret);                      /* Either x */
-+              regoptail(g, ret, regnode(g, BACK));            /* and loop */
-+              regoptail(g, ret, ret);                 /* back */
-+              regtail(g, ret, regnode(g, BRANCH));            /* or */
-+              regtail(g, ret, regnode(g, NOTHING));           /* null. */
-+      } else if (op == '+' && (flags&SIMPLE))
-+              reginsert(g, PLUS, ret);
-+      else if (op == '+') {
-+              /* Emit x+ as x(&|), where & means "self". */
-+              next = regnode(g, BRANCH);                      /* Either */
-+              regtail(g, ret, next);
-+              regtail(g, regnode(g, BACK), ret);              /* loop back */
-+              regtail(g, next, regnode(g, BRANCH));           /* or */
-+              regtail(g, ret, regnode(g, NOTHING));           /* null. */
-+      } else if (op == '?') {
-+              /* Emit x? as (x|) */
-+              reginsert(g, BRANCH, ret);                      /* Either x */
-+              regtail(g, ret, regnode(g, BRANCH));            /* or */
-+              next = regnode(g, NOTHING);             /* null. */
-+              regtail(g, ret, next);
-+              regoptail(g, ret, next);
-+      }
-+      g->regparse++;
-+      if (ISMULT(*g->regparse))
-+              FAIL("nested *?+");
-+
-+      return(ret);
-+}
-+
-+/*
-+ - regatom - the lowest level
-+ *
-+ * Optimization:  gobbles an entire sequence of ordinary characters so that
-+ * it can turn them into a single node, which is smaller to store and
-+ * faster to run.  Backslashed characters are exceptions, each becoming a
-+ * separate node; the code is simpler that way and it's not worth fixing.
-+ */
-+static char *
-+regatom(struct match_globals *g, int *flagp)
-+{
-+      register char *ret;
-+      int flags;
-+
-+      *flagp = WORST;         /* Tentatively. */
-+
-+      switch (*g->regparse++) {
-+      case '^':
-+              ret = regnode(g, BOL);
-+              break;
-+      case '$':
-+              ret = regnode(g, EOL);
-+              break;
-+      case '.':
-+              ret = regnode(g, ANY);
-+              *flagp |= HASWIDTH|SIMPLE;
-+              break;
-+      case '[': {
-+                      register int class;
-+                      register int classend;
-+
-+                      if (*g->regparse == '^') {      /* Complement of range. */
-+                              ret = regnode(g, ANYBUT);
-+                              g->regparse++;
-+                      } else
-+                              ret = regnode(g, ANYOF);
-+                      if (*g->regparse == ']' || *g->regparse == '-')
-+                              regc(g, *g->regparse++);
-+                      while (*g->regparse != '\0' && *g->regparse != ']') {
-+                              if (*g->regparse == '-') {
-+                                      g->regparse++;
-+                                      if (*g->regparse == ']' || *g->regparse == '\0')
-+                                              regc(g, '-');
-+                                      else {
-+                                              class = UCHARAT(g->regparse-2)+1;
-+                                              classend = UCHARAT(g->regparse);
-+                                              if (class > classend+1)
-+                                                      FAIL("invalid [] range");
-+                                              for (; class <= classend; class++)
-+                                                      regc(g, class);
-+                                              g->regparse++;
-+                                      }
-+                              } else
-+                                      regc(g, *g->regparse++);
-+                      }
-+                      regc(g, '\0');
-+                      if (*g->regparse != ']')
-+                              FAIL("unmatched []");
-+                      g->regparse++;
-+                      *flagp |= HASWIDTH|SIMPLE;
-+              }
-+              break;
-+      case '(':
-+              ret = reg(g, 1, &flags);
-+              if (ret == NULL)
-+                      return(NULL);
-+              *flagp |= flags&(HASWIDTH|SPSTART);
-+              break;
-+      case '\0':
-+      case '|':
-+      case ')':
-+              FAIL("internal urp");   /* Supposed to be caught earlier. */
-+              break;
-+      case '?':
-+      case '+':
-+      case '*':
-+              FAIL("?+* follows nothing");
-+              break;
-+      case '\\':
-+              if (*g->regparse == '\0')
-+                      FAIL("trailing \\");
-+              ret = regnode(g, EXACTLY);
-+              regc(g, *g->regparse++);
-+              regc(g, '\0');
-+              *flagp |= HASWIDTH|SIMPLE;
-+              break;
-+      default: {
-+                      register int len;
-+                      register char ender;
-+
-+                      g->regparse--;
-+                      len = my_strcspn((const char *)g->regparse, (const char *)META);
-+                      if (len <= 0)
-+                              FAIL("internal disaster");
-+                      ender = *(g->regparse+len);
-+                      if (len > 1 && ISMULT(ender))
-+                              len--;          /* Back off clear of ?+* operand. */
-+                      *flagp |= HASWIDTH;
-+                      if (len == 1)
-+                              *flagp |= SIMPLE;
-+                      ret = regnode(g, EXACTLY);
-+                      while (len > 0) {
-+                              regc(g, *g->regparse++);
-+                              len--;
-+                      }
-+                      regc(g, '\0');
-+              }
-+              break;
-+      }
-+
-+      return(ret);
-+}
-+
-+/*
-+ - regnode - emit a node
-+ */
-+static char *                 /* Location. */
-+regnode(struct match_globals *g, char op)
-+{
-+      register char *ret;
-+      register char *ptr;
-+
-+      ret = g->regcode;
-+      if (ret == &g->regdummy) {
-+              g->regsize += 3;
-+              return(ret);
-+      }
-+
-+      ptr = ret;
-+      *ptr++ = op;
-+      *ptr++ = '\0';          /* Null "next" pointer. */
-+      *ptr++ = '\0';
-+      g->regcode = ptr;
-+
-+      return(ret);
-+}
-+
-+/*
-+ - regc - emit (if appropriate) a byte of code
-+ */
-+static void
-+regc(struct match_globals *g, char b)
-+{
-+      if (g->regcode != &g->regdummy)
-+              *g->regcode++ = b;
-+      else
-+              g->regsize++;
-+}
-+
-+/*
-+ - reginsert - insert an operator in front of already-emitted operand
-+ *
-+ * Means relocating the operand.
-+ */
-+static void
-+reginsert(struct match_globals *g, char op, char* opnd)
-+{
-+      register char *src;
-+      register char *dst;
-+      register char *place;
-+
-+      if (g->regcode == &g->regdummy) {
-+              g->regsize += 3;
-+              return;
-+      }
-+
-+      src = g->regcode;
-+      g->regcode += 3;
-+      dst = g->regcode;
-+      while (src > opnd)
-+              *--dst = *--src;
-+
-+      place = opnd;           /* Op node, where operand used to be. */
-+      *place++ = op;
-+      *place++ = '\0';
-+      *place++ = '\0';
-+}
-+
-+/*
-+ - regtail - set the next-pointer at the end of a node chain
-+ */
-+static void
-+regtail(struct match_globals *g, char *p, char *val)
-+{
-+      register char *scan;
-+      register char *temp;
-+      register int offset;
-+
-+      if (p == &g->regdummy)
-+              return;
-+
-+      /* Find last node. */
-+      scan = p;
-+      for (;;) {
-+              temp = regnext(g, scan);
-+              if (temp == NULL)
-+                      break;
-+              scan = temp;
-+      }
-+
-+      if (OP(scan) == BACK)
-+              offset = scan - val;
-+      else
-+              offset = val - scan;
-+      *(scan+1) = (offset>>8)&0377;
-+      *(scan+2) = offset&0377;
-+}
-+
-+/*
-+ - regoptail - regtail on operand of first argument; nop if operandless
-+ */
-+static void
-+regoptail(struct match_globals *g, char *p, char *val)
-+{
-+      /* "Operandless" and "op != BRANCH" are synonymous in practice. */
-+      if (p == NULL || p == &g->regdummy || OP(p) != BRANCH)
-+              return;
-+      regtail(g, OPERAND(p), val);
-+}
-+
-+/*
-+ * regexec and friends
-+ */
-+
-+
-+/*
-+ * Forwards.
-+ */
-+STATIC int regtry(struct match_globals *g, regexp *prog, char *string);
-+STATIC int regmatch(struct match_globals *g, char *prog);
-+STATIC int regrepeat(struct match_globals *g, char *p);
-+
-+#ifdef DEBUG
-+int regnarrate = 0;
-+void regdump();
-+STATIC char *regprop(char *op);
-+#endif
-+
-+/*
-+ - regexec - match a regexp against a string
-+ */
-+int
-+regexec(regexp *prog, char *string)
-+{
-+      register char *s;
-+      struct match_globals g;
-+
-+      /* Be paranoid... */
-+      if (prog == NULL || string == NULL) {
-+              printk("<3>Regexp: NULL parameter\n");
-+              return(0);
-+      }
-+
-+      /* Check validity of program. */
-+      if (UCHARAT(prog->program) != MAGIC) {
-+              printk("<3>Regexp: corrupted program\n");
-+              return(0);
-+      }
-+
-+      /* If there is a "must appear" string, look for it. */
-+      if (prog->regmust != NULL) {
-+              s = string;
-+              while ((s = strchr(s, prog->regmust[0])) != NULL) {
-+                      if (strncmp(s, prog->regmust, prog->regmlen) == 0)
-+                              break;  /* Found it. */
-+                      s++;
-+              }
-+              if (s == NULL)  /* Not present. */
-+                      return(0);
-+      }
-+
-+      /* Mark beginning of line for ^ . */
-+      g.regbol = string;
-+
-+      /* Simplest case:  anchored match need be tried only once. */
-+      if (prog->reganch)
-+              return(regtry(&g, prog, string));
-+
-+      /* Messy cases:  unanchored match. */
-+      s = string;
-+      if (prog->regstart != '\0')
-+              /* We know what char it must start with. */
-+              while ((s = strchr(s, prog->regstart)) != NULL) {
-+                      if (regtry(&g, prog, s))
-+                              return(1);
-+                      s++;
-+              }
-+      else
-+              /* We don't -- general case. */
-+              do {
-+                      if (regtry(&g, prog, s))
-+                              return(1);
-+              } while (*s++ != '\0');
-+
-+      /* Failure. */
-+      return(0);
-+}
-+
-+/*
-+ - regtry - try match at specific point
-+ */
-+static int                    /* 0 failure, 1 success */
-+regtry(struct match_globals *g, regexp *prog, char *string)
-+{
-+      register int i;
-+      register char **sp;
-+      register char **ep;
-+
-+      g->reginput = string;
-+      g->regstartp = prog->startp;
-+      g->regendp = prog->endp;
-+
-+      sp = prog->startp;
-+      ep = prog->endp;
-+      for (i = NSUBEXP; i > 0; i--) {
-+              *sp++ = NULL;
-+              *ep++ = NULL;
-+      }
-+      if (regmatch(g, prog->program + 1)) {
-+              prog->startp[0] = string;
-+              prog->endp[0] = g->reginput;
-+              return(1);
-+      } else
-+              return(0);
-+}
-+
-+/*
-+ - regmatch - main matching routine
-+ *
-+ * Conceptually the strategy is simple:  check to see whether the current
-+ * node matches, call self recursively to see whether the rest matches,
-+ * and then act accordingly.  In practice we make some effort to avoid
-+ * recursion, in particular by going through "ordinary" nodes (that don't
-+ * need to know whether the rest of the match failed) by a loop instead of
-+ * by recursion.
-+ */
-+static int                    /* 0 failure, 1 success */
-+regmatch(struct match_globals *g, char *prog)
-+{
-+      register char *scan = prog; /* Current node. */
-+      char *next;                 /* Next node. */
-+
-+#ifdef DEBUG
-+      if (scan != NULL && regnarrate)
-+              fprintf(stderr, "%s(\n", regprop(scan));
-+#endif
-+      while (scan != NULL) {
-+#ifdef DEBUG
-+              if (regnarrate)
-+                      fprintf(stderr, "%s...\n", regprop(scan));
-+#endif
-+              next = regnext(g, scan);
-+
-+              switch (OP(scan)) {
-+              case BOL:
-+                      if (g->reginput != g->regbol)
-+                              return(0);
-+                      break;
-+              case EOL:
-+                      if (*g->reginput != '\0')
-+                              return(0);
-+                      break;
-+              case ANY:
-+                      if (*g->reginput == '\0')
-+                              return(0);
-+                      g->reginput++;
-+                      break;
-+              case EXACTLY: {
-+                              register int len;
-+                              register char *opnd;
-+
-+                              opnd = OPERAND(scan);
-+                              /* Inline the first character, for speed. */
-+                              if (*opnd != *g->reginput)
-+                                      return(0);
-+                              len = strlen(opnd);
-+                              if (len > 1 && strncmp(opnd, g->reginput, len) != 0)
-+                                      return(0);
-+                              g->reginput += len;
-+                      }
-+                      break;
-+              case ANYOF:
-+                      if (*g->reginput == '\0' || strchr(OPERAND(scan), *g->reginput) == NULL)
-+                              return(0);
-+                      g->reginput++;
-+                      break;
-+              case ANYBUT:
-+                      if (*g->reginput == '\0' || strchr(OPERAND(scan), *g->reginput) != NULL)
-+                              return(0);
-+                      g->reginput++;
-+                      break;
-+              case NOTHING:
-+              case BACK:
-+                      break;
-+              case OPEN+1:
-+              case OPEN+2:
-+              case OPEN+3:
-+              case OPEN+4:
-+              case OPEN+5:
-+              case OPEN+6:
-+              case OPEN+7:
-+              case OPEN+8:
-+              case OPEN+9: {
-+                              register int no;
-+                              register char *save;
-+
-+                              no = OP(scan) - OPEN;
-+                              save = g->reginput;
-+
-+                              if (regmatch(g, next)) {
-+                                      /*
-+                                       * Don't set startp if some later
-+                                       * invocation of the same parentheses
-+                                       * already has.
-+                                       */
-+                                      if (g->regstartp[no] == NULL)
-+                                              g->regstartp[no] = save;
-+                                      return(1);
-+                              } else
-+                                      return(0);
-+                      }
-+                      break;
-+              case CLOSE+1:
-+              case CLOSE+2:
-+              case CLOSE+3:
-+              case CLOSE+4:
-+              case CLOSE+5:
-+              case CLOSE+6:
-+              case CLOSE+7:
-+              case CLOSE+8:
-+              case CLOSE+9:
-+                      {
-+                              register int no;
-+                              register char *save;
-+
-+                              no = OP(scan) - CLOSE;
-+                              save = g->reginput;
-+
-+                              if (regmatch(g, next)) {
-+                                      /*
-+                                       * Don't set endp if some later
-+                                       * invocation of the same parentheses
-+                                       * already has.
-+                                       */
-+                                      if (g->regendp[no] == NULL)
-+                                              g->regendp[no] = save;
-+                                      return(1);
-+                              } else
-+                                      return(0);
-+                      }
-+                      break;
-+              case BRANCH: {
-+                              register char *save;
-+
-+                              if (OP(next) != BRANCH)         /* No choice. */
-+                                      next = OPERAND(scan);   /* Avoid recursion. */
-+                              else {
-+                                      do {
-+                                              save = g->reginput;
-+                                              if (regmatch(g, OPERAND(scan)))
-+                                                      return(1);
-+                                              g->reginput = save;
-+                                              scan = regnext(g, scan);
-+                                      } while (scan != NULL && OP(scan) == BRANCH);
-+                                      return(0);
-+                                      /* NOTREACHED */
-+                              }
-+                      }
-+                      break;
-+              case STAR:
-+              case PLUS: {
-+                              register char nextch;
-+                              register int no;
-+                              register char *save;
-+                              register int min;
-+
-+                              /*
-+                               * Lookahead to avoid useless match attempts
-+                               * when we know what character comes next.
-+                               */
-+                              nextch = '\0';
-+                              if (OP(next) == EXACTLY)
-+                                      nextch = *OPERAND(next);
-+                              min = (OP(scan) == STAR) ? 0 : 1;
-+                              save = g->reginput;
-+                              no = regrepeat(g, OPERAND(scan));
-+                              while (no >= min) {
-+                                      /* If it could work, try it. */
-+                                      if (nextch == '\0' || *g->reginput == nextch)
-+                                              if (regmatch(g, next))
-+                                                      return(1);
-+                                      /* Couldn't or didn't -- back up. */
-+                                      no--;
-+                                      g->reginput = save + no;
-+                              }
-+                              return(0);
-+                      }
-+                      break;
-+              case END:
-+                      return(1);      /* Success! */
-+                      break;
-+              default:
-+                      printk("<3>Regexp: memory corruption\n");
-+                      return(0);
-+                      break;
-+              }
-+
-+              scan = next;
-+      }
-+
-+      /*
-+       * We get here only if there's trouble -- normally "case END" is
-+       * the terminating point.
-+       */
-+      printk("<3>Regexp: corrupted pointers\n");
-+      return(0);
-+}
-+
-+/*
-+ - regrepeat - repeatedly match something simple, report how many
-+ */
-+static int
-+regrepeat(struct match_globals *g, char *p)
-+{
-+      register int count = 0;
-+      register char *scan;
-+      register char *opnd;
-+
-+      scan = g->reginput;
-+      opnd = OPERAND(p);
-+      switch (OP(p)) {
-+      case ANY:
-+              count = strlen(scan);
-+              scan += count;
-+              break;
-+      case EXACTLY:
-+              while (*opnd == *scan) {
-+                      count++;
-+                      scan++;
-+              }
-+              break;
-+      case ANYOF:
-+              while (*scan != '\0' && strchr(opnd, *scan) != NULL) {
-+                      count++;
-+                      scan++;
-+              }
-+              break;
-+      case ANYBUT:
-+              while (*scan != '\0' && strchr(opnd, *scan) == NULL) {
-+                      count++;
-+                      scan++;
-+              }
-+              break;
-+      default:                /* Oh dear.  Called inappropriately. */
-+              printk("<3>Regexp: internal foulup\n");
-+              count = 0;      /* Best compromise. */
-+              break;
-+      }
-+      g->reginput = scan;
-+
-+      return(count);
-+}
-+
-+/*
-+ - regnext - dig the "next" pointer out of a node
-+ */
-+static char*
-+regnext(struct match_globals *g, char *p)
-+{
-+      register int offset;
-+
-+      if (p == &g->regdummy)
-+              return(NULL);
-+
-+      offset = NEXT(p);
-+      if (offset == 0)
-+              return(NULL);
-+
-+      if (OP(p) == BACK)
-+              return(p-offset);
-+      else
-+              return(p+offset);
-+}
-+
-+#ifdef DEBUG
-+
-+STATIC char *regprop();
-+
-+/*
-+ - regdump - dump a regexp onto stdout in vaguely comprehensible form
-+ */
-+void
-+regdump(regexp *r)
-+{
-+      register char *s;
-+      register char op = EXACTLY;     /* Arbitrary non-END op. */
-+      register char *next;
-+      /* extern char *strchr(); */
-+
-+
-+      s = r->program + 1;
-+      while (op != END) {     /* While that wasn't END last time... */
-+              op = OP(s);
-+              printf("%2d%s", s-r->program, regprop(s));      /* Where, what. */
-+              next = regnext(s);
-+              if (next == NULL)               /* Next ptr. */
-+                      printf("(0)");
-+              else
-+                      printf("(%d)", (s-r->program)+(next-s));
-+              s += 3;
-+              if (op == ANYOF || op == ANYBUT || op == EXACTLY) {
-+                      /* Literal string, where present. */
-+                      while (*s != '\0') {
-+                              putchar(*s);
-+                              s++;
-+                      }
-+                      s++;
-+              }
-+              putchar('\n');
-+      }
-+
-+      /* Header fields of interest. */
-+      if (r->regstart != '\0')
-+              printf("start `%c' ", r->regstart);
-+      if (r->reganch)
-+              printf("anchored ");
-+      if (r->regmust != NULL)
-+              printf("must have \"%s\"", r->regmust);
-+      printf("\n");
-+}
-+
-+/*
-+ - regprop - printable representation of opcode
-+ */
-+static char *
-+regprop(char *op)
-+{
-+#define BUFLEN 50
-+      register char *p;
-+      static char buf[BUFLEN];
-+
-+      strcpy(buf, ":");
-+
-+      switch (OP(op)) {
-+      case BOL:
-+              p = "BOL";
-+              break;
-+      case EOL:
-+              p = "EOL";
-+              break;
-+      case ANY:
-+              p = "ANY";
-+              break;
-+      case ANYOF:
-+              p = "ANYOF";
-+              break;
-+      case ANYBUT:
-+              p = "ANYBUT";
-+              break;
-+      case BRANCH:
-+              p = "BRANCH";
-+              break;
-+      case EXACTLY:
-+              p = "EXACTLY";
-+              break;
-+      case NOTHING:
-+              p = "NOTHING";
-+              break;
-+      case BACK:
-+              p = "BACK";
-+              break;
-+      case END:
-+              p = "END";
-+              break;
-+      case OPEN+1:
-+      case OPEN+2:
-+      case OPEN+3:
-+      case OPEN+4:
-+      case OPEN+5:
-+      case OPEN+6:
-+      case OPEN+7:
-+      case OPEN+8:
-+      case OPEN+9:
-+              snprintf(buf+strlen(buf),BUFLEN-strlen(buf), "OPEN%d", OP(op)-OPEN);
-+              p = NULL;
-+              break;
-+      case CLOSE+1:
-+      case CLOSE+2:
-+      case CLOSE+3:
-+      case CLOSE+4:
-+      case CLOSE+5:
-+      case CLOSE+6:
-+      case CLOSE+7:
-+      case CLOSE+8:
-+      case CLOSE+9:
-+              snprintf(buf+strlen(buf),BUFLEN-strlen(buf), "CLOSE%d", OP(op)-CLOSE);
-+              p = NULL;
-+              break;
-+      case STAR:
-+              p = "STAR";
-+              break;
-+      case PLUS:
-+              p = "PLUS";
-+              break;
-+      default:
-+              printk("<3>Regexp: corrupted opcode\n");
-+              break;
-+      }
-+      if (p != NULL)
-+              strncat(buf, p, BUFLEN-strlen(buf));
-+      return(buf);
-+}
-+#endif
-+
-+
-diff -Naur linux-3.0.24.org/net/netfilter/regexp/regexp.h linux-3.0.24/net/netfilter/regexp/regexp.h
---- linux-3.0.24.org/net/netfilter/regexp/regexp.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.0.24/net/netfilter/regexp/regexp.h 2012-03-15 20:08:49.066043520 +0100
-@@ -0,0 +1,41 @@
-+/*
-+ * Definitions etc. for regexp(3) routines.
-+ *
-+ * Caveat:  this is V8 regexp(3) [actually, a reimplementation thereof],
-+ * not the System V one.
-+ */
-+
-+#ifndef REGEXP_H
-+#define REGEXP_H
-+
-+
-+/*
-+http://www.opensource.apple.com/darwinsource/10.3/expect-1/expect/expect.h ,
-+which contains a version of this library, says:
-+
-+ *
-+ * NSUBEXP must be at least 10, and no greater than 117 or the parser
-+ * will not work properly.
-+ *
-+
-+However, it looks rather like this library is limited to 10.  If you think
-+otherwise, let us know.
-+*/
-+
-+#define NSUBEXP  10
-+typedef struct regexp {
-+      char *startp[NSUBEXP];
-+      char *endp[NSUBEXP];
-+      char regstart;          /* Internal use only. */
-+      char reganch;           /* Internal use only. */
-+      char *regmust;          /* Internal use only. */
-+      int regmlen;            /* Internal use only. */
-+      char program[1];        /* Unwarranted chumminess with compiler. */
-+} regexp;
-+
-+regexp * regcomp(char *exp, int *patternsize);
-+int regexec(regexp *prog, char *string);
-+void regsub(regexp *prog, char *source, char *dest);
-+void regerror(char *s);
-+
-+#endif
-diff -Naur linux-3.0.24.org/net/netfilter/regexp/regmagic.h linux-3.0.24/net/netfilter/regexp/regmagic.h
---- linux-3.0.24.org/net/netfilter/regexp/regmagic.h   1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.0.24/net/netfilter/regexp/regmagic.h       2012-03-15 20:08:49.066043520 +0100
-@@ -0,0 +1,5 @@
-+/*
-+ * The first byte of the regexp internal "program" is actually this magic
-+ * number; the start node begins in the second byte.
-+ */
-+#define       MAGIC   0234
-diff -Naur linux-3.0.24.org/net/netfilter/regexp/regsub.c linux-3.0.24/net/netfilter/regexp/regsub.c
---- linux-3.0.24.org/net/netfilter/regexp/regsub.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.0.24/net/netfilter/regexp/regsub.c 2012-03-15 20:08:49.076047746 +0100
-@@ -0,0 +1,95 @@
-+/*
-+ * regsub
-+ * @(#)regsub.c       1.3 of 2 April 86
-+ *
-+ *    Copyright (c) 1986 by University of Toronto.
-+ *    Written by Henry Spencer.  Not derived from licensed software.
-+ *
-+ *    Permission is granted to anyone to use this software for any
-+ *    purpose on any computer system, and to redistribute it freely,
-+ *    subject to the following restrictions:
-+ *
-+ *    1. The author is not responsible for the consequences of use of
-+ *            this software, no matter how awful, even if they arise
-+ *            from defects in it.
-+ *
-+ *    2. The origin of this software must not be misrepresented, either
-+ *            by explicit claim or by omission.
-+ *
-+ *    3. Altered versions must be plainly marked as such, and must not
-+ *            be misrepresented as being the original software.
-+ *
-+ *
-+ * This code was modified by Ethan Sommer to work within the kernel
-+ * (it now uses kmalloc etc..)
-+ *
-+ */
-+#include "regexp.h"
-+#include "regmagic.h"
-+#include <linux/string.h>
-+
-+
-+#ifndef CHARBITS
-+#define       UCHARAT(p)      ((int)*(unsigned char *)(p))
-+#else
-+#define       UCHARAT(p)      ((int)*(p)&CHARBITS)
-+#endif
-+
-+#if 0
-+//void regerror(char * s)
-+//{
-+//        printk("regexp(3): %s", s);
-+//        /* NOTREACHED */
-+//}
-+#endif
-+
-+/*
-+ - regsub - perform substitutions after a regexp match
-+ */
-+void
-+regsub(regexp * prog, char * source, char * dest)
-+{
-+      register char *src;
-+      register char *dst;
-+      register char c;
-+      register int no;
-+      register int len;
-+      
-+      /* Not necessary and gcc doesn't like it -MLS */
-+      /*extern char *strncpy();*/
-+
-+      if (prog == NULL || source == NULL || dest == NULL) {
-+              regerror("NULL parm to regsub");
-+              return;
-+      }
-+      if (UCHARAT(prog->program) != MAGIC) {
-+              regerror("damaged regexp fed to regsub");
-+              return;
-+      }
-+
-+      src = source;
-+      dst = dest;
-+      while ((c = *src++) != '\0') {
-+              if (c == '&')
-+                      no = 0;
-+              else if (c == '\\' && '0' <= *src && *src <= '9')
-+                      no = *src++ - '0';
-+              else
-+                      no = -1;
-+
-+              if (no < 0) {   /* Ordinary character. */
-+                      if (c == '\\' && (*src == '\\' || *src == '&'))
-+                              c = *src++;
-+                      *dst++ = c;
-+              } else if (prog->startp[no] != NULL && prog->endp[no] != NULL) {
-+                      len = prog->endp[no] - prog->startp[no];
-+                      (void) strncpy(dst, prog->startp[no], len);
-+                      dst += len;
-+                      if (len != 0 && *(dst-1) == '\0') {     /* strncpy hit NUL. */
-+                              regerror("damaged match string");
-+                              return;
-+                      }
-+              }
-+      }
-+      *dst++ = '\0';
-+}
-diff -Naur linux-3.0.24.org/net/netfilter/xt_layer7.c linux-3.0.24/net/netfilter/xt_layer7.c
---- linux-3.0.24.org/net/netfilter/xt_layer7.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.0.24/net/netfilter/xt_layer7.c     2012-03-20 01:44:50.907527097 +0100
-@@ -0,0 +1,684 @@
-+/*
-+  Kernel module to match application layer (OSI layer 7) data in connections.
-+
-+  http://l7-filter.sf.net
-+
-+  (C) 2003-2009 Matthew Strait and Ethan Sommer.
-+
-+  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.
-+  http://www.gnu.org/licenses/gpl.txt
-+
-+  Based on ipt_string.c (C) 2000 Emmanuel Roger <winfield@freegates.be>,
-+  xt_helper.c (C) 2002 Harald Welte and cls_layer7.c (C) 2003 Matthew Strait,
-+  Ethan Sommer, Justin Levandoski.
-+*/
-+
-+#include <linux/spinlock.h>
-+#include <linux/version.h>
-+#include <net/ip.h>
-+#include <net/tcp.h>
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter.h>
-+#include <net/netfilter/nf_conntrack.h>
-+#include <net/netfilter/nf_conntrack_core.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)
-+#include <net/netfilter/nf_conntrack_extend.h>
-+#include <net/netfilter/nf_conntrack_acct.h>
-+#endif
-+#include <linux/netfilter/x_tables.h>
-+#include <linux/netfilter/xt_layer7.h>
-+#include <linux/ctype.h>
-+#include <linux/proc_fs.h>
-+
-+#include "regexp/regexp.c"
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Matthew Strait <quadong@users.sf.net>, Ethan Sommer <sommere@users.sf.net>");
-+MODULE_DESCRIPTION("iptables application layer match module");
-+MODULE_ALIAS("ipt_layer7");
-+MODULE_VERSION("2.22ipfire");
-+
-+static int maxdatalen = 2048; // this is the default
-+module_param(maxdatalen, int, 0444);
-+MODULE_PARM_DESC(maxdatalen, "maximum bytes of data looked at by l7-filter");
-+#ifdef CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG
-+      #define DPRINTK(format,args...) printk(format,##args)
-+#else
-+      #define DPRINTK(format,args...)
-+#endif
-+
-+/* Number of packets whose data we look at.
-+This can be modified through /proc/net/layer7_numpackets */
-+static int num_packets = 10;
-+
-+static struct pattern_cache {
-+      char * regex_string;
-+      regexp * pattern;
-+      struct pattern_cache * next;
-+} * first_pattern_cache = NULL;
-+
-+DEFINE_SPINLOCK(l7_lock);
-+
-+static int total_acct_packets(struct nf_conn *ct)
-+{
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 26)
-+      BUG_ON(ct == NULL);
-+      return (ct->counters[IP_CT_DIR_ORIGINAL].packets + ct->counters[IP_CT_DIR_REPLY].packets);
-+#else
-+      struct nf_conn_counter *acct;
-+
-+      BUG_ON(ct == NULL);
-+      acct = nf_conn_acct_find(ct);
-+      if (!acct)
-+              return 0;
-+      return (acct[IP_CT_DIR_ORIGINAL].packets + acct[IP_CT_DIR_REPLY].packets);
-+#endif
-+}
-+
-+#ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
-+/* Converts an unfriendly string into a friendly one by
-+replacing unprintables with periods and all whitespace with " ". */
-+static char * friendly_print(unsigned char * s)
-+{
-+      char * f = kmalloc(strlen(s) + 1, GFP_ATOMIC);
-+      int i;
-+
-+      if(!f) {
-+              if (net_ratelimit())
-+                      printk(KERN_ERR "layer7: out of memory in "
-+                                      "friendly_print, bailing.\n");
-+              return NULL;
-+      }
-+
-+      for(i = 0; i < strlen(s); i++){
-+              if(isprint(s[i]) && s[i] < 128) f[i] = s[i];
-+              else if(isspace(s[i]))          f[i] = ' ';
-+              else                            f[i] = '.';
-+      }
-+      f[i] = '\0';
-+      return f;
-+}
-+
-+static char dec2hex(int i)
-+{
-+      switch (i) {
-+              case 0 ... 9:
-+                      return (i + '0');
-+                      break;
-+              case 10 ... 15:
-+                      return (i - 10 + 'a');
-+                      break;
-+              default:
-+                      if (net_ratelimit())
-+                              printk("layer7: Problem in dec2hex\n");
-+                      return '\0';
-+      }
-+}
-+
-+static char * hex_print(unsigned char * s)
-+{
-+      char * g = kmalloc(strlen(s)*3 + 1, GFP_ATOMIC);
-+      int i;
-+
-+      if(!g) {
-+             if (net_ratelimit())
-+                      printk(KERN_ERR "layer7: out of memory in hex_print, "
-+                                      "bailing.\n");
-+             return NULL;
-+      }
-+
-+      for(i = 0; i < strlen(s); i++) {
-+              g[i*3    ] = dec2hex(s[i]/16);
-+              g[i*3 + 1] = dec2hex(s[i]%16);
-+              g[i*3 + 2] = ' ';
-+      }
-+      g[i*3] = '\0';
-+
-+      return g;
-+}
-+#endif // DEBUG
-+
-+/* Use instead of regcomp.  As we expect to be seeing the same regexps over and
-+over again, it make sense to cache the results. */
-+static regexp * compile_and_cache(const char * regex_string, 
-+                                  const char * protocol)
-+{
-+      struct pattern_cache * node               = first_pattern_cache;
-+      struct pattern_cache * last_pattern_cache = first_pattern_cache;
-+      struct pattern_cache * tmp;
-+      unsigned int len;
-+
-+      while (node != NULL) {
-+              if (!strcmp(node->regex_string, regex_string))
-+              return node->pattern;
-+
-+              last_pattern_cache = node;/* points at the last non-NULL node */
-+              node = node->next;
-+      }
-+
-+      /* If we reach the end of the list, then we have not yet cached
-+         the pattern for this regex. Let's do that now.
-+         Be paranoid about running out of memory to avoid list corruption. */
-+      tmp = kmalloc(sizeof(struct pattern_cache), GFP_ATOMIC);
-+
-+      if(!tmp) {
-+              if (net_ratelimit())
-+                      printk(KERN_ERR "layer7: out of memory in "
-+                                      "compile_and_cache, bailing.\n");
-+              return NULL;
-+      }
-+
-+      tmp->regex_string  = kmalloc(strlen(regex_string) + 1, GFP_ATOMIC);
-+      tmp->pattern       = kmalloc(sizeof(struct regexp),    GFP_ATOMIC);
-+      tmp->next = NULL;
-+
-+      if(!tmp->regex_string || !tmp->pattern) {
-+              if (net_ratelimit())
-+                      printk(KERN_ERR "layer7: out of memory in "
-+                                      "compile_and_cache, bailing.\n");
-+              kfree(tmp->regex_string);
-+              kfree(tmp->pattern);
-+              kfree(tmp);
-+              return NULL;
-+      }
-+
-+      /* Ok.  The new node is all ready now. */
-+      node = tmp;
-+
-+      if(first_pattern_cache == NULL) /* list is empty */
-+              first_pattern_cache = node; /* make node the beginning */
-+      else
-+              last_pattern_cache->next = node; /* attach node to the end */
-+
-+      /* copy the string and compile the regex */
-+      len = strlen(regex_string);
-+      DPRINTK("layer7: about to compile this: \"%s\"\n", regex_string);
-+      node->pattern = regcomp((char *)regex_string, &len);
-+      if ( !node->pattern ) {
-+              if (net_ratelimit())
-+                      printk(KERN_ERR "layer7: Error compiling regexp "
-+                                      "\"%s\" (%s)\n", 
-+                                      regex_string, protocol);
-+              /* pattern is now cached as NULL, so we won't try again. */
-+      }
-+
-+      strcpy(node->regex_string, regex_string);
-+      return node->pattern;
-+}
-+
-+static int can_handle(const struct sk_buff *skb)
-+{
-+      if(!ip_hdr(skb)) /* not IP */
-+              return 0;
-+      if(ip_hdr(skb)->protocol != IPPROTO_TCP &&
-+         ip_hdr(skb)->protocol != IPPROTO_UDP &&
-+         ip_hdr(skb)->protocol != IPPROTO_ICMP)
-+              return 0;
-+      return 1;
-+}
-+
-+/* Returns offset the into the skb->data that the application data starts */
-+static int app_data_offset(const struct sk_buff *skb)
-+{
-+      /* In case we are ported somewhere (ebtables?) where ip_hdr(skb)
-+      isn't set, this can be gotten from 4*(skb->data[0] & 0x0f) as well. */
-+      int ip_hl = 4*ip_hdr(skb)->ihl;
-+
-+      if( ip_hdr(skb)->protocol == IPPROTO_TCP ) {
-+              /* 12 == offset into TCP header for the header length field.
-+              Can't get this with skb->h.th->doff because the tcphdr
-+              struct doesn't get set when routing (this is confirmed to be
-+              true in Netfilter as well as QoS.) */
-+              int tcp_hl = 4*(skb->data[ip_hl + 12] >> 4);
-+
-+              return ip_hl + tcp_hl;
-+      } else if( ip_hdr(skb)->protocol == IPPROTO_UDP  ) {
-+              return ip_hl + 8; /* UDP header is always 8 bytes */
-+      } else if( ip_hdr(skb)->protocol == IPPROTO_ICMP ) {
-+              return ip_hl + 8; /* ICMP header is 8 bytes */
-+      } else {
-+              if (net_ratelimit())
-+                      printk(KERN_ERR "layer7: tried to handle unknown "
-+                                      "protocol!\n");
-+              return ip_hl + 8; /* something reasonable */
-+      }
-+}
-+
-+/* handles whether there's a match when we aren't appending data anymore */
-+static int match_no_append(struct nf_conn * conntrack, 
-+                           struct nf_conn * master_conntrack, 
-+                           enum ip_conntrack_info ctinfo,
-+                           enum ip_conntrack_info master_ctinfo,
-+                           const struct xt_layer7_info * info)
-+{
-+      /* If we're in here, throw the app data away */
-+      if(master_conntrack->layer7.app_data != NULL) {
-+
-+      #ifdef CONFIG_IP_NF_MATCH_LAYER7_DEBUG
-+              if(!master_conntrack->layer7.app_proto) {
-+                      char * f = 
-+                        friendly_print(master_conntrack->layer7.app_data);
-+                      char * g = 
-+                        hex_print(master_conntrack->layer7.app_data);
-+                      DPRINTK("\nl7-filter gave up after %d bytes "
-+                              "(%d packets):\n%s\n",
-+                              strlen(f), total_acct_packets(master_conntrack), f);
-+                      kfree(f);
-+                      DPRINTK("In hex: %s\n", g);
-+                      kfree(g);
-+              }
-+      #endif
-+
-+              kfree(master_conntrack->layer7.app_data);
-+              master_conntrack->layer7.app_data = NULL; /* don't free again */
-+      }
-+
-+      if(master_conntrack->layer7.app_proto){
-+              /* Here child connections set their .app_proto (for /proc) */
-+              if(!conntrack->layer7.app_proto) {
-+                      conntrack->layer7.app_proto = 
-+                        kmalloc(strlen(master_conntrack->layer7.app_proto)+1, 
-+                          GFP_ATOMIC);
-+                      if(!conntrack->layer7.app_proto){
-+                              if (net_ratelimit())
-+                                      printk(KERN_ERR "layer7: out of memory "
-+                                                      "in match_no_append, "
-+                                                      "bailing.\n");
-+                              return 1;
-+                      }
-+                      strcpy(conntrack->layer7.app_proto, 
-+                              master_conntrack->layer7.app_proto);
-+              }
-+
-+              return (!strcmp(master_conntrack->layer7.app_proto, 
-+                              info->protocol));
-+      }
-+      else {
-+              /* If not classified, set to "unknown" to distinguish from
-+              connections that are still being tested. */
-+              master_conntrack->layer7.app_proto = 
-+                      kmalloc(strlen("unknown")+1, GFP_ATOMIC);
-+              if(!master_conntrack->layer7.app_proto){
-+                      if (net_ratelimit())
-+                              printk(KERN_ERR "layer7: out of memory in "
-+                                              "match_no_append, bailing.\n");
-+                      return 1;
-+              }
-+              strcpy(master_conntrack->layer7.app_proto, "unknown");
-+              return 0;
-+      }
-+}
-+
-+/* add the new app data to the conntrack.  Return number of bytes added. */
-+static int add_data(struct nf_conn * master_conntrack,
-+                    char * app_data, int appdatalen)
-+{
-+      int length = 0, i;
-+      int oldlength = master_conntrack->layer7.app_data_len;
-+
-+      /* This is a fix for a race condition by Deti Fliegl. However, I'm not 
-+         clear on whether the race condition exists or whether this really 
-+         fixes it.  I might just be being dense... Anyway, if it's not really 
-+         a fix, all it does is waste a very small amount of time. */
-+      if(!master_conntrack->layer7.app_data) return 0;
-+
-+      /* Strip nulls. Make everything lower case (our regex lib doesn't
-+      do case insensitivity).  Add it to the end of the current data. */
-+      for(i = 0; i < maxdatalen-oldlength-1 &&
-+                 i < appdatalen; i++) {
-+              if(app_data[i] != '\0') {
-+                      /* the kernel version of tolower mungs 'upper ascii' */
-+                      master_conntrack->layer7.app_data[length+oldlength] =
-+                              isascii(app_data[i])? 
-+                                      tolower(app_data[i]) : app_data[i];
-+                      length++;
-+              }
-+      }
-+
-+      master_conntrack->layer7.app_data[length+oldlength] = '\0';
-+      master_conntrack->layer7.app_data_len = length + oldlength;
-+
-+      return length;
-+}
-+
-+/* taken from drivers/video/modedb.c */
-+static int my_atoi(const char *s)
-+{
-+      int val = 0;
-+
-+      for (;; s++) {
-+              switch (*s) {
-+                      case '0'...'9':
-+                      val = 10*val+(*s-'0');
-+                      break;
-+              default:
-+                      return val;
-+              }
-+      }
-+}
-+
-+/* write out num_packets to userland. */
-+static int layer7_read_proc(char* page, char ** start, off_t off, int count,
-+                            int* eof, void * data)
-+{
-+      if(num_packets > 99 && net_ratelimit())
-+              printk(KERN_ERR "layer7: NOT REACHED. num_packets too big\n");
-+
-+      page[0] = num_packets/10 + '0';
-+      page[1] = num_packets%10 + '0';
-+      page[2] = '\n';
-+      page[3] = '\0';
-+
-+      *eof=1;
-+
-+      return 3;
-+}
-+
-+/* Read in num_packets from userland */
-+static int layer7_write_proc(struct file* file, const char* buffer,
-+                             unsigned long count, void *data)
-+{
-+      char * foo = kmalloc(count, GFP_ATOMIC);
-+
-+      if(!foo){
-+              if (net_ratelimit())
-+                      printk(KERN_ERR "layer7: out of memory, bailing. "
-+                                      "num_packets unchanged.\n");
-+              return count;
-+      }
-+
-+      if(copy_from_user(foo, buffer, count)) {
-+              return -EFAULT;
-+      }
-+
-+
-+      num_packets = my_atoi(foo);
-+      kfree (foo);
-+
-+      /* This has an arbitrary limit to make the math easier. I'm lazy.
-+      But anyway, 99 is a LOT! If you want more, you're doing it wrong! */
-+      if(num_packets > 99) {
-+              printk(KERN_WARNING "layer7: num_packets can't be > 99.\n");
-+              num_packets = 99;
-+      } else if(num_packets < 1) {
-+              printk(KERN_WARNING "layer7: num_packets can't be < 1.\n");
-+              num_packets = 1;
-+      }
-+
-+      return count;
-+}
-+
-+static bool
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)
-+match(const struct sk_buff *skbin, struct xt_action_param *par)
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
-+match(const struct sk_buff *skbin, const struct xt_match_param *par)
-+#else
-+match(const struct sk_buff *skbin,
-+      const struct net_device *in,
-+      const struct net_device *out,
-+      const struct xt_match *match,
-+      const void *matchinfo,
-+      int offset,
-+      unsigned int protoff,
-+      bool *hotdrop)
-+#endif
-+{
-+      /* sidestep const without getting a compiler warning... */
-+      struct sk_buff * skb = (struct sk_buff *)skbin; 
-+
-+      const struct xt_layer7_info * info = 
-+      #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
-+              par->matchinfo;
-+      #else
-+              matchinfo;
-+      #endif
-+
-+      enum ip_conntrack_info master_ctinfo, ctinfo;
-+      struct nf_conn *master_conntrack, *conntrack;
-+      unsigned char * app_data;
-+      unsigned int pattern_result, appdatalen;
-+      regexp * comppattern;
-+
-+      /* Be paranoid/incompetent - lock the entire match function. */
-+      spin_lock_bh(&l7_lock);
-+
-+      if(!can_handle(skb)){
-+              DPRINTK("layer7: This is some protocol I can't handle.\n");
-+              spin_unlock_bh(&l7_lock);
-+              return info->invert;
-+      }
-+
-+      /* Treat parent & all its children together as one connection, except
-+      for the purpose of setting conntrack->layer7.app_proto in the actual
-+      connection. This makes /proc/net/ip_conntrack more satisfying. */
-+      if(!(conntrack = nf_ct_get(skb, &ctinfo)) ||
-+         !(master_conntrack=nf_ct_get(skb,&master_ctinfo))){
-+              DPRINTK("layer7: couldn't get conntrack.\n");
-+              spin_unlock_bh(&l7_lock);
-+              return info->invert;
-+      }
-+
-+      /* Try to get a master conntrack (and its master etc) for FTP, etc. */
-+      while (master_ct(master_conntrack) != NULL)
-+              master_conntrack = master_ct(master_conntrack);
-+
-+      /* if we've classified it or seen too many packets */
-+      if(total_acct_packets(master_conntrack) > num_packets ||
-+         master_conntrack->layer7.app_proto) {
-+
-+              pattern_result = match_no_append(conntrack, master_conntrack, 
-+                                               ctinfo, master_ctinfo, info);
-+
-+              /* skb->cb[0] == seen. Don't do things twice if there are 
-+              multiple l7 rules. I'm not sure that using cb for this purpose 
-+              is correct, even though it says "put your private variables 
-+              there". But it doesn't look like it is being used for anything
-+              else in the skbs that make it here. */
-+              skb->cb[0] = 1; /* marking it seen here's probably irrelevant */
-+
-+              spin_unlock_bh(&l7_lock);
-+              return (pattern_result ^ info->invert);
-+      }
-+
-+      if(skb_is_nonlinear(skb)){
-+              if(skb_linearize(skb) != 0){
-+                      if (net_ratelimit())
-+                              printk(KERN_ERR "layer7: failed to linearize "
-+                                              "packet, bailing.\n");
-+                      spin_unlock_bh(&l7_lock);
-+                      return info->invert;
-+              }
-+      }
-+
-+      /* now that the skb is linearized, it's safe to set these. */
-+      app_data = skb->data + app_data_offset(skb);
-+      appdatalen = skb_tail_pointer(skb) - app_data;
-+
-+      /* the return value gets checked later, when we're ready to use it */
-+      comppattern = compile_and_cache(info->pattern, info->protocol);
-+
-+      /* On the first packet of a connection, allocate space for app data */
-+      if(total_acct_packets(master_conntrack) == 1 && !skb->cb[0] && 
-+         !master_conntrack->layer7.app_data){
-+              master_conntrack->layer7.app_data = 
-+                      kmalloc(maxdatalen, GFP_ATOMIC);
-+              if(!master_conntrack->layer7.app_data){
-+                      if (net_ratelimit())
-+                              printk(KERN_ERR "layer7: out of memory in "
-+                                              "match, bailing.\n");
-+                      spin_unlock_bh(&l7_lock);
-+                      return info->invert;
-+              }
-+
-+              master_conntrack->layer7.app_data[0] = '\0';
-+      }
-+
-+      /* Can be here, but unallocated, if numpackets is increased near
-+      the beginning of a connection */
-+      if(master_conntrack->layer7.app_data == NULL){
-+              spin_unlock_bh(&l7_lock);
-+              return info->invert; /* unmatched */
-+      }
-+
-+      if(!skb->cb[0]){
-+              int newbytes;
-+              newbytes = add_data(master_conntrack, app_data, appdatalen);
-+
-+              if(newbytes == 0) { /* didn't add any data */
-+                      skb->cb[0] = 1;
-+                      /* Didn't match before, not going to match now */
-+                      spin_unlock_bh(&l7_lock);
-+                      return info->invert;
-+              }
-+      }
-+
-+      /* If looking for "unknown", then never match.  "Unknown" means that
-+      we've given up; we're still trying with these packets. */
-+      if(!strcmp(info->protocol, "unknown")) {
-+              pattern_result = 0;
-+      /* If looking for "unset", then always match. "Unset" means that we
-+      haven't yet classified the connection. */
-+      } else if(!strcmp(info->protocol, "unset")) {
-+              pattern_result = 2;
-+              DPRINTK("layer7: matched unset: not yet classified "
-+                      "(%d/%d packets)\n",
-+                        total_acct_packets(master_conntrack), num_packets);
-+      /* If the regexp failed to compile, don't bother running it */
-+      } else if(comppattern && 
-+                regexec(comppattern, master_conntrack->layer7.app_data)){
-+              DPRINTK("layer7: matched %s\n", info->protocol);
-+              pattern_result = 1;
-+      } else pattern_result = 0;
-+
-+      if(pattern_result == 1) {
-+              master_conntrack->layer7.app_proto = 
-+                      kmalloc(strlen(info->protocol)+1, GFP_ATOMIC);
-+              if(!master_conntrack->layer7.app_proto){
-+                      if (net_ratelimit())
-+                              printk(KERN_ERR "layer7: out of memory in "
-+                                              "match, bailing.\n");
-+                      spin_unlock_bh(&l7_lock);
-+                      return (pattern_result ^ info->invert);
-+              }
-+              strcpy(master_conntrack->layer7.app_proto, info->protocol);
-+      } else if(pattern_result > 1) { /* cleanup from "unset" */
-+              pattern_result = 1;
-+      }
-+
-+      /* mark the packet seen */
-+      skb->cb[0] = 1;
-+
-+      spin_unlock_bh(&l7_lock);
-+      return (pattern_result ^ info->invert);
-+}
-+
-+// load nf_conntrack_ipv4
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)
-+static int
-+#else
-+static bool
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
-+check(const struct xt_mtchk_param *par)
-+{
-+        if (nf_ct_l3proto_try_module_get(par->match->family) < 0) {
-+                printk(KERN_WARNING "can't load conntrack support for "
-+                                    "proto=%d\n", par->match->family);
-+#else
-+check(const char *tablename, const void *inf,
-+               const struct xt_match *match, void *matchinfo,
-+               unsigned int hook_mask)
-+{
-+        if (nf_ct_l3proto_try_module_get(match->family) < 0) {
-+                printk(KERN_WARNING "can't load conntrack support for "
-+                                    "proto=%d\n", match->family);
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)
-+              return -EINVAL;
-+      }
-+      return 0;
-+#else
-+                return 0;
-+        }
-+      return 1;
-+#endif
-+}
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 28)
-+      static void destroy(const struct xt_mtdtor_param *par)
-+      {
-+              nf_ct_l3proto_module_put(par->match->family);
-+      }
-+#else
-+      static void destroy(const struct xt_match *match, void *matchinfo)
-+      {
-+              nf_ct_l3proto_module_put(match->family);
-+      }
-+#endif
-+
-+static struct xt_match xt_layer7_match[] __read_mostly = {
-+{
-+      .name           = "layer7",
-+      .family         = AF_INET,
-+      .checkentry     = check,
-+      .match          = match,
-+      .destroy        = destroy,
-+      .matchsize      = sizeof(struct xt_layer7_info),
-+      .me             = THIS_MODULE
-+}
-+};
-+
-+static void layer7_cleanup_proc(void)
-+{
-+      remove_proc_entry("layer7_numpackets", init_net.proc_net);
-+}
-+
-+/* register the proc file */
-+static void layer7_init_proc(void)
-+{
-+      struct proc_dir_entry* entry;
-+      entry = create_proc_entry("layer7_numpackets", 0644, init_net.proc_net);
-+      entry->read_proc = layer7_read_proc;
-+      entry->write_proc = layer7_write_proc;
-+}
-+
-+static int __init xt_layer7_init(void)
-+{
-+      need_conntrack();
-+
-+      if (init_net.ct.sysctl_acct == 0) {
-+              printk(KERN_WARNING "layer7: enabling nf_conntrack_acct\n");
-+              init_net.ct.sysctl_acct = 1;
-+      }
-+
-+      layer7_init_proc();
-+      if(maxdatalen < 1) {
-+              printk(KERN_WARNING "layer7: maxdatalen can't be < 1, "
-+                      "using 1\n");
-+              maxdatalen = 1;
-+      }
-+      /* This is not a hard limit.  It's just here to prevent people from
-+      bringing their slow machines to a grinding halt. */
-+      else if(maxdatalen > 65536) {
-+              printk(KERN_WARNING "layer7: maxdatalen can't be > 65536, "
-+                      "using 65536\n");
-+              maxdatalen = 65536;
-+      }
-+      return xt_register_matches(xt_layer7_match,
-+                                 ARRAY_SIZE(xt_layer7_match));
-+}
-+
-+static void __exit xt_layer7_fini(void)
-+{
-+      layer7_cleanup_proc();
-+      xt_unregister_matches(xt_layer7_match, ARRAY_SIZE(xt_layer7_match));
-+}
-+
-+module_init(xt_layer7_init);
-+module_exit(xt_layer7_fini);
diff --git a/src/patches/newt-0.51.6-if1close.patch b/src/patches/newt-0.51.6-if1close.patch
deleted file mode 100644 (file)
index 476396f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
---- newt-0.51.6/form.c.orig    2004-10-15 11:17:35.042333181 -0400
-+++ newt-0.51.6/form.c 2004-10-15 11:18:53.428533351 -0400
-@@ -889,6 +889,7 @@
-     struct eventResult er;
-     int key, i, max;
-     int done = 0;
-+    int success;
-     fd_set readSet, writeSet, exceptSet;
-     struct timeval nextTimeout, now, timeout;
- #ifdef USE_GPM
-@@ -902,7 +903,7 @@
-     conn.minMod      = 0;
-     conn.maxMod      = 0;
--    Gpm_Open(&conn, 0);
-+    success = Gpm_Open(&conn, 0);
- #endif
-     newtFormSetSize(co);
-@@ -1062,7 +1063,8 @@
-     }
-     newtRefresh();
- #ifdef USE_GPM
--    Gpm_Close();
-+    if (success > 0)
-+        Gpm_Close();
- #endif
- }
diff --git a/src/patches/openssl-0.9.8n-cryptodev.diff b/src/patches/openssl-0.9.8n-cryptodev.diff
deleted file mode 100644 (file)
index 0913f9a..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-diff -Naur openssl-0.9.8n.org/crypto/engine/eng_all.c openssl-0.9.8n/crypto/engine/eng_all.c
---- openssl-0.9.8n.org/crypto/engine/eng_all.c 2010-03-01 01:30:11.000000000 +0100
-+++ openssl-0.9.8n/crypto/engine/eng_all.c     2010-03-30 08:11:26.000000000 +0200
-@@ -104,16 +104,13 @@
- #endif
- #endif
- #ifndef OPENSSL_NO_HW
--#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)
-       ENGINE_load_cryptodev();
--#endif
- #if defined(OPENSSL_SYS_WIN32) && !defined(OPENSSL_NO_CAPIENG)
-       ENGINE_load_capi();
- #endif
- #endif
-       }
--#if defined(__OpenBSD__) || defined(__FreeBSD__)
- void ENGINE_setup_bsd_cryptodev(void) {
-       static int bsd_cryptodev_default_loaded = 0;
-       if (!bsd_cryptodev_default_loaded) {
-@@ -122,4 +119,3 @@
-       }
-       bsd_cryptodev_default_loaded=1;
- }
--#endif
-diff -Naur openssl-0.9.8n.org/crypto/engine/eng_cryptodev.c openssl-0.9.8n/crypto/engine/eng_cryptodev.c
---- openssl-0.9.8n.org/crypto/engine/eng_cryptodev.c   2010-03-03 16:30:05.000000000 +0100
-+++ openssl-0.9.8n/crypto/engine/eng_cryptodev.c       2010-03-30 08:01:11.000000000 +0200
-@@ -38,14 +38,15 @@
- #if (defined(__unix__) || defined(unix)) && !defined(USG) && \
-       (defined(OpenBSD) || defined(__FreeBSD__))
- #include <sys/param.h>
--# if (OpenBSD >= 200112) || ((__FreeBSD_version >= 470101 && __FreeBSD_version < 500000) || __FreeBSD_version >= 500041)
--#  define HAVE_CRYPTODEV
--# endif
- # if (OpenBSD >= 200110)
- #  define HAVE_SYSLOG_R
- # endif
- #endif
-+#if (OpenBSD >= 200112) || ((__FreeBSD_version >= 470101 && __FreeBSD_version < 500000) || __FreeBSD_version >= 500041) || defined(__linux__)
-+# define HAVE_CRYPTODEV
-+#endif
-+
- #ifndef HAVE_CRYPTODEV
- void
-@@ -58,7 +59,12 @@
- #else 
-  
- #include <sys/types.h>
--#include <crypto/cryptodev.h>
-+#if defined(__linux__)
-+# include <linux/cryptodev.h>
-+# define HAVE_CRYPTODEV_NAME
-+#else
-+# include <crypto/cryptodev.h>
-+#endif
- #include <sys/ioctl.h>
- #include <errno.h>
- #include <stdio.h>
-@@ -81,7 +87,11 @@
- static int get_dev_crypto(void);
- static int cryptodev_max_iv(int cipher);
- static int cryptodev_key_length_valid(int cipher, int len);
--static int cipher_nid_to_cryptodev(int nid);
-+#ifndef HAVE_CRYPTODEV_NAME
-+ static int cipher_nid_to_cryptodev(int nid);
-+#else
-+ static char *cipher_nid_to_cryptodev_name(int nid);
-+#endif
- static int get_cryptodev_ciphers(const int **cnids);
- /*static int get_cryptodev_digests(const int **cnids);*/
- static int cryptodev_usable_ciphers(const int **nids);
-diff -Naur openssl-0.9.8n.org/crypto/engine/engine.h openssl-0.9.8n/crypto/engine/engine.h
---- openssl-0.9.8n.org/crypto/engine/engine.h  2010-02-09 15:18:15.000000000 +0100
-+++ openssl-0.9.8n/crypto/engine/engine.h      2010-03-30 08:01:11.000000000 +0200
-@@ -705,9 +705,7 @@
-  * values. */
- void *ENGINE_get_static_state(void);
--#if defined(__OpenBSD__) || defined(__FreeBSD__)
- void ENGINE_setup_bsd_cryptodev(void);
--#endif
- /* BEGIN ERROR CODES */
- /* The following lines are auto generated by the script mkerr.pl. Any changes
-diff -Naur openssl-0.9.8n.org/crypto/evp/c_all.c openssl-0.9.8n/crypto/evp/c_all.c
---- openssl-0.9.8n.org/crypto/evp/c_all.c      2004-08-29 18:36:04.000000000 +0200
-+++ openssl-0.9.8n/crypto/evp/c_all.c  2010-03-30 08:01:11.000000000 +0200
-@@ -83,8 +83,6 @@
-       OpenSSL_add_all_ciphers();
-       OpenSSL_add_all_digests();
- #ifndef OPENSSL_NO_ENGINE
--# if defined(__OpenBSD__) || defined(__FreeBSD__)
-       ENGINE_setup_bsd_cryptodev();
--# endif
- #endif
-       }
diff --git a/src/patches/pciutils-2.1.10-scan.patch b/src/patches/pciutils-2.1.10-scan.patch
deleted file mode 100644 (file)
index 590c21d..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- pciutils-2.1.10/lib/access.c.foo   Wed Feb 12 15:44:05 2003
-+++ pciutils-2.1.10/lib/access.c       Wed Feb 12 15:44:33 2003
-@@ -180,7 +180,8 @@
- void
- pci_scan_bus(struct pci_access *a)
- {
--  a->methods->scan(a);
-+  if (a->methods)
-+    a->methods->scan(a);
- }
- struct pci_dev *
diff --git a/src/patches/pciutils-2.1.99-gcc4.patch b/src/patches/pciutils-2.1.99-gcc4.patch
deleted file mode 100644 (file)
index 43257d5..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-Patch by Robert Scheck <redhat@linuxnetz.de> for pciutils >= 2.1.99, which make pciutils
-rebuildable using gcc 4.
-
---- pciutils-2.1.99-test8/lib/i386-ports.c             2004-08-13 22:13:11.000000000 +0200
-+++ pciutils-2.1.99-test8/lib/i386-ports.c.gcc4                2005-03-14 09:30:06.000000000 +0100
-@@ -57,9 +57,9 @@
-   for(d.dev = 0; d.dev < 32; d.dev++)
-     {
-       u16 class, vendor;
--      if (m->read(&d, PCI_CLASS_DEVICE, (byte *) &class, sizeof(class)) &&
-+      if ((m->read) (&d, PCI_CLASS_DEVICE, (byte *) &class, sizeof(class)) &&
-         (class == cpu_to_le16(PCI_CLASS_BRIDGE_HOST) || class == cpu_to_le16(PCI_CLASS_DISPLAY_VGA)) ||
--        m->read(&d, PCI_VENDOR_ID, (byte *) &vendor, sizeof(vendor)) &&
-+        (m->read) (&d, PCI_VENDOR_ID, (byte *) &vendor, sizeof(vendor)) &&
-         (vendor == cpu_to_le16(PCI_VENDOR_ID_INTEL) || vendor == cpu_to_le16(PCI_VENDOR_ID_COMPAQ)))
-       {
-         a->debug("...outside the Asylum at 0/%02x/0", d.dev);
diff --git a/src/patches/pciutils-2.2.1-idpath.patch b/src/patches/pciutils-2.2.1-idpath.patch
deleted file mode 100644 (file)
index 62b57f0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- pciutils-2.2.1/Makefile.idpath     2006-02-23 12:24:12.000000000 +0100
-+++ pciutils-2.2.1/Makefile    2006-02-23 12:24:18.000000000 +0100
-@@ -10,7 +10,7 @@
- PREFIX=/usr/local
- SBINDIR=$(PREFIX)/sbin
- SHAREDIR=$(PREFIX)/share
--IDSDIR=$(SHAREDIR)
-+IDSDIR=$(SHAREDIR)/hwdata
- MANDIR:=$(shell if [ -d $(PREFIX)/share/man ] ; then echo $(PREFIX)/share/man ; else echo $(PREFIX)/man ; fi)
- INSTALL=install
- DIRINSTALL=install -d
diff --git a/src/patches/pciutils-2.2.3-multilib.patch b/src/patches/pciutils-2.2.3-multilib.patch
deleted file mode 100644 (file)
index 789dee5..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
---- pciutils-2.2.3/lib/configure.multilib      2006-05-05 14:25:07.000000000 +0200
-+++ pciutils-2.2.3/lib/configure       2006-05-23 15:50:16.000000000 +0200
-@@ -30,8 +30,37 @@
- echo " $host $rel"
- c=config.h
--echo >$c "#define PCI_ARCH_`echo $cpu | tr 'a-z' 'A-Z'`"
--echo >>$c "#define PCI_OS_`echo $sys | tr 'a-z' 'A-Z'`"
-+cm=config.h.mk
-+cat >$c <<EOF
-+#if defined(__x86_64__)
-+#define PCI_ARCH_X86_64
-+#elif defined(__ia64__)
-+#define PCI_ARCH_IA64
-+#elif defined(__i386__)
-+#define PCI_ARCH_I386
-+#define PCI_HAVE_PM_INTEL_CONF
-+#elif defined(__ppc64__) || defined(__powerpc64__)
-+#define PCI_ARCH_PPC64
-+#elif defined(__ppc__)  || defined(__powerpc__)
-+#define PCI_ARCH_PPC
-+#elif defined(__s390x__)
-+#define PCI_ARCH_S390X
-+#elif defined(__s390__)
-+#define PCI_ARCH_S390
-+#else
-+#error Unknown Arch
-+#endif
-+#define PCI_OS_LINUX
-+#define PCI_HAVE_PM_LINUX_SYSFS
-+#define PCI_HAVE_PM_LINUX_PROC
-+#define PCI_HAVE_LINUX_BYTEORDER_H
-+#define PCI_PATH_PROC_BUS_PCI "/proc/bus/pci"
-+#define PCI_PATH_SYS_BUS_PCI "/sys/bus/pci"
-+#define PCI_HAVE_64BIT_ADDRESS
-+EOF
-+
-+echo >$cm "#define PCI_ARCH_`echo $cpu | tr 'a-z' 'A-Z'`"
-+echo >>$cm "#define PCI_OS_`echo $sys | tr 'a-z' 'A-Z'`"
- echo_n "Looking for access methods..."
-@@ -39,63 +68,22 @@
-       linux*)
-               case $rel in
-                       2.[1-9]*|[3-9]*)        echo_n " sysfs proc"
--                                              echo >>$c '#define PCI_HAVE_PM_LINUX_SYSFS'
--                                              echo >>$c '#define PCI_HAVE_PM_LINUX_PROC'
--                                              echo >>$c '#define PCI_HAVE_LINUX_BYTEORDER_H'
--                                              echo >>$c '#define PCI_PATH_PROC_BUS_PCI "/proc/bus/pci"'
--                                              echo >>$c '#define PCI_PATH_SYS_BUS_PCI "/sys/bus/pci"'
--                                              ok=1
--                                              ;;
--              esac
--              case $cpu in
--                              i386)           echo_n " i386-ports"
--                                              echo >>$c '#define PCI_HAVE_PM_INTEL_CONF'
-+                                              echo >>$cm '#define PCI_HAVE_PM_LINUX_SYSFS'
-+                                              echo >>$cm '#define PCI_HAVE_PM_LINUX_PROC'
-+                                              echo >>$cm '#define PCI_HAVE_LINUX_BYTEORDER_H'
-+                                              echo >>$cm '#define PCI_PATH_PROC_BUS_PCI "/proc/bus/pci"'
-+                                              echo >>$cm '#define PCI_PATH_SYS_BUS_PCI "/sys/bus/pci"'
-                                               ok=1
-                                               ;;
-               esac
--              echo >>$c '#define PCI_HAVE_64BIT_ADDRESS'
--              ;;
--      sunos)
-               case $cpu in
-                               i386)           echo_n " i386-ports"
--                                              echo >>$c "#define PCI_HAVE_PM_INTEL_CONF"
-+                                              echo >>$cm '#define PCI_HAVE_PM_INTEL_CONF'
-                                               ok=1
-                                               ;;
--                              *)
--                                              echo " The PCI library is does not support Solaris for this architecture: $cpu"
--                                              exit 1
--                                              ;;
-               esac
--              ;;
--              
--      freebsd)
--              echo_n " fbsd-device"
--              echo >>$c '#define PCI_HAVE_PM_FBSD_DEVICE'
--              echo >>$c '#define PCI_PATH_FBSD_DEVICE "/dev/pci"'
--              ok=1
--              ;;
--        openbsd)
--              echo_n " obsd-device"
--              echo >>$c '#define PCI_HAVE_PM_OBSD_DEVICE'
--              echo >>$c '#define PCI_PATH_OBSD_DEVICE "/dev/pci"'
--              ok=1
--              ;;
--      aix)
--              echo_n " aix-device"
--              echo >>$c '#define PCI_HAVE_PM_AIX_DEVICE'
--              ok=1
--              ;;
--      netbsd)
--              echo_n " nbsd-libpci"
--              echo >>$c '#define PCI_HAVE_PM_NBSD_LIBPCI'
--              echo >>$c '#define PCI_PATH_NBSD_DEVICE "/dev/pci0"'
--              ok=1
--              ;;
--      gnu)
--              echo_n " i386-ports"
--              echo >>$c '#define PCI_HAVE_PM_INTEL_CONF'
--              ok=1
--              ;;
-+              echo >>$cm '#define PCI_HAVE_64BIT_ADDRESS'
-+              ;;              
-         *)
-               echo " Unfortunately, your OS is not supported by the PCI Library"
-               exit 1
-@@ -103,10 +91,14 @@
- esac
- echo >>$c '#define PCI_HAVE_PM_DUMP'
-+echo >>$cm '#define PCI_HAVE_PM_DUMP'
- echo " dump"
- if [ -z "$ok" ] ; then
-       echo "WARNING: No real configuration access method is available."
- fi
- echo >>$c "#define PCI_PATH_IDS \"$idsdir/pci.ids\""
- echo >>$c "#define PCILIB_VERSION \"$version\""
--sed '/^#define [^ ]*$/!d;s/^#define \(.*\)/\1=1/' <$c >config.mk
-+
-+echo >>$cm "#define PCI_PATH_IDS \"$idsdir/pci.ids\""
-+echo >>$cm "#define PCILIB_VERSION \"$version\""
-+sed '/^#define [^ ]*$/!d;s/^#define \(.*\)/\1=1/' <$cm >config.mk
diff --git a/src/patches/pciutils-2.2.3-sata.patch b/src/patches/pciutils-2.2.3-sata.patch
deleted file mode 100644 (file)
index 14f9f5e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- pciutils-2.2.3/lib/header.h.sata   2006-08-09 13:16:07.000000000 -0400
-+++ pciutils-2.2.3/lib/header.h        2006-08-09 13:17:45.000000000 -0400
-@@ -855,6 +855,8 @@
- #define PCI_CLASS_STORAGE_FLOPPY      0x0102
- #define PCI_CLASS_STORAGE_IPI         0x0103
- #define PCI_CLASS_STORAGE_RAID                0x0104
-+#define PCI_CLASS_STORAGE_ATA         0x0105
-+#define PCI_CLASS_STORAGE_SATA                0x0106
- #define PCI_CLASS_STORAGE_OTHER               0x0180
- #define PCI_BASE_CLASS_NETWORK                0x02
diff --git a/src/patches/pciutils-devicetype.patch b/src/patches/pciutils-devicetype.patch
deleted file mode 100644 (file)
index 87e45b4..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
---- pciutils-2.2.1/lib/sysfs.c.devicetype      2005-09-21 07:51:00.000000000 -0400
-+++ pciutils-2.2.1/lib/sysfs.c 2005-12-13 17:02:12.000000000 -0500
-@@ -164,7 +164,6 @@
-         sysfs_get_resources(d);
-         d->irq = sysfs_get_value(d, "irq");
-         d->known_fields = PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE | PCI_FILL_SIZES;
--#if 0
-         /*
-          *  We prefer reading these from the config registers, it's faster.
-          *  However, it would be possible and maybe even useful to hack the kernel
-@@ -173,8 +172,8 @@
-          */
-         d->vendor_id = sysfs_get_value(d, "vendor");
-         d->device_id = sysfs_get_value(d, "device");
--        d->known_fields |= PCI_FILL_IDENT;
--#endif
-+        d->device_class = sysfs_get_value(d, "class") >> 8;
-+        d->known_fields |= PCI_FILL_IDENT | PCI_FILL_CLASS;
-       }
-       pci_link_dev(a, d);
-     }
---- pciutils-2.2.1/lib/pci.h.devicetype        2005-09-10 08:10:54.000000000 -0400
-+++ pciutils-2.2.1/lib/pci.h   2005-12-13 17:02:12.000000000 -0500
-@@ -84,6 +84,7 @@
-   /* These fields are set by pci_fill_info() */
-   int known_fields;                   /* Set of info fields already known */
-   u16 vendor_id, device_id;           /* Identity of the device */
-+  u16 device_class;                   /* PCI device class */
-   int irq;                            /* IRQ number */
-   pciaddr_t base_addr[6];             /* Base addresses */
-   pciaddr_t size[6];                  /* Region sizes */
-@@ -118,6 +119,7 @@
- #define PCI_FILL_BASES                4
- #define PCI_FILL_ROM_BASE     8
- #define PCI_FILL_SIZES                16
-+#define PCI_FILL_CLASS                32
- #define PCI_FILL_RESCAN               0x10000
- void pci_setup_cache(struct pci_dev *, u8 *cache, int len);
---- pciutils-2.2.1/lib/generic.c.devicetype    2004-08-13 16:15:23.000000000 -0400
-+++ pciutils-2.2.1/lib/generic.c       2005-12-13 17:02:12.000000000 -0500
-@@ -46,7 +46,8 @@
-         d->func = t->func;
-         d->vendor_id = vd & 0xffff;
-         d->device_id = vd >> 16U;
--        d->known_fields = PCI_FILL_IDENT;
-+        d->device_class = pci_read_byte(t,PCI_CLASS_DEVICE+1) << 8 | pci_read_byte(t, PCI_CLASS_DEVICE);
-+        d->known_fields = PCI_FILL_IDENT | PCI_FILL_CLASS;
-         d->hdrtype = ht;
-         pci_link_dev(a, d);
-         switch (ht)
-@@ -86,6 +87,8 @@
-       d->vendor_id = pci_read_word(d, PCI_VENDOR_ID);
-       d->device_id = pci_read_word(d, PCI_DEVICE_ID);
-     }
-+  if (flags & PCI_FILL_CLASS)
-+      d->device_class = pci_read_byte(d, PCI_CLASS_DEVICE+1) << 8 | pci_read_byte(d, PCI_CLASS_DEVICE);
-   if (flags & PCI_FILL_IRQ)
-     d->irq = pci_read_byte(d, PCI_INTERRUPT_LINE);
-   if (flags & PCI_FILL_BASES)
---- pciutils-2.2.1/lib/example.c.devicetype    2000-03-09 03:38:33.000000000 -0500
-+++ pciutils-2.2.1/lib/example.c       2005-12-13 17:02:12.000000000 -0500
-@@ -21,7 +21,7 @@
-   pci_scan_bus(pacc);         /* We want to get the list of devices */
-   for(dev=pacc->devices; dev; dev=dev->next)  /* Iterate over all devices */
-     {
--      pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES);    /* Fill in header info we need */
-+      pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_CLASS);   /* Fill in header info we need */
-       c = pci_read_word(dev, PCI_CLASS_DEVICE);       /* Read config register directly */
-       printf("%02x:%02x.%d vendor=%04x device=%04x class=%04x irq=%d base0=%lx\n",
-            dev->bus, dev->dev, dev->func, dev->vendor_id, dev->device_id,
---- pciutils-2.2.1/lspci.c.devicetype  2005-11-26 06:48:29.000000000 -0500
-+++ pciutils-2.2.1/lspci.c     2005-12-13 17:04:39.000000000 -0500
-@@ -123,7 +123,7 @@
-       d->config_cached += 64;
-     }
-   pci_setup_cache(p, d->config, d->config_cached);
--  pci_fill_info(p, PCI_FILL_IDENT | PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE | PCI_FILL_SIZES);
-+  pci_fill_info(p, PCI_FILL_IDENT | PCI_FILL_CLASS | PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE | PCI_FILL_SIZES);
-   return d;
- }
-@@ -255,7 +255,7 @@
-   printf(" %s: %s",
-        pci_lookup_name(pacc, classbuf, sizeof(classbuf),
-                        PCI_LOOKUP_CLASS,
--                       get_conf_word(d, PCI_CLASS_DEVICE)),
-+                       p->device_class),
-        pci_lookup_name(pacc, devbuf, sizeof(devbuf),
-                        PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,
-                        p->vendor_id, p->device_id));
-@@ -267,7 +267,7 @@
-       c = get_conf_byte(d, PCI_CLASS_PROG);
-       x = pci_lookup_name(pacc, devbuf, sizeof(devbuf),
-                         PCI_LOOKUP_PROGIF | PCI_LOOKUP_NO_NUMBERS,
--                        get_conf_word(d, PCI_CLASS_DEVICE), c);
-+                        p->device_class, c);
-       if (c || x)
-       {
-         printf(" (prog-if %02x", c);
-@@ -1585,7 +1585,7 @@
-   struct pci_dev *p = d->dev;
-   word status = get_conf_word(d, PCI_STATUS);
-   word cmd = get_conf_word(d, PCI_COMMAND);
--  word class = get_conf_word(d, PCI_CLASS_DEVICE);
-+  word class = p->device_class;
-   byte bist = get_conf_byte(d, PCI_BIST);
-   byte htype = get_conf_byte(d, PCI_HEADER_TYPE) & 0x7f;
-   byte latency = get_conf_byte(d, PCI_LATENCY_TIMER);
-@@ -1783,7 +1783,7 @@
-       show_slot_name(d);
-       putchar('\n');
-       printf("Class:\t%s\n",
--           pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS, get_conf_word(d, PCI_CLASS_DEVICE)));
-+           pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS, p->device_class));
-       printf("Vendor:\t%s\n",
-            pci_lookup_name(pacc, vendbuf, sizeof(vendbuf), PCI_LOOKUP_VENDOR, p->vendor_id, p->device_id));
-       printf("Device:\t%s\n",
-@@ -1805,7 +1805,7 @@
-       show_slot_name(d);
-       printf(" \"%s\" \"%s\" \"%s\"",
-            pci_lookup_name(pacc, classbuf, sizeof(classbuf), PCI_LOOKUP_CLASS,
--                           get_conf_word(d, PCI_CLASS_DEVICE)),
-+                           p->device_class),
-            pci_lookup_name(pacc, vendbuf, sizeof(vendbuf), PCI_LOOKUP_VENDOR,
-                            p->vendor_id, p->device_id),
-            pci_lookup_name(pacc, devbuf, sizeof(devbuf), PCI_LOOKUP_DEVICE,
-@@ -1929,7 +1929,7 @@
-   last_br = &host_bridge.chain;
-   for(d=first_dev; d; d=d->next)
-     {
--      word class = get_conf_word(d, PCI_CLASS_DEVICE);
-+      word class = d->dev->device_class;
-       byte ht = get_conf_byte(d, PCI_HEADER_TYPE) & 0x7f;
-       if (class == PCI_CLASS_BRIDGE_PCI &&
-         (ht == PCI_HEADER_TYPE_BRIDGE || ht == PCI_HEADER_TYPE_CARDBUS))
diff --git a/src/patches/pciutils-havepread.patch b/src/patches/pciutils-havepread.patch
deleted file mode 100644 (file)
index 56fbff3..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
---- pciutils-2.1.99-test8/lib/pread.h.pread    2004-08-13 16:15:46.000000000 -0400
-+++ pciutils-2.1.99-test8/lib/pread.h  2004-08-31 00:30:03.168157294 -0400
-@@ -12,54 +12,6 @@
-  *  don't define it.
-  */
--#if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ > 0
--/* glibc 2.1 or newer -> pread/pwrite supported automatically */
--
--#elif defined(i386) && defined(__GLIBC__)
--/* glibc 2.0 on i386 -> call syscalls directly */
--#include <asm/unistd.h>
--#include <syscall-list.h>
--#ifndef SYS_pread
--#define SYS_pread 180
--#endif
--static int pread(unsigned int fd, void *buf, size_t size, loff_t where)
--{ return syscall(SYS_pread, fd, buf, size, where); }
--#ifndef SYS_pwrite
--#define SYS_pwrite 181
--#endif
--static int pwrite(unsigned int fd, void *buf, size_t size, loff_t where)
--{ return syscall(SYS_pwrite, fd, buf, size, where); }
--
--#elif defined(i386)
--/* old libc on i386 -> call syscalls directly the old way */
--#include <asm/unistd.h>
--static _syscall5(int, pread, unsigned int, fd, void *, buf, size_t, size, u32, where_lo, u32, where_hi);
--static _syscall5(int, pwrite, unsigned int, fd, void *, buf, size_t, size, u32, where_lo, u32, where_hi);
--static int do_read(struct pci_dev *d UNUSED, int fd, void *buf, size_t size, int where) { return pread(fd, buf, size, where, 0); }
--static int do_write(struct pci_dev *d UNUSED, int fd, void *buf, size_t size, int where) { return pwrite(fd, buf, size, where, 0); }
--#define PCI_HAVE_DO_READ
--
--#else
--/* In all other cases we use lseek/read/write instead to be safe */
--#define make_rw_glue(op) \
--      static int do_##op(struct pci_dev *d, int fd, void *buf, size_t size, int where)        \
--      {                                                                                       \
--        struct pci_access *a = d->access;                                                     \
--        int r;                                                                                \
--        if (a->fd_pos != where && lseek(fd, where, SEEK_SET) < 0)                             \
--          return -1;                                                                          \
--        r = op(fd, buf, size);                                                                \
--        if (r < 0)                                                                            \
--          a->fd_pos = -1;                                                                     \
--        else                                                                                  \
--          a->fd_pos = where + r;                                                              \
--        return r;                                                                             \
--      }
--make_rw_glue(read)
--make_rw_glue(write)
--#define PCI_HAVE_DO_READ
--#endif
--
- #ifndef PCI_HAVE_DO_READ
- #define do_read(d,f,b,l,p) pread(f,b,l,p)
- #define do_write(d,f,b,l,p) pwrite(f,b,l,p)
diff --git a/src/patches/pciutils-strip.patch b/src/patches/pciutils-strip.patch
deleted file mode 100644 (file)
index 19ca22e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- pciutils-2.1.99-test3/Makefile.strip       2004-02-25 01:46:14.315787866 -0500
-+++ pciutils-2.1.99-test3/Makefile     2004-02-25 01:47:45.478046260 -0500
-@@ -32,7 +32,7 @@
- all: $(PCILIB) lspci setpci lspci.8 setpci.8 update-pciids update-pciids.8 pci.ids
- $(PCILIB): $(PCIINC) force
--      $(MAKE) -C lib all
-+      CFLAGS="$(CFLAGS) -fPIC" $(MAKE) -C lib all
- force:
---- pciutils-2.1.99-test8/Makefile.foo 2005-05-10 15:24:45.000000000 -0400
-+++ pciutils-2.1.99-test8/Makefile     2005-05-10 15:24:50.000000000 -0400
-@@ -65,7 +65,7 @@
- install: all
- # -c is ignored on Linux, but required on FreeBSD
-       $(DIRINSTALL) -m 755 $(SBINDIR) $(IDSDIR) $(MANDIR)/man8
--      $(INSTALL) -c -m 755 -s lspci setpci $(SBINDIR)
-+      $(INSTALL) -c -m 755 lspci setpci $(SBINDIR)
-       $(INSTALL) -c -m 755 update-pciids $(SBINDIR)
-       $(INSTALL) -c -m 644 pci.ids $(IDSDIR)
-       $(INSTALL) -c -m 644 lspci.8 setpci.8 update-pciids.8 $(MANDIR)/man8
diff --git a/src/patches/pound-2.6.patch b/src/patches/pound-2.6.patch
deleted file mode 100644 (file)
index 9dceebc..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- build/usr/src/Pound-2.6/configure_orig     2011-12-28 14:57:45.000000000 +0100
-+++ build/usr/src/Pound-2.6/configure  2012-02-10 21:09:50.000000000 +0100
-@@ -3232,7 +3232,7 @@
- if  test "${CC}" = "gcc"
- then
--    CPPFLAGS="${CPPFLAGS} -Wstrict-prototypes -Wno-unused-result -pipe"
-+    CPPFLAGS="${CPPFLAGS} -Wstrict-prototypes -pipe"
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: *** Checking for threads library and/or flags ***" >&5
diff --git a/src/patches/python-satsolver-only-python-bindings.patch b/src/patches/python-satsolver-only-python-bindings.patch
deleted file mode 100644 (file)
index 36905d0..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-diff -Nur old/bindings/CMakeLists.txt new/bindings/CMakeLists.txt
---- old/bindings/CMakeLists.txt        2011-04-11 22:51:37.891109001 +0200
-+++ new/bindings/CMakeLists.txt        2011-04-11 22:55:52.859108992 +0200
-@@ -21,17 +21,17 @@
- #FIND_PACKAGE(PerlLibs)
- FIND_PACKAGE(Perl)
--IF (RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
--    ADD_SUBDIRECTORY(ruby)
--ENDIF(RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
-+#IF (RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
-+#    ADD_SUBDIRECTORY(ruby)
-+#ENDIF(RUBY_LIBRARY AND RUBY_INCLUDE_PATH)
- IF (PYTHON_LIBRARY)
-   ADD_SUBDIRECTORY(python)
- ENDIF(PYTHON_LIBRARY)
--IF (PERL_EXECUTABLE)
--  ADD_SUBDIRECTORY(perl)
--ENDIF (PERL_EXECUTABLE)
-+#IF (PERL_EXECUTABLE)
-+#  ADD_SUBDIRECTORY(perl)
-+#ENDIF (PERL_EXECUTABLE)
- SET(bindings_devel_dir "${CMAKE_CURRENT_BINARY_DIR}/satsolver-bindings")
- ADD_CUSTOM_COMMAND (
diff --git a/src/patches/python-satsover-fix-building-without-rpm.patch b/src/patches/python-satsover-fix-building-without-rpm.patch
deleted file mode 100644 (file)
index 68e2767..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -Nur src/bindings/pool.i sat-solver-bindings/bindings/pool.i
---- src/bindings/pool.i        2011-04-25 12:03:31.000000000 +0000
-+++ sat-solver-bindings/bindings/pool.i        2011-04-29 18:40:59.645929695 +0000
-@@ -474,6 +474,7 @@
-     return repo;
-   }
-+#if defined(FEDORA)
-   /*
-    * Add RPM database to Pool.
-    *
-@@ -493,6 +494,7 @@
-     repo_add_rpmdb( repo, NULL, rootdir, 0 );
-     return repo;
-   }
-+#endif
-   %newobject create_repo;
-   /*
-diff -Nur src/bindings/repo.i sat-solver-bindings/bindings/repo.i
---- src/bindings/repo.i        2011-04-25 12:03:31.000000000 +0000
-+++ sat-solver-bindings/bindings/repo.i        2011-04-29 18:37:13.856570319 +0000
-@@ -139,11 +139,13 @@
-     }
-   }
-+#if defined(FEDORA)
-   /*
-    * Add RPM database, optionally passing a _root_ directory
-    */
-   void add_rpmdb( const char *rootdir )
-   { repo_add_rpmdb( $self, NULL, rootdir, 0); }
-+#endif
-   /*
-    * Create solvable with +name+ and +evr+ in the Repo
-
diff --git a/src/patches/qemu-0.14.1_missing_ATFCWD_hack.patch b/src/patches/qemu-0.14.1_missing_ATFCWD_hack.patch
deleted file mode 100644 (file)
index 31dde45..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-diff -Naur qemu-0.14.1.org/hw/virtio-9p-local.c qemu-0.14.1/hw/virtio-9p-local.c
---- qemu-0.14.1.org/hw/virtio-9p-local.c       2011-05-06 21:01:43.000000000 +0200
-+++ qemu-0.14.1/hw/virtio-9p-local.c   2011-05-18 14:04:32.432444320 +0200
-@@ -10,6 +10,7 @@
-  * the COPYING file in the top-level directory.
-  *
-  */
-+
- #include "virtio.h"
- #include "virtio-9p.h"
- #include "virtio-9p-xattr.h"
-@@ -20,6 +21,16 @@
- #include <sys/un.h>
- #include <attr/xattr.h>
-+#ifndef AT_FDCWD
-+/* Copied from linux/include/linux/fcntl.h * because direct include fails */
-+#define AT_FDCWD              -100    /* Special value used to indicate
-+                                           openat should use the current
-+                                           working directory. */
-+#define AT_SYMLINK_NOFOLLOW   0x100   /* Do not follow symbolic links.  */
-+#define AT_REMOVEDIR          0x200   /* Remove directory instead of
-+                                           unlinking file.  */
-+#define AT_SYMLINK_FOLLOW     0x400   /* Follow symbolic links.  */
-+#endif
- static int local_lstat(FsContext *fs_ctx, const char *path, struct stat *stbuf)
- {
diff --git a/src/patches/r8101_add_missing_pciids.patch b/src/patches/r8101_add_missing_pciids.patch
deleted file mode 100644 (file)
index a065493..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -Naur r8101-1.013.00.org/src/r8101_n.c r8101-1.013.00/src/r8101_n.c
---- r8101-1.013.00.org/src/r8101_n.c   2009-07-14 09:10:53.000000000 +0200
-+++ r8101-1.013.00/src/r8101_n.c       2009-10-22 18:19:07.000000000 +0200
-@@ -103,6 +103,7 @@
- static struct pci_device_id rtl8101_pci_tbl[] = {
-       { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8136), },
-+      { 0x0001, 0x8168, PCI_ANY_ID, 0x2410, },
-       {0,},
- };
diff --git a/src/patches/r8169_add_missing_pciids.patch b/src/patches/r8169_add_missing_pciids.patch
deleted file mode 100644 (file)
index 86916f6..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -Naur r8169-6.017.00.org/src/r8169_n.c r8169-6.017.00/src/r8169_n.c
---- r8169-6.017.00.org/src/r8169_n.c   2012-05-03 14:23:12.000000000 +0200
-+++ r8169-6.017.00/src/r8169_n.c       2012-10-14 12:43:52.478555777 +0200
-@@ -115,7 +115,12 @@
- static struct pci_device_id rtl8169_pci_tbl[] = {
-       { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8167), 0, 0, RTL_CFG_0 },
-       { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8169), 0, 0, RTL_CFG_0 },
--      { PCI_VENDOR_ID_DLINK, 0x4300, PCI_VENDOR_ID_DLINK, 0x4c00, 0, 0, RTL_CFG_0 },
-+      { PCI_DEVICE(PCI_VENDOR_ID_REALTEK,     0x8129), 0, 0, RTL_CFG_0 },
-+      { PCI_DEVICE(PCI_VENDOR_ID_DLINK,       0x4300), 0, 0, RTL_CFG_0 },
-+      { PCI_DEVICE(PCI_VENDOR_ID_DLINK,       0x4302), 0, 0, RTL_CFG_0 },
-+      { PCI_DEVICE(PCI_VENDOR_ID_AT,          0xC107), 0, 0, RTL_CFG_0 },
-+      { PCI_DEVICE(0x16EC,                    0x0116), 0, 0, RTL_CFG_0 },
-+      { PCI_VENDOR_ID_LINKSYS, 0x1032, PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
-       {0,},
- };
diff --git a/src/patches/screen-4.0.3-stropts.patch b/src/patches/screen-4.0.3-stropts.patch
deleted file mode 100644 (file)
index d6cbed7..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-diff -up screen-4.0.3/tty.sh.stropts screen-4.0.3/tty.sh
---- screen-4.0.3/tty.sh.stropts        2003-09-08 16:24:25.000000000 +0200
-+++ screen-4.0.3/tty.sh        2008-04-07 11:28:34.000000000 +0200
-@@ -76,7 +76,7 @@ exit 0
- #endif
- #include "config.h"
--#ifdef SVR4
-+#if 0
- #include <sys/stropts.h>      /* for I_POP */
- #endif
-diff -up screen-4.0.3/screen.c.stropts screen-4.0.3/screen.c
---- screen-4.0.3/screen.c.stropts      2008-04-07 11:25:21.000000000 +0200
-+++ screen-4.0.3/screen.c      2008-04-07 11:29:14.000000000 +0200
-@@ -50,7 +50,7 @@
- #include "config.h"
--#ifdef SVR4
-+#if 0
- # include <sys/stropts.h>
- #endif
-diff -up screen-4.0.3/process.c.stropts screen-4.0.3/process.c
---- screen-4.0.3/process.c.stropts     2003-09-18 14:53:54.000000000 +0200
-+++ screen-4.0.3/process.c     2008-04-07 11:29:47.000000000 +0200
-@@ -37,7 +37,7 @@
- #include "config.h"
- /* for solaris 2.1, Unixware (SVR4.2) and possibly others: */
--#ifdef SVR4
-+#if 0 
- # include <sys/stropts.h>
- #endif
-diff -up screen-4.0.3/pty.c.stropts screen-4.0.3/pty.c
---- screen-4.0.3/pty.c.stropts 2003-09-08 16:26:18.000000000 +0200
-+++ screen-4.0.3/pty.c 2008-04-07 11:30:07.000000000 +0200
-@@ -34,7 +34,7 @@
- #endif
- /* for solaris 2.1, Unixware (SVR4.2) and possibly others */
--#ifdef HAVE_SVR4_PTYS
-+#if 0 
- # include <sys/stropts.h>
- #endif
diff --git a/src/patches/screen-4.2.1-altscreen.patch b/src/patches/screen-4.2.1-altscreen.patch
new file mode 100644 (file)
index 0000000..0a35166
--- /dev/null
@@ -0,0 +1,16 @@
+diff --git a/src/ansi.c b/src/ansi.c
+index e76eef4..bbdc119 100644
+--- a/ansi.c
++++ b/ansi.c
+@@ -1444,8 +1444,8 @@ int c, intermediate;
+                 else
+                   {
+                     if (curr->w_alt.on) {
+-                      LeaveAltScreen(curr);
+-                      RestoreCursor(&curr->w_alt.cursor);
++                      RestoreCursor(&curr->w_alt.cursor);
++                      LeaveAltScreen(curr);
+                     }
+                   }
+                 if (a1 == 47 && !i)
+
diff --git a/src/patches/screen-4.2.1-cpation-hardstatus.patch b/src/patches/screen-4.2.1-cpation-hardstatus.patch
new file mode 100644 (file)
index 0000000..c6809af
--- /dev/null
@@ -0,0 +1,16 @@
+diff --git a/src/screen.c b/src/screen.c
+index 473e4fa..8b36bea 100644
+--- a/screen.c
++++ b/screen.c
+@@ -2271,8 +2271,8 @@ int padlen;
+         while (i-- > 0)
+           *pn-- = ' ';
+         numpad--;
+-        if (r && p - buf == winmsg_rendpos[r - 1])
+-          winmsg_rendpos[--r] = pn - buf;
++        if (r && p - buf + 1== winmsg_rendpos[r - 1])
++          winmsg_rendpos[--r] = pn - buf + 1;
+       }
+     }
+   return pn2;
+
diff --git a/src/patches/slang-1.4.5-utf8-segv.patch b/src/patches/slang-1.4.5-utf8-segv.patch
deleted file mode 100644 (file)
index f8df90a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -ru slang-1.4.5/src/slsmg.c slang-1.4.5-new/src/slsmg.c
---- slang-1.4.5/src/slsmg.c    2002-07-25 00:09:00.000000000 -0400
-+++ slang-1.4.5-new/src/slsmg.c        2002-07-25 00:04:02.000000000 -0400
-@@ -369,7 +369,10 @@
-   max_len = Start_Col + Screen_Cols;
-   len = This_Col;
--  p = SL_Screen[This_Row - Start_Row].neew + len - Start_Col;
-+
-+       
-+  p = SL_Screen[This_Row - Start_Row].neew;
-+  if (len > Start_Col) p += len - Start_Col;
-   prev = 0;
-   for (i = 0; i < n; i++, str) {
diff --git a/src/patches/slang-debian-utf8.patch b/src/patches/slang-debian-utf8.patch
deleted file mode 100644 (file)
index 62eb670..0000000
+++ /dev/null
@@ -1,917 +0,0 @@
---- slang-1.4.4.orig/src/slinclud.h
-+++ slang-1.4.4/src/slinclud.h
-@@ -23,4 +23,12 @@
- # include <memory.h>
- #endif
-
-+#define UTF8 1
-+
-+#ifdef UTF8
-+#include <wchar.h>
-+#include <limits.h>
-+#endif /* UTF8 */
-+
-+
- #endif                                       /* _SLANG_INCLUDE_H_ */
---- slang-1.4.4.orig/src/slang.h
-+++ slang-1.4.4/src/slang.h
-@@ -1239,10 +1239,20 @@
- extern int SLtt_Msdos_Cheap_Video;
- #endif
-
-+#define UTF8 1
-+
-+#ifdef UTF8
-+typedef int SLsmg_Char_Type;
-+#define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFFFFFF)
-+#define SLSMG_EXTRACT_COLOR(x) (((x)>>24)&0xFF)
-+#define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(wchar_t)(ch))|((color)<<24))
-+#define SLSMG_NOCHAR 1
-+#else
- typedef unsigned short SLsmg_Char_Type;
- #define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFF)
- #define SLSMG_EXTRACT_COLOR(x) (((x)>>8)&0xFF)
- #define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(unsigned char)(ch))|((color)<<8))
-+#endif /* UTF8 */
- extern int SLtt_flush_output (void);
- extern void SLtt_set_scroll_region(int, int);
-@@ -1334,7 +1342,11 @@
- /*{{{ SLsmg Screen Management Functions */
-+#ifdef UTF8
-+extern void SLsmg_fill_region (int, int, unsigned int, unsigned int, wchar_t);
-+#else
- extern void SLsmg_fill_region (int, int, unsigned int, unsigned int, unsigned char);
-+#endif /* UTF8 */
- extern void SLsmg_set_char_set (int);
- #ifndef IBMPC_SYSTEM
- extern int SLsmg_Scroll_Hash_Border;
-@@ -1351,7 +1363,12 @@
- extern void SLsmg_vprintf (char *, va_list);
- extern void SLsmg_write_string (char *);
- extern void SLsmg_write_nstring (char *, unsigned int);
-+#ifdef UTF8
-+extern void SLsmg_write_char (wchar_t);
-+extern void SLsmg_write_nwchars (wchar_t *, unsigned int);
-+#else
- extern void SLsmg_write_char (char);
-+#endif /* UTF8 */
- extern void SLsmg_write_nchars (char *, unsigned int);
- extern void SLsmg_write_wrapped_string (char *, int, int, unsigned int, unsigned int, int);
- extern void SLsmg_cls (void);
---- slang-1.4.4.orig/src/slcurses.c
-+++ slang-1.4.4/src/slcurses.c
-@@ -440,20 +440,130 @@
- static int do_newline (SLcurses_Window_Type *w)
- {
--   w->_curx = 0;
-+   /* w->_curx = 0; */
-    w->_cury += 1;
-    if (w->_cury >= w->scroll_max)
-      {
-       w->_cury = w->scroll_max - 1;
--      if (w->scroll_ok)
-+      if (w->scroll_ok) {
-+        w->_curx = 0;
-         SLcurses_wscrl (w, 1);
-+      }
-      }
-+   else
-+     w->_curx = 0;
-+   
-+   return 0;
-+}
-+
-+#ifdef UTF8
-+static int SLcurses_waddch1 (SLcurses_Window_Type *win,
-+                           wchar_t ch, int color)
-+{
-+   SLsmg_Char_Type *b, *bmin, *bmax, *c;
-+   int k;
-+
-+   if (win == NULL) return -1;
-+
-+   if (win->_cury >= win->nrows)
-+     {
-+      /* Curses seems to move current postion to top of window. */
-+      win->_cury = win->_curx = 0;
-+      return -1;
-+     }
-+
-+   win->modified = 1;
-+
-+   if (ch < ' ')
-+     {
-+      if (ch == '\n')
-+        {
-+           SLcurses_wclrtoeol (win);
-+           return do_newline (win);
-+        }
-+
-+      if (ch == '\r')
-+        {
-+           win->_curx = 0;
-+           return 0;
-+        }
-+
-+      if (ch == '\b')
-+        {
-+           if (win->_curx > 0)
-+             win->_curx--;
-+
-+           return 0;
-+        }
-+
-+      /* HACK HACK!!!! */
-+      if (ch == '\t') ch = ' ';
-+     }
-+
-+   k = wcwidth(ch);
-+
-+   if (!k)
-+     return 0; /* ignore combining characters for now */
-+
-+   if (k > win->ncols)
-+     return 0; /* character wider than window */
-+
-+   if (win->_curx + k > win->ncols) {
-+     if (win->_curx < win->ncols)
-+       SLcurses_wclrtoeol(win);
-+     do_newline (win);
-+   }
-+
-+   bmin = win->lines[win->_cury];
-+   b = bmin + win->_curx;
-+   bmax = bmin + win->ncols;
-+
-+   /* Remove overwritten chars to left */
-+   if (*b == SLSMG_NOCHAR) {
-+     for (c = b - 1; c >= bmin && *c == SLSMG_NOCHAR; c--)
-+       *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c));
-+     if (c >= bmin)
-+       *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c));
-+   }
-+
-+   *b = SLSMG_BUILD_CHAR(ch,color);
-+   win->_curx += k;
-+   while (--k > 0)
-+     *++b = SLSMG_NOCHAR;
-+
-+   /* Remove overwritten chars to right */
-+   for (c = b + 1; c < bmax && *c == SLSMG_NOCHAR; c++)
-+     *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c));
-    return 0;
- }
- int SLcurses_waddch (SLcurses_Window_Type *win, SLtt_Char_Type attr)
- {
-+   SLsmg_Char_Type ch, color;
-+
-+   if (win == NULL) return -1;
-+
-+   ch = SLSMG_EXTRACT_CHAR(attr);
-+
-+   if (attr == ch)
-+     color = win->color;
-+   else
-+     {
-+      /* hack to pick up the default color for graphics chars */
-+      if (((attr & A_COLOR) == 0) && ((attr & A_ALTCHARSET) != 0))
-+        {
-+           /* FIXME: priority=medium: Use SLSMG_?? instead of << */
-+           attr |= win->color << 8;
-+        }
-+      color = map_attr_to_object (attr);
-+     }
-+
-+   return SLcurses_waddch1 (win, ch, color);
-+}
-+#else
-+int SLcurses_waddch (SLcurses_Window_Type *win, SLtt_Char_Type attr)
-+{
-    SLsmg_Char_Type *b, ch;
-    SLsmg_Char_Type color;
-@@ -518,6 +628,7 @@
-    return 0;
- }
-+#endif /* UTF8 */
- int SLcurses_wnoutrefresh (SLcurses_Window_Type *w)
- {
-@@ -577,7 +688,11 @@
- int SLcurses_wclrtoeol (SLcurses_Window_Type *w)
- {
-+#ifdef UTF8
-+   SLsmg_Char_Type *b, *bmin, *bmax, *c;
-+#else
-    SLsmg_Char_Type *b, *bmax;
-+#endif /* UTF8 */
-    SLsmg_Char_Type blank;
-    if (w == NULL) return -1;
-@@ -588,9 +703,23 @@
-    blank = SLSMG_BUILD_CHAR(' ',w->color);
-+#ifdef UTF8
-+   bmin = w->lines[w->_cury];
-+   b = bmin + w->_curx;
-+   bmax = bmin + w->ncols;
-+
-+   /* Remove overwritten chars to left */
-+   if (b < bmax && *b == SLSMG_NOCHAR) {
-+     for (c = b - 1; c >= bmin && *c == SLSMG_NOCHAR; c--)
-+       *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c));
-+     if (c >= bmin) 
-+       *c = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*c));
-+   }
-+#else
-    b = w->lines[w->_cury];
-    bmax = b + w->ncols;
-    b += w->_curx;
-+#endif /* UTF8 */
-    while (b < bmax) *b++ = blank;
-    return 0;
-@@ -677,6 +806,34 @@
-    return 0;
- }
-+#ifdef UTF8
-+/* Note: if len is < 0, entire string will be used.
-+ */
-+int SLcurses_waddnstr (SLcurses_Window_Type *w, char *str, int len)
-+{
-+   size_t k;
-+   wchar_t wc;
-+   mbstate_t mbstate;
-+
-+   if ((w == NULL)
-+       || (str == NULL))
-+     return -1;
-+
-+   if (len < 0)
-+     len = (char *)(-1) - str;
-+
-+   memset (&mbstate, 0, sizeof (mbstate));
-+   while ((k = mbrtowc (&wc, str, len, &mbstate)) &&
-+        k != (size_t)(-1) &&
-+        k != (size_t)(-2))
-+     {
-+      SLcurses_waddch1 (w, wc, w->color);
-+      str += k;
-+      len -= k;
-+     }
-+   return k;
-+}
-+#else
- /* Note: if len is < 0, entire string will be used.
-  */
- int SLcurses_waddnstr (SLcurses_Window_Type *w, char *str, int len)
-@@ -758,6 +915,7 @@
-    return 0;
- }
-+#endif /* UTF8 */
- /* This routine IS NOT CORRECT.  It needs to compute the proper overlap
-  * and copy accordingly.  Here, I just assume windows are same size.
-@@ -852,12 +1010,36 @@
- int SLcurses_wdelch (SLcurses_Window_Type *w)
- {
-+#ifdef UTF8
-+   SLsmg_Char_Type *p, *p1, *pmin, *pmax, *q;
-+#else
-    SLsmg_Char_Type *p, *p1, *pmax;
-+#endif /* UTF8 */
-+#ifdef UTF8
-+   pmin = w->lines[w->_cury];
-+   p = pmin + w->_curx;
-+   pmax = pmin + w->ncols;
-+
-+   /* Remove overwritten chars to left */
-+   if (p < pmax && *p == SLSMG_NOCHAR) {
-+     for (q = p - 1; q >= pmin && *q == SLSMG_NOCHAR; q--)
-+       *q = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*q));
-+     if (q >= pmin)
-+       *q = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*q));
-+   }
-+
-+   /* Remove overwritten chars to right */
-+   for (q = p + 1; q < pmax && *q == SLSMG_NOCHAR; q++)
-+     *q = SLSMG_BUILD_CHAR(' ',SLSMG_EXTRACT_COLOR(*q));
-+ 
-+   p1 = p + 1;
-+#else
-    p = w->lines[w->_cury];
-    pmax = p + w->ncols;
-    p += w->_curx;
-    p1 = p + 1;
-+#endif /* UTF8 */
-    while (p1 < pmax)
-      {
-@@ -884,12 +1066,12 @@
-    while (pmax > p)
-      {
--      *pmax = *p1;
-+      *pmax = *p1; /* Doesn't this assign beyond the end of the line? */
-       pmax = p1;
-       p1--;
-      }
--   if (p < pmax)
-+   if (p < pmax) /* How could it be? */
-      *p = SLSMG_BUILD_CHAR(ch, w->color);
-    w->modified = 1;
---- slang-1.4.4.orig/src/slsmg.c
-+++ slang-1.4.4/src/slsmg.c
-@@ -225,6 +225,38 @@
-    SLsmg_write_nchars (str, strlen (str));
- }
-+#ifdef UTF8
-+void SLsmg_write_nstring (char *str, unsigned int n)
-+{
-+   char blank = ' ';
-+   mbstate_t mbstate;
-+
-+   /* Avoid a problem if a user accidently passes a negative value */
-+   if ((int) n < 0)
-+     return;
-+
-+   if (str != NULL)
-+     {
-+      wchar_t wc;
-+      size_t k;
-+      int w;
-+
-+      memset (&mbstate, 0, sizeof (mbstate));
-+        while ((k = mbrtowc (&wc, str, MB_LEN_MAX, &mbstate)) &&
-+             k != (size_t)(-1) &&
-+             k != (size_t)(-2))
-+        {
-+           w = wcwidth(wc);
-+           if (w < 0 || w > n)
-+             break;
-+           SLsmg_write_nwchars (&wc, 1);
-+           str += k;
-+           n -= w;
-+        }
-+     }
-+   while (n-- > 0) SLsmg_write_nchars (&blank, 1);
-+}
-+#else
- void SLsmg_write_nstring (char *str, unsigned int n)
- {
-    unsigned int width;
-@@ -243,7 +275,11 @@
-      }
-    while (width++ < n) SLsmg_write_nchars (&blank, 1);
- }
-+#endif /* UTF8 */
-+#ifdef UTF8
-+/* FIXME: This function not UTF8'd yet - Edmund */
-+#endif /* UTF8 */
- void SLsmg_write_wrapped_string (char *s, int r, int c,
-                                unsigned int dr, unsigned int dc,
-                                int fill)
-@@ -302,6 +338,123 @@
- int SLsmg_Display_Eight_Bit = 128;
- #endif
-+#ifdef UTF8
-+void SLsmg_write_nwchars (wchar_t *str, unsigned int n)
-+{
-+  SLsmg_Char_Type *p, *prev, *q;
-+  int len, max_len, w, i;
-+  wchar_t ch;
-+
-+#ifndef IBMPC_SYSTEM
-+   int alt_char_set_flag;
-+
-+   alt_char_set_flag = ((This_Color & ALT_CHAR_FLAG)
-+                      && ((tt_Use_Blink_For_ACS == NULL)
-+                          || (*tt_Use_Blink_For_ACS == 0)));
-+#endif
-+
-+  if (Smg_Inited == 0)
-+    return;
-+  if (This_Row < Start_Row || This_Row >= Start_Row + Screen_Rows)
-+    return;
-+
-+  max_len = Start_Col + Screen_Cols;
-+  len = This_Col;
-+  p = SL_Screen[This_Row - Start_Row].neew + len - Start_Col;
-+  prev = 0;
-+
-+  for (i = 0; i < n; i++, str) {
-+    ch = *str++;
-+#ifndef IBMPC_SYSTEM
-+    if (alt_char_set_flag)
-+      ch = Alt_Char_Set[ch & 0x7F];
-+#endif
-+    w = wcwidth(ch);
-+
-+    if (w > 0) {
-+      if (len + w <= max_len) {
-+      if (!prev) {
-+        for (q = p; *q == SLSMG_NOCHAR; q--)
-+          *q = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*q));
-+        *q = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*q));
-+      }
-+      prev = p;
-+      *p++ = SLSMG_BUILD_CHAR(ch, This_Color), ++len;
-+      for (; --w; len++, p++)
-+        *p = SLSMG_NOCHAR;
-+      }
-+      else if (len < max_len) {
-+      for (; len < max_len; len++, p++)
-+        *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p));
-+      prev = 0;
-+      }
-+    }
-+    else if (ch == '\n' &&
-+           SLsmg_Newline_Behavior != SLSMG_NEWLINE_PRINTABLE) {
-+      SL_Screen[This_Row - Start_Row].flags |= TOUCHED;
-+      for (; len < max_len && *p == SLSMG_NOCHAR; len++, p++)
-+      *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p));
-+      if (!SLsmg_Newline_Behavior)
-+      break;
-+      ++This_Row;
-+      len = 0;
-+      if (This_Row == Start_Row + Screen_Rows) {
-+      if (SLsmg_Newline_Behavior == SLSMG_NEWLINE_SCROLLS)
-+        scroll_up();
-+      else
-+        break;
-+      }
-+      p = SL_Screen[This_Row - Start_Row].neew;
-+      prev = 0;
-+    }
-+    else if (ch == '\t' && (SLsmg_Tab_Width > 0)) {
-+      while (len < max_len) {
-+      *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p));
-+      ++p, ++len;
-+      if (len % SLsmg_Tab_Width == 0)
-+        break;
-+      }
-+    }
-+    else if ((ch == 0x8) && SLsmg_Backspace_Moves) {
-+      /* not implemented */
-+    }
-+    else if (!w && ch) {
-+      /* we could handle combining characters here, using prev */
-+    }
-+    else {
-+      /* we should convert control characters to printable form here */
-+    }
-+  }
-+  This_Col = len;
-+  if (i == n) {
-+    SL_Screen[This_Row - Start_Row].flags |= TOUCHED;
-+    for (; len < max_len && *p == SLSMG_NOCHAR; len++, p++)
-+      *p = SLSMG_BUILD_CHAR(' ', SLSMG_EXTRACT_COLOR(*p));
-+  }
-+}
-+
-+void SLsmg_write_char (wchar_t wc)
-+{
-+   SLsmg_write_nwchars (&wc, 1);
-+}
-+
-+void SLsmg_write_nchars (char *str, unsigned int n)
-+{
-+   wchar_t wc;
-+   size_t k;
-+   mbstate_t mbstate;
-+
-+   memset (&mbstate, 0, sizeof (mbstate));
-+   while ((k = mbrtowc (&wc, str, n, &mbstate)) &&
-+        k != (size_t)(-1) &&
-+        k != (size_t)(-2))
-+     {
-+        SLsmg_write_nwchars (&wc, 1);
-+      str += k;
-+      n -= k;
-+     }
-+}
-+#else
- void SLsmg_write_nchars (char *str, unsigned int n)
- {
-    register SLsmg_Char_Type *p, old, neew, color;
-@@ -475,6 +628,7 @@
- {
-    SLsmg_write_nchars (&ch, 1);
- }
-+#endif /* UTF8 */
- static int Cls_Flag;
-@@ -891,6 +1045,10 @@
-            This_Color = color;
-         }
-+#ifdef UTF8
-+      /* FIXME: We should convert broken wide characters to spaces
-+         before calling smart_puts */
-+#endif /* UTF8 */
-       SL_Screen[i].old[Screen_Cols] = 0;
-       SL_Screen[i].neew[Screen_Cols] = 0;
-@@ -1334,9 +1492,16 @@
-    This_Row = r; This_Col = c;
- }
-+#ifdef UTF8
-+void SLsmg_fill_region (int r, int c, unsigned int dr, unsigned int dc, wchar_t ch)
-+{
-+   static wchar_t hbuf[16];
-+   int i;
-+#else
- void SLsmg_fill_region (int r, int c, unsigned int dr, unsigned int dc, unsigned char ch)
- {
-    static unsigned char hbuf[16];
-+#endif /* UTF8 */
-    int count;
-    int dcmax, rmax;
-@@ -1357,16 +1522,30 @@
- #if 0
-    ch = Alt_Char_Set[ch];
- #endif
-+#ifdef UTF8
-+   if (ch != hbuf[0])
-+     for (i = 0; i < 16; i++)
-+       hbuf[i] = ch;
-+#else
-    if (ch != hbuf[0]) SLMEMSET ((char *) hbuf, (char) ch, 16);
-+#endif /* UTF8 */
-    for (This_Row = r; This_Row < rmax; This_Row++)
-      {
-       This_Col = c;
-       count = dc / 16;
-+#ifdef UTF8
-+      SLsmg_write_nwchars (hbuf, dc % 16);
-+#else
-       SLsmg_write_nchars ((char *) hbuf, dc % 16);
-+#endif /* UTF8 */
-       while (count-- > 0)
-         {
-+#ifdef UTF8
-+           SLsmg_write_nwchars (hbuf, 16);
-+#else
-            SLsmg_write_nchars ((char *) hbuf, 16);
-+#endif /* UTF8 */
-         }
-      }
-@@ -1381,14 +1560,22 @@
- void SLsmg_write_color_chars (SLsmg_Char_Type *s, unsigned int len)
- {
-    SLsmg_Char_Type *smax, sh;
-+#ifdef UTF8
-+   wchar_t buf[32], *b, *bmax;
-+#else
-    char buf[32], *b, *bmax;
-+#endif /* UTF8 */
-    int color, save_color;
-    if (Smg_Inited == 0) return;
-    smax = s + len;
-    b = buf;
-+#ifdef UTF8
-+   bmax = b + sizeof (buf) / sizeof (SLsmg_Char_Type);
-+#else
-    bmax = b + sizeof (buf);
-+#endif /* UTF8 */
-    save_color = This_Color;
-@@ -1412,16 +1599,28 @@
-         {
-            if (b != buf)
-              {
-+#ifdef UTF8
-+                SLsmg_write_nwchars (buf, (int) (b - buf));
-+#else
-                 SLsmg_write_nchars (buf, (int) (b - buf));
-+#endif /* UTF8 */
-                 b = buf;
-              }
-            This_Color = color;
-         }
-+#ifdef UTF8
-+      *b++ = SLSMG_EXTRACT_CHAR(sh);
-+#else
-       *b++ = (char) SLSMG_EXTRACT_CHAR(sh);
-+#endif /* UTF8 */
-      }
-    if (b != buf)
-+#ifdef UTF8
-+     SLsmg_write_nwchars (buf, (unsigned int) (b - buf));
-+#else
-      SLsmg_write_nchars (buf, (unsigned int) (b - buf));
-+#endif /* UTF8 */
-    This_Color = save_color;
- }
-@@ -1473,7 +1672,11 @@
- SLsmg_set_color_in_region (int color, int r, int c, unsigned int dr, unsigned int dc)
- {
-    int cmax, rmax;
-+#ifdef UTF8
-+   int color_mask;
-+#else
-    SLsmg_Char_Type char_mask;
-+#endif /* UTF8 */
-    if (Smg_Inited == 0) return;
-@@ -1498,14 +1701,22 @@
-         color = ((color & 0x7F) + Bce_Color_Offset) & 0x7F;
-      }
- #endif
-+#ifdef UTF8
-+   color_mask = 0;
-+#else
-    color = color << 8;
-    char_mask = 0xFF;
-+#endif /* UTF8 */
- #ifndef IBMPC_SYSTEM
-    if ((tt_Use_Blink_For_ACS == NULL)
-        || (0 == *tt_Use_Blink_For_ACS))
-+#ifdef UTF8
-+     color_mask = 0x80;
-+#else
-      char_mask = 0x80FF;
-+#endif /* UTF8 */
- #endif
-    while (r < rmax)
-@@ -1519,7 +1730,13 @@
-       while (s < smax)
-         {
-+#ifdef UTF8
-+           *s = SLSMG_BUILD_CHAR(SLSMG_EXTRACT_CHAR(*s),
-+                                 (SLSMG_EXTRACT_COLOR(*s) & color_mask)
-+                                 | color);
-+#else
-            *s = (*s & char_mask) | color;
-+#endif /* UTF8 */
-            s++;
-         }
-       r++;
---- slang-1.4.5/src/Makefile.in.foo    2002-06-12 19:30:09.000000000 -0400
-+++ slang-1.4.5/src/Makefile.in        2002-06-12 19:31:13.000000000 -0400
-@@ -67,7 +67,7 @@
- #---------------------------------------------------------------------------
- # There should be no need to change anything below here.
- #---------------------------------------------------------------------------
--THIS_LIB              = slang#
-+THIS_LIB              = slang-utf8#
- OTHERSTUFF            = 
- THIS_LIB_DEFINES      = -DSLANG
- ELF_MAJOR_VERSION     = @slang_major_version@#
---- slang-1.4.9/src/sldisply.c.orig    2003-10-27 17:24:15.000000000 -0500
-+++ slang-1.4.9/src/sldisply.c 2003-10-27 17:56:25.000000000 -0500
-@@ -9,6 +9,7 @@
- #include <time.h>
- #include <ctype.h>
-+#include <limits.h>
- #if !defined(VMS) || (__VMS_VER >= 70000000)
- # include <sys/time.h>
-@@ -1426,14 +1427,25 @@
- /* Highest bit represents the character set. */
- #define COLOR_MASK 0x7F00
-+#ifdef UTF8
-+# define COLOR_OF(x) (SLSMG_EXTRACT_COLOR(x) & 0x7F)
-+#else
- #define COLOR_OF(x) (((x)&COLOR_MASK)>>8)
-+#endif
- #define CHAR_OF(x) ((x)&0x80FF)
- #if SLTT_HAS_NON_BCE_SUPPORT
-+#ifdef UTF8
-+static int bce_color_eqs (SLsmg_Char_Type a, SLsmg_Char_Type b)
-+{
-+   a = SLSMG_EXTRACT_COLOR(a) & 0x7F;
-+   b = SLSMG_EXTRACT_COLOR(b) & 0x7F;
-+#else
- static int bce_color_eqs (unsigned int a, unsigned int b)
- {
-    a = COLOR_OF(a);
-    b = COLOR_OF(b);
-+#endif
-    
-    if (a == b)
-      return 1;
-@@ -1459,8 +1471,14 @@
-     :  (Ansi_Color_Map[COLOR_OF(a)].mono == Ansi_Color_Map[COLOR_OF(b)].mono))
- #endif
-+#ifdef UTF8
-+#define CHAR_EQS(a, b) ((a) == (b)\
-+                      || (SLSMG_EXTRACT_CHAR(a) == SLSMG_EXTRACT_CHAR(b)\
-+                          && COLOR_EQS((a), (b))))
-+#else
- #define CHAR_EQS(a, b) (((a) == (b))\
-                       || ((CHAR_OF(a)==CHAR_OF(b)) && COLOR_EQS(a,b)))
-+#endif
- /* The whole point of this routine is to prevent writing to the last column
-  * and last row on terminals with automatic margins.
-@@ -1488,9 +1506,58 @@
-    tt_write (str, len);
- }
-+#ifdef UTF8
-+/* FIXME: This duplicates the function above
-+ */
-+static void write_wstring_with_care (SLsmg_Char_Type *str, unsigned int len)
-+{
-+   mbstate_t mbstate;
-+
-+   if (str == NULL) return;
-+
-+   if (Automatic_Margins && (Cursor_r + 1 == SLtt_Screen_Rows))
-+     {
-+      if (len + (unsigned int) Cursor_c >= (unsigned int) SLtt_Screen_Cols)
-+        {
-+           /* For now, just do not write there.  Later, something more
-+            * sophisticated will be implemented.
-+            */
-+           if (SLtt_Screen_Cols > Cursor_c)
-+             {
-+                len = SLtt_Screen_Cols - Cursor_c - 1;
-+                while (len > 0 && str[len] == SLSMG_NOCHAR)
-+                  --len;
-+             }
-+           else len = 0;
-+        }
-+     }
-+
-+   memset (&mbstate, 0, sizeof (mbstate));
-+   while (len--)
-+     {
-+        SLsmg_Char_Type c = *str++;
-+      char buf[MB_LEN_MAX];
-+      size_t n;
-+
-+      if (c == SLSMG_NOCHAR)
-+        continue;
-+
-+      n = wcrtomb (buf, c, &mbstate);
-+      if (n == (size_t)(-1))
-+        break;
-+
-+      tt_write(buf, n);
-+     }
-+}
-+#endif /* UTF8 */
-+
- static void send_attr_str (SLsmg_Char_Type *s)
- {
-+#ifdef UTF8
-+   SLsmg_Char_Type out[SLTT_MAX_SCREEN_COLS], ch, *p;
-+#else
-    unsigned char out[SLTT_MAX_SCREEN_COLS], ch, *p;
-+#endif /* UTF8 */
-    register SLtt_Char_Type attr;
-    register SLsmg_Char_Type sh;
-    int color, last_color = -1;
-@@ -1498,8 +1565,13 @@
-    p = out;
-    while (0 != (sh = *s++))
-      {
-+#ifdef UTF8
-+      ch = SLSMG_EXTRACT_CHAR(sh);
-+      color = SLSMG_EXTRACT_COLOR(sh);
-+#else
-       ch = sh & 0xFF;
-       color = ((int) sh & 0xFF00) >> 8;
-+#endif
- #if SLTT_HAS_NON_BCE_SUPPORT
-       if (Bce_Color_Offset
-@@ -1511,8 +1583,12 @@
-         {
-            if (SLtt_Use_Ansi_Colors) attr = Ansi_Color_Map[color & 0x7F].fgbg;
-            else attr = Ansi_Color_Map[color & 0x7F].mono;
--
-+ 
-+#ifdef UTF8
-+           if (SLSMG_EXTRACT_COLOR(sh) & 0x80) /* alternate char set */
-+#else
-            if (sh & 0x8000) /* alternate char set */
-+#endif
-              {
-                 if (SLtt_Use_Blink_For_ACS)
-                   {
-@@ -1534,8 +1610,12 @@
-                   {
-                      if (p != out)
-                        {
-+#ifdef UTF8
-+                          write_wstring_with_care (out, p-out);
-+#else
-                           *p = 0;
-                           write_string_with_care ((char *) out);
-+#endif
-                           Cursor_c += (int) (p - out);
-                           p = out;
-                        }
-@@ -1558,8 +1638,12 @@
-         }
-       *p++ = ch;
-      }
-+#ifdef UTF8
-+   if (p != out) write_wstring_with_care (out, p-out);
-+#else
-    *p = 0;
-    if (p != out) write_string_with_care ((char *) out);
-+#endif
-    Cursor_c += (int) (p - out);
- }
-@@ -1686,7 +1770,11 @@
-       while (qq < qmax)
-         {
-+#ifdef UTF8
-+           if (SLSMG_EXTRACT_COLOR(*qq))
-+#else
-            if (*qq & 0xFF00)
-+#endif
-              {
-                 SLtt_normal_video ();
-                 SLtt_del_eol ();
-@@ -1701,7 +1789,11 @@
-    /* Find where the last non-blank character on old/new screen is */
-    space_char = ' ';
-+#ifdef UTF8
-+   if (SLSMG_EXTRACT_CHAR(*(pmax-1)) == ' ')
-+#else
-    if (CHAR_EQS(*(pmax-1), ' '))
-+#endif
-      {
-       /* If we get here, then we can erase to the end of the line to create
-        * the final space.  However, this will only work _if_ erasing will 
-@@ -1752,7 +1844,11 @@
-      {
- #endif
-       /* Try use use erase to bol if possible */
-+#ifdef UTF8
-+      if ((Del_Bol_Str != NULL) && (SLSMG_EXTRACT_CHAR(*neww) == ' '))
-+#else
-       if ((Del_Bol_Str != NULL) && (CHAR_OF(*neww) == ' '))
-+#endif
-         {
-            SLsmg_Char_Type *p1;
-            SLsmg_Char_Type blank;
-@@ -1781,7 +1877,11 @@
-                 q = oldd + ofs;
-                 p = p1;
-                 SLtt_goto_rc (row, ofs - 1);
-+#ifdef UTF8
-+                SLtt_reverse_video (SLSMG_EXTRACT_COLOR (blank));
-+#else
-                 SLtt_reverse_video (COLOR_OF(blank));
-+#endif
-                 tt_write_string (Del_Bol_Str);
-                 tt_write (" ", 1);
-                 Cursor_c += 1;
-@@ -1978,7 +2078,11 @@
-    if (q < qmax) 
-      {
-+#ifdef UTF8
-+      SLtt_reverse_video (SLSMG_EXTRACT_COLOR (space_char));
-+#else
-       SLtt_reverse_video (COLOR_OF(space_char));
-+#endif
-       del_eol ();
-      }
-    
diff --git a/src/patches/slang-utf8-acs.patch b/src/patches/slang-utf8-acs.patch
deleted file mode 100644 (file)
index dc8a851..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
---- slang-1.4.5/src/slang.h.acs        2002-07-09 00:03:57.000000000 -0400
-+++ slang-1.4.5/src/slang.h    2002-07-09 00:11:06.000000000 -0400
-@@ -1255,6 +1255,8 @@
- #ifdef UTF8
- typedef int SLsmg_Char_Type;
-+extern SLtt_Char_Type SLcurses_Acs_Map [128];
-+#define acs_map SLcurses_Acs_Map
- #define SLSMG_EXTRACT_CHAR(x) ((x) & 0xFFFFFF)
- #define SLSMG_EXTRACT_COLOR(x) (((x)>>24)&0xFF)
- #define SLSMG_BUILD_CHAR(ch,color) (((SLsmg_Char_Type)(wchar_t)(ch))|((color)<<24))
-@@ -1396,7 +1398,11 @@
- extern void SLsmg_set_screen_start (int *, int *);
- extern void SLsmg_draw_hline (unsigned int);
- extern void SLsmg_draw_vline (int);
-+#ifdef UTF8
-+extern void SLsmg_draw_object (int, int, SLsmg_Char_Type);
-+#else
- extern void SLsmg_draw_object (int, int, unsigned char);
-+#endif
- extern void SLsmg_draw_box (int, int, unsigned int, unsigned int);
- extern int SLsmg_get_column(void);
- extern int SLsmg_get_row(void);
-@@ -1408,6 +1414,9 @@
- extern int SLsmg_Display_Eight_Bit;
- extern int SLsmg_Tab_Width;
-+extern int SLsmg_Is_Unicode;
-+extern int SLsmg_Setlocale;
-+
- #define SLSMG_NEWLINE_IGNORED 0      /* default */
- #define SLSMG_NEWLINE_MOVES   1      /* moves to next line, column 0 */
- #define SLSMG_NEWLINE_SCROLLS 2      /* moves but scrolls at bottom of screen */
-@@ -1465,31 +1474,79 @@
- #  define SLSMG_BOARD_CHAR    '#'
- #  define SLSMG_BLOCK_CHAR    '#'
- # else
--#  define SLSMG_HLINE_CHAR    'q'
--#  define SLSMG_VLINE_CHAR    'x'
--#  define SLSMG_ULCORN_CHAR   'l'
--#  define SLSMG_URCORN_CHAR   'k'
--#  define SLSMG_LLCORN_CHAR   'm'
--#  define SLSMG_LRCORN_CHAR   'j'
--#  define SLSMG_CKBRD_CHAR    'a'
--#  define SLSMG_RTEE_CHAR     'u'
--#  define SLSMG_LTEE_CHAR     't'
--#  define SLSMG_UTEE_CHAR     'w'
--#  define SLSMG_DTEE_CHAR     'v'
--#  define SLSMG_PLUS_CHAR     'n'
--#  define SLSMG_DIAMOND_CHAR  '`'
--#  define SLSMG_DEGREE_CHAR   'f'
--#  define SLSMG_PLMINUS_CHAR  'g'
--#  define SLSMG_BULLET_CHAR   '~'
--#  define SLSMG_LARROW_CHAR   ','
--#  define SLSMG_RARROW_CHAR   '+'
--#  define SLSMG_DARROW_CHAR   '.'
--#  define SLSMG_UARROW_CHAR   '-'
--#  define SLSMG_BOARD_CHAR    'h'
--#  define SLSMG_BLOCK_CHAR    '0'
-+#  define SLSMG_HLINE_CHAR    (acs_map['q'])
-+#  define SLSMG_VLINE_CHAR    (acs_map['x'])
-+#  define SLSMG_ULCORN_CHAR   (acs_map['l'])
-+#  define SLSMG_URCORN_CHAR   (acs_map['k'])
-+#  define SLSMG_LLCORN_CHAR   (acs_map['m'])
-+#  define SLSMG_LRCORN_CHAR   (acs_map['j'])
-+#  define SLSMG_CKBRD_CHAR    (acs_map['a'])
-+#  define SLSMG_RTEE_CHAR     (acs_map['u'])
-+#  define SLSMG_LTEE_CHAR     (acs_map['t'])
-+#  define SLSMG_UTEE_CHAR     (acs_map['v'])
-+#  define SLSMG_DTEE_CHAR     (acs_map['w'])
-+#  define SLSMG_PLUS_CHAR     (acs_map['n'])
-+#  define SLSMG_DIAMOND_CHAR  (acs_map['`'])
-+#  define SLSMG_DEGREE_CHAR   (acs_map['f'])
-+#  define SLSMG_PLMINUS_CHAR  (acs_map['g'])
-+#  define SLSMG_BULLET_CHAR   (acs_map['~'])
-+#  define SLSMG_LARROW_CHAR   (acs_map[','])
-+#  define SLSMG_RARROW_CHAR   (acs_map['+'])
-+#  define SLSMG_DARROW_CHAR   (acs_map['.'])
-+#  define SLSMG_UARROW_CHAR   (acs_map['-'])
-+#  define SLSMG_BOARD_CHAR    (acs_map['h'])
-+#  define SLSMG_BLOCK_CHAR    (acs_map['0'])
-+#
-+#  define SLSMG_HLINE_CHAR_TERM       'q'
-+#  define SLSMG_VLINE_CHAR_TERM       'x'
-+#  define SLSMG_ULCORN_CHAR_TERM      'l'
-+#  define SLSMG_URCORN_CHAR_TERM      'k'
-+#  define SLSMG_LLCORN_CHAR_TERM      'm'
-+#  define SLSMG_LRCORN_CHAR_TERM      'j'
-+#  define SLSMG_CKBRD_CHAR_TERM       'a'
-+#  define SLSMG_RTEE_CHAR_TERM        'u'
-+#  define SLSMG_LTEE_CHAR_TERM        't'
-+#  define SLSMG_UTEE_CHAR_TERM        'v'
-+#  define SLSMG_DTEE_CHAR_TERM        'w'
-+#  define SLSMG_PLUS_CHAR_TERM        'n'
-+#  define SLSMG_DIAMOND_CHAR_TERM     '`'
-+#  define SLSMG_DEGREE_CHAR_TERM      'f'
-+#  define SLSMG_PLMINUS_CHAR_TERM     'g'
-+#  define SLSMG_BULLET_CHAR_TERM      '~'
-+#  define SLSMG_LARROW_CHAR_TERM      ','
-+#  define SLSMG_RARROW_CHAR_TERM      '+'
-+#  define SLSMG_DARROW_CHAR_TERM      '.'
-+#  define SLSMG_UARROW_CHAR_TERM      '-'
-+#  define SLSMG_BOARD_CHAR_TERM       'h'
-+#  define SLSMG_BLOCK_CHAR_TERM       '0'
- # endif                                      /* AMIGA */
- #endif                                       /* IBMPC_SYSTEM */
-+#ifdef UTF8
-+# define SLSMG_HLINE_CHAR_UNICODE     0x2500
-+# define SLSMG_VLINE_CHAR_UNICODE     0x2502
-+# define SLSMG_ULCORN_CHAR_UNICODE    0x250c
-+# define SLSMG_URCORN_CHAR_UNICODE    0x2510
-+# define SLSMG_LLCORN_CHAR_UNICODE    0x2514
-+# define SLSMG_LRCORN_CHAR_UNICODE    0x2518
-+# define SLSMG_RTEE_CHAR_UNICODE      0x2524
-+# define SLSMG_LTEE_CHAR_UNICODE      0x251c
-+# define SLSMG_UTEE_CHAR_UNICODE      0x2534
-+# define SLSMG_DTEE_CHAR_UNICODE      0x252c
-+# define SLSMG_PLUS_CHAR_UNICODE      0x253c
-+# define SLSMG_CKBRD_CHAR_UNICODE     0x2592
-+# define SLSMG_DIAMOND_CHAR_UNICODE   0x25c6
-+# define SLSMG_DEGREE_CHAR_UNICODE    0x00b0
-+# define SLSMG_PLMINUS_CHAR_UNICODE   0x00b1
-+# define SLSMG_BULLET_CHAR_UNICODE    0x00b7
-+# define SLSMG_LARROW_CHAR_UNICODE    0x2190
-+# define SLSMG_RARROW_CHAR_UNICODE    0x2192
-+# define SLSMG_DARROW_CHAR_UNICODE    0x2193
-+# define SLSMG_UARROW_CHAR_UNICODE    0x2191
-+# define SLSMG_BOARD_CHAR_UNICODE     0x2592
-+# define SLSMG_BLOCK_CHAR_UNICODE     0x25ae
-+#endif
-+
- #ifndef IBMPC_SYSTEM
- # define SLSMG_COLOR_BLACK            0x000000
- # define SLSMG_COLOR_RED              0x000001
---- slang-1.4.5/src/slcurses.c.acs     2002-07-09 00:03:57.000000000 -0400
-+++ slang-1.4.5/src/slcurses.c 2002-07-09 00:09:03.000000000 -0400
-@@ -331,40 +331,63 @@
-    /* SLtt_set_mono (A_BLINK >> 8, NULL, SLTT_BLINK_MASK); */
-    SLtt_set_mono ((A_BOLD|A_UNDERLINE) >> 8, NULL, SLTT_ULINE_MASK|SLTT_BOLD_MASK);
-    SLtt_set_mono ((A_REVERSE|A_UNDERLINE) >> 8, NULL, SLTT_ULINE_MASK|SLTT_REV_MASK);
-+   
-+   SLcurses_init_acs_map();
-+
-+   return SLcurses_Stdscr;
-+}
-+void SLcurses_init_acs_map()
-+{
-    if (SLtt_Has_Alt_Charset)
-      {
--       SLcurses_Acs_Map[SLSMG_ULCORN_CHAR] = SLSMG_ULCORN_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_URCORN_CHAR] = SLSMG_URCORN_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_LLCORN_CHAR] = SLSMG_LLCORN_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_LRCORN_CHAR] = SLSMG_LRCORN_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_UTEE_CHAR] = SLSMG_UTEE_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_DTEE_CHAR] = SLSMG_DTEE_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_LTEE_CHAR] = SLSMG_LTEE_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_RTEE_CHAR] = SLSMG_RTEE_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_VLINE_CHAR] = SLSMG_VLINE_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_HLINE_CHAR] = SLSMG_HLINE_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_PLUS_CHAR] = SLSMG_PLUS_CHAR | A_ALTCHARSET;
--       SLcurses_Acs_Map[SLSMG_CKBRD_CHAR] = SLSMG_CKBRD_CHAR | A_ALTCHARSET;
-+       if (SLsmg_Is_Unicode)
-+         {
-+           SLcurses_Acs_Map['l'] = SLSMG_ULCORN_CHAR_UNICODE;
-+           SLcurses_Acs_Map['k'] = SLSMG_URCORN_CHAR_UNICODE;
-+           SLcurses_Acs_Map['m'] = SLSMG_LLCORN_CHAR_UNICODE;
-+           SLcurses_Acs_Map['j'] = SLSMG_LRCORN_CHAR_UNICODE;
-+           SLcurses_Acs_Map['v'] = SLSMG_UTEE_CHAR_UNICODE;
-+           SLcurses_Acs_Map['w'] = SLSMG_DTEE_CHAR_UNICODE;
-+           SLcurses_Acs_Map['t'] = SLSMG_LTEE_CHAR_UNICODE;
-+           SLcurses_Acs_Map['u'] = SLSMG_RTEE_CHAR_UNICODE;
-+           SLcurses_Acs_Map['x'] = SLSMG_VLINE_CHAR_UNICODE;
-+           SLcurses_Acs_Map['q'] = SLSMG_HLINE_CHAR_UNICODE;
-+           SLcurses_Acs_Map['n'] = SLSMG_PLUS_CHAR_UNICODE;
-+           SLcurses_Acs_Map['a'] = SLSMG_CKBRD_CHAR_UNICODE;
-+         }
-+       else
-+       {
-+           SLcurses_Acs_Map['l'] = SLSMG_ULCORN_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['k'] = SLSMG_URCORN_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['m'] = SLSMG_LLCORN_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['j'] = SLSMG_LRCORN_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['v'] = SLSMG_UTEE_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['w'] = SLSMG_DTEE_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['t'] = SLSMG_LTEE_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['u'] = SLSMG_RTEE_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['x'] = SLSMG_VLINE_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['q'] = SLSMG_HLINE_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['n'] = SLSMG_PLUS_CHAR_TERM | A_ALTCHARSET;
-+           SLcurses_Acs_Map['a'] = SLSMG_CKBRD_CHAR_TERM | A_ALTCHARSET;
-+         }
-      }
-    else
-      {
-        /* ugly defaults to use on terminals which don't support graphics */
--       SLcurses_Acs_Map[SLSMG_ULCORN_CHAR] = '+';
--       SLcurses_Acs_Map[SLSMG_URCORN_CHAR] = '+';
--       SLcurses_Acs_Map[SLSMG_LLCORN_CHAR] = '+';
--       SLcurses_Acs_Map[SLSMG_LRCORN_CHAR] = '+';
--       SLcurses_Acs_Map[SLSMG_UTEE_CHAR] = '+';
--       SLcurses_Acs_Map[SLSMG_DTEE_CHAR] = '+';
--       SLcurses_Acs_Map[SLSMG_LTEE_CHAR] = '+';
--       SLcurses_Acs_Map[SLSMG_RTEE_CHAR] = '+';
--       SLcurses_Acs_Map[SLSMG_VLINE_CHAR] = '|';
--       SLcurses_Acs_Map[SLSMG_HLINE_CHAR] = '-';
--       SLcurses_Acs_Map[SLSMG_PLUS_CHAR] = '+';
--       SLcurses_Acs_Map[SLSMG_CKBRD_CHAR] = '#';
-+       SLcurses_Acs_Map['l'] = '+';
-+       SLcurses_Acs_Map['k'] = '+';
-+       SLcurses_Acs_Map['m'] = '+';
-+       SLcurses_Acs_Map['j'] = '+';
-+       SLcurses_Acs_Map['v'] = '+';
-+       SLcurses_Acs_Map['w'] = '+';
-+       SLcurses_Acs_Map['t'] = '+';
-+       SLcurses_Acs_Map['u'] = '+';
-+       SLcurses_Acs_Map['x'] = '|';
-+       SLcurses_Acs_Map['q'] = '-';
-+       SLcurses_Acs_Map['n'] = '+';
-+       SLcurses_Acs_Map['a'] = '#';
-      }
--
--   return SLcurses_Stdscr;
- }
- int SLcurses_wattrset (SLcurses_Window_Type *w, SLtt_Char_Type ch)
---- slang-1.4.5/src/slcurses.h.acs     2002-02-10 02:39:19.000000000 -0500
-+++ slang-1.4.5/src/slcurses.h 2002-07-09 00:03:57.000000000 -0400
-@@ -141,6 +141,7 @@
- extern int SLcurses_nodelay (SLcurses_Window_Type *, int);
- extern SLcurses_Window_Type *SLcurses_initscr (void);
-+extern void SLcurses_init_acs_map (void);
- #define initscr SLcurses_initscr
- extern int SLcurses_cbreak (void);
-@@ -222,21 +222,21 @@
- extern SLtt_Char_Type SLcurses_Acs_Map [128];
- #define acs_map SLcurses_Acs_Map
--#define ACS_ULCORNER (acs_map[SLSMG_ULCORN_CHAR])
--#define ACS_URCORNER (acs_map[SLSMG_URCORN_CHAR])
--#define ACS_LRCORNER (acs_map[SLSMG_LRCORN_CHAR])
--#define ACS_LLCORNER (acs_map[SLSMG_LLCORN_CHAR])
--#define ACS_TTEE (acs_map[SLSMG_UTEE_CHAR])
--#define ACS_LTEE (acs_map[SLSMG_LTEE_CHAR])
--#define ACS_RTEE (acs_map[SLSMG_RTEE_CHAR])
--#define ACS_BTEE (acs_map[SLSMG_DTEE_CHAR])
--#define ACS_PLUS (acs_map[SLSMG_PLUS_CHAR])
--#define ACS_VLINE (acs_map[SLSMG_VLINE_CHAR])
--#define ACS_HLINE (acs_map[SLSMG_HLINE_CHAR])
-+#define ACS_ULCORNER SLSMG_ULCORN_CHAR
-+#define ACS_URCORNER SLSMG_URCORN_CHAR
-+#define ACS_LRCORNER SLSMG_LRCORN_CHAR
-+#define ACS_LLCORNER SLSMG_LLCORN_CHAR
-+#define ACS_TTEE SLSMG_UTEE_CHAR
-+#define ACS_LTEE SLSMG_LTEE_CHAR
-+#define ACS_RTEE SLSMG_RTEE_CHAR
-+#define ACS_BTEE SLSMG_DTEE_CHAR
-+#define ACS_PLUS SLSMG_PLUS_CHAR
-+#define ACS_VLINE SLSMG_VLINE_CHAR
-+#define ACS_HLINE SLSMG_HLINE_CHAR
- #define ACS_S1                '-'
- #define ACS_S9                '-'
- #define ACS_DIAMOND           '&'
--#define ACS_CKBOARD           (acs_map[SLSMG_CKBRD_CHAR])
-+#define ACS_CKBOARD           SLSMG_CKBRD_CHAR
- #define ACS_DEGREE            'o'
- #define ACS_PLMINUS           '+'
- #define ACS_BULLET            '*'
---- slang-1.4.5/src/slsmg.c.acs        2002-07-09 00:03:57.000000000 -0400
-+++ slang-1.4.5/src/slsmg.c    2002-07-09 00:03:57.000000000 -0400
-@@ -10,6 +10,9 @@
- #include "slang.h"
- #include "_slang.h"
-+#include "slcurses.h"
-+
-+#include <locale.h>
- typedef struct Screen_Type
-   {
-@@ -44,9 +47,9 @@
-                                       */
- #ifndef IBMPC_SYSTEM
--#define ALT_CHAR_FLAG 0x80
-+static int ALT_CHAR_FLAG=0x80;
- #else
--#define ALT_CHAR_FLAG 0x00
-+static int ALT_CHAR_FLAG=0x00;
- #endif
- #if SLTT_HAS_NON_BCE_SUPPORT && !defined(IBMPC_SYSTEM)
-@@ -54,6 +57,8 @@
- static int Bce_Color_Offset;
- #endif
-+int SLsmg_Is_Unicode = 0;
-+int SLsmg_Setlocale = 1;
- int SLsmg_Newline_Behavior = 0;
- int SLsmg_Backspace_Moves = 0;
- /* Backward compatibility. Not used. */
-@@ -184,6 +189,8 @@
-      return;/* alt chars not used and the alt bit
-            * is used to indicate a blink.
-            */
-+   if (SLsmg_Is_Unicode)
-+       ALT_CHAR_FLAG=0x00;
-    if (i) This_Alt_Char = ALT_CHAR_FLAG;
-    else This_Alt_Char = 0;
-@@ -348,6 +355,8 @@
- #ifndef IBMPC_SYSTEM
-    int alt_char_set_flag;
-+   if (SLsmg_Is_Unicode)
-+     ALT_CHAR_FLAG = 0x00;
-    alt_char_set_flag = ((This_Color & ALT_CHAR_FLAG)
-                       && ((tt_Use_Blink_For_ACS == NULL)
-                           || (*tt_Use_Blink_For_ACS == 0)));
-@@ -1221,6 +1230,20 @@
-    Smg_Inited = 0;
- }
-+static void SLsmg_check_unicode(void)
-+{
-+    char *s,*t;
-+    
-+    if (SLsmg_Setlocale)
-+              s = setlocale(LC_ALL, "");
-+    else
-+              s = setlocale(LC_ALL, NULL);
-+    if (s && (strstr(s,"UTF-8") || strstr(s,"utf8"))) {
-+          SLsmg_Is_Unicode = 1;
-+          return;
-+    }
-+    SLsmg_Is_Unicode = 0;
-+}
- static int init_smg (void)
- {
-@@ -1242,6 +1265,8 @@
-    This_Col = This_Row = Start_Col = Start_Row = 0;
-    This_Alt_Char = 0;
-+   SLsmg_check_unicode ();
-+   SLcurses_init_acs_map ();
-    SLsmg_set_color (0);
-    Cls_Flag = 1;
- #ifndef IBMPC_SYSTEM
-@@ -1386,7 +1411,11 @@
-      }
- }
-+#ifdef UTF8
-+void SLsmg_draw_object (int r, int c, SLsmg_Char_Type object)
-+#else
- void SLsmg_draw_object (int r, int c, unsigned char object)
-+#endif
- {
-    This_Row = r;  This_Col = c;
-@@ -1405,7 +1434,7 @@
- void SLsmg_draw_hline (unsigned int n)
- {
--   static unsigned char hbuf[16];
-+   SLsmg_Char_Type ch = SLSMG_HLINE_CHAR;
-    int count;
-    int cmin, cmax;
-    int final_col = This_Col + (int) n;
-@@ -1421,11 +1450,6 @@
-       return;
-      }
--   if (hbuf[0] == 0)
--     {
--      SLMEMSET ((char *) hbuf, SLSMG_HLINE_CHAR, 16);
--     }
--
-    n = (unsigned int)(cmax - cmin);
-    count = n / 16;
-@@ -1433,10 +1457,10 @@
-    This_Color |= ALT_CHAR_FLAG;
-    This_Col = cmin;
--   SLsmg_write_nchars ((char *) hbuf, n % 16);
--   while (count-- > 0)
-+   SLsmg_draw_object(This_Row, This_Col, ch);
-+   while (n-- > 0)
-      {
--      SLsmg_write_nchars ((char *) hbuf, 16);
-+      SLsmg_draw_object(This_Row, This_Col, ch);
-      }
-    This_Color = save_color;
-@@ -1445,7 +1469,7 @@
- void SLsmg_draw_vline (int n)
- {
--   unsigned char ch = SLSMG_VLINE_CHAR;
-+   SLsmg_Char_Type ch = SLSMG_VLINE_CHAR;
-    int c = This_Col, rmin, rmax;
-    int final_row = This_Row + n;
-    int save_color;
-@@ -1466,7 +1490,7 @@
-    for (This_Row = rmin; This_Row < rmax; This_Row++)
-      {
-       This_Col = c;
--      SLsmg_write_nchars ((char *) &ch, 1);
-+      SLsmg_draw_object (This_Row, This_Col, ch);
-      }
-    This_Col = c;  This_Row = final_row;
diff --git a/src/patches/slang-utf8-fix.patch b/src/patches/slang-utf8-fix.patch
deleted file mode 100644 (file)
index 6c0a80f..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
---- slang-1.4.5/src/slsmg.c.jj 2003-02-21 12:11:37.000000000 -0500
-+++ slang-1.4.5/src/slsmg.c    2003-02-21 14:09:28.000000000 -0500
-@@ -378,8 +378,10 @@ void SLsmg_write_nwchars (wchar_t *str, 
-   for (i = 0; i < n; i++, str) {
-     ch = *str++;
- #ifndef IBMPC_SYSTEM
--    if (alt_char_set_flag)
-+    if (alt_char_set_flag) {
-       ch = Alt_Char_Set[ch & 0x7F];
-+      w = 1;
-+    } else
- #endif
-     w = wcwidth(ch);
---- slang-1.4.5/src/sldisply.c.jj      2003-02-21 12:11:37.000000000 -0500
-+++ slang-1.4.5/src/sldisply.c 2003-02-21 15:51:43.000000000 -0500
-@@ -1498,6 +1498,17 @@ static void write_wstring_with_care (SLs
-         }
-      }
-+   if (Current_Fgbg & SLTT_ALTC_MASK)
-+     {
-+      char c;
-+      while (len--)
-+        {
-+           c = *str++;
-+           tt_write(&c, 1);
-+        }
-+      return;
-+     }
-+
-    memset (&mbstate, 0, sizeof (mbstate));
-    while (len--)
-      {
diff --git a/src/patches/squidclamav-5.11-source-address-parsing-issue.patch b/src/patches/squidclamav-5.11-source-address-parsing-issue.patch
new file mode 100644 (file)
index 0000000..4031c73
--- /dev/null
@@ -0,0 +1,13 @@
+--- squidclamav-5.11/src/pattern.c~    2014-10-29 13:08:05.658143495 +0000
++++ squidclamav-5.11/src/pattern.c     2014-10-29 13:08:20.964642365 +0000
+@@ -151,10 +151,6 @@
+      return 1;
+   }
+   
+-  /* extract source ipaddress and source fqdn */
+-  if (parseSourceAddress(in_buff.src_address, "/") != 0) {
+-  }
+-  
+   if (debug != 0)
+       logit(log_file, "DEBUG Parsed request: %s %s/%s %s %s\n", in_buff.url, in_buff.ipaddress, in_buff.fqdn, in_buff.ident, in_buff.method);
diff --git a/src/patches/sudo-1.6.8p12-envvar_fix-1.patch b/src/patches/sudo-1.6.8p12-envvar_fix-1.patch
deleted file mode 100644 (file)
index 5bb4db2..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-Submitted By: Archaic (archaic -aT- linuxfromscratch -DoT- org)
-Date: 2005-01-17
-Initial Package Version: 1.6.8p12
-Origin: Upstream CVS
-Upstream Status: In CVS
-Description: (CVE-2005-4158) Sudo before 1.6.8 p12, when the Perl taint flag is
-            off, does not clear the PERLLIB, PERL5LIB, and PERL5OPT environment
-            variables, which allows limited local users to cause a Perl script
-            to include and execute arbitrary library files that have the same
-             name as library files that are included by the script.
-             Additionally, more variables beyond perl were added to the
-             blacklist and comments were added to the variables.
-
-diff -Naur sudo-1.6.8p12.orig/env.c sudo-1.6.8p12/env.c
---- sudo-1.6.8p12.orig/env.c   2005-11-08 18:21:33.000000000 +0000
-+++ sudo-1.6.8p12/env.c        2006-01-18 00:35:17.000000000 +0000
-@@ -118,18 +118,31 @@
-     "USR_ACE",
-     "DLC_ACE",
- #endif /* HAVE_SECURID */
--    "TERMINFO",
--    "TERMINFO_DIRS",
--    "TERMPATH",
-+    "TERMINFO",                       /* terminfo, exclusive path to terminfo files */
-+    "TERMINFO_DIRS",          /* terminfo, path(s) to terminfo files */
-+    "TERMPATH",                       /* termcap, path(s) to termcap files */
-     "TERMCAP",                        /* XXX - only if it starts with '/' */
--    "ENV",
--    "BASH_ENV",
--    "PS4",
--    "SHELLOPTS",
--    "JAVA_TOOL_OPTIONS",
--    "PERLLIB",
--    "PERL5LIB",
--    "PERL5OPT",
-+    "ENV",                    /* ksh, file to source before script runs */
-+    "BASH_ENV",                       /* bash, file to source before script runs */
-+    "PS4",                    /* bash, prefix for lines in xtrace mode */
-+    "GLOBIGNORE",             /* bash, globbing patterns to ignore */
-+    "SHELLOPTS",              /* bash, extra command line options */
-+    "JAVA_TOOL_OPTIONS",      /* java, extra command line options */
-+    "PERLIO_DEBUG ",          /* perl, debugging output file */
-+    "PERLLIB",                        /* perl, search path for modules/includes */
-+    "PERL5LIB",                       /* perl 5, search path for modules/includes */
-+    "PERL5OPT",                       /* perl 5, extra command line options */
-+    "PERL5DB",                        /* perl 5, command used to load debugger */
-+    "FPATH",                  /* ksh, search path for functions */
-+    "NULLCMD",                        /* zsh, command for null file redirection */
-+    "READNULLCMD",            /* zsh, command for null file redirection */
-+    "ZDOTDIR",                        /* zsh, search path for dot files */
-+    "TMPPREFIX",              /* zsh, prefix for temporary files */
-+    "PYTHONHOME",             /* python, module search path */
-+    "PYTHONPATH",             /* python, search path */
-+    "PYTHONINSPEC",           /* python, allow inspection */
-+    "RUBYLIB",                        /* ruby, library load path */
-+    "RUBYOPT",                        /* ruby, extra command line options */
-     NULL
- };
diff --git a/src/patches/udev-125-ext4_wo_journal.patch b/src/patches/udev-125-ext4_wo_journal.patch
deleted file mode 100644 (file)
index 77072ce..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-diff -Naur udev-125.org/extras/volume_id/lib/ext.c udev-125/extras/volume_id/lib/ext.c
---- udev-125.org/extras/volume_id/lib/ext.c    2008-07-18 16:26:55.000000000 +0200
-+++ udev-125/extras/volume_id/lib/ext.c        2012-06-25 00:52:40.976563010 +0200
-@@ -160,32 +160,31 @@
-               goto found;
-       }
--      /* has journal */
--      if ((feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) != 0) {
--              /* "use on development code" is ext4dev */
--              if ((flags & EXT2_FLAGS_TEST_FILESYS) != 0) {
--                      id->type = "ext4dev";
--                      goto found;
--              }
-+      /* "use on development code" is ext4dev */
-+      if ((flags & EXT2_FLAGS_TEST_FILESYS) != 0) {
-+              id->type = "ext4dev";
-+              goto found;
-+      }
--              /* incompatible ext3 features is ext4 */
--              if ((feature_ro_compat & EXT3_FEATURE_RO_COMPAT_UNSUPPORTED) != 0 ||
--                  (feature_incompat & EXT3_FEATURE_INCOMPAT_UNSUPPORTED) != 0) {
--                      id->type = "ext4";
--                      goto found;
--              }
-+      /* incompatible ext3 features is ext4 */
-+      if ((feature_ro_compat & EXT3_FEATURE_RO_COMPAT_UNSUPPORTED) != 0 ||
-+          (feature_incompat & EXT3_FEATURE_INCOMPAT_UNSUPPORTED) != 0) {
-+              id->type = "ext4";
-+              goto found;
-+      }
-+      /* has journal */
-+      if ((feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL) != 0) {
-               id->type = "ext3";
-               goto found;
-       } else {
--              /* no incompatible ext2 feature is ext2 */
-+      /* no incompatible ext2 feature is ext2 */
-               if ((feature_ro_compat & EXT2_FEATURE_RO_COMPAT_UNSUPPORTED) == 0 &&
-                   (feature_incompat & EXT2_FEATURE_INCOMPAT_UNSUPPORTED) == 0) {
-                       id->type = "ext2";
-                       goto found;
-               }
-       }
--
-       return -1;
- found:
diff --git a/src/patches/udev-141_no_netif_rename.patch b/src/patches/udev-141_no_netif_rename.patch
deleted file mode 100644 (file)
index fcc5009..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-diff -Naur udev-141.org/udev/udev-event.c udev-141/udev/udev-event.c
---- udev-141.org/udev/udev-event.c     2009-02-24 15:08:35.000000000 +0100
-+++ udev-141/udev/udev-event.c 2012-10-30 12:27:00.262833136 +0100
-@@ -486,45 +486,8 @@
-       if (err == 0)
-               rename_netif_kernel_log(ifr);
-       else {
--              int loop;
--
--              /* see if the destination interface name already exists */
--              if (errno != EEXIST) {
--                      err(event->udev, "error changing netif name %s to %s: %m\n",
--                          ifr.ifr_name, ifr.ifr_newname);
--                      goto exit;
--              }
--
--              /* free our own name, another process may wait for us */
--              util_strlcpy(ifr.ifr_newname, udev_device_get_sysname(dev), IFNAMSIZ);
--              util_strlcat(ifr.ifr_newname, "_rename", IFNAMSIZ);
--              err = ioctl(sk, SIOCSIFNAME, &ifr);
--              if (err != 0) {
--                      err(event->udev, "error changing netif name %s to %s: %m\n",
-+              err(event->udev, "error changing netif name %s to %s: %m\n",
-                           ifr.ifr_name, ifr.ifr_newname);
--                      goto exit;
--              }
--
--              /* wait 90 seconds for our target to become available */
--              util_strlcpy(ifr.ifr_name, ifr.ifr_newname, IFNAMSIZ);
--              util_strlcpy(ifr.ifr_newname, event->name, IFNAMSIZ);
--              loop = 90 * 20;
--              while (loop--) {
--                      err = ioctl(sk, SIOCSIFNAME, &ifr);
--                      if (err == 0) {
--                              rename_netif_kernel_log(ifr);
--                              break;
--                      }
--
--                      if (errno != EEXIST) {
--                              err(event->udev, "error changing net interface name %s to %s: %m\n",
--                                  ifr.ifr_name, ifr.ifr_newname);
--                              break;
--                      }
--                      dbg(event->udev, "wait for netif '%s' to become free, loop=%i\n",
--                          event->name, (90 * 20) - loop);
--                      usleep(1000 * 1000 / 20);
--              }
-       }
- exit:
-       close(sk);
diff --git a/src/patches/v4l-dvb_bestunar_us638x.patch b/src/patches/v4l-dvb_bestunar_us638x.patch
deleted file mode 100644 (file)
index e3ac8d2..0000000
+++ /dev/null
@@ -1,2810 +0,0 @@
-diff -Naur v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/Kconfig v4l-dvb-20120916/linux/drivers/media/dvb-frontends/Kconfig
---- v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/Kconfig     2012-08-22 05:45:23.000000000 +0200
-+++ v4l-dvb-20120916/linux/drivers/media/dvb-frontends/Kconfig 2012-11-24 13:35:19.220030262 +0100
-@@ -200,6 +200,13 @@
-       help
-         A DVB-S/S2 tuner module. Say Y when you want to support this frontend.
-+config DVB_M88DS3103
-+      tristate "Montage DS3103 based"
-+      depends on DVB_CORE && I2C
-+      default m if DVB_FE_CUSTOMISE
-+      help
-+        A DVB-S/S2 tuner module. Say Y when you want to support this frontend.
-+
- config DVB_SI21XX
-       tristate "Silicon Labs SI21XX based"
-       depends on DVB_CORE && I2C
-diff -Naur v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/m88ds3103.c v4l-dvb-20120916/linux/drivers/media/dvb-frontends/m88ds3103.c
---- v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/m88ds3103.c 1970-01-01 01:00:00.000000000 +0100
-+++ v4l-dvb-20120916/linux/drivers/media/dvb-frontends/m88ds3103.c     2012-11-24 13:34:43.713346302 +0100
-@@ -0,0 +1,1710 @@
-+/*
-+    Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver
-+
-+    Copyright (C) 2011 Max nibble<nibble.max@gmail.com>
-+    Copyright (C) 2010 Montage Technology<www.montage-tech.com>
-+    Copyright (C) 2009 Konstantin Dimitrov.
-+
-+    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.
-+ */
-+
-+#include <linux/slab.h>
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/init.h>
-+#include <linux/firmware.h>
-+
-+#include "dvb_frontend.h"
-+#include "m88ds3103.h"
-+#include "m88ds3103_priv.h"
-+
-+static int debug;
-+module_param(debug, int, 0644);
-+MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
-+
-+#define dprintk(args...) \
-+      do { \
-+              if (debug) \
-+                      printk(KERN_INFO "m88ds3103: " args); \
-+      } while (0)
-+
-+/*demod register operations.*/
-+static int m88ds3103_writereg(struct m88ds3103_state *state, int reg, int data)
-+{
-+      u8 buf[] = { reg, data };
-+      struct i2c_msg msg = { .addr = state->config->demod_address,
-+              .flags = 0, .buf = buf, .len = 2 };
-+      int err;
-+
-+      if (debug > 1)
-+              printk("m88ds3103: %s: write reg 0x%02x, value 0x%02x\n",
-+                      __func__, reg, data);
-+
-+      err = i2c_transfer(state->i2c, &msg, 1);
-+      if (err != 1) {
-+              printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x,"
-+                       " value == 0x%02x)\n", __func__, err, reg, data);
-+              return -EREMOTEIO;
-+      }
-+      return 0;
-+}
-+
-+static int m88ds3103_readreg(struct m88ds3103_state *state, u8 reg)
-+{
-+      int ret;
-+      u8 b0[] = { reg };
-+      u8 b1[] = { 0 };
-+      struct i2c_msg msg[] = {
-+              { .addr = state->config->demod_address, .flags = 0,
-+                      .buf = b0, .len = 1 },
-+              { .addr = state->config->demod_address, .flags = I2C_M_RD,
-+                      .buf = b1, .len = 1 }
-+      };
-+      ret = i2c_transfer(state->i2c, msg, 2);
-+
-+      if (ret != 2) {
-+              printk(KERN_ERR "%s: reg=0x%x (error=%d)\n",
-+                      __func__, reg, ret);
-+              return ret;
-+      }
-+
-+      if (debug > 1)
-+              printk(KERN_INFO "m88ds3103: read reg 0x%02x, value 0x%02x\n",
-+                      reg, b1[0]);
-+
-+      return b1[0];
-+}
-+
-+/*tuner register operations.*/
-+static int m88ds3103_tuner_writereg(struct m88ds3103_state *state, int reg, int data)
-+{
-+      u8 buf[] = { reg, data };
-+      struct i2c_msg msg = { .addr = 0x60,
-+              .flags = 0, .buf = buf, .len = 2 };
-+      int err;
-+
-+      m88ds3103_writereg(state, 0x03, 0x11);
-+      err = i2c_transfer(state->i2c, &msg, 1);
-+      
-+      if (err != 1) {
-+              printk("%s: writereg error(err == %i, reg == 0x%02x,"
-+                       " value == 0x%02x)\n", __func__, err, reg, data);
-+              return -EREMOTEIO;
-+      }
-+
-+      return 0;
-+}
-+
-+static int m88ds3103_tuner_readreg(struct m88ds3103_state *state, u8 reg)
-+{
-+      int ret;
-+      u8 b0[] = { reg };
-+      u8 b1[] = { 0 };
-+      struct i2c_msg msg[] = {
-+              { .addr = 0x60, .flags = 0,
-+                      .buf = b0, .len = 1 },
-+              { .addr = 0x60, .flags = I2C_M_RD,
-+                      .buf = b1, .len = 1 }
-+      };
-+
-+      m88ds3103_writereg(state, 0x03, 0x11);  
-+      ret = i2c_transfer(state->i2c, msg, 2);
-+
-+      if (ret != 2) {
-+              printk(KERN_ERR "%s: reg=0x%x(error=%d)\n", __func__, reg, ret);
-+              return ret;
-+      }
-+
-+      return b1[0];
-+}
-+
-+/* Bulk demod I2C write, for firmware download. */
-+static int m88ds3103_writeregN(struct m88ds3103_state *state, int reg,
-+                              const u8 *data, u16 len)
-+{
-+      int ret = -EREMOTEIO;
-+      struct i2c_msg msg;
-+      u8 *buf;
-+
-+      buf = kmalloc(len + 1, GFP_KERNEL);
-+      if (buf == NULL) {
-+              printk("Unable to kmalloc\n");
-+              ret = -ENOMEM;
-+              goto error;
-+      }
-+
-+      *(buf) = reg;
-+      memcpy(buf + 1, data, len);
-+
-+      msg.addr = state->config->demod_address;
-+      msg.flags = 0;
-+      msg.buf = buf;
-+      msg.len = len + 1;
-+
-+      if (debug > 1)
-+              printk(KERN_INFO "m88ds3103: %s:  write regN 0x%02x, len = %d\n",
-+                      __func__, reg, len);
-+
-+      ret = i2c_transfer(state->i2c, &msg, 1);
-+      if (ret != 1) {
-+              printk(KERN_ERR "%s: writereg error(err == %i, reg == 0x%02x\n",
-+                       __func__, ret, reg);
-+              ret = -EREMOTEIO;
-+      }
-+      
-+error:
-+      kfree(buf);
-+
-+      return ret;
-+}
-+
-+static int m88ds3103_load_firmware(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      const struct firmware *fw;
-+      int i, ret = 0;
-+
-+      dprintk("%s()\n", __func__);
-+              
-+      if (state->skip_fw_load)
-+              return 0;
-+      /* Load firmware */
-+      /* request the firmware, this will block until someone uploads it */    
-+      if(state->demod_id == DS3000_ID){
-+              printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
-+                              DS3000_DEFAULT_FIRMWARE);               
-+              ret = request_firmware(&fw, DS3000_DEFAULT_FIRMWARE,
-+                                      state->i2c->dev.parent);
-+      }else if(state->demod_id == DS3103_ID){
-+              printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
-+                              DS3103_DEFAULT_FIRMWARE);
-+              ret = request_firmware(&fw, DS3103_DEFAULT_FIRMWARE,
-+                                      state->i2c->dev.parent);
-+      }
-+      
-+      printk(KERN_INFO "%s: Waiting for firmware upload(2)...\n", __func__);
-+      if (ret) {
-+              printk(KERN_ERR "%s: No firmware uploaded (timeout or file not "
-+                              "found?)\n", __func__);
-+              return ret;
-+      }
-+
-+      /* Make sure we don't recurse back through here during loading */
-+      state->skip_fw_load = 1;
-+
-+      dprintk("Firmware is %zu bytes (%02x %02x .. %02x %02x)\n",
-+                      fw->size,
-+                      fw->data[0],
-+                      fw->data[1],
-+                      fw->data[fw->size - 2],
-+                      fw->data[fw->size - 1]);
-+                      
-+      /* stop internal mcu. */
-+      m88ds3103_writereg(state, 0xb2, 0x01);
-+      /* split firmware to download.*/
-+      for(i = 0; i < FW_DOWN_LOOP; i++){
-+              ret = m88ds3103_writeregN(state, 0xb0, &(fw->data[FW_DOWN_SIZE*i]), FW_DOWN_SIZE);
-+              if(ret != 1) break;             
-+      }
-+      /* start internal mcu. */
-+      if(ret == 1)
-+              m88ds3103_writereg(state, 0xb2, 0x00);
-+              
-+      release_firmware(fw);
-+
-+      dprintk("%s: Firmware upload %s\n", __func__,
-+                      ret == 1 ? "complete" : "failed");
-+
-+      if(ret == 1) ret = 0;
-+      
-+      /* Ensure firmware is always loaded if required */
-+      state->skip_fw_load = 0;
-+
-+      return ret;
-+}
-+
-+
-+static int m88ds3103_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 data;
-+
-+      dprintk("%s(%d)\n", __func__, voltage);
-+
-+      dprintk("m88ds3103:pin_ctrl = (%02x)\n", state->config->pin_ctrl);
-+      
-+      if(state->config->set_voltage)
-+              state->config->set_voltage(fe, voltage);
-+      
-+      data = m88ds3103_readreg(state, 0xa2);
-+      
-+        if(state->config->pin_ctrl & 0x80){ /*If control pin is assigned.*/
-+              data &= ~0x03; /* bit0 V/H, bit1 off/on */
-+              if(state->config->pin_ctrl & 0x02)
-+                   data |= 0x02;
-+
-+              switch (voltage) {
-+              case SEC_VOLTAGE_18:
-+                   if((state->config->pin_ctrl & 0x01) == 0)
-+                        data |= 0x01;
-+                   break;
-+              case SEC_VOLTAGE_13:
-+                   if(state->config->pin_ctrl & 0x01)
-+                        data |= 0x01;
-+                   break;
-+              case SEC_VOLTAGE_OFF:
-+                   if(state->config->pin_ctrl & 0x02)
-+                         data &= ~0x02;                       
-+                   else
-+                         data |= 0x02;
-+                   break;
-+               }
-+        }
-+
-+      m88ds3103_writereg(state, 0xa2, data);
-+
-+      return 0;
-+}
-+
-+static int m88ds3103_read_status(struct dvb_frontend *fe, fe_status_t* status)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      int lock = 0;
-+      
-+      *status = 0;
-+      
-+      switch (state->delivery_system){
-+      case SYS_DVBS:
-+              lock = m88ds3103_readreg(state, 0xd1);
-+              dprintk("%s: SYS_DVBS status=%x.\n", __func__, lock);
-+              
-+              if ((lock & 0x07) == 0x07){
-+                      /*if((m88ds3103_readreg(state, 0x0d) & 0x07) == 0x07)*/
-+                              *status = FE_HAS_SIGNAL | FE_HAS_CARRIER 
-+                                      | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
-+                      
-+              }
-+              break;
-+      case SYS_DVBS2:
-+              lock = m88ds3103_readreg(state, 0x0d);
-+              dprintk("%s: SYS_DVBS2 status=%x.\n", __func__, lock);
-+
-+              if ((lock & 0x8f) == 0x8f)
-+                      *status = FE_HAS_SIGNAL | FE_HAS_CARRIER 
-+                              | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
-+                      
-+              break;
-+      default:
-+              break;
-+      }
-+
-+      return 0;
-+}
-+
-+static int m88ds3103_read_ber(struct dvb_frontend *fe, u32* ber)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 tmp1, tmp2, tmp3;
-+      u32 ldpc_frame_cnt, pre_err_packags, code_rate_fac = 0;
-+
-+      dprintk("%s()\n", __func__);
-+
-+      switch (state->delivery_system) {
-+      case SYS_DVBS:
-+              m88ds3103_writereg(state, 0xf9, 0x04);
-+              tmp3 = m88ds3103_readreg(state, 0xf8);
-+              if ((tmp3&0x10) == 0){
-+                      tmp1 = m88ds3103_readreg(state, 0xf7);
-+                      tmp2 = m88ds3103_readreg(state, 0xf6);
-+                      tmp3 |= 0x10;
-+                      m88ds3103_writereg(state, 0xf8, tmp3);
-+                      state->preBer = (tmp1<<8) | tmp2;
-+              }
-+              break;
-+      case SYS_DVBS2:
-+              tmp1 = m88ds3103_readreg(state, 0x7e) & 0x0f;
-+              switch(tmp1){
-+              case 0: code_rate_fac = 16008 - 80; break;
-+              case 1: code_rate_fac = 21408 - 80; break;
-+              case 2: code_rate_fac = 25728 - 80; break;
-+              case 3: code_rate_fac = 32208 - 80; break;
-+              case 4: code_rate_fac = 38688 - 80; break;
-+              case 5: code_rate_fac = 43040 - 80; break;
-+              case 6: code_rate_fac = 48408 - 80; break;
-+              case 7: code_rate_fac = 51648 - 80; break;
-+              case 8: code_rate_fac = 53840 - 80; break;
-+              case 9: code_rate_fac = 57472 - 80; break;
-+              case 10: code_rate_fac = 58192 - 80; break;
-+              }
-+              
-+              tmp1 = m88ds3103_readreg(state, 0xd7) & 0xff;
-+              tmp2 = m88ds3103_readreg(state, 0xd6) & 0xff;
-+              tmp3 = m88ds3103_readreg(state, 0xd5) & 0xff;           
-+              ldpc_frame_cnt = (tmp1 << 16) | (tmp2 << 8) | tmp3;
-+
-+              tmp1 = m88ds3103_readreg(state, 0xf8) & 0xff;
-+              tmp2 = m88ds3103_readreg(state, 0xf7) & 0xff;
-+              pre_err_packags = tmp1<<8 | tmp2;
-+              
-+              if (ldpc_frame_cnt > 1000){
-+                      m88ds3103_writereg(state, 0xd1, 0x01);
-+                      m88ds3103_writereg(state, 0xf9, 0x01);
-+                      m88ds3103_writereg(state, 0xf9, 0x00);
-+                      m88ds3103_writereg(state, 0xd1, 0x00);
-+                      state->preBer = pre_err_packags;
-+              }                               
-+              break;
-+      default:
-+              break;
-+      }
-+      *ber = state->preBer;
-+      
-+      return 0;
-+}
-+
-+static int m88ds3103_read_signal_strength(struct dvb_frontend *fe,
-+                                              u16 *signal_strength)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u16 gain;
-+      u8 gain1, gain2, gain3 = 0;
-+
-+      dprintk("%s()\n", __func__);
-+
-+      gain1 = m88ds3103_tuner_readreg(state, 0x3d) & 0x1f;
-+      dprintk("%s: gain1 = 0x%02x \n", __func__, gain1);
-+      
-+      if (gain1 > 15) gain1 = 15;
-+      gain2 = m88ds3103_tuner_readreg(state, 0x21) & 0x1f;
-+      dprintk("%s: gain2 = 0x%02x \n", __func__, gain2);
-+      
-+      if(state->tuner_id == TS2022_ID){
-+              gain3 = (m88ds3103_tuner_readreg(state, 0x66)>>3) & 0x07;
-+              dprintk("%s: gain3 = 0x%02x \n", __func__, gain3);
-+              
-+              if (gain2 > 16) gain2 = 16;
-+              if (gain2 < 2) gain2 = 2;                       
-+              if (gain3 > 6) gain3 = 6;
-+      }else{
-+              if (gain2 > 13) gain2 = 13;
-+              gain3 = 0;
-+      }
-+
-+      gain = gain1*23 + gain2*35 + gain3*29;
-+      *signal_strength = 60000 - gain*55;
-+
-+      return 0;
-+}
-+
-+
-+static int m88ds3103_read_snr(struct dvb_frontend *fe, u16 *p_snr)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 val, npow1, npow2, spow1, cnt;
-+      u16 tmp, snr;
-+      u32 npow, spow, snr_total;      
-+      static const u16 mes_log10[] ={
-+              0,      3010,   4771,   6021,   6990,   7781,   8451,   9031,   9542,   10000,
-+              10414,  10792,  11139,  11461,  11761,  12041,  12304,  12553,  12788,  13010,
-+              13222,  13424,  13617,  13802,  13979,  14150,  14314,  14472,  14624,  14771,
-+              14914,  15052,  15185,  15315,  15441,  15563,  15682,  15798,  15911,  16021,
-+              16128,  16232,  16335,  16435,  16532,  16628,  16721,  16812,  16902,  16990,
-+              17076,  17160,  17243,  17324,  17404,  17482,  17559,  17634,  17709,  17782,
-+              17853,  17924,  17993,  18062,  18129,  18195,  18261,  18325,  18388,  18451,
-+              18513,  18573,  18633,  18692,  18751,  18808,  18865,  18921,  18976,  19031
-+      };
-+      static const u16 mes_loge[] ={
-+              0,      6931,   10986,  13863,  16094,  17918,  19459,  20794,  21972,  23026,
-+              23979,  24849,  25649,  26391,  27081,  27726,  28332,  28904,  29444,  29957,
-+              30445,  30910,  31355,  31781,  32189,  32581,  32958,  33322,  33673,  34012,
-+              34340,  34657,
-+      };
-+
-+      dprintk("%s()\n", __func__);
-+
-+      snr = 0;
-+      
-+      switch (state->delivery_system){
-+      case SYS_DVBS:
-+              cnt = 10; snr_total = 0;
-+              while(cnt > 0){
-+                      val = m88ds3103_readreg(state, 0xff);
-+                      snr_total += val;
-+                      cnt--;
-+              }
-+              tmp = (u16)(snr_total/80);
-+              if(tmp > 0){
-+                      if (tmp > 32) tmp = 32;
-+                      snr = (mes_loge[tmp - 1] * 100) / 45;
-+              }else{
-+                      snr = 0;
-+              }
-+              break;
-+      case SYS_DVBS2:
-+              cnt  = 10; npow = 0; spow = 0;
-+              while(cnt >0){
-+                      npow1 = m88ds3103_readreg(state, 0x8c) & 0xff;
-+                      npow2 = m88ds3103_readreg(state, 0x8d) & 0xff;
-+                      npow += (((npow1 & 0x3f) + (u16)(npow2 << 6)) >> 2);
-+
-+                      spow1 = m88ds3103_readreg(state, 0x8e) & 0xff;
-+                      spow += ((spow1 * spow1) >> 1);
-+                      cnt--;
-+              }
-+              npow /= 10; spow /= 10;
-+              if(spow == 0){
-+                      snr = 0;
-+              }else if(npow == 0){
-+                      snr = 19;
-+              }else{
-+                      if(spow > npow){
-+                              tmp = (u16)(spow / npow);
-+                              if (tmp > 80) tmp = 80;
-+                              snr = mes_log10[tmp - 1]*3;
-+                      }else{
-+                              tmp = (u16)(npow / spow);
-+                              if (tmp > 80) tmp = 80;
-+                              snr = -(mes_log10[tmp - 1] / 1000);
-+                      }
-+              }                       
-+              break;
-+      default:
-+              break;
-+      }
-+      *p_snr = snr;
-+
-+      return 0;
-+}
-+
-+
-+static int m88ds3103_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 tmp1, tmp2, tmp3, data;
-+
-+      dprintk("%s()\n", __func__);
-+
-+      switch (state->delivery_system) {
-+      case SYS_DVBS:
-+              data = m88ds3103_readreg(state, 0xf8);
-+              data |= 0x40;
-+              m88ds3103_writereg(state, 0xf8, data);          
-+              tmp1 = m88ds3103_readreg(state, 0xf5);
-+              tmp2 = m88ds3103_readreg(state, 0xf4);
-+              *ucblocks = (tmp1 <<8) | tmp2;          
-+              data &= ~0x20;
-+              m88ds3103_writereg(state, 0xf8, data);
-+              data |= 0x20;
-+              m88ds3103_writereg(state, 0xf8, data);
-+              data &= ~0x40;
-+              m88ds3103_writereg(state, 0xf8, data);
-+              break;
-+      case SYS_DVBS2:
-+              tmp1 = m88ds3103_readreg(state, 0xda);
-+              tmp2 = m88ds3103_readreg(state, 0xd9);
-+              tmp3 = m88ds3103_readreg(state, 0xd8);
-+              *ucblocks = (tmp1 <<16)|(tmp2 <<8)|tmp3;
-+              data = m88ds3103_readreg(state, 0xd1);
-+              data |= 0x01;
-+              m88ds3103_writereg(state, 0xd1, data);
-+              data &= ~0x01;
-+              m88ds3103_writereg(state, 0xd1, data);
-+              break;
-+      default:
-+              break;
-+      }
-+      return 0;
-+}
-+
-+static int m88ds3103_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 data_a1, data_a2;
-+
-+      dprintk("%s(%d)\n", __func__, tone);
-+      if ((tone != SEC_TONE_ON) && (tone != SEC_TONE_OFF)) {
-+              printk(KERN_ERR "%s: Invalid, tone=%d\n", __func__, tone);
-+              return -EINVAL;
-+      }
-+
-+      data_a1 = m88ds3103_readreg(state, 0xa1);
-+      data_a2 = m88ds3103_readreg(state, 0xa2);
-+      if(state->demod_id == DS3103_ID)
-+              data_a2 &= 0xdf; /* Normal mode */
-+      switch (tone) {
-+      case SEC_TONE_ON:
-+              dprintk("%s: SEC_TONE_ON\n", __func__);
-+              data_a1 |= 0x04;
-+              data_a1 &= ~0x03;
-+              data_a1 &= ~0x40;
-+              data_a2 &= ~0xc0;
-+              break;
-+      case SEC_TONE_OFF:
-+              dprintk("%s: SEC_TONE_OFF\n", __func__);
-+              data_a2 &= ~0xc0;
-+              data_a2 |= 0x80;
-+              break;
-+      }
-+      m88ds3103_writereg(state, 0xa2, data_a2);
-+      m88ds3103_writereg(state, 0xa1, data_a1);
-+      return 0;
-+}
-+
-+static int m88ds3103_send_diseqc_msg(struct dvb_frontend *fe,
-+                              struct dvb_diseqc_master_cmd *d)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      int i, ret = 0;
-+      u8 tmp, time_out;
-+
-+      /* Dump DiSEqC message */
-+      if (debug) {
-+              printk(KERN_INFO "m88ds3103: %s(", __func__);
-+              for (i = 0 ; i < d->msg_len ;) {
-+                      printk(KERN_INFO "0x%02x", d->msg[i]);
-+                      if (++i < d->msg_len)
-+                              printk(KERN_INFO ", ");
-+              }
-+      }
-+
-+      tmp = m88ds3103_readreg(state, 0xa2);
-+      tmp &= ~0xc0;
-+      if(state->demod_id == DS3103_ID)
-+              tmp &= ~0x20;
-+      m88ds3103_writereg(state, 0xa2, tmp);
-+      
-+      for (i = 0; i < d->msg_len; i ++)
-+              m88ds3103_writereg(state, (0xa3+i), d->msg[i]);
-+
-+      tmp = m88ds3103_readreg(state, 0xa1);   
-+      tmp &= ~0x38;
-+      tmp &= ~0x40;
-+      tmp |= ((d->msg_len-1) << 3) | 0x07;
-+      tmp &= ~0x80;
-+      m88ds3103_writereg(state, 0xa1, tmp);
-+      /*      1.5 * 9 * 8     = 108ms */
-+      time_out = 150;
-+      while (time_out > 0){
-+              msleep(10);
-+              time_out -= 10;
-+              tmp = m88ds3103_readreg(state, 0xa1);           
-+              if ((tmp & 0x40) == 0)
-+                      break;
-+      }
-+      if (time_out == 0){
-+              tmp = m88ds3103_readreg(state, 0xa1);
-+              tmp &= ~0x80;
-+              tmp |= 0x40;
-+              m88ds3103_writereg(state, 0xa1, tmp);
-+              ret = 1;
-+      }
-+      tmp = m88ds3103_readreg(state, 0xa2);
-+      tmp &= ~0xc0;
-+      tmp |= 0x80;
-+      m88ds3103_writereg(state, 0xa2, tmp);   
-+      return ret;
-+}
-+
-+
-+static int m88ds3103_diseqc_send_burst(struct dvb_frontend *fe,
-+                                      fe_sec_mini_cmd_t burst)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8      val, time_out;
-+      
-+      dprintk("%s()\n", __func__);
-+
-+      val = m88ds3103_readreg(state, 0xa2);
-+      val &= ~0xc0;
-+      if(state->demod_id == DS3103_ID)
-+              val &= 0xdf; /* Normal mode */
-+      m88ds3103_writereg(state, 0xa2, val);
-+      /* DiSEqC burst */
-+      if (burst == SEC_MINI_B)
-+              m88ds3103_writereg(state, 0xa1, 0x01);
-+      else
-+              m88ds3103_writereg(state, 0xa1, 0x02);
-+
-+      msleep(13);
-+
-+      time_out = 5;
-+      do{
-+              val = m88ds3103_readreg(state, 0xa1);
-+              if ((val & 0x40) == 0)
-+                      break;
-+              msleep(1);
-+              time_out --;
-+      } while (time_out > 0);
-+
-+      val = m88ds3103_readreg(state, 0xa2);
-+      val &= ~0xc0;
-+      val |= 0x80;
-+      m88ds3103_writereg(state, 0xa2, val);
-+      
-+      return 0;
-+}
-+
-+static void m88ds3103_release(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+
-+      dprintk("%s\n", __func__);
-+      kfree(state);
-+}
-+
-+static int m88ds3103_check_id(struct m88ds3103_state *state)
-+{
-+      int val_00, val_01;
-+      
-+      /*check demod id*/
-+      val_01 = m88ds3103_readreg(state, 0x01);
-+      printk(KERN_INFO "DS3000 chip version: %x attached.\n", val_01);
-+                      
-+      if(val_01 == 0xD0)
-+              state->demod_id = DS3103_ID;
-+      else if(val_01 == 0xC0)
-+              state->demod_id = DS3000_ID;
-+      else
-+              state->demod_id = UNKNOW_ID;
-+              
-+      /*check tuner id*/
-+      val_00 = m88ds3103_tuner_readreg(state, 0x00);
-+      printk(KERN_INFO "TS202x chip version[1]: %x attached.\n", val_00);
-+      val_00 &= 0x03;
-+      if(val_00 == 0)
-+      {
-+              m88ds3103_tuner_writereg(state, 0x00, 0x01);
-+              msleep(3);              
-+      }
-+      m88ds3103_tuner_writereg(state, 0x00, 0x03);
-+      msleep(5);
-+      
-+      val_00 = m88ds3103_tuner_readreg(state, 0x00);
-+      printk(KERN_INFO "TS202x chip version[2]: %x attached.\n", val_00);
-+      val_00 &= 0xff;
-+      if((val_00 == 0x01) || (val_00 == 0x41) || (val_00 == 0x81))
-+              state->tuner_id = TS2020_ID;
-+      else if(((val_00 & 0xc0)== 0xc0) || (val_00 == 0x83))
-+              state->tuner_id = TS2022_ID;
-+      else
-+              state->tuner_id = UNKNOW_ID;
-+                      
-+      return state->demod_id; 
-+}
-+
-+static struct dvb_frontend_ops m88ds3103_ops;
-+static int m88ds3103_initilaze(struct dvb_frontend *fe);
-+
-+struct dvb_frontend *m88ds3103_attach(const struct m88ds3103_config *config,
-+                                  struct i2c_adapter *i2c)
-+{
-+      struct m88ds3103_state *state = NULL;
-+
-+      dprintk("%s\n", __func__);
-+
-+      /* allocate memory for the internal state */
-+      state = kzalloc(sizeof(struct m88ds3103_state), GFP_KERNEL);
-+      if (state == NULL) {
-+              printk(KERN_ERR "Unable to kmalloc\n");
-+              goto error2;
-+      }
-+
-+      state->config = config;
-+      state->i2c = i2c;
-+      state->preBer = 0xffff;
-+      state->delivery_system = SYS_DVBS; /*Default to DVB-S.*/
-+      
-+      /* check demod id */
-+      if(m88ds3103_check_id(state) == UNKNOW_ID){
-+              printk(KERN_ERR "Unable to find Montage chip\n");
-+              goto error3;
-+      }
-+
-+      memcpy(&state->frontend.ops, &m88ds3103_ops,
-+                      sizeof(struct dvb_frontend_ops));
-+      state->frontend.demodulator_priv = state;
-+      
-+      m88ds3103_initilaze(&state->frontend);
-+      
-+      return &state->frontend;
-+
-+error3:
-+      kfree(state);
-+error2:
-+      return NULL;
-+}
-+EXPORT_SYMBOL(m88ds3103_attach);
-+
-+static int m88ds3103_set_carrier_offset(struct dvb_frontend *fe,
-+                                      s32 carrier_offset_khz)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      s32 tmp;
-+
-+      tmp = carrier_offset_khz;
-+      tmp *= 65536;
-+      
-+      tmp = (2*tmp + MT_FE_MCLK_KHZ) / (2*MT_FE_MCLK_KHZ);
-+
-+      if (tmp < 0)
-+              tmp += 65536;
-+
-+      m88ds3103_writereg(state, 0x5f, tmp >> 8);
-+      m88ds3103_writereg(state, 0x5e, tmp & 0xff);
-+
-+      return 0;
-+}
-+
-+static int m88ds3103_set_symrate(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
-+      u16 value;
-+      
-+      value = (((c->symbol_rate / 1000) << 15) + (MT_FE_MCLK_KHZ / 4)) / (MT_FE_MCLK_KHZ / 2);
-+      m88ds3103_writereg(state, 0x61, value & 0x00ff);
-+      m88ds3103_writereg(state, 0x62, (value & 0xff00) >> 8);
-+
-+      return 0;
-+}
-+
-+static int m88ds3103_set_CCI(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 tmp;
-+
-+      tmp = m88ds3103_readreg(state, 0x56);
-+      tmp &= ~0x01;
-+      m88ds3103_writereg(state, 0x56, tmp);
-+
-+      tmp = m88ds3103_readreg(state, 0x76);
-+      tmp &= ~0x80;
-+      m88ds3103_writereg(state, 0x76, tmp);
-+
-+      return 0;
-+}
-+
-+static int m88ds3103_init_reg(struct m88ds3103_state *state, const u8 *p_reg_tab, u32 size)
-+{
-+      u32 i;
-+      
-+      for(i = 0; i < size; i+=2)
-+              m88ds3103_writereg(state, p_reg_tab[i], p_reg_tab[i+1]);
-+              
-+      return 0;
-+}
-+
-+static int m88ds3103_get_locked_sym_rate(struct m88ds3103_state *state, u32 *sym_rate_KSs)
-+{
-+      u16     tmp;
-+      u32     sym_rate_tmp;
-+      u8      val_0x6d, val_0x6e;
-+
-+      val_0x6d = m88ds3103_readreg(state, 0x6d);
-+      val_0x6e = m88ds3103_readreg(state, 0x6e);
-+
-+      tmp = (u16)((val_0x6e<<8) | val_0x6d);
-+
-+      sym_rate_tmp = (u32)(tmp * MT_FE_MCLK_KHZ);
-+      sym_rate_tmp = (u32)(sym_rate_tmp / (1<<16));
-+      *sym_rate_KSs = sym_rate_tmp;
-+
-+      return 0;
-+}
-+
-+static int m88ds3103_get_channel_info(struct m88ds3103_state *state, u8 *p_mode, u8 *p_coderate)
-+{
-+      u8      tmp, val_0x7E;
-+
-+      if(state->delivery_system == SYS_DVBS2){
-+              val_0x7E = m88ds3103_readreg(state, 0x7e);
-+              tmp = (u8)((val_0x7E&0xC0) >> 6);
-+              *p_mode = tmp;
-+              tmp = (u8)(val_0x7E & 0x0f);
-+              *p_coderate = tmp;
-+      } else {
-+              *p_mode = 0;
-+              tmp = m88ds3103_readreg(state, 0xe6);           
-+              tmp = (u8)(tmp >> 5);
-+              *p_coderate = tmp;
-+      }
-+      
-+      return 0;
-+}
-+
-+static int m88ds3103_set_clock_ratio(struct m88ds3103_state *state)
-+{
-+      u8      val, mod_fac, tmp1, tmp2;
-+      u32     input_datarate, locked_sym_rate_KSs;
-+      u32 MClk_KHz = 96000;
-+      u8 mod_mode, code_rate, divid_ratio = 0;
-+
-+      locked_sym_rate_KSs = 0;
-+      m88ds3103_get_locked_sym_rate(state, &locked_sym_rate_KSs);
-+      if(locked_sym_rate_KSs == 0)
-+              return 0;
-+
-+      m88ds3103_get_channel_info(state, &mod_mode, &code_rate);
-+
-+      if (state->delivery_system == SYS_DVBS2)
-+      {
-+              switch(mod_mode) {
-+                      case 1: mod_fac = 3; break;
-+                      case 2: mod_fac = 4; break;
-+                      case 3: mod_fac = 5; break;
-+                      default: mod_fac = 2; break;
-+              }
-+
-+              switch(code_rate) {
-+                      case 0: input_datarate = locked_sym_rate_KSs*mod_fac/8/4; break;
-+                      case 1: input_datarate = locked_sym_rate_KSs*mod_fac/8/3;       break;
-+                      case 2: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/5;     break;
-+                      case 3: input_datarate = locked_sym_rate_KSs*mod_fac/8/2;       break;
-+                      case 4: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/5;     break;
-+                      case 5: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3;     break;
-+                      case 6: input_datarate = locked_sym_rate_KSs*mod_fac*3/8/4;     break;
-+                      case 7: input_datarate = locked_sym_rate_KSs*mod_fac*4/8/5;     break;
-+                      case 8: input_datarate = locked_sym_rate_KSs*mod_fac*5/8/6;     break;
-+                      case 9: input_datarate = locked_sym_rate_KSs*mod_fac*8/8/9;     break;
-+                      case 10: input_datarate = locked_sym_rate_KSs*mod_fac*9/8/10; break;
-+                      default: input_datarate = locked_sym_rate_KSs*mod_fac*2/8/3; break;
-+              }
-+
-+              if(state->demod_id == DS3000_ID)
-+                      input_datarate = input_datarate * 115 / 100;
-+
-+              if(input_datarate < 4800)  {tmp1 = 15;tmp2 = 15;} //4.8MHz         TS clock
-+              else if(input_datarate < 4966)  {tmp1 = 14;tmp2 = 15;} //4.966MHz  TS clock
-+              else if(input_datarate < 5143)  {tmp1 = 14;tmp2 = 14;} //5.143MHz  TS clock
-+              else if(input_datarate < 5333)  {tmp1 = 13;tmp2 = 14;} //5.333MHz  TS clock
-+              else if(input_datarate < 5538)  {tmp1 = 13;tmp2 = 13;} //5.538MHz  TS clock
-+              else if(input_datarate < 5760)  {tmp1 = 12;tmp2 = 13;} //5.76MHz   TS clock       allan 0809
-+              else if(input_datarate < 6000)  {tmp1 = 12;tmp2 = 12;} //6MHz      TS clock
-+              else if(input_datarate < 6260)  {tmp1 = 11;tmp2 = 12;} //6.26MHz   TS clock
-+              else if(input_datarate < 6545)  {tmp1 = 11;tmp2 = 11;} //6.545MHz  TS clock
-+              else if(input_datarate < 6857)  {tmp1 = 10;tmp2 = 11;} //6.857MHz  TS clock
-+              else if(input_datarate < 7200)  {tmp1 = 10;tmp2 = 10;} //7.2MHz    TS clock
-+              else if(input_datarate < 7578)  {tmp1 = 9;tmp2 = 10;}  //7.578MHz  TS clock
-+              else if(input_datarate < 8000)  {tmp1 = 9;tmp2 = 9;}   //8MHz      TS clock
-+              else if(input_datarate < 8470)  {tmp1 = 8;tmp2 = 9;}   //8.47MHz   TS clock
-+              else if(input_datarate < 9000)  {tmp1 = 8;tmp2 = 8;}   //9MHz      TS clock
-+              else if(input_datarate < 9600)  {tmp1 = 7;tmp2 = 8;}   //9.6MHz    TS clock
-+              else if(input_datarate < 10285) {tmp1 = 7;tmp2 = 7;}   //10.285MHz TS clock
-+              else if(input_datarate < 12000) {tmp1 = 6;tmp2 = 6;}   //12MHz     TS clock
-+              else if(input_datarate < 14400) {tmp1 = 5;tmp2 = 5;}   //14.4MHz   TS clock
-+              else if(input_datarate < 18000) {tmp1 = 4;tmp2 = 4;}   //18MHz     TS clock
-+              else                                                    {tmp1 = 3;tmp2 = 3;}   //24MHz     TS clock
-+
-+              if(state->demod_id == DS3000_ID) {
-+                      val = (u8)((tmp1<<4) + tmp2);
-+                      m88ds3103_writereg(state, 0xfe, val);
-+              } else {
-+                      tmp1 = m88ds3103_readreg(state, 0x22);
-+                      tmp2 = m88ds3103_readreg(state, 0x24);
-+
-+                      tmp1 >>= 6;
-+                      tmp1 &= 0x03;
-+                      tmp2 >>= 6;
-+                      tmp2 &= 0x03;
-+
-+                      if((tmp1 == 0x00) && (tmp2 == 0x01))
-+                              MClk_KHz = 144000;
-+                      else if((tmp1 == 0x00) && (tmp2 == 0x03))
-+                              MClk_KHz = 72000;
-+                      else if((tmp1 == 0x01) && (tmp2 == 0x01))
-+                              MClk_KHz = 115200;
-+                      else if((tmp1 == 0x02) && (tmp2 == 0x01))
-+                              MClk_KHz = 96000;
-+                      else if((tmp1 == 0x03) && (tmp2 == 0x00))
-+                              MClk_KHz = 192000;
-+                      else
-+                              return 0;
-+
-+                      if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/
-+                              input_datarate = 5200;
-+                              
-+                      if(input_datarate != 0)
-+                              divid_ratio = (u8)(MClk_KHz / input_datarate);
-+                      else
-+                              divid_ratio = 0xFF;
-+
-+                      if(divid_ratio > 128)
-+                              divid_ratio = 128;
-+
-+                      if(divid_ratio < 2)
-+                              divid_ratio = 2;
-+
-+                      tmp1 = (u8)(divid_ratio / 2);
-+                      tmp2 = (u8)(divid_ratio / 2);
-+
-+                      if((divid_ratio % 2) != 0)
-+                              tmp2 += 1;
-+
-+                      tmp1 -= 1;
-+                      tmp2 -= 1;
-+
-+                      tmp1 &= 0x3f;
-+                      tmp2 &= 0x3f;
-+
-+                      val = m88ds3103_readreg(state, 0xfe);
-+                      val &= 0xF0;
-+                      val |= (tmp2 >> 2) & 0x0f;
-+                      m88ds3103_writereg(state, 0xfe, val);
-+
-+                      val = (u8)((tmp2 & 0x03) << 6); 
-+                      val |= tmp1;
-+                      m88ds3103_writereg(state, 0xea, val);
-+              }
-+      } else {
-+              mod_fac = 2;
-+
-+              switch(code_rate) {
-+                      case 4: input_datarate = locked_sym_rate_KSs*mod_fac/2/8;       break;
-+                      case 3: input_datarate = locked_sym_rate_KSs*mod_fac*2/3/8;     break;
-+                      case 2: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8;     break;
-+                      case 1: input_datarate = locked_sym_rate_KSs*mod_fac*5/6/8;     break;
-+                      case 0: input_datarate = locked_sym_rate_KSs*mod_fac*7/8/8;     break;
-+                      default: input_datarate = locked_sym_rate_KSs*mod_fac*3/4/8;    break;
-+              }
-+
-+              if(state->demod_id == DS3000_ID)
-+                      input_datarate = input_datarate * 115 / 100;
-+
-+              if(input_datarate < 6857)               {tmp1 = 7;tmp2 = 7;} //6.857MHz     TS clock
-+              else if(input_datarate < 7384)  {tmp1 = 6;tmp2 = 7;} //7.384MHz     TS clock
-+              else if(input_datarate < 8000)  {tmp1 = 6;tmp2 = 6;} //8MHz             TS clock
-+              else if(input_datarate < 8727)  {tmp1 = 5;tmp2 = 6;} //8.727MHz         TS clock
-+              else if(input_datarate < 9600)  {tmp1 = 5;tmp2 = 5;} //9.6MHz           TS clock
-+              else if(input_datarate < 10666) {tmp1 = 4;tmp2 = 5;} //10.666MHz        TS clock
-+              else if(input_datarate < 12000) {tmp1 = 4;tmp2 = 4;} //12MHz            TS clock
-+              else if(input_datarate < 13714) {tmp1 = 3;tmp2 = 4;} //13.714MHz        TS clock
-+              else if(input_datarate < 16000) {tmp1 = 3;tmp2 = 3;} //16MHz            TS clock
-+              else if(input_datarate < 19200) {tmp1 = 2;tmp2 = 3;} //19.2MHz          TS clock
-+              else                                                    {tmp1 = 2;tmp2 = 2;} //24MHz            TS clock
-+
-+              if(state->demod_id == DS3000_ID) {
-+                      val = m88ds3103_readreg(state, 0xfe);
-+                      val &= 0xc0;
-+                      val |= ((u8)((tmp1<<3) + tmp2));
-+                      m88ds3103_writereg(state, 0xfe, val);
-+              } else {
-+                      if(input_datarate < 5200) /*Max. 2011-12-23 11:55*/
-+                              input_datarate = 5200;
-+                      
-+                      if(input_datarate != 0)
-+                              divid_ratio = (u8)(MClk_KHz / input_datarate);
-+                      else
-+                              divid_ratio = 0xFF;
-+
-+                      if(divid_ratio > 128)
-+                              divid_ratio = 128;
-+
-+                      if(divid_ratio < 2)
-+                              divid_ratio = 2;
-+
-+                      tmp1 = (u8)(divid_ratio / 2);
-+                      tmp2 = (u8)(divid_ratio / 2);
-+
-+                      if((divid_ratio % 2) != 0)
-+                              tmp2 += 1;
-+
-+                      tmp1 -= 1;
-+                      tmp2 -= 1;
-+
-+                      tmp1 &= 0x3f;
-+                      tmp2 &= 0x3f;
-+
-+                      val = m88ds3103_readreg(state, 0xfe);
-+                      val &= 0xF0;
-+                      val |= (tmp2 >> 2) & 0x0f;
-+                      m88ds3103_writereg(state, 0xfe, val);
-+                      
-+                      val = (u8)((tmp2 & 0x03) << 6);
-+                      val |= tmp1;
-+                      m88ds3103_writereg(state, 0xea, val);
-+              }
-+      }
-+      return 0;
-+}
-+
-+static int m88ds3103_demod_connect(struct dvb_frontend *fe, s32 carrier_offset_khz) 
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
-+      u16 value;
-+      u8 val1,val2,data;
-+      
-+      dprintk("connect delivery system = %d\n", state->delivery_system);
-+      
-+      /* ds3000 global reset */
-+      m88ds3103_writereg(state, 0x07, 0x80);
-+      m88ds3103_writereg(state, 0x07, 0x00);
-+      /* ds3000 build-in uC reset */
-+      m88ds3103_writereg(state, 0xb2, 0x01);
-+      /* ds3000 software reset */
-+      m88ds3103_writereg(state, 0x00, 0x01);
-+
-+      switch (state->delivery_system) {
-+      case SYS_DVBS:
-+              /* initialise the demod in DVB-S mode */
-+              if(state->demod_id == DS3000_ID){
-+                      m88ds3103_init_reg(state, ds3000_dvbs_init_tab, sizeof(ds3000_dvbs_init_tab));
-+                      
-+                      value = m88ds3103_readreg(state, 0xfe);
-+                      value &= 0xc0;
-+                      value |= 0x1b;
-+                      m88ds3103_writereg(state, 0xfe, value);
-+                      
-+                      if(state->config->ci_mode)
-+                              val1 = 0x80;
-+                      else if(state->config->ts_mode)
-+                              val1 = 0x60;
-+                      else
-+                              val1 = 0x20;
-+                      m88ds3103_writereg(state, 0xfd, val1);
-+                      
-+              }else if(state->demod_id == DS3103_ID){
-+                      m88ds3103_init_reg(state, ds3103_dvbs_init_tab, sizeof(ds3103_dvbs_init_tab));
-+                      
-+                      /* set ts clock */
-+                      if(state->config->ci_mode == 2){
-+                              val1 = 6; val2 = 6;
-+                      }else if(state->config->ts_mode == 0)   {
-+                              val1 = 3; val2 = 3;
-+                      }else{
-+                              val1 = 0; val2 = 0;
-+                      }
-+                      val1 -= 1; val2 -= 1;
-+                      val1 &= 0x3f; val2 &= 0x3f;
-+                      data = m88ds3103_readreg(state, 0xfe);
-+                      data &= 0xf0;
-+                      data |= (val2 >> 2) & 0x0f;
-+                      m88ds3103_writereg(state, 0xfe, data);
-+                      data = (val2 & 0x03) << 6;
-+                      data |= val1;
-+                      m88ds3103_writereg(state, 0xea, data);
-+                      
-+                      m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d));
-+                      m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30));
-+                      
-+                      /* set master clock */
-+                      val1 = m88ds3103_readreg(state, 0x22);
-+                      val2 = m88ds3103_readreg(state, 0x24);
-+                      
-+                      val1 &= 0x3f;
-+                      val2 &= 0x3f;
-+                      val1 |= 0x80;
-+                      val2 |= 0x40;
-+
-+                      m88ds3103_writereg(state, 0x22, val1);
-+                      m88ds3103_writereg(state, 0x24, val2);  
-+                      
-+                      if(state->config->ci_mode)
-+                              val1 = 0x03;
-+                      else if(state->config->ts_mode)
-+                              val1 = 0x06;
-+                      else
-+                              val1 = 0x42;
-+                      m88ds3103_writereg(state, 0xfd, val1);          
-+              }
-+              break;
-+      case SYS_DVBS2:
-+              /* initialise the demod in DVB-S2 mode */
-+              if(state->demod_id == DS3000_ID){
-+                      m88ds3103_init_reg(state, ds3000_dvbs2_init_tab, sizeof(ds3000_dvbs2_init_tab));
-+              
-+                      if (c->symbol_rate >= 30000000)
-+                              m88ds3103_writereg(state, 0xfe, 0x54);
-+                      else
-+                              m88ds3103_writereg(state, 0xfe, 0x98);
-+                                                              
-+              }else if(state->demod_id == DS3103_ID){
-+                      m88ds3103_init_reg(state, ds3103_dvbs2_init_tab, sizeof(ds3103_dvbs2_init_tab));
-+
-+                      /* set ts clock */
-+                      if(state->config->ci_mode == 2){
-+                              val1 = 6; val2 = 6;
-+                      }else if(state->config->ts_mode == 0){
-+                              val1 = 5; val2 = 4;
-+                      }else{
-+                              val1 = 0; val2 = 0;
-+                      }
-+                      val1 -= 1; val2 -= 1;
-+                      val1 &= 0x3f; val2 &= 0x3f;
-+                      data = m88ds3103_readreg(state, 0xfe);
-+                      data &= 0xf0;
-+                      data |= (val2 >> 2) & 0x0f;
-+                      m88ds3103_writereg(state, 0xfe, data);
-+                      data = (val2 & 0x03) << 6;
-+                      data |= val1;
-+                      m88ds3103_writereg(state, 0xea, data);
-+                      
-+                      m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d));
-+                      m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30));
-+                      
-+                      /* set master clock */
-+                      val1 = m88ds3103_readreg(state, 0x22);
-+                      val2 = m88ds3103_readreg(state, 0x24);
-+                      
-+                      val1 &= 0x3f;
-+                      val2 &= 0x3f;
-+                      if((state->config->ci_mode == 2) || (state->config->ts_mode == 1)){
-+                              val1 |= 0x80;
-+                              val2 |= 0x40;
-+                      }else{
-+                              if (c->symbol_rate >= 28000000){
-+                                      val1 |= 0xc0;
-+                              }else if (c->symbol_rate >= 18000000){
-+                                      val2 |= 0x40;
-+                              }else{
-+                                      val1 |= 0x80;
-+                                      val2 |= 0x40;
-+                              }                               
-+                      }
-+                      m88ds3103_writereg(state, 0x22, val1);
-+                      m88ds3103_writereg(state, 0x24, val2);                                  
-+              }
-+              
-+              if(state->config->ci_mode)
-+                      val1 = 0x03;
-+              else if(state->config->ts_mode)
-+                      val1 = 0x06;
-+              else
-+                      val1 = 0x42;
-+              m88ds3103_writereg(state, 0xfd, val1);
-+              
-+              break;
-+      default:
-+              return 1;
-+      }
-+      /* disable 27MHz clock output */
-+      m88ds3103_writereg(state, 0x29, 0x80);
-+      /* enable ac coupling */
-+      m88ds3103_writereg(state, 0x25, 0x8a);
-+
-+      if ((c->symbol_rate / 1000) <= 3000){
-+              m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 32 * 100 / 64 = 400*/
-+              m88ds3103_writereg(state, 0xc8, 0x20);
-+              m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/
-+              m88ds3103_writereg(state, 0xc7, 0x00);
-+      }else if((c->symbol_rate / 1000) <= 10000){
-+              m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 16 * 100 / 64 = 200*/
-+              m88ds3103_writereg(state, 0xc8, 0x10);
-+              m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/
-+              m88ds3103_writereg(state, 0xc7, 0x00);
-+      }else{
-+              m88ds3103_writereg(state, 0xc3, 0x08); /* 8 * 6 * 100 / 64 = 75*/
-+              m88ds3103_writereg(state, 0xc8, 0x06);
-+              m88ds3103_writereg(state, 0xc4, 0x08); /* 8 * 0 * 100 / 128 = 0*/
-+              m88ds3103_writereg(state, 0xc7, 0x00);
-+      }
-+
-+      m88ds3103_set_symrate(fe);
-+      
-+      m88ds3103_set_CCI(fe);
-+
-+      m88ds3103_set_carrier_offset(fe, carrier_offset_khz);
-+              
-+      /* ds3000 out of software reset */
-+      m88ds3103_writereg(state, 0x00, 0x00);
-+      /* start ds3000 build-in uC */
-+      m88ds3103_writereg(state, 0xb2, 0x00);  
-+      
-+      return 0;
-+}
-+
-+static int m88ds3103_set_frontend(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      struct dtv_frontend_properties *c = &fe->dtv_property_cache;
-+
-+      int i;
-+      fe_status_t status;
-+      u8 lpf_mxdiv, mlpf_max, mlpf_min, nlpf, div4, capCode, changePLL;
-+      s32 offset_khz, lpf_offset_KHz;
-+      u16 value, ndiv, lpf_coeff;
-+      u32 f3db, gdiv28, realFreq;
-+      u8 RFgain;
-+
-+      dprintk("%s() ", __func__);
-+      dprintk("c frequency = %d\n", c->frequency);
-+      dprintk("symbol rate = %d\n", c->symbol_rate);
-+      dprintk("delivery system = %d\n", c->delivery_system);
-+      
-+      realFreq = c->frequency;
-+      lpf_offset_KHz = 0;
-+      if(c->symbol_rate < 5000000){
-+              lpf_offset_KHz = FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz;
-+              realFreq += FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz;
-+      }
-+      
-+      if (state->config->set_ts_params)
-+              state->config->set_ts_params(fe, 0);
-+
-+      div4 = 0;
-+      RFgain = 0;
-+      if(state->tuner_id == TS2022_ID){
-+              m88ds3103_tuner_writereg(state, 0x10, 0x0a);
-+              m88ds3103_tuner_writereg(state, 0x11, 0x40);
-+              if (realFreq < 1103000) {
-+                      m88ds3103_tuner_writereg(state, 0x10, 0x1b);
-+                      div4 = 1;
-+                      ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ;                              
-+              }else {
-+                      ndiv = (realFreq * (6 + 8) * 2)/MT_FE_CRYSTAL_KHZ;
-+              }
-+              ndiv = ndiv + ndiv%2;
-+              if(ndiv < 4095)
-+                      ndiv = ndiv - 1024;
-+              else if (ndiv < 6143)
-+                      ndiv = ndiv + 1024;
-+              else
-+                      ndiv = ndiv + 3072;     
-+              
-+              m88ds3103_tuner_writereg(state, 0x01, (ndiv & 0x3f00) >> 8);                                                                                    
-+      }else{
-+              m88ds3103_tuner_writereg(state, 0x10, 0x00);                    
-+              if (realFreq < 1146000){
-+                      m88ds3103_tuner_writereg(state, 0x10, 0x11);
-+                      div4 = 1;
-+                      ndiv = (realFreq * (6 + 8) * 4) / MT_FE_CRYSTAL_KHZ;
-+              }else{
-+                      m88ds3103_tuner_writereg(state, 0x10, 0x01);
-+                      ndiv = (realFreq * (6 + 8) * 2) / MT_FE_CRYSTAL_KHZ;
-+              }
-+              ndiv = ndiv + ndiv%2;
-+              ndiv = ndiv - 1024;
-+              m88ds3103_tuner_writereg(state, 0x01, (ndiv>>8)&0x0f);
-+      }
-+      /* set pll */
-+      m88ds3103_tuner_writereg(state, 0x02, ndiv & 0x00ff);
-+      m88ds3103_tuner_writereg(state, 0x03, 0x06);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x0f);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x10);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);    
-+
-+      if(state->tuner_id == TS2022_ID){
-+              if(( realFreq >= 1650000 ) && (realFreq <= 1850000)){
-+                      msleep(5);
-+                      value = m88ds3103_tuner_readreg(state, 0x14);
-+                      value &= 0x7f;
-+                      if(value < 64){
-+                              m88ds3103_tuner_writereg(state, 0x10, 0x82);
-+                              m88ds3103_tuner_writereg(state, 0x11, 0x6f);
-+
-+                              m88ds3103_tuner_writereg(state, 0x51, 0x0f);
-+                              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+                              m88ds3103_tuner_writereg(state, 0x50, 0x10);
-+                              m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+                      }
-+              }
-+              msleep(5);
-+              value = m88ds3103_tuner_readreg(state, 0x14);
-+              value &= 0x1f;
-+
-+              if(value > 19){
-+                      value = m88ds3103_tuner_readreg(state, 0x10);
-+                      value &= 0x1d;
-+                      m88ds3103_tuner_writereg(state, 0x10, value);
-+              }                               
-+      }else{
-+              msleep(5);
-+              value = m88ds3103_tuner_readreg(state, 0x66);
-+              changePLL = (((value & 0x80) >> 7) != div4);
-+
-+              if(changePLL){
-+                      m88ds3103_tuner_writereg(state, 0x10, 0x11);
-+                      div4 = 1;
-+                      ndiv = (realFreq * (6 + 8) * 4)/MT_FE_CRYSTAL_KHZ;
-+                      ndiv = ndiv + ndiv%2;
-+                      ndiv = ndiv - 1024;
-+                                      
-+                      m88ds3103_tuner_writereg(state, 0x01, (ndiv>>8) & 0x0f);
-+                      m88ds3103_tuner_writereg(state, 0x02, ndiv & 0xff);
-+                      
-+                      m88ds3103_tuner_writereg(state, 0x51, 0x0f);
-+                      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+                      m88ds3103_tuner_writereg(state, 0x50, 0x10);
-+                      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+              }               
-+      }
-+      /*set the RF gain*/
-+      if(state->tuner_id == TS2020_ID)
-+              m88ds3103_tuner_writereg(state, 0x60, 0x79);
-+                      
-+      m88ds3103_tuner_writereg(state, 0x51, 0x17);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x08);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+      msleep(5);
-+
-+      if(state->tuner_id == TS2020_ID){
-+              RFgain = m88ds3103_tuner_readreg(state, 0x3d);
-+              RFgain &= 0x0f;
-+              if(RFgain < 15){
-+                      if(RFgain < 4) 
-+                              RFgain = 0;
-+                      else
-+                              RFgain = RFgain -3;
-+                      value = ((RFgain << 3) | 0x01) & 0x79;
-+                      m88ds3103_tuner_writereg(state, 0x60, value);
-+                      m88ds3103_tuner_writereg(state, 0x51, 0x17);
-+                      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+                      m88ds3103_tuner_writereg(state, 0x50, 0x08);
-+                      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+              }
-+      }
-+      
-+      /* set the LPF */
-+      if(state->tuner_id == TS2022_ID){
-+              m88ds3103_tuner_writereg(state, 0x25, 0x00);
-+              m88ds3103_tuner_writereg(state, 0x27, 0x70);
-+              m88ds3103_tuner_writereg(state, 0x41, 0x09);
-+              m88ds3103_tuner_writereg(state, 0x08, 0x0b);
-+      }
-+
-+      f3db = ((c->symbol_rate / 1000) *135) / 200 + 2000;
-+      f3db += lpf_offset_KHz;
-+      if (f3db < 7000)
-+              f3db = 7000;
-+      if (f3db > 40000)
-+              f3db = 40000;
-+                      
-+      gdiv28 = (MT_FE_CRYSTAL_KHZ / 1000 * 1694 + 500) / 1000;
-+      m88ds3103_tuner_writereg(state, 0x04, gdiv28 & 0xff);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1b);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x04);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+      msleep(5);
-+
-+      value = m88ds3103_tuner_readreg(state, 0x26);
-+      capCode = value & 0x3f;
-+      if(state->tuner_id == TS2022_ID){
-+              m88ds3103_tuner_writereg(state, 0x41, 0x0d);
-+
-+              m88ds3103_tuner_writereg(state, 0x51, 0x1b);
-+              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+              m88ds3103_tuner_writereg(state, 0x50, 0x04);
-+              m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+
-+              msleep(2);
-+
-+              value = m88ds3103_tuner_readreg(state, 0x26);
-+              value &= 0x3f;
-+              value = (capCode + value) / 2;          
-+      }
-+      else
-+              value = capCode;
-+              
-+      gdiv28 = gdiv28 * 207 / (value * 2 + 151);      
-+      mlpf_max = gdiv28 * 135 / 100;
-+      mlpf_min = gdiv28 * 78 / 100;
-+      if (mlpf_max > 63)
-+              mlpf_max = 63;
-+
-+      if(state->tuner_id == TS2022_ID)
-+              lpf_coeff = 3200;
-+      else
-+              lpf_coeff = 2766;
-+              
-+      nlpf = (f3db * gdiv28 * 2 / lpf_coeff / (MT_FE_CRYSTAL_KHZ / 1000)  + 1) / 2 ;  
-+      if (nlpf > 23) nlpf = 23;
-+      if (nlpf < 1) nlpf = 1;
-+
-+      lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2 / f3db + 1) / 2;
-+
-+      if (lpf_mxdiv < mlpf_min){
-+              nlpf++;
-+              lpf_mxdiv = (nlpf * (MT_FE_CRYSTAL_KHZ / 1000) * lpf_coeff * 2  / f3db + 1) / 2;
-+      }
-+
-+      if (lpf_mxdiv > mlpf_max)
-+              lpf_mxdiv = mlpf_max;
-+
-+      m88ds3103_tuner_writereg(state, 0x04, lpf_mxdiv);
-+      m88ds3103_tuner_writereg(state, 0x06, nlpf);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1b);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x04);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+      msleep(5);
-+      
-+      if(state->tuner_id == TS2022_ID){
-+              msleep(2);
-+              value = m88ds3103_tuner_readreg(state, 0x26);
-+              capCode = value & 0x3f;
-+
-+              m88ds3103_tuner_writereg(state, 0x41, 0x09);
-+
-+              m88ds3103_tuner_writereg(state, 0x51, 0x1b);
-+              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+              m88ds3103_tuner_writereg(state, 0x50, 0x04);
-+              m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+
-+              msleep(2);
-+              value = m88ds3103_tuner_readreg(state, 0x26);
-+              value &= 0x3f;
-+              value = (capCode + value) / 2;
-+
-+              value = value | 0x80;
-+              m88ds3103_tuner_writereg(state, 0x25, value);
-+              m88ds3103_tuner_writereg(state, 0x27, 0x30);
-+
-+              m88ds3103_tuner_writereg(state, 0x08, 0x09);            
-+      }
-+
-+      /* Set the BB gain */
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1e);
-+      m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x01);
-+      m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+      if(state->tuner_id == TS2020_ID){
-+              if(RFgain == 15){
-+                      msleep(40);
-+                      value = m88ds3103_tuner_readreg(state, 0x21);
-+                      value &= 0x0f;
-+                      if(value < 3){
-+                              m88ds3103_tuner_writereg(state, 0x60, 0x61);
-+                              m88ds3103_tuner_writereg(state, 0x51, 0x17);
-+                              m88ds3103_tuner_writereg(state, 0x51, 0x1f);
-+                              m88ds3103_tuner_writereg(state, 0x50, 0x08);
-+                              m88ds3103_tuner_writereg(state, 0x50, 0x00);
-+                      }                       
-+              }
-+      }
-+      msleep(60);
-+      
-+      offset_khz = (ndiv - ndiv % 2 + 1024) * MT_FE_CRYSTAL_KHZ
-+              / (6 + 8) / (div4 + 1) / 2 - realFreq;
-+
-+      m88ds3103_demod_connect(fe, offset_khz+lpf_offset_KHz);
-+
-+      for (i = 0; i < 30 ; i++) {
-+              m88ds3103_read_status(fe, &status);
-+              if (status & FE_HAS_LOCK){
-+                      break;
-+                }
-+              msleep(20);
-+      }
-+      
-+      if((status & FE_HAS_LOCK) == 0){
-+              state->delivery_system = (state->delivery_system == SYS_DVBS) ? SYS_DVBS2 : SYS_DVBS;
-+              m88ds3103_demod_connect(fe, offset_khz);
-+      
-+              for (i = 0; i < 30 ; i++) {
-+                      m88ds3103_read_status(fe, &status);
-+                      if (status & FE_HAS_LOCK){
-+                              break;
-+                      }
-+                      msleep(20);
-+              }
-+      }
-+      
-+      if (status & FE_HAS_LOCK){
-+              if(state->config->ci_mode == 2)
-+                      m88ds3103_set_clock_ratio(state);
-+              if(state->config->start_ctrl){
-+                      if(state->first_lock == 0){
-+                              state->config->start_ctrl(fe);
-+                              state->first_lock = 1;  
-+                      }
-+              }               
-+      }
-+              
-+      return 0;
-+}
-+
-+static int m88ds3103_tune(struct dvb_frontend *fe,
-+                      bool re_tune,
-+                      unsigned int mode_flags,
-+                      unsigned int *delay,
-+                      fe_status_t *status)
-+{     
-+      *delay = HZ / 5;
-+      
-+      dprintk("%s() ", __func__);
-+      dprintk("re_tune = %d\n", re_tune);
-+      
-+      if (re_tune) {
-+              int ret = m88ds3103_set_frontend(fe);
-+              if (ret)
-+                      return ret;
-+      }
-+      
-+      return m88ds3103_read_status(fe, status);
-+}
-+
-+static enum dvbfe_algo m88ds3103_get_algo(struct dvb_frontend *fe)
-+{
-+      return DVBFE_ALGO_HW;
-+}
-+ 
-+ /*
-+ * Power config will reset and load initial firmware if required
-+ */
-+static int m88ds3103_initilaze(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      int ret;
-+
-+      dprintk("%s()\n", __func__);
-+      /* hard reset */
-+      m88ds3103_writereg(state, 0x07, 0x80);
-+      m88ds3103_writereg(state, 0x07, 0x00);
-+      msleep(1);
-+      
-+      m88ds3103_writereg(state, 0x08, 0x01 | m88ds3103_readreg(state, 0x08));
-+      msleep(1);
-+
-+      if(state->tuner_id == TS2020_ID){
-+              /* TS2020 init */
-+              m88ds3103_tuner_writereg(state, 0x42, 0x73);
-+              msleep(2);
-+              m88ds3103_tuner_writereg(state, 0x05, 0x01);
-+              m88ds3103_tuner_writereg(state, 0x62, 0xb5);
-+              m88ds3103_tuner_writereg(state, 0x07, 0x02);
-+              m88ds3103_tuner_writereg(state, 0x08, 0x01);
-+      }
-+      else if(state->tuner_id == TS2022_ID){
-+              /* TS2022 init */
-+              m88ds3103_tuner_writereg(state, 0x62, 0x6c);
-+              msleep(2);
-+              m88ds3103_tuner_writereg(state, 0x42, 0x6c);
-+              msleep(2);
-+              m88ds3103_tuner_writereg(state, 0x7d, 0x9d);
-+              m88ds3103_tuner_writereg(state, 0x7c, 0x9a);
-+              m88ds3103_tuner_writereg(state, 0x7a, 0x76);
-+
-+              m88ds3103_tuner_writereg(state, 0x3b, 0x01);
-+              m88ds3103_tuner_writereg(state, 0x63, 0x88);
-+
-+              m88ds3103_tuner_writereg(state, 0x61, 0x85);
-+              m88ds3103_tuner_writereg(state, 0x22, 0x30);
-+              m88ds3103_tuner_writereg(state, 0x30, 0x40);
-+              m88ds3103_tuner_writereg(state, 0x20, 0x23);
-+              m88ds3103_tuner_writereg(state, 0x24, 0x02);
-+              m88ds3103_tuner_writereg(state, 0x12, 0xa0);    
-+      }
-+              
-+      if(state->demod_id == DS3103_ID){
-+              m88ds3103_writereg(state, 0x07, 0xe0);
-+              m88ds3103_writereg(state, 0x07, 0x00);
-+              msleep(1);              
-+      }
-+      m88ds3103_writereg(state, 0xb2, 0x01);
-+      
-+      /* Load the firmware if required */
-+      ret = m88ds3103_load_firmware(fe);
-+      if (ret != 0){
-+              printk(KERN_ERR "%s: Unable initialize firmware\n", __func__);
-+              return ret;
-+      }
-+      if(state->demod_id == DS3103_ID){
-+              m88ds3103_writereg(state, 0x4d, 0xfd & m88ds3103_readreg(state, 0x4d));
-+              m88ds3103_writereg(state, 0x30, 0xef & m88ds3103_readreg(state, 0x30));         
-+      }
-+
-+      return 0;
-+}
-+
-+/*
-+ * Initialise or wake up device
-+ */
-+static int m88ds3103_initfe(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+      u8 val;
-+
-+      dprintk("%s()\n", __func__);
-+
-+      /* 1st step to wake up demod */
-+      m88ds3103_writereg(state, 0x08, 0x01 | m88ds3103_readreg(state, 0x08));
-+      m88ds3103_writereg(state, 0x04, 0xfe & m88ds3103_readreg(state, 0x04));
-+      m88ds3103_writereg(state, 0x23, 0xef & m88ds3103_readreg(state, 0x23));
-+      
-+      /* 2nd step to wake up tuner */
-+      val = m88ds3103_tuner_readreg(state, 0x00) & 0xff;
-+      if((val & 0x01) == 0){
-+              m88ds3103_tuner_writereg(state, 0x00, 0x01);
-+              msleep(50);
-+      }
-+      m88ds3103_tuner_writereg(state, 0x00, 0x03);
-+      msleep(50);
-+      
-+      return 0;       
-+}
-+
-+/* Put device to sleep */
-+static int m88ds3103_sleep(struct dvb_frontend *fe)
-+{
-+      struct m88ds3103_state *state = fe->demodulator_priv;
-+
-+      dprintk("%s()\n", __func__);
-+      
-+      /* 1st step to sleep tuner */
-+      m88ds3103_tuner_writereg(state, 0x00, 0x00);
-+      
-+      /* 2nd step to sleep demod */
-+      m88ds3103_writereg(state, 0x08, 0xfe & m88ds3103_readreg(state, 0x08));
-+      m88ds3103_writereg(state, 0x04, 0x01 | m88ds3103_readreg(state, 0x04));
-+      m88ds3103_writereg(state, 0x23, 0x10 | m88ds3103_readreg(state, 0x23));
-+      
-+
-+      return 0;
-+}
-+
-+static struct dvb_frontend_ops m88ds3103_ops = {
-+      .delsys = { SYS_DVBS, SYS_DVBS2},
-+      .info = {
-+              .name = "Montage DS3103/TS2022",
-+              .type = FE_QPSK,
-+              .frequency_min = 950000,
-+              .frequency_max = 2150000,
-+              .frequency_stepsize = 1011, /* kHz for QPSK frontends */
-+              .frequency_tolerance = 5000,
-+              .symbol_rate_min = 1000000,
-+              .symbol_rate_max = 45000000,
-+              .caps = FE_CAN_INVERSION_AUTO |
-+                      FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
-+                      FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
-+                      FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
-+                      FE_CAN_2G_MODULATION |
-+                      FE_CAN_QPSK | FE_CAN_RECOVER
-+      },
-+
-+      .release = m88ds3103_release,
-+
-+      .init = m88ds3103_initfe,
-+      .sleep = m88ds3103_sleep,
-+      .read_status = m88ds3103_read_status,
-+      .read_ber = m88ds3103_read_ber,
-+      .read_signal_strength = m88ds3103_read_signal_strength,
-+      .read_snr = m88ds3103_read_snr,
-+      .read_ucblocks = m88ds3103_read_ucblocks,
-+      .set_tone = m88ds3103_set_tone,
-+      .set_voltage = m88ds3103_set_voltage,
-+      .diseqc_send_master_cmd = m88ds3103_send_diseqc_msg,
-+      .diseqc_send_burst = m88ds3103_diseqc_send_burst,
-+      .get_frontend_algo = m88ds3103_get_algo,
-+      .tune = m88ds3103_tune,
-+      .set_frontend = m88ds3103_set_frontend,
-+};
-+
-+MODULE_DESCRIPTION("DVB Frontend module for Montage DS3103/TS2022 hardware");
-+MODULE_AUTHOR("Max nibble");
-+MODULE_LICENSE("GPL");
-diff -Naur v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/m88ds3103.h v4l-dvb-20120916/linux/drivers/media/dvb-frontends/m88ds3103.h
---- v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/m88ds3103.h 1970-01-01 01:00:00.000000000 +0100
-+++ v4l-dvb-20120916/linux/drivers/media/dvb-frontends/m88ds3103.h     2012-11-24 13:34:43.716679774 +0100
-@@ -0,0 +1,53 @@
-+/*
-+    Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver
-+
-+    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 M88DS3103_H
-+#define M88DS3103_H
-+
-+#include <linux/dvb/frontend.h>
-+
-+struct m88ds3103_config {
-+      /* the demodulator's i2c address */
-+      u8 demod_address;
-+      u8 ci_mode;
-+      u8 pin_ctrl;
-+      u8 ts_mode; /* 0: Parallel, 1: Serial */
-+
-+      /* Set device param to start dma */
-+      int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured);
-+    /* Start to transfer data */
-+    int (*start_ctrl)(struct dvb_frontend *fe);
-+    /* Set LNB voltage */
-+    int (*set_voltage)(struct dvb_frontend* fe, fe_sec_voltage_t voltage);
-+};
-+
-+#if defined(CONFIG_DVB_M88DS3103) || \
-+      (defined(CONFIG_DVB_M88DS3103_MODULE) && defined(MODULE))
-+extern struct dvb_frontend *m88ds3103_attach(
-+       const struct m88ds3103_config *config,
-+       struct i2c_adapter *i2c);
-+#else
-+static inline struct dvb_frontend *m88ds3103_attach(
-+       const struct m88ds3103_config *config,
-+       struct i2c_adapter *i2c)
-+{
-+      printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
-+      return NULL;
-+}
-+#endif /* CONFIG_DVB_M88DS3103 */
-+#endif /* M88DS3103_H */
-diff -Naur v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/m88ds3103_priv.h v4l-dvb-20120916/linux/drivers/media/dvb-frontends/m88ds3103_priv.h
---- v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/m88ds3103_priv.h    1970-01-01 01:00:00.000000000 +0100
-+++ v4l-dvb-20120916/linux/drivers/media/dvb-frontends/m88ds3103_priv.h        2012-11-24 13:34:43.716679774 +0100
-@@ -0,0 +1,403 @@
-+/*
-+    Montage Technology M88DS3103/M88TS2022 - DVBS/S2 Satellite demod/tuner driver
-+
-+    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 M88DS3103_PRIV_H
-+#define M88DS3103_PRIV_H
-+
-+#define FW_DOWN_SIZE 32
-+#define FW_DOWN_LOOP (8192/FW_DOWN_SIZE)
-+#define DS3103_DEFAULT_FIRMWARE "dvb-fe-ds3103.fw"
-+#define DS3000_DEFAULT_FIRMWARE "dvb-fe-ds300x.fw"
-+#define MT_FE_MCLK_KHZ 96000 /* in kHz */
-+#define MT_FE_CRYSTAL_KHZ   27000 /* in kHz */
-+#define FREQ_OFFSET_AT_SMALL_SYM_RATE_KHz 3000
-+#define DS3000_ID     0x3000
-+#define DS3103_ID     0x3103
-+#define TS2020_ID     0x2020
-+#define TS2022_ID     0x2022
-+#define UNKNOW_ID     0x0000
-+
-+struct m88ds3103_state {
-+      struct i2c_adapter *i2c;
-+      const struct m88ds3103_config *config;
-+      
-+      struct dvb_frontend frontend;
-+      
-+      u32 preBer;
-+      u8 skip_fw_load;        
-+      u8 first_lock; /* The first time of signal lock */
-+      u16 demod_id; /* demod chip type */
-+      u16 tuner_id; /* tuner chip type */
-+      fe_delivery_system_t delivery_system;
-+};
-+
-+/* For M88DS3103 demod dvbs mode.*/
-+static u8 ds3103_dvbs_init_tab[] = {
-+      0x23, 0x07,
-+      0x08, 0x03,
-+      0x0c, 0x02,
-+      0x21, 0x54,
-+      0x25, 0x82,
-+      0x27, 0x31,
-+      0x30, 0x08,
-+      0x31, 0x40,
-+      0x32, 0x32,
-+      0x33, 0x35,
-+      0x35, 0xff,
-+      0x3a, 0x00,
-+      0x37, 0x10,
-+      0x38, 0x10,
-+      0x39, 0x02,
-+      0x42, 0x60,
-+      0x4a, 0x80,
-+      0x4b, 0x04,
-+      0x4d, 0x91,
-+      0x5d, 0xc8,
-+      0x50, 0x36,
-+      0x51, 0x36,
-+      0x52, 0x36,
-+      0x53, 0x36,
-+      0x63, 0x0f,
-+      0x64, 0x30,
-+      0x65, 0x40,
-+      0x68, 0x26,
-+      0x69, 0x4c,
-+      0x70, 0x20,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x40,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x60,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x80,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0xa0,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x1f,
-+      0x76, 0x38,
-+      0x77, 0xa6,
-+      0x78, 0x0c,
-+      0x79, 0x80,
-+      0x7f, 0x14,
-+      0x7c, 0x00,
-+      0xae, 0x82,
-+      0x80, 0x64,
-+      0x81, 0x66,
-+      0x82, 0x44,
-+      0x85, 0x04,
-+      0xcd, 0xf4,
-+      0x90, 0x33,
-+      0xa0, 0x44,
-+      0xc0, 0x08,
-+      0xc3, 0x10,
-+      0xc4, 0x08,
-+      0xc5, 0xf0,
-+      0xc6, 0xff,
-+      0xc7, 0x00,
-+      0xc8, 0x1a,
-+      0xc9, 0x80,
-+      0xe0, 0xf8,
-+      0xe6, 0x8b,
-+      0xd0, 0x40,
-+      0xf8, 0x20,
-+      0xfa, 0x0f,
-+      0x00, 0x00,
-+      0xbd, 0x01,
-+      0xb8, 0x00,
-+};
-+/* For M88DS3103 demod dvbs2 mode.*/
-+static u8 ds3103_dvbs2_init_tab[] = {
-+      0x23, 0x07,
-+      0x08, 0x07,
-+      0x0c, 0x02,
-+      0x21, 0x54,
-+      0x25, 0x82,
-+      0x27, 0x31,
-+      0x30, 0x08,
-+      0x32, 0x32,
-+      0x33, 0x35,
-+      0x35, 0xff,
-+      0x3a, 0x00,
-+      0x37, 0x10,
-+      0x38, 0x10,
-+      0x39, 0x02,
-+      0x42, 0x60,
-+      0x4a, 0x80,
-+      0x4b, 0x04,
-+      0x4d, 0x91,
-+      0x5d, 0xc8,
-+      0x50, 0x36,
-+      0x51, 0x36,
-+      0x52, 0x36,
-+      0x53, 0x36,
-+      0x63, 0x0f,
-+      0x64, 0x10,
-+      0x65, 0x20,
-+      0x68, 0x46,
-+      0x69, 0xcd,
-+      0x70, 0x20,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x40,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x60,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x80,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0xa0,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x1f,
-+      0x76, 0x38,
-+      0x77, 0xa6,
-+      0x78, 0x0c,
-+      0x79, 0x80,
-+      0x7f, 0x14,
-+      0x85, 0x08,
-+      0xcd, 0xf4,
-+      0x90, 0x33,
-+      0x86, 0x00,
-+      0x87, 0x0f,
-+      0x89, 0x00,
-+      0x8b, 0x44,
-+      0x8c, 0x66,
-+      0x9d, 0xc1,
-+      0x8a, 0x10,
-+      0xad, 0x40,
-+      0xa0, 0x44,
-+      0xc0, 0x08,
-+      0xc1, 0x10,
-+      0xc2, 0x08,
-+      0xc3, 0x10,
-+      0xc4, 0x08,
-+      0xc5, 0xf0,
-+      0xc6, 0xff,
-+      0xc7, 0x00,
-+      0xc8, 0x1a,
-+      0xc9, 0x80,
-+      0xca, 0x23,
-+      0xcb, 0x24,
-+      0xcc, 0xf4,
-+      0xce, 0x74,
-+      0x00, 0x00,
-+      0xbd, 0x01,
-+      0xb8, 0x00,
-+};
-+
-+/* For M88DS3000 demod dvbs mode.*/
-+static u8 ds3000_dvbs_init_tab[] = {
-+      0x23, 0x05,
-+      0x08, 0x03,
-+      0x0c, 0x02,
-+      0x21, 0x54,
-+      0x25, 0x82,
-+      0x27, 0x31,
-+      0x30, 0x08,
-+      0x31, 0x40,
-+      0x32, 0x32,
-+      0x33, 0x35,
-+      0x35, 0xff,
-+      0x3a, 0x00,
-+      0x37, 0x10,
-+      0x38, 0x10,
-+      0x39, 0x02,
-+      0x42, 0x60,
-+      0x4a, 0x40,
-+      0x4b, 0x04,
-+      0x4d, 0x91,
-+      0x5d, 0xc8,
-+      0x50, 0x77,
-+      0x51, 0x77,
-+      0x52, 0x36,
-+      0x53, 0x36,
-+      0x56, 0x01,
-+      0x63, 0x47,
-+      0x64, 0x30,
-+      0x65, 0x40,
-+      0x68, 0x26,
-+      0x69, 0x4c,
-+      0x70, 0x20,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x40,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x60,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x80,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0xa0,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x1f,
-+      0x76, 0x00,
-+      0x77, 0xd1,
-+      0x78, 0x0c,
-+      0x79, 0x80,
-+      0x7f, 0x04,
-+      0x7c, 0x00,
-+      0x80, 0x86,
-+      0x81, 0xa6,
-+      0x85, 0x04,
-+      0xcd, 0xf4,
-+      0x90, 0x33,
-+      0xa0, 0x44,
-+      0xc0, 0x18,
-+      0xc3, 0x10,
-+      0xc4, 0x08,
-+      0xc5, 0x80,
-+      0xc6, 0x80,
-+      0xc7, 0x0a,
-+      0xc8, 0x1a,
-+      0xc9, 0x80,
-+      0xfe, 0xb6,
-+      0xe0, 0xf8,
-+      0xe6, 0x8b,
-+      0xd0, 0x40,
-+      0xf8, 0x20,
-+      0xfa, 0x0f,
-+      0xad, 0x20,
-+      0xae, 0x07,
-+      0xb8, 0x00,
-+};
-+
-+/* For M88DS3000 demod dvbs2 mode.*/
-+static u8 ds3000_dvbs2_init_tab[] = {
-+      0x23, 0x0f,
-+      0x08, 0x07,
-+      0x0c, 0x02,
-+      0x21, 0x54,
-+      0x25, 0x82,
-+      0x27, 0x31,
-+      0x30, 0x08,
-+      0x31, 0x32,
-+      0x32, 0x32,
-+      0x33, 0x35,
-+      0x35, 0xff,
-+      0x3a, 0x00,
-+      0x37, 0x10,
-+      0x38, 0x10,
-+      0x39, 0x02,
-+      0x42, 0x60,
-+      0x4a, 0x80,
-+      0x4b, 0x04,
-+      0x4d, 0x91,
-+      0x5d, 0x88,
-+      0x50, 0x36,
-+      0x51, 0x36,
-+      0x52, 0x36,
-+      0x53, 0x36,
-+      0x63, 0x60,
-+      0x64, 0x10,
-+      0x65, 0x10,
-+      0x68, 0x04,
-+      0x69, 0x29,
-+      0x70, 0x20,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x40,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x60,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x80,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0xa0,
-+      0x71, 0x70,
-+      0x72, 0x04,
-+      0x73, 0x00,
-+      0x70, 0x1f,
-+      0xa0, 0x44,
-+      0xc0, 0x08,
-+      0xc1, 0x10,
-+      0xc2, 0x08,
-+      0xc3, 0x10,
-+      0xc4, 0x08,
-+      0xc5, 0xf0,
-+      0xc6, 0xf0,
-+      0xc7, 0x0a,
-+      0xc8, 0x1a,
-+      0xc9, 0x80,
-+      0xca, 0x23,
-+      0xcb, 0x24,
-+      0xce, 0x74,
-+      0x56, 0x01,
-+      0x90, 0x03,
-+      0x76, 0x80,
-+      0x77, 0x42,
-+      0x78, 0x0a,
-+      0x79, 0x80,
-+      0xad, 0x40,
-+      0xae, 0x07,
-+      0x7f, 0xd4,
-+      0x7c, 0x00,
-+      0x80, 0xa8,
-+      0x81, 0xda,
-+      0x7c, 0x01,
-+      0x80, 0xda,
-+      0x81, 0xec,
-+      0x7c, 0x02,
-+      0x80, 0xca,
-+      0x81, 0xeb,
-+      0x7c, 0x03,
-+      0x80, 0xba,
-+      0x81, 0xdb,
-+      0x85, 0x08,
-+      0x86, 0x00,
-+      0x87, 0x02,
-+      0x89, 0x80,
-+      0x8b, 0x44,
-+      0x8c, 0xaa,
-+      0x8a, 0x10,
-+      0xba, 0x00,
-+      0xf5, 0x04,
-+      0xd2, 0x32,
-+      0xb8, 0x00,
-+};
-+
-+#endif /* M88DS3103_PRIV_H */
-diff -Naur v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/Makefile v4l-dvb-20120916/linux/drivers/media/dvb-frontends/Makefile
---- v4l-dvb-20120916.ORG/linux/drivers/media/dvb-frontends/Makefile    2012-08-17 05:45:27.000000000 +0200
-+++ v4l-dvb-20120916/linux/drivers/media/dvb-frontends/Makefile        2012-11-24 13:34:43.716679774 +0100
-@@ -102,4 +102,7 @@
- obj-$(CONFIG_DVB_RTL2832) += rtl2832.o
- obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o
- obj-$(CONFIG_DVB_AF9033) += af9033.o
-+obj-$(CONFIG_DVB_M88DS3103) += m88ds3103.o
-+
-+
-diff -Naur v4l-dvb-20120916.ORG/linux/drivers/media/rc/keymaps/Makefile v4l-dvb-20120916/linux/drivers/media/rc/keymaps/Makefile
---- v4l-dvb-20120916.ORG/linux/drivers/media/rc/keymaps/Makefile       2012-05-21 05:45:41.000000000 +0200
-+++ v4l-dvb-20120916/linux/drivers/media/rc/keymaps/Makefile   2012-11-24 13:34:43.716679774 +0100
-@@ -27,6 +27,7 @@
-                       rc-dm1105-nec.o \
-                       rc-dntv-live-dvb-t.o \
-                       rc-dntv-live-dvbt-pro.o \
-+                      rc-dvbsky.o \
-                       rc-em-terratec.o \
-                       rc-encore-enltv2.o \
-                       rc-encore-enltv.o \
-diff -Naur v4l-dvb-20120916.ORG/linux/drivers/media/rc/keymaps/rc-dvbsky.c v4l-dvb-20120916/linux/drivers/media/rc/keymaps/rc-dvbsky.c
---- v4l-dvb-20120916.ORG/linux/drivers/media/rc/keymaps/rc-dvbsky.c    1970-01-01 01:00:00.000000000 +0100
-+++ v4l-dvb-20120916/linux/drivers/media/rc/keymaps/rc-dvbsky.c        2012-11-24 13:34:43.716679774 +0100
-@@ -0,0 +1,78 @@
-+/* rc-dvbsky.c - Keytable for Dvbsky Remote Controllers
-+ *
-+ * keymap imported from ir-keymaps.c
-+ *
-+ *
-+ * Copyright (c) 2010-2011 by Mauro Carvalho Chehab <mchehab@redhat.com>
-+ *
-+ * 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.
-+ */
-+
-+#include <media/rc-map.h>
-+#include <linux/module.h>
-+/*
-+ * This table contains the complete RC5 code, instead of just the data part
-+ */
-+
-+static struct rc_map_table rc5_dvbsky[] = {
-+      { 0x0000, KEY_0 },
-+      { 0x0001, KEY_1 },
-+      { 0x0002, KEY_2 },
-+      { 0x0003, KEY_3 },
-+      { 0x0004, KEY_4 },
-+      { 0x0005, KEY_5 },
-+      { 0x0006, KEY_6 },
-+      { 0x0007, KEY_7 },
-+      { 0x0008, KEY_8 },
-+      { 0x0009, KEY_9 },      
-+      { 0x000a, KEY_MUTE },
-+      { 0x000d, KEY_OK },
-+      { 0x000b, KEY_STOP },
-+      { 0x000c, KEY_EXIT },   
-+      { 0x000e, KEY_CAMERA }, /*Snap shot*/
-+      { 0x000f, KEY_SUBTITLE }, /*PIP*/
-+      { 0x0010, KEY_VOLUMEUP },
-+      { 0x0011, KEY_VOLUMEDOWN },
-+      { 0x0012, KEY_FAVORITES },
-+      { 0x0013, KEY_LIST }, /*Info*/
-+      { 0x0016, KEY_PAUSE },
-+      { 0x0017, KEY_PLAY },
-+      { 0x001f, KEY_RECORD },
-+      { 0x0020, KEY_CHANNELDOWN },
-+      { 0x0021, KEY_CHANNELUP },
-+      { 0x0025, KEY_POWER2 },
-+      { 0x0026, KEY_REWIND },
-+      { 0x0027, KEY_FASTFORWARD },
-+      { 0x0029, KEY_LAST },
-+      { 0x002b, KEY_MENU },   
-+      { 0x002c, KEY_EPG },
-+      { 0x002d, KEY_ZOOM },   
-+};
-+
-+static struct rc_map_list rc5_dvbsky_map = {
-+      .map = {
-+              .scan    = rc5_dvbsky,
-+              .size    = ARRAY_SIZE(rc5_dvbsky),
-+              .rc_type = RC_TYPE_RC5,
-+              .name    = RC_MAP_DVBSKY,
-+      }
-+};
-+
-+static int __init init_rc_map_rc5_dvbsky(void)
-+{
-+      return rc_map_register(&rc5_dvbsky_map);
-+}
-+
-+static void __exit exit_rc_map_rc5_dvbsky(void)
-+{
-+      rc_map_unregister(&rc5_dvbsky_map);
-+}
-+
-+module_init(init_rc_map_rc5_dvbsky)
-+module_exit(exit_rc_map_rc5_dvbsky)
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@redhat.com>");
-diff -Naur v4l-dvb-20120916.ORG/linux/drivers/media/usb/dvb-usb/dw2102.c v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb/dw2102.c
---- v4l-dvb-20120916.ORG/linux/drivers/media/usb/dvb-usb/dw2102.c      2012-08-14 05:45:22.000000000 +0200
-+++ v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb/dw2102.c  2012-11-24 15:44:13.269971182 +0100
-@@ -3,6 +3,7 @@
-  *    TeVii S600, S630, S650, S660, S480,
-  *    Prof 1100, 7500,
-  *    Geniatech SU3000 Cards
-+ *    Bestunar US683x HD, DVBsky S860, S960 USB
-  * Copyright (C) 2008-2011 Igor M. Liplianin (liplianin@me.by)
-  *
-  *    This program is free software; you can redistribute it and/or modify it
-@@ -19,6 +20,7 @@
- #include "stb6000.h"
- #include "eds1547.h"
- #include "cx24116.h"
-+#include "m88ds3103.h"
- #include "tda1002x.h"
- #include "mt312.h"
- #include "zl10039.h"
-@@ -786,7 +788,7 @@
-       struct su3000_state *state = (struct su3000_state *)d->priv;
-       u8 obuf[] = {0xde, 0};
--      info("%s: %d, initialized %d\n", __func__, i, state->initialized);
-+      info("%s: %d, initialized %d", __func__, i, state->initialized);
-       if (i && !state->initialized) {
-               state->initialized = 1;
-@@ -824,7 +826,40 @@
-               else
-                       mac[i] = ibuf[0];
--              debug_dump(mac, 6, printk);
-+              debug_dump(mac, 6, deb_xfer);
-+      }
-+
-+      return 0;
-+}
-+
-+static int dvbsky_read_mac_address(struct dvb_usb_device *d, u8 mac[6])
-+{
-+      int i;
-+      u8 obuf[] = { 0x1e, 0x00 };
-+      u8 ibuf[] = { 0 };
-+      struct i2c_msg msg[] = {
-+              {
-+                      .addr = 0x51,
-+                      .flags = 0,
-+                      .buf = obuf,
-+                      .len = 2,
-+              }, {
-+                      .addr = 0x51,
-+                      .flags = I2C_M_RD,
-+                      .buf = ibuf,
-+                      .len = 1,
-+
-+              }
-+      };
-+
-+      for (i = 0; i < 6; i++) {
-+              obuf[1] = i;
-+              if (i2c_transfer(&d->i2c_adap, msg, 2) != 2)
-+                      break;
-+              else
-+                      mac[i] = ibuf[0];
-+
-+              debug_dump(mac, 6, deb_xfer);
-       }
-       return 0;
-@@ -835,7 +870,7 @@
-                                struct dvb_usb_device_description **desc,
-                                int *cold)
- {
--      info("%s\n", __func__);
-+      info("%s", __func__);
-       *cold = 0;
-       return 0;
-@@ -878,6 +913,43 @@
-       return 0;
- }
-+static int bstusb_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
-+{
-+
-+      struct dvb_usb_adapter *udev_adap =
-+              (struct dvb_usb_adapter *)(fe->dvb->priv);
-+
-+      u8 obuf[3] = { 0xe, 0x80, 0 };
-+      u8 ibuf[] = { 0 };
-+
-+      //info("US6830: %s!", __func__);
-+
-+      if (voltage == SEC_VOLTAGE_OFF)
-+              obuf[2] = 0;
-+      else
-+              obuf[2] = 1;
-+
-+      if (dvb_usb_generic_rw(udev_adap->dev, obuf, 3, ibuf, 1, 0) < 0)
-+              err("command 0x0e transfer failed.");
-+
-+      return 0;
-+}
-+
-+static int bstusb_restart(struct dvb_frontend *fe)
-+{
-+
-+      struct dvb_usb_adapter *udev_adap =
-+              (struct dvb_usb_adapter *)(fe->dvb->priv);
-+
-+      u8 obuf[3] = { 0x36, 3, 0 };
-+      u8 ibuf[] = { 0 };
-+
-+      if (dvb_usb_generic_rw(udev_adap->dev, obuf, 3, ibuf, 0, 0) < 0)
-+              err("command 0x36 transfer failed.");
-+
-+      return 0;
-+}
-+
- static void dw210x_led_ctrl(struct dvb_frontend *fe, int offon)
- {
-       static u8 led_off[] = { 0 };
-@@ -983,6 +1055,24 @@
-       .ci_mode = 1,
- };
-+static struct m88ds3103_config US6830_ds3103_config = {
-+      .demod_address = 0x68,
-+      .ci_mode = 1,
-+      .pin_ctrl = 0x83,
-+      .ts_mode = 0,
-+      .start_ctrl = bstusb_restart,
-+      .set_voltage = bstusb_set_voltage,
-+};
-+
-+static struct m88ds3103_config US6832_ds3103_config = {
-+      .demod_address = 0x68,
-+      .ci_mode = 1,
-+      .pin_ctrl = 0x80,
-+      .ts_mode = 0,
-+      .start_ctrl = bstusb_restart,
-+      .set_voltage = bstusb_set_voltage,
-+};
-+
- static int dw2104_frontend_attach(struct dvb_usb_adapter *d)
- {
-       struct dvb_tuner_ops *tuner_ops = NULL;
-@@ -1000,7 +1090,7 @@
-                               tuner_ops->set_bandwidth = stb6100_set_bandw;
-                               tuner_ops->get_bandwidth = stb6100_get_bandw;
-                               d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
--                              info("Attached STV0900+STB6100!\n");
-+                              info("Attached STV0900+STB6100!");
-                               return 0;
-                       }
-               }
-@@ -1014,7 +1104,7 @@
-                                       &dw2104_stv6110_config,
-                                       &d->dev->i2c_adap)) {
-                               d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
--                              info("Attached STV0900+STV6110A!\n");
-+                              info("Attached STV0900+STV6110A!");
-                               return 0;
-                       }
-               }
-@@ -1025,7 +1115,7 @@
-                               &d->dev->i2c_adap);
-               if (d->fe_adap[0].fe != NULL) {
-                       d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
--                      info("Attached cx24116!\n");
-+                      info("Attached cx24116!");
-                       return 0;
-               }
-       }
-@@ -1034,7 +1124,7 @@
-                       &d->dev->i2c_adap);
-       if (d->fe_adap[0].fe != NULL) {
-               d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
--              info("Attached DS3000!\n");
-+              info("Attached DS3000!");
-               return 0;
-       }
-@@ -1053,7 +1143,7 @@
-                                       &d->dev->i2c_adap);
-               if (d->fe_adap[0].fe != NULL) {
-                       d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
--                      info("Attached si21xx!\n");
-+                      info("Attached si21xx!");
-                       return 0;
-               }
-       }
-@@ -1065,7 +1155,7 @@
-                       if (dvb_attach(stb6000_attach, d->fe_adap[0].fe, 0x61,
-                                       &d->dev->i2c_adap)) {
-                               d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
--                              info("Attached stv0288!\n");
-+                              info("Attached stv0288!");
-                               return 0;
-                       }
-               }
-@@ -1077,7 +1167,7 @@
-                                       &d->dev->i2c_adap);
-               if (d->fe_adap[0].fe != NULL) {
-                       d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
--                      info("Attached stv0299!\n");
-+                      info("Attached stv0299!");
-                       return 0;
-               }
-       }
-@@ -1089,7 +1179,7 @@
-       d->fe_adap[0].fe = dvb_attach(tda10023_attach, &dw3101_tda10023_config,
-                               &d->dev->i2c_adap, 0x48);
-       if (d->fe_adap[0].fe != NULL) {
--              info("Attached tda10023!\n");
-+              info("Attached tda10023!");
-               return 0;
-       }
-       return -EIO;
-@@ -1103,7 +1193,7 @@
-               if (dvb_attach(zl10039_attach, d->fe_adap[0].fe, 0x60,
-                               &d->dev->i2c_adap)) {
-                       d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
--                      info("Attached zl100313+zl10039!\n");
-+                      info("Attached zl100313+zl10039!");
-                       return 0;
-               }
-       }
-@@ -1128,7 +1218,7 @@
-       dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG);
--      info("Attached stv0288+stb6000!\n");
-+      info("Attached stv0288+stb6000!");
-       return 0;
-@@ -1150,7 +1240,7 @@
-       dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG);
--      info("Attached ds3000+ds2020!\n");
-+      info("Attached ds3000+ds2020!");
-       return 0;
- }
-@@ -1168,7 +1258,7 @@
-       dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG);
--      info("Attached STV0900+STB6100A!\n");
-+      info("Attached STV0900+STB6100A!");
-       return 0;
- }
-@@ -1205,7 +1295,88 @@
-       if (d->fe_adap[0].fe == NULL)
-               return -EIO;
--      info("Attached DS3000!\n");
-+      info("Attached DS3000!");
-+
-+      return 0;
-+}
-+
-+static int US6830_frontend_attach(struct dvb_usb_adapter *d)
-+{
-+      u8 obuf[3] = { 0xe, 0x04, 1 };
-+      u8 ibuf[] = { 0 };
-+
-+      info("US6830: %s!\n", __func__);
-+
-+      if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
-+              err("command 0x0e transfer failed.");
-+
-+      obuf[0] = 0xe;
-+      obuf[1] = 0x83;
-+      obuf[2] = 0;
-+      
-+      if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
-+              err("command 0x0e transfer failed.");
-+
-+      msleep(20);
-+
-+      obuf[0] = 0xe;
-+      obuf[1] = 0x83;
-+      obuf[2] = 1;
-+
-+      if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
-+              err("command 0x0e transfer failed.");
-+
-+      obuf[0] = 0x51;
-+
-+      if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0)
-+              err("command 0x51 transfer failed.");
-+
-+      d->fe_adap[0].fe = dvb_attach(m88ds3103_attach, &US6830_ds3103_config,
-+                                      &d->dev->i2c_adap);
-+      if (d->fe_adap[0].fe == NULL)
-+              return -EIO;
-+
-+      info("Attached M88DS3103!");
-+
-+      return 0;
-+}
-+
-+static int US6832_frontend_attach(struct dvb_usb_adapter *d)
-+{
-+      u8 obuf[3] = { 0xe, 0x04, 1 };
-+      u8 ibuf[] = { 0 };
-+
-+      info("US6832: %s!", __func__);
-+
-+      if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
-+              err("command 0x0e transfer failed.");
-+
-+      obuf[0] = 0xe;
-+      obuf[1] = 0x83;
-+      obuf[2] = 0;
-+      
-+      if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
-+              err("command 0x0e transfer failed.");
-+
-+      msleep(20);
-+      obuf[0] = 0xe;
-+      obuf[1] = 0x83;
-+      obuf[2] = 1;
-+
-+      if (dvb_usb_generic_rw(d->dev, obuf, 3, ibuf, 1, 0) < 0)
-+              err("command 0x0e transfer failed.");
-+
-+      obuf[0] = 0x51;
-+
-+      if (dvb_usb_generic_rw(d->dev, obuf, 1, ibuf, 1, 0) < 0)
-+              err("command 0x51 transfer failed.");
-+
-+      d->fe_adap[0].fe = dvb_attach(m88ds3103_attach, &US6832_ds3103_config,
-+                                      &d->dev->i2c_adap);
-+      if (d->fe_adap[0].fe == NULL)
-+              return -EIO;
-+
-+      info("Attached M88DS3103!");
-       return 0;
- }
-@@ -1447,6 +1618,9 @@
-       TEVII_S480_1,
-       TEVII_S480_2,
-       X3M_SPC1400HD,
-+      BST_US6830HD,
-+      BST_US6831HD,
-+      BST_US6832HD,
- };
- static struct usb_device_id dw2102_table[] = {
-@@ -1465,6 +1639,9 @@
-       [TEVII_S480_1] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_1)},
-       [TEVII_S480_2] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)},
-       [X3M_SPC1400HD] = {USB_DEVICE(0x1f4d, 0x3100)},
-+      [BST_US6830HD] = {USB_DEVICE(0x0572, 0x6830)},
-+      [BST_US6831HD] = {USB_DEVICE(0x0572, 0x6831)},
-+      [BST_US6832HD] = {USB_DEVICE(0x0572, 0x6832)},
-       { }
- };
-@@ -1870,6 +2047,106 @@
-       }
- };
-+static struct dvb_usb_device_properties US6830_properties = {
-+      .caps = DVB_USB_IS_AN_I2C_ADAPTER,
-+      .usb_ctrl = DEVICE_SPECIFIC,
-+      .size_of_priv = sizeof(struct su3000_state),
-+      .power_ctrl = su3000_power_ctrl,
-+      .num_adapters = 1,
-+      .identify_state = su3000_identify_state,
-+      .i2c_algo = &su3000_i2c_algo,
-+
-+      .rc.legacy = {
-+              .rc_map_table = rc_map_su3000_table,
-+              .rc_map_size = ARRAY_SIZE(rc_map_su3000_table),
-+              .rc_interval = 150,
-+              .rc_query = dw2102_rc_query,
-+      },
-+
-+      .read_mac_address = dvbsky_read_mac_address,
-+
-+      .generic_bulk_ctrl_endpoint = 0x01,
-+      
-+      .adapter = {
-+              {
-+              .num_frontends = 1,
-+              .fe = {{
-+                      .streaming_ctrl   = su3000_streaming_ctrl,
-+                      .frontend_attach  = US6830_frontend_attach,
-+                      .stream = {
-+                              .type = USB_BULK,
-+                              .count = 8,
-+                              .endpoint = 0x82,
-+                              .u = {
-+                                      .bulk = {
-+                                              .buffersize = 4096,
-+                                      }
-+                              }
-+                      }
-+              }},
-+              }
-+      },
-+      .num_device_descs = 2,
-+      .devices = {
-+              { "Bestunar US6830 HD",
-+                      { &dw2102_table[BST_US6830HD], NULL },
-+                      { NULL },
-+              },
-+              { "Bestunar US6831 HD",
-+                      { &dw2102_table[BST_US6831HD], NULL },
-+                      { NULL },
-+              },                              
-+      }
-+};
-+
-+static struct dvb_usb_device_properties US6832_properties = {
-+      .caps = DVB_USB_IS_AN_I2C_ADAPTER,
-+      .usb_ctrl = DEVICE_SPECIFIC,
-+      .size_of_priv = sizeof(struct su3000_state),
-+      .power_ctrl = su3000_power_ctrl,
-+      .num_adapters = 1,
-+      .identify_state = su3000_identify_state,
-+      .i2c_algo = &su3000_i2c_algo,
-+
-+      .rc.legacy = {
-+              .rc_map_table = rc_map_su3000_table,
-+              .rc_map_size = ARRAY_SIZE(rc_map_su3000_table),
-+              .rc_interval = 150,
-+              .rc_query = dw2102_rc_query,
-+      },
-+
-+      .read_mac_address = dvbsky_read_mac_address,
-+
-+      .generic_bulk_ctrl_endpoint = 0x01,
-+
-+      .adapter = {
-+              {
-+              .num_frontends = 1,
-+              .fe = {{
-+                      .streaming_ctrl   = su3000_streaming_ctrl,
-+                      .frontend_attach  = US6832_frontend_attach,
-+                      .stream = {
-+                              .type = USB_BULK,
-+                              .count = 8,
-+                              .endpoint = 0x82,
-+                              .u = {
-+                                      .bulk = {
-+                                              .buffersize = 4096,
-+                                      }
-+                              }
-+                      }
-+              }},
-+              }
-+      },
-+      .num_device_descs = 1,
-+      .devices = {
-+              { "Bestunar US6832 HD",
-+                      { &dw2102_table[BST_US6832HD], NULL },
-+                      { NULL },
-+              },
-+      }
-+};
-+
- static int dw2102_probe(struct usb_interface *intf,
-               const struct usb_device_id *id)
- {
-@@ -1926,6 +2203,10 @@
-           0 == dvb_usb_device_init(intf, p7500,
-                       THIS_MODULE, NULL, adapter_nr) ||
-           0 == dvb_usb_device_init(intf, &su3000_properties,
-+                      THIS_MODULE, NULL, adapter_nr) ||
-+          0 == dvb_usb_device_init(intf, &US6830_properties,
-+                      THIS_MODULE, NULL, adapter_nr) ||
-+          0 == dvb_usb_device_init(intf, &US6832_properties,
-                                    THIS_MODULE, NULL, adapter_nr))
-               return 0;
-diff -Naur v4l-dvb-20120916.ORG/linux/drivers/media/usb/dvb-usb/Kconfig v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb/Kconfig
---- v4l-dvb-20120916.ORG/linux/drivers/media/usb/dvb-usb/Kconfig       2012-08-22 05:45:23.000000000 +0200
-+++ v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb/Kconfig   2012-11-24 13:34:43.716679774 +0100
-@@ -1,3 +1,4 @@
-++     select DVB_M88DS3103 if !DVB_FE_CUSTOMISE
- config DVB_USB
-       tristate "Support for various USB DVB devices"
-       depends on DVB_CORE && USB && I2C && RC_CORE
-@@ -261,6 +262,7 @@
-       select DVB_STV0299 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_STV0288 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_STB6000 if MEDIA_SUBDRV_AUTOSELECT
-+      select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_SI21XX if MEDIA_SUBDRV_AUTOSELECT
-       select DVB_TDA10023 if MEDIA_SUBDRV_AUTOSELECT
-diff -Naur v4l-dvb-20120916.ORG/linux/include/media/rc-map.h v4l-dvb-20120916/linux/include/media/rc-map.h
---- v4l-dvb-20120916.ORG/linux/include/media/rc-map.h  2012-05-21 05:45:41.000000000 +0200
-+++ v4l-dvb-20120916/linux/include/media/rc-map.h      2012-11-24 13:34:43.716679774 +0100
-@@ -86,6 +86,7 @@
- #define RC_MAP_DM1105_NEC                "rc-dm1105-nec"
- #define RC_MAP_DNTV_LIVE_DVBT_PRO        "rc-dntv-live-dvbt-pro"
- #define RC_MAP_DNTV_LIVE_DVB_T           "rc-dntv-live-dvb-t"
-+#define RC_MAP_DVBSKY                    "rc-dvbsky"
- #define RC_MAP_EMPTY                     "rc-empty"
- #define RC_MAP_EM_TERRATEC               "rc-em-terratec"
- #define RC_MAP_ENCORE_ENLTV2             "rc-encore-enltv2"
diff --git a/src/patches/v4l-dvb_rtl28xx_add_usb_ids.patch b/src/patches/v4l-dvb_rtl28xx_add_usb_ids.patch
deleted file mode 100644 (file)
index 1dd649a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -Naur v4l-dvb-20120916.org/linux/drivers/media/usb/dvb-usb-v2/rtl28xxu.c v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
---- v4l-dvb-20120916.org/linux/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2012-09-16 05:46:03.000000000 +0200
-+++ v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb-v2/rtl28xxu.c     2012-09-19 20:03:04.538168193 +0200
-@@ -1228,6 +1228,10 @@
-               &rtl2832u_props, "G-Tek Electronics Group Lifeview LV5TDLX DVB-T", NULL) },
-       { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_NOXON_DAB_STICK,
-               &rtl2832u_props, "NOXON DAB/DAB+ USB dongle", NULL) },
-+      { DVB_USB_DEVICE(0x1d19, 0x1101,
-+              &rtl2832u_props, "DK DVB-T USB dongle", NULL) },
-+      { DVB_USB_DEVICE(0x1f4d, 0xc803,
-+              &rtl2832u_props, "Trekstor DVB-T DAB FM USB dongle", NULL) },
-       { }
- };
- MODULE_DEVICE_TABLE(usb, rtl28xxu_id_table);
diff --git a/src/patches/v4l-dvb_rtl28xx_commented_usb_clear_halt.patch b/src/patches/v4l-dvb_rtl28xx_commented_usb_clear_halt.patch
deleted file mode 100644 (file)
index 8fb8bc4..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Naur v4l-dvb-20120916.org/linux/drivers/media/usb/dvb-usb-v2/rtl28xxu.c v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
---- v4l-dvb-20120916.org/linux/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2012-09-16 05:46:03.000000000 +0200
-+++ v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb-v2/rtl28xxu.c     2012-10-24 13:48:13.113373414 +0200
-@@ -836,7 +836,7 @@
-       if (onoff) {
-               buf[0] = 0x00;
-               buf[1] = 0x00;
--              usb_clear_halt(d->udev, usb_rcvbulkpipe(d->udev, 0x81));
-+//            usb_clear_halt(d->udev, usb_rcvbulkpipe(d->udev, 0x81));
-       } else {
-               buf[0] = 0x10; /* stall EPA */
-               buf[1] = 0x02; /* reset EPA */
diff --git a/src/patches/v4l-dvb_usbv2_dont_report_pidfilter_fail.patch b/src/patches/v4l-dvb_usbv2_dont_report_pidfilter_fail.patch
deleted file mode 100644 (file)
index 4b16125..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -Naur v4l-dvb-20120916.org/linux/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c
---- v4l-dvb-20120916.org/linux/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c     2012-08-16 05:45:24.000000000 +0200
-+++ v4l-dvb-20120916/linux/drivers/media/usb/dvb-usb-v2/dvb_usb_core.c 2012-10-24 13:53:35.636726448 +0200
-@@ -287,9 +287,9 @@
-               ret = adap->props->pid_filter(adap, dvbdmxfeed->index,
-                               dvbdmxfeed->pid, (count == 1) ? 1 : 0);
-                       if (ret < 0)
--                              dev_err(&d->udev->dev, "%s: pid_filter() " \
--                                              "failed=%d\n", KBUILD_MODNAME,
--                                              ret);
-+//                            dev_err(&d->udev->dev, "%s: pid_filter() " \
-+//                                            "failed=%d\n", KBUILD_MODNAME,
-+//                                            ret);
-       /* start feeding if it is first pid */
-       if (adap->feed_count == 1 && count == 1) {
diff --git a/src/patches/vdr-1.6.0-gcc44-fixes.patch b/src/patches/vdr-1.6.0-gcc44-fixes.patch
deleted file mode 100644 (file)
index d8841d8..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-Index: vdr-1.6.0/recording.c
-===================================================================
---- vdr-1.6.0.orig/recording.c
-+++ vdr-1.6.0/recording.c
-@@ -509,8 +509,8 @@ cRecording::cRecording(cTimer *Timer, co
-      Utf8Strn0Cpy(SubtitleBuffer, Subtitle, MAX_SUBTITLE_LENGTH);
-      Subtitle = SubtitleBuffer;
-      }
--  char *macroTITLE   = strstr(Timer->File(), TIMERMACRO_TITLE);
--  char *macroEPISODE = strstr(Timer->File(), TIMERMACRO_EPISODE);
-+  const char *macroTITLE   = strstr(Timer->File(), TIMERMACRO_TITLE);
-+  const char *macroEPISODE = strstr(Timer->File(), TIMERMACRO_EPISODE);
-   if (macroTITLE || macroEPISODE) {
-      name = strdup(Timer->File());
-      name = strreplace(name, TIMERMACRO_TITLE, Title);
-@@ -551,7 +551,7 @@ cRecording::cRecording(const char *FileN
-   sortBuffer = NULL;
-   fileName = strdup(FileName);
-   FileName += strlen(VideoDirectory) + 1;
--  char *p = strrchr(FileName, '/');
-+  const char *p = strrchr(FileName, '/');
-   name = NULL;
-   info = new cRecordingInfo;
-@@ -1022,7 +1022,8 @@ void cRecordings::DelByName(const char *
-   if (recording) {
-      cThreadLock DeletedRecordingsLock(&DeletedRecordings);
-      Del(recording, false);
--     char *ext = strrchr(recording->FileName(), '.');
-+     // wtf?
-+     char *ext = strrchr(const_cast<char*>(recording->FileName()), '.');
-      if (ext) {
-         strncpy(ext, DELEXT, strlen(ext));
-         recording->fileSizeMB = DirSizeMB(recording->FileName());
-Index: vdr-1.6.0/svdrp.c
-===================================================================
---- vdr-1.6.0.orig/svdrp.c
-+++ vdr-1.6.0/svdrp.c
-@@ -736,7 +736,7 @@ void cSVDRP::CmdGRAB(const char *Option)
-      char *strtok_next;
-      FileName = strtok_r(p, delim, &strtok_next);
-      // image type:
--     char *Extension = strrchr(FileName, '.');
-+     const char *Extension = strrchr(FileName, '.');
-      if (Extension) {
-         if (strcasecmp(Extension, ".jpg") == 0 || strcasecmp(Extension, ".jpeg") == 0)
-            Jpeg = true;
-@@ -796,12 +796,12 @@ void cSVDRP::CmdGRAB(const char *Option)
-      if (FileName) {
-         if (grabImageDir) {
-            cString s;
--           char *slash = strrchr(FileName, '/');
-+           char *slash = strrchr(const_cast<char*>(FileName), '/');
-            if (!slash) {
-               s = AddDirectory(grabImageDir, FileName);
-               FileName = s;
-               }
--           slash = strrchr(FileName, '/'); // there definitely is one
-+           slash = strrchr(const_cast<char*>(FileName), '/'); // there definitely is one
-            *slash = 0;
-            char *r = realpath(FileName, RealFileName);
-            *slash = '/';
diff --git a/src/patches/vdr-plugin-epgsearch-gcc44.patch b/src/patches/vdr-plugin-epgsearch-gcc44.patch
deleted file mode 100644 (file)
index 2a92a3b..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-diff -urNad vdr-plugin-epgsearch-0.9.24~/epgsearchsvdrp.c vdr-plugin-epgsearch-0.9.24/epgsearchsvdrp.c
---- vdr-plugin-epgsearch-0.9.24~/epgsearchsvdrp.c      2008-04-13 20:53:44.000000000 +0200
-+++ vdr-plugin-epgsearch-0.9.24/epgsearchsvdrp.c       2009-10-26 20:27:07.000000000 +0100
-@@ -742,12 +742,13 @@
-    {
-       if (*Option) 
-       {
--         char* pipePos = strchr(Option, '|');
-+         const char* pipePos = strchr(Option, '|');
-          if (pipePos)
-          {
--            *pipePos = 0;
--            const char* oldName = Option;
--            const char* newName = pipePos+1;
-+            int index = pipePos - Option;
-+            char* oldName = strdup(Option);
-+            *(oldName + index) = 0;
-+            const char* newName = oldName + index + 1;
-             if (strlen(oldName) > 0 && strlen(newName) > 0)
-             {
-                cChannelGroup *changrp = ChannelGroups.GetGroupByName(Option);
-@@ -769,15 +770,18 @@
-                   }
-                   ChannelGroups.Save();
-                   SearchExts.Save();
-+                  free(oldName);
-                   return cString::sprintf("renamed channel group '%s' to '%s'", oldName, newName);
-                }                  
-                else
-                {
-+                  free(oldName);
-                   ReplyCode = 901;
-                   return cString::sprintf("channel group '%s' not defined", Option);
-                }
-             }
-+            free(oldName);
-          }
-          ReplyCode = 901;
-          return cString("Error in channel group parameters"); 
-diff -urNad vdr-plugin-epgsearch-0.9.24~/epgsearchtools.c vdr-plugin-epgsearch-0.9.24/epgsearchtools.c
---- vdr-plugin-epgsearch-0.9.24~/epgsearchtools.c      2008-04-13 20:53:42.000000000 +0200
-+++ vdr-plugin-epgsearch-0.9.24/epgsearchtools.c       2009-10-26 20:27:07.000000000 +0100
-@@ -743,7 +743,7 @@
-    while(tmp)
-    {
-       // extract a single line
--      char* lf = strchr(tmp, '\n');
-+      const char* lf = strchr(tmp, '\n');
-       char* line = NULL;
-       if (lf)
-       line = strndup(tmp, lf-tmp);
-diff -urNad vdr-plugin-epgsearch-0.9.24~/menu_dirselect.c vdr-plugin-epgsearch-0.9.24/menu_dirselect.c
---- vdr-plugin-epgsearch-0.9.24~/menu_dirselect.c      2008-04-13 20:53:44.000000000 +0200
-+++ vdr-plugin-epgsearch-0.9.24/menu_dirselect.c       2009-10-26 20:27:07.000000000 +0100
-@@ -83,7 +83,7 @@
-       return 1;
-     do
-     {
--      char* pos = strchr(szDir, '~');
-+      const char* pos = strchr(szDir, '~');
-       if (pos)
-       {
-           iLevel++;
-diff -urNad vdr-plugin-epgsearch-0.9.24~/searchtimer_thread.c vdr-plugin-epgsearch-0.9.24/searchtimer_thread.c
---- vdr-plugin-epgsearch-0.9.24~/searchtimer_thread.c  2008-04-28 18:22:31.000000000 +0200
-+++ vdr-plugin-epgsearch-0.9.24/searchtimer_thread.c   2009-10-26 20:27:28.000000000 +0100
-@@ -565,8 +565,8 @@
-    if (!isempty(aux))
-    {
-       tmpaux = strdup(aux);
--      char* begin = strstr(aux, "<epgsearch>");
--      char* end = strstr(aux, "</epgsearch>");
-+      const char* begin = strstr(aux, "<epgsearch>");
-+      const char* end = strstr(aux, "</epgsearch>");
-       if (begin && end)
-       {
-          if (begin == aux) strcpy(tmpaux, ""); else strn0cpy(tmpaux, aux, begin-aux+1); 
index a340d6f1462e6eb1dd2ddacef5682dd28f8306b7..fb203bd2a7cacb11471e425a5a057d69a81eda78 100644 (file)
@@ -53,8 +53,8 @@ cp -pr backupiso.tmp.${TS} backupiso.${TS}
 umount backupiso.tmp.${TS}
 rm -r backupiso.tmp.${TS}
 
-echo "RESTORE_FILE=${TS}.ipf" >> backupiso.${TS}/boot/unattended.conf
-cp /var/ipfire/backup/${TS}.ipf backupiso.${TS}
+# Copy backup file to disk
+cp "/var/ipfire/backup/${TS}.ipf" "backupiso.${TS}/backup.ipf"
 
 echo "Running mkisofs"
 mkisofs -J -r -V "ipfire backup ${TS}" \
index d0e23fa7f8bdf784438b7c7d162226111be694cb..e20f789ed4d8c2e52a9e8bc43f4c5f5c276e1a1b 100644 (file)
@@ -14,7 +14,7 @@ case "$1" in
        /bin/cat /etc/certparams | sed "s/HOSTNAME/`hostname -f`/" | /usr/bin/openssl \
                req -new -key /etc/httpd/server.key -out /etc/httpd/server.csr
        echo "Signing certificate"
-       /usr/bin/openssl x509 -req -days 999999 -in \
+       /usr/bin/openssl x509 -req -days 999999 -sha256 -in \
                /etc/httpd/server.csr -signkey /etc/httpd/server.key -out \
                /etc/httpd/server.crt
        ;;
diff --git a/src/setup/.tx/config b/src/setup/.tx/config
new file mode 100644 (file)
index 0000000..085cca6
--- /dev/null
@@ -0,0 +1,7 @@
+[main]
+host = https://www.transifex.com
+
+[ipfire.setup]
+file_filter = po/<lang>.po
+source_file = po/setup.pot
+source_lang = en
similarity index 96%
rename from src/install+setup/setup/Makefile
rename to src/setup/Makefile
index 924da77dbe1cb7a13af3310b5ef8974e1816f92b..fe42e915d90621aee452d4b5a2dfeecc63ffb07b 100644 (file)
@@ -24,7 +24,7 @@ INCLUDE =
 
 LD      = gcc
 LDFLAGS = 
-LIBS    = -lnewt -lslang
+LIBS    = -lnewt -lslang -lsmooth
 
 COMPILE = $(CC) -c $(INCLUDE) $(CFLAGS)
 
@@ -40,7 +40,7 @@ clean :
 ######
 
 OBJS=main.o hostname.o domainname.o passwords.o networking.o misc.o \
-       dhcp.o keymap.o timezone.o ../libsmooth/libsmooth.o
+       dhcp.o keymap.o timezone.o netstuff.o
 
 setup: $(OBJS)
        $(LINK) $(OBJS) -o $@ $(LIBS)
diff --git a/src/setup/Makefile.am b/src/setup/Makefile.am
new file mode 100644 (file)
index 0000000..0ead631
--- /dev/null
@@ -0,0 +1,58 @@
+#  This file is part of the setup tool.
+#
+#  setup is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+AM_MAKEFLAGS = --no-print-directory
+AUTOMAKE_OPTIONS = color-tests parallel-tests
+
+SUBDIRS = . po
+
+# remove targets if the command fails
+.DELETE_ON_ERROR:
+
+# keep intermediate files
+.SECONDARY:
+
+AM_CPPFLAGS = \
+       -include $(top_builddir)/config.h \
+       $(OUR_CPPFLAGS)
+
+AM_CFLAGS = $(OUR_CFLAGS)
+AM_CXXFLAGS = $(OUR_CXXFLAGS)
+AM_LDFLAGS = $(OUR_LDFLAGS)
+
+bin_SCRIPTS =
+sbin_PROGRAMS =
+
+#- setup -----------------------------------------------------------------------
+
+sbin_PROGRAMS += \
+       setup
+
+setup_SOURCES = \
+       dhcp.c \
+       domainname.c \
+       hostname.c \
+       keymap.c \
+       main.c \
+       misc.c \
+       netstuff.c \
+       networking.c \
+       passwords.c \
+       setup.h \
+       timezone.c
+
+setup_CFLAGS = \
+       $(AM_CFLAGS) \
+       $(LIBSMOOTH_CFLAGS)
+
+setup_LDADD = \
+       $(LIBSMOOTH_LIBS) \
+       $(NEWT_LIBS)
+
+bin_SCRIPTS += \
+       probenic.sh
diff --git a/src/setup/autogen.sh b/src/setup/autogen.sh
new file mode 100755 (executable)
index 0000000..3065488
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+autoreconf --force --install -I m4
diff --git a/src/setup/configure.ac b/src/setup/configure.ac
new file mode 100644 (file)
index 0000000..6f7c31b
--- /dev/null
@@ -0,0 +1,92 @@
+#  This file is part of the setup tool.
+#
+#  setup is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+AC_PREREQ([2.64])
+
+AC_INIT([setup],
+       [001],
+       [],
+       [setup],
+       [http://git.ipfire.org/?p=ipfire-2.x.git;a=summary])
+
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_AUX_DIR([build-aux])
+
+AM_INIT_AUTOMAKE([
+       foreign
+       1.11
+       -Wall
+       -Wno-portability
+       silent-rules
+       tar-pax
+       no-dist-gzip
+       dist-xz
+       subdir-objects
+])
+AM_SILENT_RULES([yes])
+
+LT_PREREQ(2.2)
+LT_INIT([disable-static])
+
+AC_PROG_CC
+AC_PROG_CC_C99
+AC_PROG_CC_C_O
+
+AC_PATH_PROG([M4], [m4])
+
+# Gettext
+AM_GNU_GETTEXT([external])
+AM_GNU_GETTEXT_VERSION([0.18])
+AC_CHECK_HEADERS([libintl.h])
+
+# This makes sure pkg.m4 is available.
+m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
+
+# newt
+LIBS=
+AC_SEARCH_LIBS([newtWinMenu], [newt], [], [AC_MSG_ERROR([*** newt library not found])])
+NEWT_LIBS="$LIBS"
+AC_SUBST(NEWT_LIBS)
+
+LIBS="$save_LIBS"
+
+PKG_CHECK_MODULES(LIBSMOOTH, [libsmooth])
+
+AC_ARG_WITH([distro-name],
+       AS_HELP_STRING([--with-distro-name] [The name of the distribution]),
+       AC_DEFINE_UNQUOTED([NAME], "$withval", [The name of the distribution]),
+       AC_MSG_ERROR([*** you need to set the name with --with-distro-name=]))
+
+AC_ARG_WITH([distro-sname],
+       AS_HELP_STRING([--with-distro-sname] [The short name of the distribution]),
+       AC_DEFINE_UNQUOTED([SNAME], "$withval", [The sname of the distribution]),
+       AC_MSG_ERROR([*** you need to set the sname with --with-distro-sname=]))
+
+AC_ARG_WITH([distro-slogan],
+       AS_HELP_STRING([--with-distro-slogan] [The slogan of the distribution]),
+       AC_DEFINE_UNQUOTED([SLOGAN], "$withval", [The slogan of the distribution]),
+       AC_MSG_ERROR([*** you need to set the slogan with --with-distro-slogan=]))
+
+AC_ARG_WITH([config-root],
+       AS_HELP_STRING([--with-distro-config-root] [The configuration directory]),
+       AC_DEFINE_UNQUOTED([CONFIG_ROOT], "$withval", [The config-root]),
+       AC_MSG_ERROR([*** you need to set CONFIG_ROOT with --with-config-root=]))
+
+AC_CONFIG_FILES([
+       Makefile
+       po/Makefile.in
+])
+
+AC_OUTPUT
+AC_MSG_RESULT([
+       $PACKAGE_NAME $VERSION
+
+       CFLAGS:                 ${OUR_CFLAGS} ${CFLAGS}
+       CPPFLAGS:               ${OUR_CPPFLAGS} ${CPPFLAGS}
+       LDFLAGS:                ${OUR_LDFLAGS} ${LDFLAGS}
+])
similarity index 78%
rename from src/install+setup/setup/dhcp.c
rename to src/setup/dhcp.c
index 332a807e7db2abc0ef760f73958f9aa7702d801c..22f471851f9aae336c22d036b293c230e80abcc5 100644 (file)
@@ -7,7 +7,11 @@
  * Stuff for setting up the DHCP server from the setup prog.
  * 
  */
+
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
 #include "setup.h"
 
 #define TOP 4
@@ -24,8 +28,6 @@
 extern FILE *flog;
 extern char *mylog;
 
-extern char **ctr;
-
 extern int automode;
 
 newtComponent dhcpform;
@@ -44,13 +46,24 @@ int handledhcp(void)
        newtComponent labels[MAX_BOXES];
        newtComponent ok, cancel;       
        char message[1000];
-       char *labeltexts[MAX_BOXES] = { ctr[TR_START_ADDRESS], ctr[TR_END_ADDRESS],
-               ctr[TR_PRIMARY_DNS], ctr[TR_SECONDARY_DNS], ctr[TR_DEFAULT_LEASE],
-               ctr[TR_MAX_LEASE], ctr[TR_DOMAIN_NAME_SUFFIX] };
-       char *varnames[MAX_BOXES] = { "START_ADDR_GREEN", "END_ADDR_GREEN", 
-               "DNS1_GREEN", "DNS2_GREEN",
-               "DEFAULT_LEASE_TIME_GREEN", "MAX_LEASE_TIME_GREEN", 
-               "DOMAIN_NAME_GREEN"};
+       char *labeltexts[MAX_BOXES] = {
+               _("Start address:"),
+               _("End address:"),
+               _("Primary DNS:"),
+               _("Secondary DNS:"),
+               _("Default lease (mins):"),
+               _("Max lease (mins):"),
+               _("Domain name suffix:")
+       };
+       char *varnames[MAX_BOXES] = {
+               "START_ADDR_GREEN",
+               "END_ADDR_GREEN",
+               "DNS1_GREEN",
+               "DNS2_GREEN",
+               "DEFAULT_LEASE_TIME_GREEN",
+               "MAX_LEASE_TIME_GREEN",
+               "DOMAIN_NAME_GREEN"
+       };
        char defaults[MAX_BOXES][STRING_SIZE]; 
        int result;
        int c;
@@ -70,14 +83,14 @@ int handledhcp(void)
        {
                freekeyvalues(dhcpkv);
                freekeyvalues(ethernetkv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
        if (!(readkeyvalues(ethernetkv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(dhcpkv);
                freekeyvalues(ethernetkv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
        if (!(readkeyvalues(mainkv, CONFIG_ROOT "/main/settings")))
@@ -85,7 +98,7 @@ int handledhcp(void)
                freekeyvalues(dhcpkv);
                freekeyvalues(ethernetkv);
                freekeyvalues(mainkv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
 
@@ -95,13 +108,13 @@ int handledhcp(void)
        strcpy(defaults[DEFAULT_LEASE_TIME], "60");
        strcpy(defaults[MAX_LEASE_TIME], "120");
 
-       sprintf(message, ctr[TR_DHCP_SERVER_CONFIGURATION]);
-       newtCenteredWindow(55, 18, message);
+       newtCenteredWindow(55, 18, _("DHCP server configuration"));
 
        dhcpform = newtForm(NULL, NULL, 0);
-       
-       sprintf(message, ctr[TR_CONFIGURE_DHCP]);
-       header = newtTextboxReflowed(1, 1, message, 52, 0, 0, 0);
+
+       header = newtTextboxReflowed(1, 1,
+               _("Configure the DHCP server by entering the settings information."),
+               52, 0, 0, 0);
        newtFormAddComponent(dhcpform, header);
 
        strcpy(temp, ""); findkey(dhcpkv, "ENABLE_GREEN", temp);
@@ -109,7 +122,7 @@ int handledhcp(void)
                startenabled = '*';
        else
                startenabled = ' ';
-       enabledcheckbox = newtCheckbox(2, TOP + 0, ctr[TR_ENABLED], startenabled, " *", &enabledresult);
+       enabledcheckbox = newtCheckbox(2, TOP + 0, _("Enabled"), startenabled, " *", &enabledresult);
        newtFormAddComponent(dhcpform, enabledcheckbox);
        newtComponentAddCallback(enabledcheckbox, dhcpdialogcallbackdhcp, NULL);                
 
@@ -126,13 +139,12 @@ int handledhcp(void)
                
        }
        
-       ok = newtButton(10, c + 7, ctr[TR_OK]);
-       cancel = newtButton(34, c + 7, ctr[TR_CANCEL]);
+       ok = newtButton(10, c + 7, _("OK"));
+       cancel = newtButton(34, c + 7, _("Cancel"));
 
        newtFormAddComponents(dhcpform, ok, cancel, NULL);
        
-       do
-       {
+       do {
                error = 0;
                newtFormRun(dhcpform, &es);
        
@@ -141,22 +153,25 @@ int handledhcp(void)
                        /* OK was pressed; verify the contents of each entry. */                
                        if (enabledresult == '*')
                        {
-                               strcpy(message, ctr[TR_INVALID_FIELDS]);                        
+                               strcpy(message, _("The following fields are invalid:\n\n"));
                                if (inet_addr(results[START_ADDRESS]) == INADDR_NONE)
                                {
-                                       strcat(message, ctr[TR_START_ADDRESS_CR]);
+                                       strcat(message, _("Start address"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                                if (inet_addr(results[END_ADDRESS]) == INADDR_NONE)
                                {
-                                       strcat(message, ctr[TR_END_ADDRESS_CR]);
+                                       strcat(message, _("End address"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                                if (strlen(results[SECONDARY_DNS]))
                                {
                                        if (inet_addr(results[PRIMARY_DNS]) == INADDR_NONE)
                                        {
-                                               strcat(message, ctr[TR_PRIMARY_DNS_CR]);
+                                               strcat(message, _("Primary DNS"));
+                                               strcat(message, "\n");
                                                error = 1;
                                        }
                                }
@@ -164,18 +179,21 @@ int handledhcp(void)
                                {
                                        if (inet_addr(results[SECONDARY_DNS]) == INADDR_NONE)
                                        {
-                                               strcat(message, ctr[TR_SECONDARY_DNS_CR]);
+                                               strcat(message, _("Secondary DNS"));
+                                               strcat(message, "\n");
                                                error = 1;
                                        }
                                }
                                if (!(atol(results[DEFAULT_LEASE_TIME])))
                                {
-                                       strcat(message, ctr[TR_DEFAULT_LEASE_CR]);
+                                       strcat(message, _("Default lease time"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                                if (!(atol(results[MAX_LEASE_TIME])))
                                {
-                                       strcat(message, ctr[TR_MAX_LEASE_CR]);
+                                       strcat(message, _("Max. lease time"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                        }                               
@@ -191,13 +209,13 @@ int handledhcp(void)
                                        replacekeyvalue(dhcpkv, "ENABLE_GREEN", "on");
                                        fclose(fopen(CONFIG_ROOT "/dhcp/enable_green", "w"));
                                        chown(CONFIG_ROOT "/dhcp/enable_green", 99, 99);
-                                       mysystem("/usr/local/bin/dhcpctrl enable");
+                                       mysystem(NULL, "/usr/local/bin/dhcpctrl enable");
                                }
                                else
                                {
                                        replacekeyvalue(dhcpkv, "ENABLE_GREEN", "off");
                                        unlink(CONFIG_ROOT "/dhcp/enable_green");
-                                       mysystem("/usr/local/bin/dhcpctrl disable");
+                                       mysystem(NULL, "/usr/local/bin/dhcpctrl disable");
                                }
                                replacekeyvalue(dhcpkv, "VALID", "yes");
                                writekeyvalues(dhcpkv, CONFIG_ROOT "/dhcp/settings");
@@ -230,14 +248,13 @@ int handledhcp(void)
                                fclose(file);
                                chown(CONFIG_ROOT "/dhcp/dhcpd.conf", 99, 99);
                                if (automode == 0)
-                                       mysystem("/usr/local/bin/dhcpctrl enable");
+                                       mysystem(NULL, "/usr/local/bin/dhcpctrl enable");
                        }
                        result = 1;
                }
                else
                        result = 0;
-       }               
-       while (error);
+       } while (error);
        
        newtFormDestroy(dhcpform);
        newtPopWindow();
similarity index 73%
rename from src/install+setup/setup/domainname.c
rename to src/setup/domainname.c
index 9aedd9b49d064256872515688f59590159df47e0..38269d2a34188dd84007b35d5ebbb29b2e133f93 100644 (file)
@@ -6,14 +6,16 @@
  * $Id: domainname.c
  * 
  */
+
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
 #include "setup.h"
  
 extern FILE *flog;
 extern char *mylog;
 
-extern char **ctr;
-
 extern int automode;
 
 int handledomainname(void)
@@ -29,7 +31,7 @@ int handledomainname(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }       
        
@@ -37,19 +39,18 @@ int handledomainname(void)
        
        for (;;)
        {       
-               rc = newtWinEntries(ctr[TR_DOMAINNAME], ctr[TR_ENTER_DOMAINNAME],
-                       50, 5, 5, 40, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);       
+               rc = newtWinEntries(_("Domain name"), _("Enter Domain name"),
+                       50, 5, 5, 40, entries, _("OK"), _("Cancel"), NULL);     
                
-               if (rc == 1)
-               {
+               if (rc == 1) {
                        strcpy(domainname, values[0]);
                        if (!(strlen(domainname)))
-                               errorbox(ctr[TR_DOMAINNAME_CANNOT_BE_EMPTY]);
+                               errorbox(_("Domain name cannot be empty."));
                        else if (strchr(domainname, ' '))
-                               errorbox(ctr[TR_DOMAINNAME_CANNOT_CONTAIN_SPACES]);
+                               errorbox(_("Domain name cannot contain spaces."));
                        else if (strlen(domainname) != strspn(domainname,
                                "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-."))
-                               errorbox(ctr[TR_DOMAINNAME_NOT_VALID_CHARS]);
+                               errorbox(_("Domain name may only contain letters, numbers, hyphens and periods."));
                        else
                        {
                                replacekeyvalue(kv, "DOMAINNAME", domainname);
similarity index 76%
rename from src/install+setup/setup/hostname.c
rename to src/setup/hostname.c
index 0165257367635c49143533771b82716d701b3264..7d7edc56b5f9ef3835b5195a3c558f2527d741ce 100644 (file)
@@ -9,14 +9,16 @@
  * $Id: hostname.c,v 1.6.2.1 2004/04/14 22:05:41 gespinasse Exp $
  * 
  */
+
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
 #include "setup.h"
  
 extern FILE *flog;
 extern char *mylog;
 
-extern char **ctr;
-
 extern int automode;
 
 int handlehostname(void)
@@ -32,7 +34,7 @@ int handlehostname(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }       
        
@@ -41,19 +43,19 @@ int handlehostname(void)
        
        for (;;)
        {
-               rc = newtWinEntries(ctr[TR_HOSTNAME], ctr[TR_ENTER_HOSTNAME],
-                       50, 5, 5, 40, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);
+               rc = newtWinEntries(_("Hostname"), _("Enter the machine's hostname."),
+                       50, 5, 5, 40, entries, _("OK"), _("Cancel"), NULL);
                
                if (rc == 1)
                {
                        strcpy(hostname, values[0]);
                        if (!(strlen(hostname)))
-                               errorbox(ctr[TR_HOSTNAME_CANNOT_BE_EMPTY]);
+                               errorbox(_("Hostname cannot be empty."));
                        else if (strchr(hostname, ' '))
-                               errorbox(ctr[TR_HOSTNAME_CANNOT_CONTAIN_SPACES]);
+                               errorbox(_("Hostname cannot contain spaces."));
                        else if (strlen(hostname) != strspn(hostname,
                                "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"))
-                               errorbox(ctr[TR_HOSTNAME_NOT_VALID_CHARS]);
+                               errorbox(_("Hostname may only contain letters, numbers and hyphens."));
                        else
                        {
                                replacekeyvalue(kv, "HOSTNAME", hostname);
similarity index 90%
rename from src/install+setup/setup/keymap.c
rename to src/setup/keymap.c
index b143492a1345df4a07d3968c79cf6b972765581c..d0030a3bc0d66c9a7ca549015090b429492b5ec1 100644 (file)
@@ -9,14 +9,16 @@
  * $Id: keymap.c,v 1.9.2.1 2004/04/14 22:05:41 gespinasse Exp $
  * 
  */
-   
+
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
 #include "setup.h"
  
 extern FILE *flog;
 extern char *mylog;
 
-extern char **ctr;
-
 extern int automode;
 
 #define MAX_FILENAMES 5000
@@ -65,7 +67,7 @@ int handlekeymap(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }       
        
@@ -79,8 +81,9 @@ int handlekeymap(void)
                        choice = c;
        }
        
-       rc = newtWinMenu(ctr[TR_KEYBOARD_MAPPING], ctr[TR_KEYBOARD_MAPPING_LONG], 50, 5, 5, 6, displaynames, &choice,
-               ctr[TR_OK], ctr[TR_CANCEL], NULL);
+       rc = newtWinMenu(_("Keyboard mapping"),
+               _("Choose the type of keyboard you are using from the list below."),
+               50, 5, 5, 6, displaynames, &choice, _("OK"), _("Cancel"), NULL);
 
        strcpy(keymap, filenames[choice]);
        
@@ -89,7 +92,7 @@ int handlekeymap(void)
                replacekeyvalue(kv, "KEYMAP", keymap);
                writekeyvalues(kv, CONFIG_ROOT "/main/settings");
                sprintf(commandstring, "/bin/loadkeys %s", keymap);
-               mysystem(commandstring);
+               mysystem(NULL, commandstring);
                result = 1;
        }
        else
diff --git a/src/setup/m4/attributes.m4 b/src/setup/m4/attributes.m4
new file mode 100644 (file)
index 0000000..7e080da
--- /dev/null
@@ -0,0 +1,288 @@
+dnl Macros to check the presence of generic (non-typed) symbols.
+dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
+dnl Copyright (c) 2006-2008 xine project
+dnl Copyright (c) 2012 Lucas De Marchi <lucas.de.marchi@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2, or (at your option)
+dnl any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+dnl 02110-1301, USA.
+dnl
+dnl As a special exception, the copyright owners of the
+dnl macro gives unlimited permission to copy, distribute and modify the
+dnl configure scripts that are the output of Autoconf when processing the
+dnl Macro. You need not follow the terms of the GNU General Public
+dnl License when using or distributing such scripts, even though portions
+dnl of the text of the Macro appear in them. The GNU General Public
+dnl License (GPL) does govern all other use of the material that
+dnl constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the
+dnl Autoconf Macro released by this project. When you make and
+dnl distribute a modified version of the Autoconf Macro, you may extend
+dnl this special exception to the GPL to apply to your modified version as
+dnl well.
+
+dnl Check if FLAG in ENV-VAR is supported by compiler and append it
+dnl to WHERE-TO-APPEND variable
+dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG])
+
+AC_DEFUN([CC_CHECK_FLAG_APPEND], [
+  AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2],
+                 AS_TR_SH([cc_cv_$2_$3]),
+          [eval "AS_TR_SH([cc_save_$2])='${$2}'"
+           eval "AS_TR_SH([$2])='-Werror $3'"
+           AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])],
+                                    [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"],
+                                    [eval "AS_TR_SH([cc_cv_$2_$3])='no'"])
+           eval "AS_TR_SH([$2])='$cc_save_$2'"])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes],
+        [eval "$1='${$1} $3'"])
+])
+
+dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2])
+AC_DEFUN([CC_CHECK_FLAGS_APPEND], [
+  for flag in $3; do
+    CC_CHECK_FLAG_APPEND($1, $2, $flag)
+  done
+])
+
+dnl Check if the flag is supported by linker (cacheable)
+dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+
+AC_DEFUN([CC_CHECK_LDFLAGS], [
+  AC_CACHE_CHECK([if $CC supports $1 flag],
+    AS_TR_SH([cc_cv_ldflags_$1]),
+    [ac_save_LDFLAGS="$LDFLAGS"
+     LDFLAGS="$LDFLAGS $1"
+     AC_LINK_IFELSE([int main() { return 1; }],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_ldflags_$1])="])
+     LDFLAGS="$ac_save_LDFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
+    [$2], [$3])
+])
+
+dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for
+dnl the current linker to avoid undefined references in a shared object.
+AC_DEFUN([CC_NOUNDEFINED], [
+  dnl We check $host for which systems to enable this for.
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  case $host in
+     dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
+     dnl are requested, as different implementations are present; to avoid problems
+     dnl use -Wl,-z,defs only for those platform not behaving this way.
+     *-freebsd* | *-openbsd*) ;;
+     *)
+        dnl First of all check for the --no-undefined variant of GNU ld. This allows
+        dnl for a much more readable commandline, so that people can understand what
+        dnl it does without going to look for what the heck -z defs does.
+        for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
+           CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
+           break
+        done
+     ;;
+  esac
+
+  AC_SUBST([LDFLAGS_NOUNDEFINED])
+])
+
+dnl Check for a -Werror flag or equivalent. -Werror is the GCC
+dnl and ICC flag that tells the compiler to treat all the warnings
+dnl as fatal. We usually need this option to make sure that some
+dnl constructs (like attributes) are not simply ignored.
+dnl
+dnl Other compilers don't support -Werror per se, but they support
+dnl an equivalent flag:
+dnl  - Sun Studio compiler supports -errwarn=%all
+AC_DEFUN([CC_CHECK_WERROR], [
+  AC_CACHE_CHECK(
+    [for $CC way to treat warnings as errors],
+    [cc_cv_werror],
+    [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
+      [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
+    ])
+])
+
+AC_DEFUN([CC_CHECK_ATTRIBUTE], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
+    AS_TR_SH([cc_cv_attribute_$1]),
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
+       [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
+    [AC_DEFINE(
+       AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
+         [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
+         )
+     $4],
+    [$5])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
+  CC_CHECK_ATTRIBUTE(
+    [constructor],,
+    [void __attribute__((constructor)) ctor() { int a; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
+  CC_CHECK_ATTRIBUTE(
+    [format], [format(printf, n, n)],
+    [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
+  CC_CHECK_ATTRIBUTE(
+    [format_arg], [format_arg(printf)],
+    [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
+  CC_CHECK_ATTRIBUTE(
+    [visibility_$1], [visibility("$1")],
+    [void __attribute__((visibility("$1"))) $1_function() { }],
+    [$2], [$3])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
+  CC_CHECK_ATTRIBUTE(
+    [nonnull], [nonnull()],
+    [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
+  CC_CHECK_ATTRIBUTE(
+    [unused], ,
+    [void some_function(void *foo, __attribute__((unused)) void *bar);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
+  CC_CHECK_ATTRIBUTE(
+    [sentinel], ,
+    [void some_function(void *foo, ...) __attribute__((sentinel));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
+  CC_CHECK_ATTRIBUTE(
+    [deprecated], ,
+    [void some_function(void *foo, ...) __attribute__((deprecated));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
+  CC_CHECK_ATTRIBUTE(
+    [alias], [weak, alias],
+    [void other_function(void *foo) { }
+     void some_function(void *foo) __attribute__((weak, alias("other_function")));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
+  CC_CHECK_ATTRIBUTE(
+    [malloc], ,
+    [void * __attribute__((malloc)) my_alloc(int n);],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_PACKED], [
+  CC_CHECK_ATTRIBUTE(
+    [packed], ,
+    [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONST], [
+  CC_CHECK_ATTRIBUTE(
+    [const], ,
+    [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
+    [$1], [$2])
+])
+
+AC_DEFUN([CC_FLAG_VISIBILITY], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
+    [cc_cv_flag_visibility],
+    [cc_flag_visibility_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
+     cc_cv_flag_visibility='yes',
+     cc_cv_flag_visibility='no')
+     CFLAGS="$cc_flag_visibility_save_CFLAGS"])
+
+  AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
+    [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
+       [Define this if the compiler supports the -fvisibility flag])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_FUNC_EXPECT], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([if compiler has __builtin_expect function],
+    [cc_cv_func_expect],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     AC_COMPILE_IFELSE([AC_LANG_SOURCE(
+       [int some_function() {
+        int a = 3;
+        return (int)__builtin_expect(a, 3);
+     }])],
+       [cc_cv_func_expect=yes],
+       [cc_cv_func_expect=no])
+     CFLAGS="$ac_save_CFLAGS"
+    ])
+
+  AS_IF([test "x$cc_cv_func_expect" = "xyes"],
+    [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
+     [Define this if the compiler supports __builtin_expect() function])
+     $1],
+    [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
+  AC_REQUIRE([CC_CHECK_WERROR])
+  AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
+    [cc_cv_attribute_aligned],
+    [ac_save_CFLAGS="$CFLAGS"
+     CFLAGS="$CFLAGS $cc_cv_werror"
+     for cc_attribute_align_try in 64 32 16 8 4 2; do
+        AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+          int main() {
+            static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
+            return c;
+          }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
+     done
+     CFLAGS="$ac_save_CFLAGS"
+  ])
+
+  if test "x$cc_cv_attribute_aligned" != "x"; then
+     AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
+       [Define the highest alignment supported])
+  fi
+])
similarity index 61%
rename from src/install+setup/setup/main.c
rename to src/setup/main.c
index d6531bdf083414f021f76d3e10e4d9257c0705c8..33f4d214201b5798e17034883f88122b4ed8742c 100644 (file)
@@ -8,41 +8,27 @@
  *
  */
 
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
 #include "setup.h"
 
 FILE *flog = NULL;
 char *mylog;
 
-char **ctr = NULL;
-
 int automode = 0;
 
 struct  nic  nics[20] = { { "" , "" , "" , "" } };
 struct knic knics[20] = { { "" , "" , "" , "" } };
 
-extern char *en_tr[];
-extern char *de_tr[];
-extern char *fr_tr[];
-extern char *es_tr[];
-extern char *pl_tr[];
-extern char *ru_tr[];
-extern char *nl_tr[];
-extern char *tr_tr[];
-
 int main(int argc, char *argv[])
 {
-#ifdef  LANG_EN_ONLY
-       char *shortlangnames[] = { "en", NULL };
-       char **langtrs[] = { en_tr, NULL };
-#else
-       char *shortlangnames[] = { "de", "en", "fr", "es", "nl", "pl", "ru", "tr", NULL };
-       char **langtrs[] = { de_tr, en_tr, fr_tr, es_tr, nl_tr, pl_tr, ru_tr, tr_tr, NULL };
-#endif
        int choice;
        char *sections[11]; /* need to fill this out AFTER knowning lang */
        int rc;
        struct keyvalue *kv;
-       char selectedshortlang[STRING_SIZE] = "en";
+       char lang[STRING_SIZE] = "en_US.utf8";
        char title[STRING_SIZE];
        int langcounter;
        int autook = 0;
@@ -73,37 +59,19 @@ int main(int argc, char *argv[])
                printf("%s is not properly installed.\n", NAME);
                return 1;
        }
-       findkey(kv, "LANGUAGE", selectedshortlang);
-
-       for (langcounter = 0; langtrs[langcounter]; langcounter++)
-       {
-               if (strcmp(selectedshortlang, shortlangnames[langcounter]) == 0)
-               {
-                       ctr = langtrs[langcounter];
-                       break;
-               }
-       }
-
-       if (!ctr)
-       {
-               for (choice = 0; shortlangnames[choice]; choice++)
-               {
-                       if (strcmp(shortlangnames[choice], "en") == 0)
-                               break;
-               }
-               if (!shortlangnames[choice])
-                       goto EXIT;
-               ctr = langtrs[choice];
-       }
-
-       sections[0] = ctr[TR_KEYBOARD_MAPPING];
-       sections[1] = ctr[TR_TIMEZONE];
-       sections[2] = ctr[TR_HOSTNAME];
-       sections[3] = ctr[TR_DOMAINNAME];
-       sections[4] = ctr[TR_NETWORKING];
-       sections[5] = ctr[TR_ISDN];
-       sections[6] = ctr[TR_ROOT_PASSWORD];
-       sections[7] = ctr[TR_ADMIN_PASSWORD];
+       findkey(kv, "LANGUAGE", lang);
+
+       setlocale(LC_ALL, lang);
+       setenv("LANGUAGE", lang, 1);
+
+       sections[0] = _("Keyboard mapping");
+       sections[1] = _("Timezone");
+       sections[2] = _("Hostname");
+       sections[3] = _("Domain name");
+       sections[4] = _("Networking");
+       sections[5] = _("ISDN");
+       sections[6] = _("'root' password");
+       sections[7] = _("'admin' password");
        sections[8] = NULL;
 
        newtInit();
@@ -116,19 +84,19 @@ int main(int argc, char *argv[])
                title[strlen(title) - 1] = '\0';
            fclose (f_title);
        } else {
-           sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN);
+           sprintf (title, "%s - %s", NAME, SLOGAN);
        }
        newtDrawRootText(14, 0, title);
-       newtPushHelpLine(ctr[TR_HELPLINE]);             
+       newtPushHelpLine(_("              <Tab>/<Alt-Tab> between elements   |  <Space> selects"));             
 
        if (automode == 0)
        {
                choice = 0;
                for (;;)
                {
-                       rc = newtWinMenu(ctr[TR_SECTION_MENU],
-                               ctr[TR_SELECT_THE_ITEM], 50, 5, 5, 11,
-                               sections, &choice, ctr[TR_OK], ctr[TR_QUIT], NULL);
+                       rc = newtWinMenu(_("Section menu"),
+                               _("Select the item you wish to configure."), 50, 5, 5, 11,
+                               sections, &choice, _("OK"), _("Quit"), NULL);
 
                        if (rc == 2)
                                break;
@@ -196,15 +164,17 @@ int main(int argc, char *argv[])
                autook = 1;
        }
 
-EXIT:  
+EXIT:
        if (automode != 0)
        {
-               sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN);
+               sprintf (title, "%s - %s", NAME, SLOGAN);
                if (autook)
-                       newtWinMessage(title, ctr[TR_OK], ctr[TR_SETUP_FINISHED]);
-               else
-               {
-                       newtWinMessage(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_SETUP_NOT_COMPLETE]);
+                       newtWinMessage(title, _("OK"), _("Setup is complete."));
+               else {
+                       newtWinMessage(_("Warning"), _("OK"),
+                               _("Initial setup was not entirely complete. "
+                               "You must ensure that Setup is properly finished by running "
+                               "setup again at the shell."));
 
                        fprintf(flog, "Setup program has not finished.\n");
                        fflush(flog);
similarity index 81%
rename from src/install+setup/setup/misc.c
rename to src/setup/misc.c
index 58e9bb275d0e8838dc9a5918ad085eb84eb3d50f..3b258e0f184e29bd32c1933b3990b9d0199d285b 100644 (file)
@@ -7,14 +7,16 @@
  * Misc. stuff for the lib.
  * 
  */
+
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
 #include "setup.h"
 
 extern FILE *flog;
 extern char *mylog;
 
-extern char **ctr;
 extern int automode;
 
 /* This will rewrite /etc/hosts, /etc/hosts.*, and the apache ServerName file. */
@@ -35,7 +37,7 @@ int writehostsfiles(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
        findkey(kv, "GREEN_ADDRESS", address);
@@ -47,7 +49,7 @@ int writehostsfiles(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
        strcpy(hostname, SNAME );
@@ -57,7 +59,7 @@ int writehostsfiles(void)
                
        if (!(file = fopen(CONFIG_ROOT "/main/hostname.conf", "w")))
        {
-               sprintf (message, ctr[TR_UNABLE_TO_WRITE_VAR_SMOOTHWALL_MAIN_HOSTNAMECONF], CONFIG_ROOT);
+               sprintf (message, _("Unable to write %s/main/hostname.conf"), CONFIG_ROOT);
                errorbox(message);
                return 0;
        }
@@ -66,12 +68,12 @@ int writehostsfiles(void)
        
        if (!(file = fopen(CONFIG_ROOT "/main/hosts", "r")))
        {
-               errorbox(ctr[TR_UNABLE_TO_OPEN_HOSTS_FILE]);
+               errorbox(_("Unable to open main hosts file."));
                return 0;
        }
        if (!(hosts = fopen("/etc/hosts", "w")))
        {
-               errorbox(ctr[TR_UNABLE_TO_WRITE_ETC_HOSTS]);
+               errorbox(_("Unable to write /etc/hosts."));
                return 0;
        }
        fprintf(hosts, "127.0.0.1\tlocalhost\n");
@@ -112,7 +114,7 @@ int writehostsfiles(void)
        /* TCP wrappers stuff. */
        if (!(file = fopen("/etc/hosts.deny", "w")))
        {
-               errorbox(ctr[TR_UNABLE_TO_WRITE_ETC_HOSTS_DENY]);
+               errorbox(_("Unable to write /etc/hosts.deny."));
                return 0;
        }
        fprintf(file, "ALL : ALL\n");
@@ -120,7 +122,7 @@ int writehostsfiles(void)
        
        if (!(file = fopen("/etc/hosts.allow", "w")))
        {
-               errorbox(ctr[TR_UNABLE_TO_WRITE_ETC_HOSTS_ALLOW]);
+               errorbox(_("Unable to write /etc/hosts.allow."));
                return 0;
        }
        fprintf(file, "sshd : ALL\n");
@@ -129,9 +131,9 @@ int writehostsfiles(void)
        fclose(file);
        
        sprintf(commandstring, "/bin/hostname %s.%s", hostname, domainname);
-       if (mysystem(commandstring))
+       if (mysystem(NULL, commandstring))
        {
-               errorbox(ctr[TR_UNABLE_TO_SET_HOSTNAME]);
+               errorbox(_("Unable to set hostname."));
                return 0;
        }
        
@@ -142,8 +144,8 @@ int handleisdn(void)
 {
        char command[STRING_SIZE];
        sprintf(command, "/etc/rc.d/init.d/mISDN config");
-       if (runcommandwithstatus(command, ctr[TR_PROBING_ISDN]))
-               errorbox(ctr[TR_ERROR_PROBING_ISDN]);
+       if (runcommandwithstatus(command, _("ISDN"), _("Scanning and configuring ISDN devices."), NULL))
+               errorbox(_("Unable to scan for ISDN devices."));
        // Need to write some lines that count the cards and say the names...
        return 1;
 }
similarity index 88%
rename from src/install+setup/libsmooth/netstuff.c
rename to src/setup/netstuff.c
index 8c6f3fa90f7158a946912d9fa483b1dbf7015085..a656e9f910b183a8520b95308c7f02ed02503caa 100644 (file)
@@ -8,14 +8,18 @@
  * 
  */
 
-#include "libsmooth.h"
+#include <libsmooth.h>
 #include <signal.h>
 
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
+#include "setup.h"
+
 extern FILE *flog;
 extern char *mylog;
 
-extern char **ctr;
-
 extern struct nic nics[];
 extern struct knic knics[];
 
@@ -79,12 +83,12 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
        sprintf(dhcphostnamefield, "%s_DHCP_HOSTNAME", colour);
        sprintf(dhcpforcemtufield, "%s_DHCP_FORCE_MTU", colour);
                
-       sprintf(message, ctr[TR_INTERFACE], colour);
+       sprintf(message, _("Interface - %s"), colour);
        newtCenteredWindow(44, (typeflag ? 18 : 12), message);
        
        networkform = newtForm(NULL, NULL, 0);
 
-       sprintf(message, ctr[TR_ENTER_THE_IP_ADDRESS_INFORMATION], colour);
+       sprintf(message, _("Enter the IP address information for the %s interface."), colour);
        header = newtTextboxReflowed(1, 1, message, 42, 0, 0, 0);
        newtFormAddComponent(networkform, header);
 
@@ -96,18 +100,19 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
                if (strcmp(temp, "STATIC") == 0) startstatictype = 1;
                if (strcmp(temp, "DHCP") == 0) startdhcptype = 1;
                if (strcmp(temp, "PPPOE") == 0) startpppoetype = 1;
-               statictyperadio = newtRadiobutton(2, 4, ctr[TR_STATIC], startstatictype, NULL);
-               dhcptyperadio = newtRadiobutton(2, 5, ctr[TR_DHCP], startdhcptype, statictyperadio);
-               pppoetyperadio = newtRadiobutton(2, 6, ctr[TR_PPP_DIALUP], startpppoetype, dhcptyperadio);
+               statictyperadio = newtRadiobutton(2, 4, _("Static"), startstatictype, NULL);
+               dhcptyperadio = newtRadiobutton(2, 5, _("DHCP"), startdhcptype, statictyperadio);
+               pppoetyperadio = newtRadiobutton(2, 6, _("PPP DIALUP (PPPoE, modem, ATM ...)"),
+                       startpppoetype, dhcptyperadio);
                newtFormAddComponents(networkform, statictyperadio, dhcptyperadio, 
                        pppoetyperadio, NULL);
                newtComponentAddCallback(statictyperadio, networkdialogcallbacktype, NULL);
                newtComponentAddCallback(dhcptyperadio, networkdialogcallbacktype, NULL);
                newtComponentAddCallback(pppoetyperadio, networkdialogcallbacktype, NULL);
                dhcphostnamelabel = newtTextbox(2, 8, 18, 1, 0);
-               newtTextboxSetText(dhcphostnamelabel, ctr[TR_DHCP_HOSTNAME]);
+               newtTextboxSetText(dhcphostnamelabel, _("DHCP Hostname:"));
                dhcpforcemtulabel = newtTextbox(2, 9, 18, 1, 0);
-               newtTextboxSetText(dhcpforcemtulabel, ctr[TR_DHCP_FORCE_MTU]);
+               newtTextboxSetText(dhcpforcemtulabel, _("Force DHCP MTU:"));
                strcpy(temp, defaultdhcphostname);
                findkey(kv, dhcphostnamefield, temp);
                dhcphostnameentry = newtEntry(20, 8, temp, 20, &dhcphostnameresult, 0);
@@ -126,7 +131,7 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
        }
        /* Address */
        addresslabel = newtTextbox(2, (typeflag ? 11 : 4) + 0, 18, 1, 0);
-       newtTextboxSetText(addresslabel, ctr[TR_IP_ADDRESS_PROMPT]);
+       newtTextboxSetText(addresslabel, _("IP address:"));
        strcpy(temp, "");
        findkey(kv, addressfield, temp);
        addressentry = newtEntry(20, (typeflag ? 11 : 4) + 0, temp, 20, &addressresult, 0);
@@ -138,7 +143,7 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
        
        /* Netmask */
        netmasklabel = newtTextbox(2, (typeflag ? 11 : 4) + 1, 18, 1, 0);
-       newtTextboxSetText(netmasklabel, ctr[TR_NETMASK_PROMPT]);
+       newtTextboxSetText(netmasklabel, _("Network mask:"));
        strcpy(temp, "255.255.255.0"); findkey(kv, netmaskfield, temp);
        netmaskentry = newtEntry(20, (typeflag ? 11 : 4) + 1, temp, 20, &netmaskresult, 0);
        newtEntrySetFilter(netmaskentry, ip_input_filter, NULL);
@@ -149,8 +154,8 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
        newtFormAddComponent(networkform, netmaskentry);
 
        /* Buttons. */
-       ok = newtButton(8, (typeflag ? 14 : 7), ctr[TR_OK]);
-       cancel = newtButton(26, (typeflag ? 14 : 7), ctr[TR_CANCEL]);
+       ok = newtButton(8, (typeflag ? 14 : 7), _("OK"));
+       cancel = newtButton(26, (typeflag ? 14 : 7), _("Cancel"));
 
        newtFormAddComponents(networkform, ok, cancel, NULL);
 
@@ -165,7 +170,8 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
                if (es.u.co == ok)
                {
                        /* OK was pressed; verify the contents of each entry. */
-                       strcpy(message, ctr[TR_INVALID_FIELDS]);
+                       strcpy(message, _("The following fields are invalid:"));
+                       strcat(message, "\n\n");
                        
                        strcpy(type, "STATIC");
                        if (typeflag)
@@ -174,12 +180,14 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
                        {               
                                if (inet_addr(addressresult) == INADDR_NONE)
                                {
-                                       strcat(message, ctr[TR_IP_ADDRESS_CR]);
+                                       strcat(message, _("IP address"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                                if (inet_addr(netmaskresult) == INADDR_NONE)
                                {
-                                       strcat(message, ctr[TR_NETWORK_MASK_CR]);
+                                       strcat(message, _("Network mask"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                        }
@@ -187,7 +195,8 @@ int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
                        {
                                if (!strlen(dhcphostnameresult))
                                {
-                                       strcat(message, ctr[TR_DHCP_HOSTNAME_CR]);
+                                       strcat(message, _("DHCP hostname"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                        }
@@ -365,7 +374,7 @@ int get_knic(int card)              //returns "0" for zero cards or error and "1" card is fo
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
 
@@ -384,7 +393,7 @@ int get_knic(int card)              //returns "0" for zero cards or error and "1" card is fo
                strcpy(knics[ card ].driver, temp);
                ret_value = 1;
        } else {
-               strcpy(knics[ card ].description, ctr[TR_UNSET]);
+               strcpy(knics[ card ].description, _("Unset"));
                ret_value = 0;
        }
        freekeyvalues(kv);
@@ -413,7 +422,7 @@ int is_interface_up(char *card) {   /* Check if the interface is UP */
        char temp[STRING_SIZE];
 
        sprintf(temp,"ip link show dev %s | grep -q UP", card);
-       if (mysystem(temp)) return 0; else return 1;
+       if (mysystem(NULL, temp)) return 0; else return 1;
 }
 
 int rename_device(char *old_name, char *new_name) {
@@ -425,7 +434,7 @@ int rename_device(char *old_name, char *new_name) {
                return 0;
        }
        sprintf(temp,"/sbin/ip link set dev %s name %s",old_name ,new_name );
-       mysystem(temp);
+       mysystem(NULL, temp);
 
        return 1;
 }
@@ -477,14 +486,14 @@ int nic_shutdown(char *nic) {
        char temp[STRING_SIZE];
        
        sprintf(temp,"ip link set %s down", nic);
-       mysystem(temp);
+       mysystem(NULL, temp);
 }
 
 int nic_startup(char *nic) {
        char temp[STRING_SIZE];
        
        sprintf(temp,"ip link set %s up", nic);
-       mysystem(temp);
+       mysystem(NULL, temp);
 
 }
 
@@ -554,7 +563,7 @@ int write_configs_netudev(int card , int colour)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
 
@@ -585,7 +594,7 @@ int scan_network_cards(void)
        
        if (!(scanned_nics_read_done))
        {
-               mysystem("/bin/probenic.sh");
+               mysystem(NULL, "/usr/bin/probenic.sh");
                if( (fp = fopen(SCANNED_NICS, "r")) == NULL )
                {
                        fprintf(stderr,"Couldn't open "SCANNED_NICS);
@@ -657,18 +666,19 @@ int nicmenu(int colour)
 
                pMenuInhalt[mcount] = NULL;
 
-               sprintf(message, ctr[TR_CHOOSE_NETCARD], ucolourcard[colour]);
+               sprintf(message, _("Please choose a networkcard for the following interface - %s."), ucolourcard[colour]);
                rc=2;
                while ( rc == 2 ) {
-                       rc = newtWinMenu( ctr[TR_NETCARDMENU2], message, 50, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_SELECT], ctr[TR_IDENTIFY], ctr[TR_CANCEL], NULL);
+                       rc = newtWinMenu(_("Extended Network Menu"), message, 50, 5, 5, 6, pMenuInhalt, &choise,
+                               _("Select"), _("Identify"), _("Cancel"), NULL);
                        if ( rc == 2 ) {
                                sprintf(temp, "/sbin/ip link set %s up", nics[found_NIC_as_Card[choise]].nic);
-                               mysystem(temp);
+                               mysystem(NULL, temp);
                                sprintf(temp, "/usr/sbin/ethtool -p %s 10", nics[found_NIC_as_Card[choise]].nic);
-                               if (runcommandwithstatus(temp,ctr[TR_IDENTIFY_SHOULD_BLINK]) != 0) {      
-                                       errorbox(ctr[TR_IDENTIFY_NOT_SUPPORTED]);
+                               if (runcommandwithstatus(temp, _("Device Identification"), _("The lights on the selected port should flash now for 10 seconds..."), NULL) != 0) {
+                                       errorbox(_("Identification is not supported by this interface."));
                                sprintf(temp, "/sbin/ip link set %s down", nics[found_NIC_as_Card[choise]].nic);
-                               mysystem(temp);
+                               mysystem(NULL, temp);
                                }
                        }
                }
@@ -678,7 +688,7 @@ int nicmenu(int colour)
                return 0;
        } else {
                // We have to add here that you can manually add a device
-               errorbox( ctr[TR_ERROR_INTERFACES]);
+               errorbox(_("There are no unassigned interfaces on your system."));
                return 1;
        }
 }
@@ -691,12 +701,12 @@ int clear_card_entry(int card)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
 
        strcpy(knics[card].driver, "");
-       strcpy(knics[card].description, ctr[TR_UNSET]);
+       strcpy(knics[card].description, _("Unset"));
        strcpy(knics[card].macaddr, "");
        strcpy(knics[card].colour, "");
        sprintf(temp, "%s_DRIVER", ucolourcard[card]);
@@ -719,8 +729,8 @@ int ask_clear_card_entry(int card)
        char message[STRING_SIZE];
        int rc;
 
-       sprintf(message, ctr[TR_REMOVE_CARD], ucolourcard[card]);
-       rc = newtWinChoice(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_CANCEL], message);                               
+       sprintf(message, _("Do you really want to remove the assigned %s interface?"), ucolourcard[card]);
+       rc = newtWinChoice(_("Warning"), _("OK"), _("Cancel"), message);
 
        if ( rc = 0 || rc == 1) {
                clear_card_entry(card);
@@ -742,15 +752,14 @@ int manualdriver(char *driver, char *driveroptions)
        strcpy(driver, "");
        strcpy(driveroptions, "");
        
-       rc = newtWinEntries(ctr[TR_SELECT_NETWORK_DRIVER], 
-               ctr[TR_MODULE_PARAMETERS], 50, 5, 5, 40, entries, 
-               ctr[TR_OK], ctr[TR_CANCEL], NULL);      
+       rc = newtWinEntries(_("Select network driver"), _("Set additional module parameters"),
+               50, 5, 5, 40, entries,  _("OK"), _("Cancel"), NULL);
        if (rc == 0 || rc == 1)
        {
                if (strlen(values[0]))
                {
                        sprintf(commandstring, "/sbin/modprobe %s", values[0]);
-                       if (runcommandwithstatus(commandstring, ctr[TR_LOADING_MODULE]) == 0)
+                       if (runcommandwithstatus(commandstring, _("Loading module..."), _("Loading module..."), NULL) == 0)
                        {
                                if ((driverend = strchr(values[0], ' ')))
                                {
@@ -765,10 +774,10 @@ int manualdriver(char *driver, char *driveroptions)
                                }
                        }
                        else
-                               errorbox(ctr[TR_UNABLE_TO_LOAD_DRIVER_MODULE]);
+                               errorbox(_("Unable to load driver module."));
                }
                else
-                       errorbox(ctr[TR_MODULE_NAME_CANNOT_BE_BLANK]);
+                       errorbox(_("Module name cannot be blank."));
        }
        free(values[0]);
 
similarity index 71%
rename from src/install+setup/setup/networking.c
rename to src/setup/networking.c
index edd3c71af0d60560c64b0f41616640c1eb3c60cd..df4f00f0b1f6b28e238aefd255780708fea4dbba 100644 (file)
@@ -7,7 +7,11 @@
  * The big one: networking. 
  * 
  */
+
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
 #include "setup.h"
 
 #define DNS1 0
@@ -18,8 +22,6 @@
 extern FILE *flog;
 extern char *mylog;
 
-extern char **ctr;
-
 extern int automode;
 
 #define HAS_GREEN 1
@@ -105,12 +107,12 @@ int handlenetworking(void)
                if (netaddresschange)
                {
                        runcommandwithstatus("/etc/rc.d/init.d/network stop",
-                               ctr[TR_PUSHING_NETWORK_DOWN]);
+                               _("Networking"), _("Stopping network..."), NULL);
 
                        rename_nics();
 
                        runcommandwithstatus("/etc/rc.d/init.d/network start",
-                               ctr[TR_PULLING_NETWORK_UP]);
+                               _("Networking"), _("Restarting network..."), NULL);
                }
        } else {
                rename_nics();
@@ -129,7 +131,7 @@ int oktoleave(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }       
 
@@ -141,13 +143,13 @@ int oktoleave(void)
                strcpy(temp, ""); findkey(kv, "GREEN_DEV", temp);
                if (!(strlen(temp)))
                {
-                       errorbox(ctr[TR_NO_GREEN_INTERFACE]);
+                       errorbox(_("No GREEN interface assigned."));
                        freekeyvalues(kv);
                        return 0;
                }
                if (!(interfacecheck(kv, "GREEN")))
                {
-                       errorbox(ctr[TR_MISSING_GREEN_IP]);
+                       errorbox(_("Missing an IP address on GREEN."));
                        freekeyvalues(kv);
                        return 0;
                }
@@ -158,7 +160,8 @@ int oktoleave(void)
                strcpy(temp, ""); findkey(kv, "RED_DEV", temp);
                if (!(strlen(temp)))
                {
-                       rc = newtWinChoice(ctr[TR_ERROR], ctr[TR_OK], ctr[TR_IGNORE], ctr[TR_NO_RED_INTERFACE]);
+                       rc = newtWinChoice(_("Error"), _("OK"), _("Ignore"),
+                               _("No RED interface assigned."));
                        if (rc == 0 || rc == 1)
                        {
                                freekeyvalues(kv);
@@ -167,7 +170,7 @@ int oktoleave(void)
                }
                if (!(interfacecheck(kv, "RED")))
                {
-                       errorbox(ctr[TR_MISSING_RED_IP]);
+                       errorbox(_("Missing an IP address on RED."));
                        freekeyvalues(kv);
                        return 0;
                }
@@ -177,13 +180,13 @@ int oktoleave(void)
                strcpy(temp, ""); findkey(kv, "ORANGE_DEV", temp);
                if (!(strlen(temp)))
                {
-                       errorbox(ctr[TR_NO_ORANGE_INTERFACE]);
+                       errorbox(_("No ORANGE interface assigned."));
                        freekeyvalues(kv);
                        return 0;
                }
                if (!(interfacecheck(kv, "ORANGE")))
                {
-                       errorbox(ctr[TR_MISSING_ORANGE_IP]);
+                       errorbox(_("Missing an IP address on ORANGE."));
                        freekeyvalues(kv);
                        return 0;
                }
@@ -193,13 +196,13 @@ int oktoleave(void)
                strcpy(temp, ""); findkey(kv, "BLUE_DEV", temp);
                if (!(strlen(temp)))
                {
-                       errorbox(ctr[TR_NO_BLUE_INTERFACE]);
+                       errorbox(_("No BLUE interface assigned."));
                        freekeyvalues(kv);
                        return 0;
                }
                if (!(interfacecheck(kv, "BLUE")))
                {
-                       errorbox(ctr[TR_MISSING_BLUE_IP]);
+                       errorbox(_("Missing an IP address on BLUE."));
                        freekeyvalues(kv);
                        return 0;
                }
@@ -211,14 +214,14 @@ int oktoleave(void)
                strcpy(temp, ""); findkey(kv, "DNS1", temp);
                if (!(strlen(temp)))
                {
-                       errorbox(ctr[TR_MISSING_DNS]);
+                       errorbox(_("Misssing DNS."));
                        freekeyvalues(kv);
                        return 0;
                }
                strcpy(temp, ""); findkey(kv, "DEFAULT_GATEWAY", temp);
                if (!(strlen(temp)))
                {
-                       errorbox(ctr[TR_MISSING_DEFAULT]);
+                       errorbox(_("Missing Default Gateway."));
                        freekeyvalues(kv);
                        return 0;
                }
@@ -230,10 +233,13 @@ int oktoleave(void)
 /* Shows the main menu and a summary of the current settings. */
 int firstmenu(void)
 {
-       char *sections[] = { ctr[TR_NETWORK_CONFIGURATION_TYPE],
-               ctr[TR_DRIVERS_AND_CARD_ASSIGNMENTS],
-               ctr[TR_ADDRESS_SETTINGS],
-               ctr[TR_DNS_AND_GATEWAY_SETTINGS], NULL };
+       char *sections[] = {
+               _("Network configuration type"),
+               _("Drivers and card assignments"),
+               _("Address settings"),
+               _("DNS and Gateway settings"),
+               NULL
+       };
        int rc;
        static int choice = 0;
        struct keyvalue *kv = initkeyvalues();
@@ -246,22 +252,21 @@ int firstmenu(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }       
 
        if (netaddresschange) 
-               strcpy(networkrestart, ctr[TR_RESTART_REQUIRED]);
+               strcpy(networkrestart, _("When configuration is complete, a network restart will be required."));
 
        strcpy(temp, ""); findkey(kv, "CONFIG_TYPE", temp); 
        x = atol(temp);
        x--;
        if (x < 0 || x > 4) x = 0;
        /* Format heading bit. */
-       snprintf(message, 1000, ctr[TR_CURRENT_CONFIG], configtypenames[x],
-               networkrestart);
-       rc = newtWinMenu(ctr[TR_NETWORK_CONFIGURATION_MENU], message, 50, 5, 5, 6,
-                       sections, &choice, ctr[TR_OK], ctr[TR_DONE], NULL);
+       snprintf(message, 1000, _("Current config: %s\n\n%s"), configtypenames[x], networkrestart);
+       rc = newtWinMenu(_("Network configuration menu"), message, 50, 5, 5, 6,
+                       sections, &choice, _("OK"), _("Done"), NULL);
 
        if (rc == 0 || rc == 1)
                result = choice + 1;
@@ -283,7 +288,7 @@ int configtypemenu(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
 
@@ -292,11 +297,15 @@ int configtypemenu(void)
        findkey(kv, "CONFIG_TYPE", temp); choise = atol(temp);
        choise--;
 
-               sprintf(message, ctr[TR_NETWORK_CONFIGURATION_TYPE_LONG], NAME);
-               rc = newtWinMenu(ctr[TR_NETWORK_CONFIGURATION_TYPE], message, 50, 5, 5,
-                       6, configtypenames, &choise, ctr[TR_OK], ctr[TR_CANCEL], NULL);
+               sprintf(message, _("Select the network configuration for %s. "
+                       "The following configuration types list those interfaces which have ethernet attached. "
+                       "If you change this setting, a network restart will be required, and you will have to "
+                       "reconfigure the network driver assignments."), NAME);
+               rc = newtWinMenu(_("Network configuration type"), message, 50, 5, 5,
+                       6, configtypenames, &choise, _("OK"), _("Cancel"), NULL);
                if ( configtypecards[choise] > found ) {
-                       sprintf(message, ctr[TR_NOT_ENOUGH_INTERFACES] , configtypecards[choise], found);
+                       sprintf(message, _("Not enough netcards for your choice.\n\nNeeded: %d - Available: %d\n"),
+                               configtypecards[choise], found);
                        errorbox(message);
                }
 
@@ -334,7 +343,7 @@ int drivermenu(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
 
@@ -347,42 +356,43 @@ int drivermenu(void)
                writekeyvalues(kv, CONFIG_ROOT "/ethernet/settings");
        }
 
-       strcpy(message, ctr[TR_CONFIGURE_NETWORK_DRIVERS]);
+       strcpy(message, _("Configure network drivers, and which interface each card is assigned to. "
+               "The current configuration is as follows:\n\n"));
 
        kcount = 0;
        neednics = 0;
        if (HAS_GREEN) {
-               sprintf(temp, "GREEN:  %s\n", knics[_GREEN_CARD_].description);
+               sprintf(temp, "%-6s: %s\n", "GREEN", knics[_GREEN_CARD_].description);
                strcat(message, temp);
                if (strlen(knics[_GREEN_CARD_].macaddr) ) {
-                       sprintf(temp, "GREEN:  (%s) %s green0\n", knics[_GREEN_CARD_].macaddr, ctr[TR_AS]);
+                       sprintf(temp, "%-6s: (%s)\n", "GREEN", knics[_GREEN_CARD_].macaddr);
                        strcat(message, temp);
                }
                neednics++;
        }
        if (HAS_RED) {
-               sprintf(temp, "RED:    %s\n", knics[_RED_CARD_].description);
+               sprintf(temp, "%-6s: %s\n", "RED", knics[_RED_CARD_].description);
                strcat(message, temp);
                if (strlen(knics[_RED_CARD_].macaddr) ) {
-                       sprintf(temp, "RED:    (%s) %s red0\n", knics[_RED_CARD_].macaddr, ctr[TR_AS]);
+                       sprintf(temp, "%-6s: (%s)\n", "RED", knics[_RED_CARD_].macaddr);
                        strcat(message, temp);
                }
                neednics++;
        }
        if (HAS_ORANGE) {
-               sprintf(temp, "ORANGE: %s\n", knics[_ORANGE_CARD_].description);
+               sprintf(temp, "%-6s: %s\n", "ORANGE", knics[_ORANGE_CARD_].description);
                strcat(message, temp);
                if ( strlen(knics[_ORANGE_CARD_].macaddr) ) {
-                       sprintf(temp, "ORANGE: (%s) %s orange0\n", knics[_ORANGE_CARD_].macaddr, ctr[TR_AS]);
+                       sprintf(temp, "%-6s: (%s)\n", "ORANGE", knics[_ORANGE_CARD_].macaddr);
                        strcat(message, temp);
                }
                neednics++;
        }
        if (HAS_BLUE) {
-               sprintf(temp, "BLUE:   %s\n", knics[_BLUE_CARD_].description);
+               sprintf(temp, "%-6s: %s\n", "BLUE", knics[_BLUE_CARD_].description);
                strcat(message, temp);
                if (strlen(knics[_BLUE_CARD_].macaddr)) {
-                       sprintf(temp, "BLUE:   (%s) %s blue0\n", knics[_BLUE_CARD_].macaddr, ctr[TR_AS]);
+                       sprintf(temp, "%-6s: (%s)\n", "BLUE", knics[_BLUE_CARD_].macaddr);
                        strcat(message, temp);
                }
                neednics++;
@@ -394,9 +404,10 @@ int drivermenu(void)
 
        if (neednics = kcount)
        {
-               strcat(message, ctr[TR_DO_YOU_WISH_TO_CHANGE_THESE_SETTINGS]);
-               rc = newtWinChoice(ctr[TR_DRIVERS_AND_CARD_ASSIGNMENTS], ctr[TR_OK],
-               ctr[TR_CANCEL], message);
+               strcat(message, "\n");
+               strcat(message, _("Do you wish to change these settings?"));
+               rc = newtWinChoice(_("Drivers and card assignments"), _("OK"),
+                       _("Cancel"), message);
                if (rc == 0 || rc == 1)
                {
                        changedrivers();
@@ -428,12 +439,12 @@ int changedrivers(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
        if (automode == 0)
                runcommandwithstatus("/etc/rc.d/init.d/network stop red blue orange",
-                       ctr[TR_PUSHING_NON_LOCAL_NETWORK_DOWN]);
+                       _("Networking"), _("Restarting non-local network..."), NULL);
 
        findkey(kv, "CONFIG_TYPE", temp); configtype = atol(temp);
        if (configtype == 1)
@@ -450,16 +461,16 @@ int changedrivers(void)
        do
        {
                count = 0;
-               strcpy(message, ctr[TR_INTERFACE_CHANGE]);
+               strcpy(message, _("Please choose the interface you wish to change.\n\n"));
 
                if (green) {
                        strcpy(MenuInhalt[count], "GREEN");
                        pMenuInhalt[count] = MenuInhalt[count];
                        NicEntry[_GREEN_CARD_] = count;
-                       sprintf(temp, "GREEN:  %s\n", knics[_GREEN_CARD_].description);
+                       sprintf(temp, "%-6s: %s\n", "GREEN", knics[_GREEN_CARD_].description);
                        strcat(message, temp);
                        if ( strlen(knics[_GREEN_CARD_].macaddr) ) {
-                               sprintf(temp, "GREEN:  (%s) %s green0\n", knics[_GREEN_CARD_].macaddr, ctr[TR_AS]);
+                               sprintf(temp, "%-6s: (%s)\n", "GREEN", knics[_GREEN_CARD_].macaddr);
                                strcat(message, temp);
                        }
                        count++;
@@ -469,10 +480,10 @@ int changedrivers(void)
                        strcpy(MenuInhalt[count], "RED");
                        pMenuInhalt[count] = MenuInhalt[count];
                        NicEntry[_RED_CARD_] = count;
-                       sprintf(temp, "RED:    %s\n", knics[_RED_CARD_].description);
+                       sprintf(temp, "%-6s: %s\n", "RED", knics[_RED_CARD_].description);
                        strcat(message, temp);
                        if ( strlen(knics[_RED_CARD_].macaddr) ) {
-                               sprintf(temp, "RED:    (%s) %s red0\n", knics[_RED_CARD_].macaddr, ctr[TR_AS]);
+                               sprintf(temp, "%-6s: (%s)\n", "RED", knics[_RED_CARD_].macaddr);
                                strcat(message, temp);
                        }
                        count++;
@@ -482,10 +493,10 @@ int changedrivers(void)
                        strcpy(MenuInhalt[count], "ORANGE");
                        pMenuInhalt[count] = MenuInhalt[count];
                        NicEntry[_ORANGE_CARD_] = count;
-                       sprintf(temp, "ORANGE: %s\n", knics[_ORANGE_CARD_].description);
+                       sprintf(temp, "%-6s: %s\n", "ORANGE", knics[_ORANGE_CARD_].description);
                        strcat(message, temp);
                        if ( strlen(knics[_ORANGE_CARD_].macaddr) ) {
-                               sprintf(temp, "ORANGE: (%s) %s orange0\n", knics[_ORANGE_CARD_].macaddr, ctr[TR_AS]);
+                               sprintf(temp, "%-6s: (%s)\n", "ORANGE", knics[_ORANGE_CARD_].macaddr);
                                strcat(message, temp);
                        }
                        count++;
@@ -495,17 +506,18 @@ int changedrivers(void)
                        strcpy(MenuInhalt[count], "BLUE");
                        pMenuInhalt[count] = MenuInhalt[count];
                        NicEntry[_BLUE_CARD_] = count;
-                       sprintf(temp, "BLUE:   %s\n", knics[_BLUE_CARD_].description);
+                       sprintf(temp, "%-6s: %s\n", "BLUE", knics[_BLUE_CARD_].description);
                        strcat(message, temp);
                        if ( strlen(knics[_BLUE_CARD_].macaddr) ) {
-                               sprintf(temp, "BLUE:   (%s) %s blue0\n", knics[_BLUE_CARD_].macaddr, ctr[TR_AS]);
+                               sprintf(temp, "%-6s: (%s)\n", "BLUE", knics[_BLUE_CARD_].macaddr);
                                strcat(message, temp);
                        }
                        count++;
                }
                pMenuInhalt[count] = NULL;
 
-               rc = newtWinMenu( ctr[TR_NETCARD_COLOR], message, 70, 5, 5, 6, pMenuInhalt, &choise, ctr[TR_SELECT], ctr[TR_REMOVE], ctr[TR_DONE], NULL);
+               rc = newtWinMenu(_("Assigned Cards"), message, 70, 5, 5, 6, pMenuInhalt,
+                       &choise, _("Select"), _("Remove"), _("Done"), NULL);
                        
                if ( rc == 0 || rc == 1) {
                        if ((green) && ( choise == NicEntry[0])) nicmenu(_GREEN_CARD_);
@@ -537,12 +549,15 @@ int greenaddressmenu(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
 
-       sprintf(message, ctr[TR_WARNING_LONG], NAME);
-       rc = newtWinChoice(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_CANCEL], message);
+       sprintf(message, _("If you change this IP address, and you are logged in remotely, "
+               "your connection to the %s machine will be broken, and you will have to reconnect "
+               "on the new IP. This is a risky operation, and should only be attempted if you "
+               "have physical access to the machine, should something go wrong."), NAME);
+       rc = newtWinChoice(_("Warning"), _("OK"), _("Cancel"), message);
        
        if (rc == 0 || rc == 1)
        {
@@ -585,14 +600,14 @@ int addressesmenu(void)
        {
                freekeyvalues(kv);
                freekeyvalues(mainkv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
        if (!(readkeyvalues(mainkv, CONFIG_ROOT "/main/settings")))
        {
                freekeyvalues(kv);
                freekeyvalues(mainkv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
 
@@ -622,18 +637,20 @@ int addressesmenu(void)
        done = 0;       
        while (!done)
        {
-               rc = newtWinMenu(ctr[TR_ADDRESS_SETTINGS],
-                       ctr[TR_SELECT_THE_INTERFACE_YOU_WISH_TO_RECONFIGURE], 50, 5,
-                       5, 6, sections, &choice, ctr[TR_OK], ctr[TR_DONE], NULL);       
+               rc = newtWinMenu(_("Address settings"),
+                       _("Select the interface you wish to reconfigure."), 50, 5,
+                       5, 6, sections, &choice, _("OK"), _("Done"), NULL);     
 
                if (rc == 0 || rc == 1)
                {
                        if (strcmp(sections[choice], "GREEN") == 0)
                        {
                                findkey(kv, "GREEN_ADDRESS", oldgreenaddress);
-                               sprintf(message, ctr[TR_WARNING_LONG], NAME);
-                               rc = newtWinChoice(ctr[TR_WARNING], ctr[TR_OK], ctr[TR_CANCEL],
-                                       message);
+                               sprintf(message, _("If you change this IP address, and you are logged in remotely, "
+                                       "your connection to the %s machine will be broken, and you will have to reconnect "
+                                       "on the new IP. This is a risky operation, and should only be attempted if you "
+                                       "have physical access to the machine, should something go wrong."), NAME);
+                               rc = newtWinChoice(_("Warning"), _("OK"), _("Cancel"), message);
                                if (rc == 0 || rc == 1)
                                {
                                        if (changeaddress(kv, "GREEN", 0, ""))
@@ -693,23 +710,23 @@ int dnsgatewaymenu(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }
 
-       entries[DNS1].text = ctr[TR_PRIMARY_DNS];
+       entries[DNS1].text = _("Primary DNS:");
        strcpy(temp, ""); findkey(kv, "DNS1", temp);
        values[DNS1] = strdup(temp);
        entries[DNS1].value = &values[DNS1];
        entries[DNS1].flags = 0;
        
-       entries[DNS2].text = ctr[TR_SECONDARY_DNS];
+       entries[DNS2].text = _("Secondary DNS:");
        strcpy(temp, ""); findkey(kv, "DNS2", temp);
        values[DNS2] = strdup(temp);
        entries[DNS2].value = &values[DNS2];
        entries[DNS2].flags = 0;
        
-       entries[DEFAULT_GATEWAY].text = ctr[TR_DEFAULT_GATEWAY];
+       entries[DEFAULT_GATEWAY].text = _("Default gateway:");
        strcpy(temp, ""); findkey(kv, "DEFAULT_GATEWAY", temp);
        values[DEFAULT_GATEWAY] = strdup(temp);
        entries[DEFAULT_GATEWAY].value = &values[DEFAULT_GATEWAY];
@@ -723,17 +740,20 @@ int dnsgatewaymenu(void)
        {
                error = 0;
                
-               rc = newtWinEntries(ctr[TR_DNS_AND_GATEWAY_SETTINGS], 
-                       ctr[TR_DNS_AND_GATEWAY_SETTINGS_LONG], 50, 5, 5, 18, entries,
-                       ctr[TR_OK], ctr[TR_CANCEL], NULL);
+               rc = newtWinEntries(_("DNS and Gateway settings"),
+                       _("Enter the DNS and gateway information. "
+                       "These settings are used only with Static IP (and DHCP if DNS set) on the RED interface."),
+                       50, 5, 5, 18, entries, _("OK"), _("Cancel"), NULL);
                if (rc == 0 || rc == 1)
                {
-                       strcpy(message, ctr[TR_INVALID_FIELDS]);
+                       strcpy(message, _("The following fields are invalid:"));
+                       strcpy(message, "\n\n");
                        if (strlen(values[DNS1]))
                        {
                                if (inet_addr(values[DNS1]) == INADDR_NONE)
                                {
-                                       strcat(message, ctr[TR_PRIMARY_DNS_CR]);
+                                       strcat(message, _("Primary DNS"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                        }
@@ -741,7 +761,8 @@ int dnsgatewaymenu(void)
                        {
                                if (inet_addr(values[DNS2]) == INADDR_NONE)
                                {
-                                       strcat(message, ctr[TR_SECONDARY_DNS_CR]);
+                                       strcat(message, _("Secondary DNS"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                        }
@@ -749,13 +770,15 @@ int dnsgatewaymenu(void)
                        {
                                if (inet_addr(values[DEFAULT_GATEWAY]) == INADDR_NONE)
                                {
-                                       strcat(message, ctr[TR_DEFAULT_GATEWAY_CR]);
+                                       strcat(message, _("Default gateway"));
+                                       strcat(message, "\n");
                                        error = 1;
                                }
                        }
                        if (!strlen(values[DNS1]) && strlen(values[DNS2]))
                        {
-                               strcpy(message, ctr[TR_SECONDARY_WITHOUT_PRIMARY_DNS]);
+                               strcpy(message, _("Secondary DNS specified without a Primary DNS"));
+                               strcat(message, "\n");
                                error = 1;
                        }
 
similarity index 65%
rename from src/install+setup/setup/passwords.c
rename to src/setup/passwords.c
index f5a686b4891e27c88023c0bb799e85a8b16e667e..e7b4b5231a0343f7c911808aa6f0d6079f191931 100644 (file)
  * 
  */
 
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
 #include "setup.h"
 
 extern FILE *flog;
 extern char *mylog;
 
-extern char **ctr;
-
 extern int automode;
 
 int getpassword(char *password, char *text);
@@ -28,14 +30,13 @@ int handlerootpassword(void)
        char commandstring[STRING_SIZE];
                
        /* Root password. */
-       if (getpassword(password, ctr[TR_ENTER_ROOT_PASSWORD]) == 2)
+       if (getpassword(password, _("Enter the 'root' user password. Login as this user for commandline access.")) == 2)
                return 0;
        
        snprintf(commandstring, STRING_SIZE,
                "/bin/echo 'root:%s' | /usr/sbin/chpasswd", password);
-       if (runhiddencommandwithstatus(commandstring, ctr[TR_SETTING_ROOT_PASSWORD]))
-       {
-               errorbox(ctr[TR_PROBLEM_SETTING_ROOT_PASSWORD]);
+       if (runhiddencommandwithstatus(commandstring, _("Setting password"), _("Setting 'root' password...."), NULL)) {
+               errorbox(_("Problem setting 'root' password."));
                return 0;
        }
        
@@ -49,16 +50,16 @@ int handleadminpassword(void)
        char message[1000];
                
        /* web interface admin password. */
-       sprintf(message, ctr[TR_ENTER_ADMIN_PASSWORD], NAME, NAME);
+       sprintf(message, _("Enter %s 'admin' user password. "
+               "This is the user to use for logging into the %s web administration pages."), NAME, NAME);
        if (getpassword(password, message) == 2)
                return 0;
        
        snprintf(commandstring, STRING_SIZE,
                "/usr/sbin/htpasswd -c -m -b " CONFIG_ROOT "/auth/users admin '%s'", password);
-       sprintf(message, ctr[TR_SETTING_ADMIN_PASSWORD], NAME);
-       if (runhiddencommandwithstatus(commandstring, message))
-       {
-               sprintf(message, ctr[TR_PROBLEM_SETTING_ADMIN_PASSWORD], NAME);
+       sprintf(message, _("Setting %s 'admin' user password..."), NAME);
+       if (runhiddencommandwithstatus(commandstring, _("Setting password"), message, NULL)) {
+               sprintf(message, _("Problem setting %s 'admin' user password."), NAME);
                errorbox(message);
                return 0;
        }
@@ -72,8 +73,8 @@ int getpassword(char *password, char *text)
        char *values[] = {      NULL, NULL, NULL };     /* pointers for the values. */
        struct newtWinEntry entries[] =
        { 
-               { ctr[TR_PASSWORD_PROMPT], &values[0], 2 },
-               { ctr[TR_AGAIN_PROMPT], &values[1], 2 },
+               { _("Password:"), &values[0], 2 },
+               { _("Again:"), &values[1], 2 },
                { NULL, NULL, 0 }
        };
        char title[STRING_SIZE];
@@ -83,29 +84,29 @@ int getpassword(char *password, char *text)
        do
        {
                done = 1;
-               sprintf (title, "%s %s - %s", NAME, VERSION, SLOGAN);
+               sprintf (title, "%s - %s", NAME, SLOGAN);
                rc = newtWinEntries(title, text,
-                       65, 5, 5, 50, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);
+                       65, 5, 5, 50, entries, _("OK"), _("Cancel"), NULL);
 
                if (rc != 2)
                {
                        if (strlen(values[0]) == 0 || strlen(values[1]) == 0)
                        {
-                               errorbox(ctr[TR_PASSWORD_CANNOT_BE_BLANK]);
+                               errorbox(_("Password cannot be blank."));
                                done = 0;
                                strcpy(values[0], "");
                                strcpy(values[1], "");
                        }
                        else if (strcmp(values[0], values[1]) != 0)
                        {
-                               errorbox(ctr[TR_PASSWORDS_DO_NOT_MATCH]);
+                               errorbox(_("Passwords do not match."));
                                done = 0;
                                strcpy(values[0], "");
                                strcpy(values[1], "");
                        }
                        else if (strchr(values[0], ' '))
                        {
-                               errorbox(ctr[TR_PASSWORD_CANNOT_CONTAIN_SPACES]);
+                               errorbox(_("Password cannot contain spaces."));
                                done = 0;
                                strcpy(values[0], "");
                                strcpy(values[1], "");
diff --git a/src/setup/po/LINGUAS b/src/setup/po/LINGUAS
new file mode 100644 (file)
index 0000000..7673daa
--- /dev/null
@@ -0,0 +1 @@
+de
diff --git a/src/setup/po/Makevars b/src/setup/po/Makevars
new file mode 100644 (file)
index 0000000..cf8c600
--- /dev/null
@@ -0,0 +1,41 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = The IPFire Project (www.ipfire.org)
+
+# This is the email address or URL to which the translators shall report
+# bugs in the untranslated strings:
+# - Strings which are not entire sentences, see the maintainer guidelines
+#   in the GNU gettext documentation, section 'Preparing Strings'.
+# - Strings which use unclear terms or require additional context to be
+#   understood.
+# - Strings which make invalid assumptions about notation of date, time or
+#   money.
+# - Pluralisation problems.
+# - Incorrect English spelling.
+# - Incorrect formatting.
+# It can be your email address, or a mailing list address where translators
+# can write to without being subscribed, or the URL of a web page through
+# which the translators can contact you.
+MSGID_BUGS_ADDRESS =
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/src/setup/po/POTFILES.in b/src/setup/po/POTFILES.in
new file mode 100644 (file)
index 0000000..675adda
--- /dev/null
@@ -0,0 +1,11 @@
+dhcp.c
+domainname.c
+hostname.c
+keymap.c
+main.c
+misc.c
+netstuff.c
+networking.c
+passwords.c
+setup.h
+timezone.c
diff --git a/src/setup/po/ar.po b/src/setup/po/ar.po
new file mode 100644 (file)
index 0000000..a3b9a80
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Arabic (http://www.transifex.com/projects/p/ipfire/language/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/ca.po b/src/setup/po/ca.po
new file mode 100644 (file)
index 0000000..20dd073
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Catalan (http://www.transifex.com/projects/p/ipfire/language/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/cs_CZ.po b/src/setup/po/cs_CZ.po
new file mode 100644 (file)
index 0000000..1a3a7d6
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/ipfire/language/cs_CZ/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: cs_CZ\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/da.po b/src/setup/po/da.po
new file mode 100644 (file)
index 0000000..7c696e5
--- /dev/null
@@ -0,0 +1,585 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# Henrik Simonsen <cybermaze@gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Danish (http://www.transifex.com/projects/p/ipfire/language/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr "Start adresse:"
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr "Slut adresse:"
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr "Primær DNS:"
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr "Sekundær DNS:"
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr "Standard udløbstid (minutter):"
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr "Maksimal udløbstid (minutter):"
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr "Domæne efternavn:"
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr "Kan ikke åbne filen med indstillinger"
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr "DHCP server konfiguration"
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr "Konfigurer DHCP serveren ved at angive indstillingerne."
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr "Aktiveret"
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr "OK"
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr "Annuller"
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr "Følgende felter er ugyldige:\n\n"
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr "Start adresse"
+
+#: dhcp.c:165
+msgid "End address"
+msgstr "Slut adresse"
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr "Primær DNS"
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr "Sekundær DNS"
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr "Standard udløbstid"
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr "Maks. udløbstid"
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr "Domæne navn"
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr "Indtast domæne navn"
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr "Domæne navn må ikke være tomt."
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr "Domæne navn må ikke indeholde mellemrum."
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr "Domæne navn må kun indeholde bogstaver, tal, bindestreger og punktummer."
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr "Værtsnavn"
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr "Indtast computerens værtsnavn."
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr "Værtsnavn må ikke være tomt."
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr "Værtsnavn må ikke indeholde mellemrum."
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr "Værtsnavn må kun indeholde bogstaver, tal og bindestreger."
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr "Tastaturlayout"
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr "Vælg dit tastatur layout fra listen."
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr "Tidszone"
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr "Netværk"
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr "ISDN"
+
+#: main.c:73
+msgid "'root' password"
+msgstr "'root' adgangskode"
+
+#: main.c:74
+msgid "'admin' password"
+msgstr "'admin' adgangskode"
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr "<Tab>/<Alt-Tab> mellem elementer   |  <Space> vælger"
+
+#: main.c:97
+msgid "Section menu"
+msgstr "Afsnitsmenu"
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr "Vælg det element du vil konfigurere."
+
+#: main.c:99
+msgid "Quit"
+msgstr "Afslut"
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr "Opsætningen er færdig."
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr "Advarsel"
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr "Første opsætning blev ikke færdiggjort. Du skal færdiggøre opsætningen ved at køre setup igen fra kommandoprompten."
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr "Kunne ikke gemme %s/main/hostname.conf"
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr "Kunne ikke åbne hosts filen."
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr "Kunne ikke gemme /etc/hosts."
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr "Kunne ikke gemme /etc/hosts.deny."
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr "Kunne ikke gemme /etc/hosts.allow."
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr "Kunne ikke opsætte værtsnavn."
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr "Skanner og konfigurerer ISDN enheder."
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr "Kunne ikke skanne for ISDN enheder."
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr "Grænseflade - %s"
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr "Indtast IP adresse information for grænseflade %s."
+
+#: netstuff.c:103
+msgid "Static"
+msgstr "Statisk"
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr "DHCP"
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr "PPP OPKALD (PPPoE, modem, ATM ...)"
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr "DHCP værtsnavn:"
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr "Tving DHCP MTU:"
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr "IP adresse:"
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr "Undernetmaske:"
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr "Følgende felter er ugyldige:"
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr "IP adresse"
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr "Undernetmaske"
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr "DHCP værtsnavn"
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr "Frakobl"
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr "Vælg venligst et netværkskort til følgende grænseflade - %s."
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr "Udvidet Netværks Menu"
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr "Vælg"
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr "Identificer"
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr "Enhedsidentifikation"
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr "Lyset på den valg port skulle nu blinke i 10 sekunder..."
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr "Identifikation er ikke understøttet af denne enhed."
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr "Der er ikke nogle ledige enheder på dit system."
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr "Vil du virkelig fjerne den tilkoblede %s grænseflade?"
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr "Vælg netværksdriver"
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr "Vælg yderligere modul parametre"
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr "Indlæser modul..."
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr "Kunne ikke indlæse driver modul."
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr "Modul navn kan ikke være tomt."
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr "Stopper netværk..."
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr "Genstarter netværk..."
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr "Ingen GRØN grænseflade opsat."
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr "Mangler IP adresse på GRØN."
+
+#: networking.c:163
+msgid "Error"
+msgstr "Fejl"
+
+#: networking.c:163
+msgid "Ignore"
+msgstr "Ignorer"
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr "Ingen RØD grænseflade opsat."
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr "Mangler IP adresse på RØD."
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr "Ingen ORANGE grænseflade opsat."
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr "Mangler IP adresse på ORANGE."
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr "Ingen BLÅ grænseflade opsat."
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr "Mangler IP adresse på BLÅ."
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr "Mangler DNS."
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr "Mangler Default Gateway."
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr "Type af netværksopsætning"
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr "Drivere og kort tildeling"
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr "Adresseindstillinger"
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr "DNS og Gateway indstillinger"
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr "Når opsætningen er færdig, er det nødvendigt at genstarte netværket."
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr "Netværksopsætningsmenu"
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr "Færdig"
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr "Vælg netværksopsætningen for %s. De følgende typer af opsætninger bestemmer hvilke grænseflader der vil få tilknyttet en ethernet enhed. Hvis du ændrer typen, skal netværket genstartes, og du skal opsætte netværket med drivere og enheder igen."
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr "Der mangler netværkskort til dit valg.\n\nKræver: %d - Tilgængelige: %d\n"
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr "Konfigurer netværksdrivere og hvilket kort hver grænseflade er tilknyttet. Den nuværende konfiguration er:\n\n"
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr "Vil du ændre disse indstillinger?"
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr "Genstarter ikke-lokalt netværk..."
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr "Vælg den grænseflade du ønsker at ændre.\n\n"
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr "Tilknyttede kort"
+
+#: networking.c:520
+msgid "Remove"
+msgstr "Fjern"
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr "Hvis du ændrer denne IP adresse, og du anvender fjern adgang, vil forbindelsen til %s blive brudt, så du må oprette forbindelse igen til den nye IP. Dette er risikabelt og bør kun gøres, hvis du har adgang til den fysiske computer, hvis noget går galt."
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr "Vælg den grænseflade du ønsker at ændre."
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr "Standard gateway:"
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr "Indtast DNS og gateway information. Disse indstillinger anvendes kun med statisk IP (og DHCP hvis DNS angivet) på RØD grænseflade."
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr "Standard gateway"
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr "Sekundær DNS angivet uden Primær DNS"
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr "Indtast 'root' adgangskode. Log ind som denne bruger for adgang til kommandoprompt."
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr "Opsæt adgangskode"
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr "Opsæt 'root' adgangskode..."
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr "Problem ved opsætning af 'root' adgangskode."
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr "Indtast %s 'admin' adgangskode. Denne bruger bruges til at logge ind på %s web admin sider."
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr "Opsætter %s 'admin' adgangskode..."
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr "Problem ved opsætning af %s 'admin' adgangskode."
+
+#: passwords.c:76
+msgid "Password:"
+msgstr "Adgangskode:"
+
+#: passwords.c:77
+msgid "Again:"
+msgstr "Igen:"
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr "Adgangskode kan ikke være tom."
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr "Adgangskoderne er ikke ens."
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr "Adgangskoder kan ikke indeholde mellemrum."
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr "Vælg den tidszone du er i på listen."
diff --git a/src/setup/po/de.po b/src/setup/po/de.po
new file mode 100644 (file)
index 0000000..b1d7d3a
--- /dev/null
@@ -0,0 +1,586 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# Michael Tremer <michael.tremer@ipfire.org>, 2014
+# Stefan Schantl <stefan.schantl@ipfire.org>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 18:01+0000\n"
+"Last-Translator: Stefan Schantl <stefan.schantl@ipfire.org>\n"
+"Language-Team: German (http://www.transifex.com/projects/p/ipfire/language/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr "Startadresse:"
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr "Endadresse:"
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr "Primärer DNS:"
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr "Sekundärer DNS:"
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr "Vorgegebene Gültigkeitsdauer (min):"
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr "Maximale Gültigkeitsdauer (min):"
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr "Domänenname:"
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr "Settings-Datei konnte nicht geöffnet werden"
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr "DHCP-Serverkonfiguration"
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr "Konfigurieren Sie den DHCP-Server durch Eingabe der Einstellungen:"
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr "Aktiviert"
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr "OK"
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr "Die folgenden Eingaben sind ungültig:\n\n"
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr "Startadresse"
+
+#: dhcp.c:165
+msgid "End address"
+msgstr "Endadresse"
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr "Primärer DNS"
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr "Sekundärer DNS"
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr "Vorgegebene Gültigkeitsdauer"
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr "Maximale Gültigkeitsdauer"
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr "Domänenname"
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr "Bitte geben Sie den Domänennamen ein"
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr "Der Domänenname darf nicht leer sein."
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr "Der Domänenname darf keine Leerzeichen enthalten."
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr "Der Domänenname darf nur Buchstaben, Ziffern, Bindestriche oder Punkte enthalten."
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr "Hostname"
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr "Bitte geben Sie den Hostname der Maschine ein."
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr "Der Hostname darf nicht leer sein."
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr "Der Hostname darf keine Leerzeichen enthalten."
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr "Der Hostname darf nur Buchstaben, Ziffern oder Bindestriche enthalten."
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr "Tastaturbelegung"
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr "Wählen Sie aus dieser Liste den Tastatur-Typ aus, den Sie benutzen."
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr "Zeitzone"
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr "Netzwerk"
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr "ISDN"
+
+#: main.c:73
+msgid "'root' password"
+msgstr "'root'-Passwort"
+
+#: main.c:74
+msgid "'admin' password"
+msgstr "'admin'-Passwort"
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr "<Tab>/<Alt-Tab> wechselt die Auswahl | <Space> wählt aus"
+
+#: main.c:97
+msgid "Section menu"
+msgstr "Hauptmenü"
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr "Wählen Sie den Bereich aus, den Sie konfigurieren möchten."
+
+#: main.c:99
+msgid "Quit"
+msgstr "Beenden"
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr "Das Setup ist jetzt fertiggestellt."
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr "Warnung"
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr "Das erste Setup wurde nicht vollständig durchgeführt. Sie müssen Setup vollständig beenden; dies können Sie durch Ausführen von Setup in der Shell nachholen."
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr "Schreiben von %s/main/hostname.conf fehlgeschlagen."
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr "Öffnen der primären hosts-Datei fehlgeschlagen."
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr "Schreiben von /etc/hosts fehlgeschlagen."
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr "Schreiben von /etc/hosts.deny fehlgeschlagen."
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr "Schreiben von /etc/hosts.allow fehlgeschlagen."
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr "Kann Hostnamen nicht setzen."
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr "Suche und konfiguriere ISDN Geräte."
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr "Konnte ISDN Scan nicht durchführen."
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr "Interface - %s"
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr "Geben Sie die IP-Adressinformationen für die folgende Schnittstelle ein - %s."
+
+#: netstuff.c:103
+msgid "Static"
+msgstr "Statisch"
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr "DHCP"
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr "PPP-Einwahl (PPPoE, Modem, ATM...)"
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr "DHCP-Hostname:"
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr "DHCP MTU erzwingen:"
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr "IP-Adresse:"
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr "Netzmaske:"
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr "Die folgenden Felder sind ungültig:"
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr "IP-Adresse"
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr "Netzmaske"
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr "DHCP-Hostname"
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr "Entfernen"
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr "Bitte wählen Sie eine Netzwerkkarte für das folgende Interface aus - %s."
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr "Erweitertes Netzwerkmenü"
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr "Auswählen"
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr "Identifizieren"
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr "Device-Identifizierung"
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr "Der ausgewählte Port sollte nun für 10 Sekunden blinken..."
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr "Dieser Netzwerkport unterstützt die Identifikation leider nicht."
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr "Keine noch nicht zugewiesenen Schnittstellen auf dem System vorhanden."
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr "Möchten Sie die ausgewählte Schnittstelle %s wirklich entfernen?"
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr "Kann die Netzwerkkarte nicht automatisch erkennen. Geben Sie den Modulnamen und eventuelle Parameter für die Netzwerkkarte an."
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr "Optionale Modulparameter"
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr "Lade Module..."
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr "Das Laden des Treibermoduls schlug fehl."
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr "Der Modulname darf nicht leer sein."
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr "Stoppe Netzwerk..."
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr "Starte Netzwerk neu..."
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr "Keine GRÜNE Schnittstelle zugewiesen."
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr "Fehlende IP auf der grünen Schnittstelle!"
+
+#: networking.c:163
+msgid "Error"
+msgstr "Error"
+
+#: networking.c:163
+msgid "Ignore"
+msgstr "Ignorieren"
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr "Keine rote Schnittstelle zugewiesen."
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr "Fehlende IP auf der roten Schnittstelle!"
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr "Keine orange Schnittstelle zugewiesen."
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr "Fehlende IP auf der orangen Schnittstelle!"
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr "Keine blaue Schnittstelle zugewiesen."
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr "Fehlende IP auf der blauen Schnittstelle!"
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr "Fehlende DNS Information."
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr "Fehlender Standardgateway."
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr "Typ der Netzwerkkonfiguration"
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr "Netzwerkkartenzuordnungen"
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr "Adresseinstellungen"
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr "DNS- und Gatewayeinstellungen"
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr "Nach Abschluss der Konfiguration muss das Netzwerk neu gestartet werden."
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr "Aktuelle Konfiguration: %s\n\n%s"
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr "Netzwerkkonfigurationsmenü"
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr "Fertig"
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr "Wählen Sie die Netzwerkkonfiguration für %s aus. Die folgenden Konfigurationstypen listen diejenigen Schnittstellen auf, die am Ethernet angeschlossen sind. Wenn Sie diese Einstellung ändern, muss das Netzwerk neu gestartet werden und Sie müssen die Netzwerktreiber neu zuweisen."
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr "Nicht genügend Schnittstellen für Ihre Auswahl vorhanden.\n\nBenötigt: %d - Vorhanden: %d\n"
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr "Konfigurieren Sie die Netzwerktreiber und geben Sie an, welcher Schnittstelle jede Karte zugewiesen ist. Die aktuelle Konfiguration ist wie folgt:\n\n"
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr "Möchten Sie diese Einstellungen ändern?"
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr "Starte Nicht-Lokale Netzwerke neu..."
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr "Wählen Sie die Schnittstelle aus, die Sie konfigurieren möchten.\n\n"
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr "Zugewiesene Netzwerkkarten"
+
+#: networking.c:520
+msgid "Remove"
+msgstr "Entfernen"
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr "Wenn Sie diese IP-Adresse ändern, während Sie über den Fernwartungszugang zugreifen, wird die Verbindung zum %s-Rechner abbrechen. Sie müssen dann eine Verbindung zur neuen IP-Adresse aufbauen. Dies ist ein riskanter Vorgang, der nur versucht werden sollte, wenn Sie physikalischen Zugriff auf den Rechner haben, für den Fall, dass etwas schief geht."
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr "Wählen Sie die Schnittstelle aus, die Sie neu konfigurieren möchten."
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr "Standard-Gateway:"
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr "Geben Sie die DNS- und Gateway-Informationen ein. Diese Einstellungen werden nur bei einer statischen IP an der ROTEN Schnittstelle benutzt (und DHCP, falls DNS eingetragen wurde)."
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr "Standard-Gateway"
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr "Sekundären DNS angegeben ohne primären DNS"
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr "Geben Sie das Passwort für den Benutzer 'root' ein. Melden Sie sich als dieser Benutzer an, um Zugriff auf die Befehlszeile zu erhalten."
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr "Setze das Passwort"
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr "Setze 'root'-Passwort...."
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr "Setzen des 'root'-Passworts fehlgeschlagen."
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr "Geben Sie das Passwort für den %s-Administrator 'admin' ein. Das ist der Benutzer, mit dem Sie sich an den %s-Webadministrationsseiten anmelden."
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr "Setze %s 'admin'-Passwort...."
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr "Setzen des %s 'admin'-Passworts fehlgeschlagen."
+
+#: passwords.c:76
+msgid "Password:"
+msgstr "Passwort:"
+
+#: passwords.c:77
+msgid "Again:"
+msgstr "Wiederholung:"
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr "Das Passwort darf nicht leer sein."
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr "Die Passwörter stimmen nicht überein."
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr "Das Passwort darf keine Leerzeichen enthalten."
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr "Bitte wählen Sie die Zeitzone in der Sie sich befinden aus dem untenstehenden Menü aus."
diff --git a/src/setup/po/el_GR.po b/src/setup/po/el_GR.po
new file mode 100644 (file)
index 0000000..3d4d211
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Greek (Greece) (http://www.transifex.com/projects/p/ipfire/language/el_GR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: el_GR\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/es.po b/src/setup/po/es.po
new file mode 100644 (file)
index 0000000..53fa0b3
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Spanish (http://www.transifex.com/projects/p/ipfire/language/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/fa.po b/src/setup/po/fa.po
new file mode 100644 (file)
index 0000000..2e2adc4
--- /dev/null
@@ -0,0 +1,585 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# Khalil Delavaran <khalil.delavaran@gmail.com>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Persian (http://www.transifex.com/projects/p/ipfire/language/fa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fa\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr "آغاز آدرس:"
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr "پایان آدرس:"
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr "نخستین DNS:"
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr "دومین DNS:"
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr "اجاره پیش پندار (دقیقه):"
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr "بیشینه اجاره (دقیقه):"
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr "پسوند نام دامنه:"
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr "پیکربندی سرور DHCP"
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr "پویا شد"
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr "بله"
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr "نمی خواهم"
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr "آغاز آدرس"
+
+#: dhcp.c:165
+msgid "End address"
+msgstr "پایان آدرس"
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr "نخستین DNS"
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr "دومین DNS"
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr "مدت اجاره پیش پندار"
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr "بیشینه مدت پیش پندار"
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr "نام دامنه"
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr "نام دامین را بنویسید"
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr "نام دامنه نمی تواند تهی باشد."
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr "نام دامنه نمی تواند فاصله داشته باشد."
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr "نام هاست"
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr "نام هاست ماشین ها را بنویسید."
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr "نام هاست نمی تواند تهی باشد."
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr "نام هاست نمیتواند فاصله داشته باشد."
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr "ISDN"
+
+#: main.c:73
+msgid "'root' password"
+msgstr "گذر واژه 'root'"
+
+#: main.c:74
+msgid "'admin' password"
+msgstr "گذر واژه 'admin'"
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr "برون رفت"
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr "برپا سازی به پایان رسید."
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr "گوشزد"
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr "ایستا"
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr "DHCP"
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr "شماره گیری PPP (PPOE, modem, ATM ...)"
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr "نام هاست DHCP:"
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr "آدرس IP:"
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr "ماسک شبکه:"
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr "آدرس IP"
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr "ماسک شبکه"
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr "نام هاست DHCP"
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr "گزینش"
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr "گزینش راه انداز شبکه"
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr "ایراد"
+
+#: networking.c:163
+msgid "Ignore"
+msgstr "نادیده گرفتن"
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr "پیکربندی آدرس"
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr "پایان"
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr "پاک کردن"
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr "Gateway پیش پندار:"
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr "Gateway پیش پندار"
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr "پیکربندی گذر واژه"
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr "پیکربندی گذر واژه 'root'...."
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr "ایراد در پیکربندی گذواژه 'root'."
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr "پیکربندی %s 'admin' گذر واژه کاربر..."
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr "گذر واژه:"
+
+#: passwords.c:77
+msgid "Again:"
+msgstr "دوباره:"
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr "گذر واژه نمی تواند خالی باشد."
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr "گذر واژه ها یکسان نیستند."
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr "در گذر واژه نمی توان فاصله گذاشت."
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/fr.po b/src/setup/po/fr.po
new file mode 100644 (file)
index 0000000..914095d
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: French (http://www.transifex.com/projects/p/ipfire/language/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/hu.po b/src/setup/po/hu.po
new file mode 100644 (file)
index 0000000..3d71983
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Hungarian (http://www.transifex.com/projects/p/ipfire/language/hu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/id.po b/src/setup/po/id.po
new file mode 100644 (file)
index 0000000..89c6c58
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Indonesian (http://www.transifex.com/projects/p/ipfire/language/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/it.po b/src/setup/po/it.po
new file mode 100644 (file)
index 0000000..8f14b37
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Italian (http://www.transifex.com/projects/p/ipfire/language/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/ja.po b/src/setup/po/ja.po
new file mode 100644 (file)
index 0000000..69c24c1
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Japanese (http://www.transifex.com/projects/p/ipfire/language/ja/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/km_KH.po b/src/setup/po/km_KH.po
new file mode 100644 (file)
index 0000000..4d5c100
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Khmer (Cambodia) (http://www.transifex.com/projects/p/ipfire/language/km_KH/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: km_KH\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/nl.po b/src/setup/po/nl.po
new file mode 100644 (file)
index 0000000..18d9512
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Dutch (http://www.transifex.com/projects/p/ipfire/language/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/pl.po b/src/setup/po/pl.po
new file mode 100644 (file)
index 0000000..607394a
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Polish (http://www.transifex.com/projects/p/ipfire/language/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pl\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/pt_BR.po b/src/setup/po/pt_BR.po
new file mode 100644 (file)
index 0000000..a16955b
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/ipfire/language/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/pt_PT.po b/src/setup/po/pt_PT.po
new file mode 100644 (file)
index 0000000..f75c591
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/ipfire/language/pt_PT/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: pt_PT\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/ro_RO.po b/src/setup/po/ro_RO.po
new file mode 100644 (file)
index 0000000..e85d2f7
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Romanian (Romania) (http://www.transifex.com/projects/p/ipfire/language/ro_RO/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro_RO\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/ru.po b/src/setup/po/ru.po
new file mode 100644 (file)
index 0000000..34b1ac4
--- /dev/null
@@ -0,0 +1,585 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+# bubnov_pi <ipfire@bubnov.su>, 2014
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Russian (http://www.transifex.com/projects/p/ipfire/language/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ru\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr "Первый адрес:"
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr "Последний адрес:"
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr "Первичный DNS:"
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr "Вторичный DNS:"
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr "Аренда по умолчанию (минут):"
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr "Максимальная аренда (минут):"
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr "Суффикс доменного имени:"
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr "Невозможно открыть файл настроек"
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr "Конфигурация сервера DHCP"
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr "Настройте сервер DHCP, указав необходимые настройки."
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr "Включено"
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr "ОК"
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr "Отмена"
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr "Следующие поля некорректные:\n\n"
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr "Первый адрес"
+
+#: dhcp.c:165
+msgid "End address"
+msgstr "Последний адрес"
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr "Первичный DNS"
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr "Вторичный DNS"
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr "Аренда по умолчанию"
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr "Максимальная аренда (минут)"
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr "Имя домена"
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr "Введите имя домена"
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr "Имя домена не может быть пустым."
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr "Имя домена не может содержать пробелов."
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr "Доменное имя может содержать только буквы, цифры, дефисы и точки."
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr "Имя узла"
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr "Введите имя машины."
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr "Имя узла не может быть пустым."
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr "Имя узла не может содержать пробелы."
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr "Имя узла может содержать только буквы, цифры и дефисы."
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr "Раскладка клавиатуры"
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr "Выберите тип используемой клавиатуры из списка ниже."
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr "Часовой пояс"
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr "Сеть"
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr "ISDN"
+
+#: main.c:73
+msgid "'root' password"
+msgstr "Пароль 'root'"
+
+#: main.c:74
+msgid "'admin' password"
+msgstr "Пароль 'admin'"
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr "<Tab>/<Alt-Tab> переход между элементами   |  <Пробел> выбор"
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/sk.po b/src/setup/po/sk.po
new file mode 100644 (file)
index 0000000..8b5944e
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Slovak (http://www.transifex.com/projects/p/ipfire/language/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sk\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/sq.po b/src/setup/po/sq.po
new file mode 100644 (file)
index 0000000..4378e9d
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Albanian (http://www.transifex.com/projects/p/ipfire/language/sq/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sq\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/sv.po b/src/setup/po/sv.po
new file mode 100644 (file)
index 0000000..a2acfe3
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Swedish (http://www.transifex.com/projects/p/ipfire/language/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/th.po b/src/setup/po/th.po
new file mode 100644 (file)
index 0000000..ad29452
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Thai (http://www.transifex.com/projects/p/ipfire/language/th/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: th\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/tk.po b/src/setup/po/tk.po
new file mode 100644 (file)
index 0000000..073e06a
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Turkmen (http://www.transifex.com/projects/p/ipfire/language/tk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tk\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/tr.po b/src/setup/po/tr.po
new file mode 100644 (file)
index 0000000..758a66e
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Turkish (http://www.transifex.com/projects/p/ipfire/language/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: tr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/uk.po b/src/setup/po/uk.po
new file mode 100644 (file)
index 0000000..afcfa30
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Ukrainian (http://www.transifex.com/projects/p/ipfire/language/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uk\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/uz@Latn.po b/src/setup/po/uz@Latn.po
new file mode 100644 (file)
index 0000000..9044283
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Uzbek (Latin) (http://www.transifex.com/projects/p/ipfire/language/uz@Latn/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: uz@Latn\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/vi.po b/src/setup/po/vi.po
new file mode 100644 (file)
index 0000000..4d2457e
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Vietnamese (http://www.transifex.com/projects/p/ipfire/language/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/po/zh.po b/src/setup/po/zh.po
new file mode 100644 (file)
index 0000000..8b7faba
--- /dev/null
@@ -0,0 +1,584 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
+# This file is distributed under the same license as the PACKAGE package.
+# 
+# Translators:
+msgid ""
+msgstr ""
+"Project-Id-Version: IPFire Project\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-08-21 15:12+0000\n"
+"PO-Revision-Date: 2014-08-21 15:13+0000\n"
+"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"Language-Team: Chinese (http://www.transifex.com/projects/p/ipfire/language/zh/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: dhcp.c:50
+msgid "Start address:"
+msgstr ""
+
+#: dhcp.c:51
+msgid "End address:"
+msgstr ""
+
+#: dhcp.c:52 networking.c:717
+msgid "Primary DNS:"
+msgstr ""
+
+#: dhcp.c:53 networking.c:723
+msgid "Secondary DNS:"
+msgstr ""
+
+#: dhcp.c:54
+msgid "Default lease (mins):"
+msgstr ""
+
+#: dhcp.c:55
+msgid "Max lease (mins):"
+msgstr ""
+
+#: dhcp.c:56
+msgid "Domain name suffix:"
+msgstr ""
+
+#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
+#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
+#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
+#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
+#: networking.c:713 timezone.c:63
+msgid "Unable to open settings file"
+msgstr ""
+
+#: dhcp.c:111
+msgid "DHCP server configuration"
+msgstr ""
+
+#: dhcp.c:116
+msgid "Configure the DHCP server by entering the settings information."
+msgstr ""
+
+#: dhcp.c:125
+msgid "Enabled"
+msgstr ""
+
+#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
+#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
+#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
+#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
+#: timezone.c:78
+msgid "OK"
+msgstr ""
+
+#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
+#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
+#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
+#: passwords.c:89 timezone.c:78
+msgid "Cancel"
+msgstr ""
+
+#: dhcp.c:156
+msgid ""
+"The following fields are invalid:\n"
+"\n"
+msgstr ""
+
+#: dhcp.c:159
+msgid "Start address"
+msgstr ""
+
+#: dhcp.c:165
+msgid "End address"
+msgstr ""
+
+#: dhcp.c:173 networking.c:755
+msgid "Primary DNS"
+msgstr ""
+
+#: dhcp.c:182 networking.c:764
+msgid "Secondary DNS"
+msgstr ""
+
+#: dhcp.c:189
+msgid "Default lease time"
+msgstr ""
+
+#: dhcp.c:195
+msgid "Max. lease time"
+msgstr ""
+
+#: domainname.c:42 main.c:70
+msgid "Domain name"
+msgstr ""
+
+#: domainname.c:42
+msgid "Enter Domain name"
+msgstr ""
+
+#: domainname.c:48
+msgid "Domain name cannot be empty."
+msgstr ""
+
+#: domainname.c:50
+msgid "Domain name cannot contain spaces."
+msgstr ""
+
+#: domainname.c:53
+msgid "Domain name may only contain letters, numbers, hyphens and periods."
+msgstr ""
+
+#: hostname.c:46 main.c:69
+msgid "Hostname"
+msgstr ""
+
+#: hostname.c:46
+msgid "Enter the machine's hostname."
+msgstr ""
+
+#: hostname.c:53
+msgid "Hostname cannot be empty."
+msgstr ""
+
+#: hostname.c:55
+msgid "Hostname cannot contain spaces."
+msgstr ""
+
+#: hostname.c:58
+msgid "Hostname may only contain letters, numbers and hyphens."
+msgstr ""
+
+#: keymap.c:84 main.c:67
+msgid "Keyboard mapping"
+msgstr ""
+
+#: keymap.c:85
+msgid "Choose the type of keyboard you are using from the list below."
+msgstr ""
+
+#: main.c:68 timezone.c:77
+msgid "Timezone"
+msgstr ""
+
+#: main.c:71 networking.c:110 networking.c:115 networking.c:447
+msgid "Networking"
+msgstr ""
+
+#: main.c:72 misc.c:147
+msgid "ISDN"
+msgstr ""
+
+#: main.c:73
+msgid "'root' password"
+msgstr ""
+
+#: main.c:74
+msgid "'admin' password"
+msgstr ""
+
+#: main.c:90
+msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
+msgstr ""
+
+#: main.c:97
+msgid "Section menu"
+msgstr ""
+
+#: main.c:98
+msgid "Select the item you wish to configure."
+msgstr ""
+
+#: main.c:99
+msgid "Quit"
+msgstr ""
+
+#: main.c:172
+msgid "Setup is complete."
+msgstr ""
+
+#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
+msgid "Warning"
+msgstr ""
+
+#: main.c:175
+msgid ""
+"Initial setup was not entirely complete. You must ensure that Setup is "
+"properly finished by running setup again at the shell."
+msgstr ""
+
+#: misc.c:62
+#, c-format
+msgid "Unable to write %s/main/hostname.conf"
+msgstr ""
+
+#: misc.c:71
+msgid "Unable to open main hosts file."
+msgstr ""
+
+#: misc.c:76
+msgid "Unable to write /etc/hosts."
+msgstr ""
+
+#: misc.c:117
+msgid "Unable to write /etc/hosts.deny."
+msgstr ""
+
+#: misc.c:125
+msgid "Unable to write /etc/hosts.allow."
+msgstr ""
+
+#: misc.c:136
+msgid "Unable to set hostname."
+msgstr ""
+
+#: misc.c:147
+msgid "Scanning and configuring ISDN devices."
+msgstr ""
+
+#: misc.c:148
+msgid "Unable to scan for ISDN devices."
+msgstr ""
+
+#: netstuff.c:86
+#, c-format
+msgid "Interface - %s"
+msgstr ""
+
+#: netstuff.c:91
+#, c-format
+msgid "Enter the IP address information for the %s interface."
+msgstr ""
+
+#: netstuff.c:103
+msgid "Static"
+msgstr ""
+
+#: netstuff.c:104
+msgid "DHCP"
+msgstr ""
+
+#: netstuff.c:105
+msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
+msgstr ""
+
+#: netstuff.c:113
+msgid "DHCP Hostname:"
+msgstr ""
+
+#: netstuff.c:115
+msgid "Force DHCP MTU:"
+msgstr ""
+
+#: netstuff.c:134
+msgid "IP address:"
+msgstr ""
+
+#: netstuff.c:146
+msgid "Network mask:"
+msgstr ""
+
+#: netstuff.c:173 networking.c:749
+msgid "The following fields are invalid:"
+msgstr ""
+
+#: netstuff.c:183
+msgid "IP address"
+msgstr ""
+
+#: netstuff.c:189
+msgid "Network mask"
+msgstr ""
+
+#: netstuff.c:198
+msgid "DHCP hostname"
+msgstr ""
+
+#: netstuff.c:396 netstuff.c:709
+msgid "Unset"
+msgstr ""
+
+#: netstuff.c:669
+#, c-format
+msgid "Please choose a networkcard for the following interface - %s."
+msgstr ""
+
+#: netstuff.c:672
+msgid "Extended Network Menu"
+msgstr ""
+
+#: netstuff.c:673 networking.c:520
+msgid "Select"
+msgstr ""
+
+#: netstuff.c:673
+msgid "Identify"
+msgstr ""
+
+#: netstuff.c:678
+msgid "Device Identification"
+msgstr ""
+
+#: netstuff.c:678
+msgid "The lights on the selected port should flash now for 10 seconds..."
+msgstr ""
+
+#: netstuff.c:679
+msgid "Identification is not supported by this interface."
+msgstr ""
+
+#: netstuff.c:691
+msgid "There are no unassigned interfaces on your system."
+msgstr ""
+
+#: netstuff.c:732
+#, c-format
+msgid "Do you really want to remove the assigned %s interface?"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Select network driver"
+msgstr ""
+
+#: netstuff.c:755
+msgid "Set additional module parameters"
+msgstr ""
+
+#: netstuff.c:762
+msgid "Loading module..."
+msgstr ""
+
+#: netstuff.c:777
+msgid "Unable to load driver module."
+msgstr ""
+
+#: netstuff.c:780
+msgid "Module name cannot be blank."
+msgstr ""
+
+#: networking.c:110
+msgid "Stopping network..."
+msgstr ""
+
+#: networking.c:115
+msgid "Restarting network..."
+msgstr ""
+
+#: networking.c:146
+msgid "No GREEN interface assigned."
+msgstr ""
+
+#: networking.c:152
+msgid "Missing an IP address on GREEN."
+msgstr ""
+
+#: networking.c:163
+msgid "Error"
+msgstr ""
+
+#: networking.c:163
+msgid "Ignore"
+msgstr ""
+
+#: networking.c:164
+msgid "No RED interface assigned."
+msgstr ""
+
+#: networking.c:173
+msgid "Missing an IP address on RED."
+msgstr ""
+
+#: networking.c:183
+msgid "No ORANGE interface assigned."
+msgstr ""
+
+#: networking.c:189
+msgid "Missing an IP address on ORANGE."
+msgstr ""
+
+#: networking.c:199
+msgid "No BLUE interface assigned."
+msgstr ""
+
+#: networking.c:205
+msgid "Missing an IP address on BLUE."
+msgstr ""
+
+#: networking.c:217
+msgid "Misssing DNS."
+msgstr ""
+
+#: networking.c:224
+msgid "Missing Default Gateway."
+msgstr ""
+
+#: networking.c:237 networking.c:304
+msgid "Network configuration type"
+msgstr ""
+
+#: networking.c:238 networking.c:409
+msgid "Drivers and card assignments"
+msgstr ""
+
+#: networking.c:239 networking.c:640
+msgid "Address settings"
+msgstr ""
+
+#: networking.c:240 networking.c:743
+msgid "DNS and Gateway settings"
+msgstr ""
+
+#: networking.c:260
+msgid "When configuration is complete, a network restart will be required."
+msgstr ""
+
+#: networking.c:267
+#, c-format
+msgid ""
+"Current config: %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#: networking.c:268
+msgid "Network configuration menu"
+msgstr ""
+
+#: networking.c:269 networking.c:520 networking.c:642
+msgid "Done"
+msgstr ""
+
+#: networking.c:300
+#, c-format
+msgid ""
+"Select the network configuration for %s. The following configuration types "
+"list those interfaces which have ethernet attached. If you change this "
+"setting, a network restart will be required, and you will have to "
+"reconfigure the network driver assignments."
+msgstr ""
+
+#: networking.c:307
+#, c-format
+msgid ""
+"Not enough netcards for your choice.\n"
+"\n"
+"Needed: %d - Available: %d\n"
+msgstr ""
+
+#: networking.c:359
+msgid ""
+"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
+"\n"
+msgstr ""
+
+#: networking.c:408
+msgid "Do you wish to change these settings?"
+msgstr ""
+
+#: networking.c:447
+msgid "Restarting non-local network..."
+msgstr ""
+
+#: networking.c:464
+msgid ""
+"Please choose the interface you wish to change.\n"
+"\n"
+msgstr ""
+
+#: networking.c:519
+msgid "Assigned Cards"
+msgstr ""
+
+#: networking.c:520
+msgid "Remove"
+msgstr ""
+
+#: networking.c:556 networking.c:649
+#, c-format
+msgid ""
+"If you change this IP address, and you are logged in remotely, your "
+"connection to the %s machine will be broken, and you will have to reconnect "
+"on the new IP. This is a risky operation, and should only be attempted if "
+"you have physical access to the machine, should something go wrong."
+msgstr ""
+
+#: networking.c:641
+msgid "Select the interface you wish to reconfigure."
+msgstr ""
+
+#: networking.c:729
+msgid "Default gateway:"
+msgstr ""
+
+#: networking.c:744
+msgid ""
+"Enter the DNS and gateway information. These settings are used only with "
+"Static IP (and DHCP if DNS set) on the RED interface."
+msgstr ""
+
+#: networking.c:773
+msgid "Default gateway"
+msgstr ""
+
+#: networking.c:780
+msgid "Secondary DNS specified without a Primary DNS"
+msgstr ""
+
+#: passwords.c:33
+msgid ""
+"Enter the 'root' user password. Login as this user for commandline access."
+msgstr ""
+
+#: passwords.c:38 passwords.c:61
+msgid "Setting password"
+msgstr ""
+
+#: passwords.c:38
+msgid "Setting 'root' password...."
+msgstr ""
+
+#: passwords.c:39
+msgid "Problem setting 'root' password."
+msgstr ""
+
+#: passwords.c:53
+#, c-format
+msgid ""
+"Enter %s 'admin' user password. This is the user to use for logging into the"
+" %s web administration pages."
+msgstr ""
+
+#: passwords.c:60
+#, c-format
+msgid "Setting %s 'admin' user password..."
+msgstr ""
+
+#: passwords.c:62
+#, c-format
+msgid "Problem setting %s 'admin' user password."
+msgstr ""
+
+#: passwords.c:76
+msgid "Password:"
+msgstr ""
+
+#: passwords.c:77
+msgid "Again:"
+msgstr ""
+
+#: passwords.c:95
+msgid "Password cannot be blank."
+msgstr ""
+
+#: passwords.c:102
+msgid "Passwords do not match."
+msgstr ""
+
+#: passwords.c:109
+msgid "Password cannot contain spaces."
+msgstr ""
+
+#: timezone.c:77
+msgid "Choose the timezone you are in from the list below."
+msgstr ""
diff --git a/src/setup/setup.h b/src/setup/setup.h
new file mode 100644 (file)
index 0000000..388d2ed
--- /dev/null
@@ -0,0 +1,87 @@
+/* SmoothWall setup program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence.  See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * Main include file.
+ * 
+ * $Id: setup.h,v 1.4 2003/12/11 11:25:54 riddles Exp $
+ * 
+ */
+
+#include <newt.h>
+#include <libsmooth.h>
+
+/* hostname.c */
+int handlehostname(void);
+
+/* domainname.c */
+int handledomainname(void);
+
+/* networking.c */
+int handlenetworking(void);
+
+/* dhcp.c */
+int handledhcp(void);
+
+/* passwords.c */
+int handlerootpassword(void);
+int handlesetuppassword(void);
+int handleadminpassword(void);
+
+/* misc.c */
+int writehostsfiles(void);
+int handleisdn(void);
+
+/* keymap.c */
+int handlekeymap(void);
+
+/* timezone.c */
+int handletimezone(void);
+
+/* netstuff.c */
+#define ADDRESS 0
+#define NETADDRESS 1
+#define NETMASK 2
+#define DHCP 3
+#define NETCHANGE_TOTAL 4
+
+#define SCANNED_NICS "/var/ipfire/ethernet/scanned_nics"
+#define SYSDIR "/sys/class/net"
+
+#define _GREEN_CARD_ 0
+#define _RED_CARD_ 1
+#define _ORANGE_CARD_ 2
+#define _BLUE_CARD_ 3
+
+struct nic
+{
+       char driver[80];
+       char description[256];
+       char macaddr[20];
+       char nic[20];
+};
+
+struct knic
+{
+       char driver[80];
+       char description[256];
+       char macaddr[20];
+       char colour[20];
+};
+
+int changeaddress(struct keyvalue *kv, char *colour, int typeflag,
+       char *defaultdhcphostname);
+int gettype(char *type);
+int setnetaddress(struct keyvalue *kv, char *colour);
+void networkdialogcallbacktype(newtComponent cm, void *data);
+int interfacecheck(struct keyvalue *kv, char *colour);
+int rename_nics(void);
+int init_knics(void);
+int create_udev(void);
+int scan_network_cards(void);
+int nicmenu(int colour);
+int clear_card_entry(int cards);
+int ask_clear_card_entry(int cards);
+int manualdriver(char *driver, char *driveroptions);
similarity index 90%
rename from src/install+setup/setup/timezone.c
rename to src/setup/timezone.c
index d0a848378b1ee7cdea515df9ae5bb96edb898c75..619ebf26ae53639bd8bf7f7f6674bb4d876c6fad 100644 (file)
  * 
  */
 
+// Translation
+#include <libintl.h>
+#define _(x) dgettext("setup", x)
+
 #include "setup.h"
  
 extern FILE *flog;
 extern char *mylog;
 
-extern char **ctr;
-
 extern int automode;
 
 #define MAX_FILENAMES 5000
@@ -58,7 +60,7 @@ int handletimezone(void)
        if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings")))
        {
                freekeyvalues(kv);
-               errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+               errorbox(_("Unable to open settings file"));
                return 0;
        }       
        
@@ -72,8 +74,8 @@ int handletimezone(void)
                        choice = c;
        }
        
-       rc = newtWinMenu(ctr[TR_TIMEZONE], ctr[TR_TIMEZONE_LONG], 50, 5, 5, 6, displaynames, &choice,
-               ctr[TR_OK], ctr[TR_CANCEL], NULL);
+       rc = newtWinMenu(_("Timezone"), _("Choose the timezone you are in from the list below."),
+               50, 5, 5, 6, displaynames, &choice, _("OK"), _("Cancel"), NULL);
 
        strcpy(timezone, filenames[choice]);
        
index a19140d04cd055714d8dae3dd556b73222488d85..826be26b148234aaa0263fd2187caf848bb5a549 100644 (file)
@@ -337,7 +337,12 @@ sub getmonth{
                my $monat=$_[0]-1 if($_[0]);
                my $tag=1;
                my $time1=timelocal(0,0,0,$tag,$monat,$jahr);
-               my $time2=timelocal(0,0,0,$tag,($monat+1),$jahr);
+               my $time2=0;
+               if (($monat+1) == 12){
+                       $time2=timelocal(0,0,0,$tag,0,$jahr+1);
+               }else{
+                       $time2=timelocal(0,0,0,$tag,$monat+1,$jahr);
+               }
                --$time2;
                return ($time1,$time2);
 }
index 794cea592389c272e589c361de9df57b303db254..81338dbdde7d288a1484f268c89a0779279c284e 100755 (executable)
@@ -26,17 +26,10 @@ if [ ! -d ./langs/ ]; then
 fi
 
 cat ./langs/de/cgi-bin/de.pl | grep \'.*\' | awk -F\' '{print $2}'| sort > /tmp/de_cgi-bin.$$
-cat ./langs/de/install/lang_de.c | grep TR_ | awk -F\  '{print $2}' > /tmp/de_install.$$
 
 for i in ./langs/en ./langs/fr ./langs/es ./langs/pl ./langs/ru ; do
     language=`echo "$i" | awk -F/  '{ print $3 }'`
 
-    echo "############################################################################"
-    echo "# Checking install/setup translations for language: ${language}                     #"
-    echo "############################################################################"
-    cat ./langs/${language}/install/lang_${language}.c | grep TR_ | awk -F\  '{print $2}' | \
-        diff /tmp/de_install.$$ - |  grep \<
-
     echo "############################################################################"
     echo "# Checking cgi-bin translations for language: ${language}                           #"
     echo "############################################################################"
@@ -45,7 +38,6 @@ for i in ./langs/en ./langs/fr ./langs/es ./langs/pl ./langs/ru ; do
 done
 
 rm -f /tmp/de_cgi-bin.$$
-rm -f /tmp/de_install.$$
 
 exit 0
 
index 5a557a67b7c6f5f69afe3a988e89b93124865869..356d7a6174a1d233e0c88168695ccdd1709d9a99 100644 (file)
@@ -726,6 +726,7 @@ update_langs() {
                $BASEDIR/tools/sort_strings.pl ru
                $BASEDIR/tools/sort_strings.pl nl
                $BASEDIR/tools/sort_strings.pl tr
+               $BASEDIR/tools/sort_strings.pl it
                $BASEDIR/tools/check_strings.pl en > $BASEDIR/doc/language_issues.en
                $BASEDIR/tools/check_strings.pl de > $BASEDIR/doc/language_issues.de
                $BASEDIR/tools/check_strings.pl fr > $BASEDIR/doc/language_issues.fr
@@ -734,6 +735,7 @@ update_langs() {
                $BASEDIR/tools/check_strings.pl ru > $BASEDIR/doc/language_issues.ru
                $BASEDIR/tools/check_strings.pl nl > $BASEDIR/doc/language_issues.nl
                $BASEDIR/tools/check_strings.pl tr > $BASEDIR/doc/language_issues.tr
+               $BASEDIR/tools/check_strings.pl it > $BASEDIR/doc/language_issues.it
                $BASEDIR/tools/check_langs.sh > $BASEDIR/doc/language_missings
                beautify message DONE
 }